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