Почему подход «запрос-ответ» является плохим решением проблемы забытых паролей?

StackOverflow https://stackoverflow.com/questions/613619

Вопрос

Моя компания разрабатывает онлайн-приложение для управления персоналом и расчета заработной платы, где безопасность доступа имеет решающее значение.Мне понятно, как заблокировать большинство процессов аутентификации/авторизации, за исключением страницы «Забытый пароль».

Мой первоначальный план состоял в том, чтобы потребовать от пользователя ввести адрес электронной почты и ответ на ранее выбранный/введенный контрольный вопрос, при этом временный пароль будет отправлен на указанный адрес электронной почты (при условии, что адрес электронной почты действителен).Но я прочитал здесь и здесь (оба по SO), что подход «вызов-ответ» небезопасен.

Однако, если мы отправляем по электронной почте только временный пароль, действительно ли это так небезопасно?Единственный более безопасный вариант, который я могу придумать, — это потребовать от пользователя позвонить представителю службы поддержки клиентов, что сильно обременяет наших сотрудников.

Чего мне не хватает...есть ли лучший подход?Спасибо!

Это было полезно?

Решение

Не отправляйте временный пароль по электронной почте, отправьте пользователю адрес URL + токен на страницу сброса пароля. Таким образом, пароль никогда не переходит из рук в руки в незашифрованном виде. Для конечного пользователя также сразу становится очевидным, что его учетная запись была взломана, если он пытается перейти на эту страницу и маркер сброса уже используется.

Добавлено из комментариев:

Я думаю, что аспекты «вызов-ответ» («секретный вопрос») на самом деле делают вещи менее безопасными, потому что они, как правило, могут быть обнаружены путем исследования общедоступной информации о цели. Чем меньше всего шагов, тем меньше их можно сломать без ведома. Разрешение сбрасывать электронные письма происходит раньше, и часто это хороший способ сообщить человеку о предпринимаемой попытке.

Другие советы

Как объясняется в этой статье Почтовый аккаунт губернатора Пэйлин недавно был взломан с использованием ответов на ранее заданные вопросы. Из статьи:

  

Как подробно описано в сообщениях, взлом Пэйлин не требовал никаких реальных навыков. Вместо этого хакер просто сбросил пароль Пэйлин, используя ее дату рождения, почтовый индекс и информацию о том, где она встретила своего супруга - секретный вопрос в ее учетной записи Yahoo, на который (Wasilla High) был дан простой поиск в Google.

Существует несколько распространенных способов управления утерянными паролями:

  • Секретный вопрос:На самом деле это более слабая форма аутентификации, как и писали выше.Пользователь может выбрать что-то очень простое, о чем легко догадаться.Не советую этого делать, потому что никакого технического "взлома" это не требует.

  • Отправьте новый пароль по почте.Чтобы обойти этот контроль, требуется доступ к учетной записи электронной почты или должность «человек посередине» (MITM):Вы либо читаете временный пароль из почтового ящика пользователя, либо перехватываете его посередине.Этот подход готов к неправильному использованию, поскольку любой может сбросить пароль и вынудить пользователя выйти из системы, если он не сможет прочитать электронное письмо с новым паролем.

  • Отправьте хэш сброса пароля по почте. Чтобы обойти это, вам понадобится доступ к почтовому ящику или MITM, как и в предыдущем случае, но пароли фактически не сбрасываются до тех пор, пока не будет выполнено подтверждение.Таким образом, пользователя невозможно заблокировать из системы, даже если он не читал электронное письмо.Добавьте таймер восстановления к одному сбросу каждые 8 ​​часов, чтобы ваша система не переполняла почтовый ящик пользователя.

  • Рассмотрим внеполосную связь, например, в распечатанном договоре запишите ПИН-код.Затем попросите пользователя позвонить в вашу службу поддержки с известного номера телефона (проверьте идентификатор вызывающего абонента) и сообщить свое имя пользователя и PIN-код.

Разве не было бы легко / выполнимо передать все управление паролями, как это делал SO, и использовать OpenId или подобное? Конечно, это добавило бы еще одну зависимость, но вы бы поменялись ею с необходимостью сохранять (и защищать) пароли и обращаться с ними, как вы описали.

Вы сказали, что это онлайн-приложение по подбору персонала и расчету заработной платы. Есть ли у вас возможность указать пользователю, что он / она забыл свой пароль, и что он генерирует сообщение представителю отдела кадров или должностному лицу в организации, который может подтвердить личность, а затем выполнить сброс пароля?

Короче говоря, контрольные вопросы часто являются самым слабым звеном. Их легче угадать, чем пароль, и они эффективно работают в качестве прокси-сервера для пароля, поэтому они фактически снижают безопасность, а не повышают ее, предоставляя другой вектор атаки, который на самом деле легче взломать. Справочник хакера веб-приложений содержит полезную информацию по этой области.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top