Ладно, хватит тормозить; вот что я придумала до сих пор
(извините, длинный пост вперед. Будь смелым, друг, путешествие того стоит)
Объединение методов 3 и 4 из исходного поста в своего рода «нечеткий» или динамический белый список, а затем - и вот в чем хитрость - не блокирование IP-адресов, не занесенных в белый список, а просто удушение их в ад и обратно .
Обратите внимание, что эта мера предназначена только для того, чтобы помешать этому очень специфическому типу атаки. На практике, конечно, он будет работать в сочетании с другими передовыми подходами к аутентификации: регулирование фиксированного имени пользователя, регулирование для каждого IP-адреса, политика надежных паролей с применением кода, неконтролируемый вход в систему cookie, хэширование всех эквивалентов паролей перед их сохранением, никогда использование вопросов безопасности и т. д.
Предположения о сценарии атаки
Если злоумышленник нацеливается на переменные имена пользователей, наше регулирование имен пользователей не срабатывает. Если злоумышленник использует ботнет или имеет доступ к большому диапазону IP, наше регулирование IP бессильно. Если злоумышленник предварительно очистил наш список пользователей (обычно это возможно в веб-службах с открытой регистрацией), мы не можем обнаружить продолжающуюся атаку на основании количества ошибок «пользователь не найден». И если мы введем ограничивающий дросселирование в масштабе всей системы (все имена пользователей, все IP-адреса), любая такая атака будет делать DoS для всего нашего сайта на время атаки плюс период регулирования.
Поэтому нам нужно сделать что-то еще.
Первая часть контрмеры: Белый список
В чем мы можем быть абсолютно уверены, так это в том, что злоумышленник не может обнаружить и динамически подделать IP-адреса нескольких тысяч наших пользователей (+). Что делает белый список осуществимым. Другими словами: для каждого пользователя мы храним список (хэшированных) IP-адресов, с которых пользователь ранее (недавно) вошел в систему.
Таким образом, наша схема внесения в белый список будет функционировать как запертая «входная дверь», где пользователь должен быть подключен с одного из своих признанных «хороших» IP-адресов, чтобы вообще войти в систему. Атака грубой силой на эту «парадную дверь» была бы практически невозможна (+).
(+) если злоумышленник не «владеет» ни сервером, ни всеми ящиками наших пользователей, ни самим соединением - и в этих случаях у нас больше не возникает проблема «аутентификации», у нас есть подлинный размер франшизы. Ситуация FUBAR
Вторая часть контрмеры: общесистемное регулирование непризнанных IP-адресов
Для того чтобы белый список работал для веб-службы с открытой регистрацией, где пользователи часто переключают компьютеры и / или подключаются с динамических IP-адресов, нам нужно держать «дверь в кошку» открытой для пользователей, подключающихся с нераспознанных IP-адресов. Хитрость заключается в том, чтобы спроектировать эту дверь так, чтобы ботнеты застревали и таким образом, чтобы законные пользователи беспокоились как можно меньше .
В моей схеме это достигается путем установки очень ограниченного максимального числа неудачных попыток входа в систему с помощью неутвержденных IP-адресов в течение, скажем, 3-часового периода (может быть целесообразнее использовать более короткий или более длинный период в зависимости от типа услуги), и сделать это ограничение глобальным , т.е. для всех учетных записей пользователей.
Даже медленная (1-2 минуты между попытками) грубая сила будет обнаружена и сорвана быстро и эффективно с использованием этого метода. Конечно, действительно медленная грубая сила все еще может остаться незамеченной, но слишком медленные скорости наносят ущерб самой цели атаки грубой силы.
Что я надеюсь достичь с помощью этого механизма регулирования, так это то, что, если максимальный предел достигнут, наша «кошачья дверь» на некоторое время захлопывается, но наша входная дверь остается открытой для законных пользователей, подключающихся обычными способами:
- Либо путем подключения с одного из их распознанных IP-адресов
- Или с помощью постоянного файла cookie для входа (из любого места)
Единственные законные пользователи, которые будут затронуты во время атаки - т.е. в то время как регулирование было активировано - это будут пользователи без постоянных файлов cookie для входа, которые входили в систему из неизвестного местоположения или с динамическим IP-адресом. Эти пользователи не смогут войти в систему, пока не прекратится регулирование (что может занять некоторое время, если злоумышленник продолжит работу ботнета, несмотря на регулирование).
Чтобы позволить этой небольшой группе пользователей протиснуться через запечатанную в противном случае дверь кошки, даже если боты все еще били ее, я бы использовал «резервную» форму входа в систему с CAPTCHA. Чтобы при отображении сообщения «Извините, но вы не можете войти с этого IP-адреса в данный момент», добавьте ссылку « Безопасный резервный вход в систему - ТОЛЬКО ЧЕЛОВЕК ( боты: не лгите ) ». Помимо шутки, когда они щелкают по этой ссылке, дают им аутентифицированную reCAPTCHA форму входа в систему, которая обходит регулирование всего сайта. Таким образом, если они люди и знают правильный логин + пароль (и могут читать CAPTCHA), им никогда не будет отказано в обслуживании, даже если они подключаются с неизвестного хоста и не используют cookie-файл автологина.
Да, и просто для пояснения: поскольку я считаю, что CAPTCHA, как правило, являются злыми, опция входа в систему «резервного копирования» будет появляться только при активном регулировании .
Нет никаких сомнений в том, что подобная устойчивая атака все равно будет представлять собой форму DoS-атаки, но при наличии описанной системы она повлияет только на то, что, как я подозреваю, будет крошечной группой пользователей, а именно на людей, которые не используют cookie «Помни меня» И случается, что он входит в систему во время атаки, И не входит ни с одного из своих обычных IP-адресов И не может читать CAPTCHA. Только те, кто может сказать «нет» ВСЕМ из этих критериев - особенно боты и действительно несчастные люди с ограниченными возможностями - будут отвергнуты во время атаки ботов.
РЕДАКТИРОВАТЬ: На самом деле, я подумал о том, чтобы позволить даже пользователям с CAPTCHA проходить через «блокировку»: вместо или в качестве дополнения к резервному входу в CAPTCHA, пользователь может выбрать одноразовое использование. пользовательский код блокировки, отправленный на его электронную почту, который он затем может использовать для обхода регулирования. Это определенно пересекает мой порог «раздражения», но так как он используется только в качестве крайней меры для небольшого подмножества пользователей, и поскольку он все еще превосходит блокировку вашей учетной записи, это будет приемлемо.
(Также обратите внимание, что ничего этого не произойдет, если атака будет менее изощренной, чем неприятная распределенная версия, которую я описал здесь. Если атака идет с нескольких IP-адресов или с использованием нескольких имен пользователей, она будет сорвана намного раньше и без каких -либо последствий для всего сайта)
Итак, это контрмера, которую я буду реализовывать в моей библиотеке аутентификации, как только я убедлюсь, что это правильно и что нет более простого решения, которое я пропустил. Дело в том, что существует очень много хитрых способов сделать что-то не так в безопасности, и я не против того, чтобы делать ложные предположения или безнадежно ошибочную логику. Поэтому, пожалуйста, высоко оцените любые отзывы, критику и улучшения, тонкости и т.д.