Что такое brute force атака и как защититься от нее?
Что проверяют
Думаете ли вы о защите системно. Вопрос выглядит словарным, а проверяют знание того, что перебор останавливают не одним средством, а сочетанием: стоимостью проверки пароля, ограничением темпа и вторым фактором.
Как отвечать
Brute force это подбор пароля или ключа перебором. Сразу разделите варианты, это показывает практику: полный перебор комбинаций, словарная атака по спискам утёкших паролей, credential stuffing готовыми парами логина и пароля из чужой утечки и офлайн-перебор по украденной базе хешей, где атакующего не ограничивает ни сеть, ни ваш код.
Защита строится слоями. Хранение: пароль только как хеш медленной адаптивной функции с солью, Argon2 или bcrypt, в Python это argon2-cffi или passlib. Быстрые функции семейства SHA для паролей непригодны именно потому, что быстрые.
Темп: ограничение попыток по паре логина и адреса, нарастающая задержка вместо мгновенного ответа, проверка человека после нескольких промахов, общий лимит на точку входа аутентификации.
Ответ сервера одинаков при неверном логине и неверном пароле, и по тексту, и по времени, иначе перебор превращается в проверку существования учёток. Сравнение секретов делается через secrets.compare_digest.
Сверху второй фактор, проверка нового пароля по спискам утёкших и требование длины вместо обязательных спецсимволов: длина даёт больше стойкости, чем вычурный набор знаков.
Где спотыкаются
Блокируют учётную запись наглухо после нескольких неудач. Атакующий получает готовый отказ в обслуживании: достаточно перебрать чужие логины, чтобы выключить пользователям вход. Лучше нарастающая задержка и проверка человека.
Ограничивают попытки только по адресу. Распределённая атака идёт с тысяч адресов по одной попытке на каждый, поэтому счётчик нужен и на учётную запись, и на точку входа целиком.
Считают, что соль решает вопрос. Соль обесценивает заранее посчитанные таблицы, но скорость подбора ограничивает только стоимость самой хеш-функции: с быстрым хешем украденная база разбирается на обычной видеокарте.