Атака грубой силы, безопасный вход в asp.net - PullRequest
3 голосов
/ 19 августа 2010

Я только что прочитал статью о том, что пароли с 7 символами больше не безопасны.Однако если сервер увеличивает время для повторной попытки входа в систему после каждой попытки входа в систему, то атаки методом перебора являются бесполезными.Как вы создаете такую ​​логику в asp.net?Каким-то образом я предполагаю, что код на стороне сервера должен помнить IP-адрес, который пытался войти в систему и должен увеличивать время ответа с каждой новой попыткой?

Ответы [ 4 ]

4 голосов
/ 19 августа 2010

IP-адрес не является безопасным способом идентификации пользователя.Вы можете попытаться сохранить в последний раз, когда попытка входа была отправлена ​​в cookie, но если браузер их не принимает, это будет ограниченное использование.Для переменных сеанса также требуются файлы cookie, поэтому они отсутствуют.

Некоторые сайты (на ум приходит Yahoo) начинают показывать форму Captcha после третьей попытки или около того.Вы должны правильно ответить на капчу в дополнение к вашим данным для входа.

Другой вариант - отключить учетную запись после неудачных попыток Х (которые можно отследить в вашей базе данных), но мне лично это не нравится, так как это заставляет меня вызывать кого-то, чтобы восстановить мой пароль всякий раз, когда я забывалодин.

2 голосов
/ 20 августа 2010

ASP.NET имеет встроенный механизм, предотвращающий атаки методом подбора паролей. См. Свойство maxInvalidPasswordAttempts Membership .

ИМХО 7-символьные пароли идеально подходят для большинства веб-приложений (мой банк допускает 7-символьные пароли) при условии соблюдения передовых методов обеспечения безопасности, таких как безопасное хеширование паролей и блокировка атак методом перебора.

Как только вы наберете 7 или 8-символьные пароли, вы действительно скажете, что «мое приложение должно быть очень безопасным», и в этом случае вам следует рассмотреть отдельные клиентские SSL-сертификаты. Требование большего количества символов в пароле приводит к уменьшению отдачи. Сколько ваших пользователей могут запомнить сложные 8 или 9-символьные пароли? Они заканчивают тем, что записывали их. Лично меня отвлекает любой сайт, который требует от меня создания сверхсложного пароля.

Членство в ASP.NET делает большую часть тяжелой работы вокруг безопасности, если она правильно настроена.

Однако есть некоторые вещи, которые членство в ASP.NET не может сделать для вас, например:

  • Обеспечение использования HTTPS
  • Предотвращение CSRF и подобных атак
  • Обеспечение перенаправления всех веб-запросов в ASP.NET для предотвращения обслуживания статического содержимого IIS и обхода аутентификации ASP.NET
  • Проверка, что пользователь является человеком (CAPTCHA)

Для получения дополнительной информации о рекомендациях по безопасности, я бы посмотрел OWASP

2 голосов
/ 19 августа 2010

Многие атаки грубой силы происходят в автономном режиме. Вот почему блокировка неудачных попыток не может заменить сложные пароли, использование правильной «соли» и усиление ключей.

1 голос
/ 20 августа 2010

Кажется, что есть по крайней мере три атаки, о которых вы можете беспокоиться:

  • Целевая атака на конкретного пользователя.Вы хотите сделать вход в систему более сложным для атакующего, но не намного сложнее.CAPTCHA достаточно (но не заставляйте пользователя снова вводить пароль, если он не отображался на странице входа в систему).
  • Масштабная атака на многих пользователей.Блокировка отдельных пользователей немного бессмысленна, так как злоумышленник может просто попробовать (скажем) 3 пароля, а затем перейти к другой учетной записи.CAPTCHA на IP может быть достаточным, но вы также можете ограничить скорость на IP (или X-Forwarded-For для списка прокси-серверов в белом списке).Это зависит от размера ботнета вашего злоумышленника;достаточно большой ботнет может распределять атаки по нескольким ботам / сайтам, так что каждый сайт получает низкую оценку с каждого IP-адреса.
  • Автономная атака на базу паролей.В этом случае вам нужно по крайней мере около 50 бит энтропии даже при хорошем хеше (NTLM использует один вызов MD4, который не хороший хеш), который вы не можете получить в относительно нормальном8-значный пароль (8 log 2 (94) - только 52,4).

Вы можете хранить попытки для каждого IP в дереве, где вы группируете плотные частидерево вместе.Затем просто добавьте его в корзину (постройте новое дерево каждые 10 минут, оставьте старое дерево еще на 10 минут).Возможно, это ошибочное предположение о том, что соседние IP-адреса, вероятно, будут демонстрировать аналогичное поведение, но изящно превращается в кластеризацию IPv4 в (скажем) /24's. * 10101 *

Если вы чувствуете себя особенно щедрым, вы можете сохранить отдельныйфайл cookie при входе в систему, который не очищается при выходе из системы, и сохраните копию в базе данных (случайное 128-битное значение должно быть достаточно хорошим).При попытке входа в систему браузер должен быть «лучше», если он предоставляет правильный файл cookie (например, разрешить 3 попытки для этого файла cookie без учета количества ошибок на уровне IP или пользователя).Это означает, что последний компьютер, использовавшийся для доступа к учетной записи, не был представлен с помощью CAPTCHA, даже когда учетная запись пользователя взломана.

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

...