Парольная политика и защита доступа
Механизмы защиты
1. Защита от подбора паролей
Два независимых слоя — кратковременная блокировка по серии неудач в памяти процесса и постоянная блокировка учетной записи — отказывают во входе после настраиваемого числа неудачных попыток. Неверный пароль, временная блокировка по серии и постоянная блокировка возвращают ошибку 401, так что атакующий не может их различить.
Отказы дополнительно сопровождаются случайной задержкой, чтобы блокировку нельзя было отличить от медленной проверки пароля по времени ответа.
Переменные окружения для настройки порогов попыток входа
| Переменная окружения | Дефолт | Описание |
|---|---|---|
|
|
Число неудач с одного IP до блокировки. |
|
|
Максимальный интервал (сек) между неудачами, чтобы считать их одной серией. |
|
|
Начальная длительность блокировки (удваивается на каждую серию). |
|
|
Время простоя, после которого счетчики неудач сбрасываются. |
|
|
Минимальная искусственная задержка при блокировке. |
|
|
Максимальная искусственная задержка при блокировке. |
2. Политика паролей
Каждый новый пароль проверяется на соответствие следующим параметрам:
-
Длина
-
Разнообразие символов
-
Использование фрагментов логина в пароле
-
Использование предыдущих паролей
У пароля есть время жизни — срок, в течение которого пароль актуален. При окончании этого срока учетная запись блокируется до разблокировки администратором.
Значения по умолчанию заданы консервативно и настраиваются через переменные окружения.
Переменные окружения для настройки парольной политики
| Переменная окружения | Дефолт | Описание |
|---|---|---|
|
|
Применять ограничения парольной политики (если отключен, то пароли могут быть любыми). |
|
|
Минимальная длина пароля. |
|
|
Требуемое число групп символов (из верхнего/нижнего регистра, цифр, спецсимволов). |
|
|
Запретить фрагменты логина этой длины или длиннее внутри пароля. |
|
|
Число предыдущих паролей, которые нельзя использовать повторно. |
|
|
Период ротации пароля (в днях). |
|
|
Число неудачных входов до блокировки учетной записи. |
|
|
Требовать текущий пароль, когда не-администратор меняет свой собственный. |
|
|
Минимальное различие в символах между старым и новым паролем. |
3. Токен восстановления
В случае когда администраторская учетная запись заблокирована попытками атакующего подобрать к ней пароль, администратор может предъявить токен восстановления системе для входа. Для этого нужно выполнить запрос POST /auth/recovery со своим токеном. Это действие сбрасывает все блокировки и позволяет администратору системы войти в нее.
Все три механизма применяются только к парольному входу (POST /auth/login, SCRAM-SHA-256 поверх psql). Вход через SSO или аутентификация через токены эти механизмы не используют.
|
Чек-листы восстановления
Настройка токена восстановления
-
Сразу после установки системы выпустите токен восстановления для учетной записи администратора по умолчанию:
prostore user mint-recovery --username admin -
Сохраните токен в командном менеджере паролей вне основной системы. Команда показывает токен один раз, и Tengri не сможет показать его повторно.
-
Повторите эти действия для каждой учетной записи, которой нужен способ восстановления. Общесистемного главного токена восстановления не предусмотрено — токены выпускаются по одному на пользователя.
Во время инцидента
-
По журналу определите заблокированную учетную запись:
account '<user>' blocked after N failed login attempts -
С доверенного клиента отправьте сохраненный токен на точку входа восстановления вместе с именем заблокированной учетной записи:
curl -X POST https://<host>/auth/recovery \ -H 'Content-Type: application/json' \ -d '{"login": "<user>", "token": "<сохраненный-токен>"}' -
Сохраните
recovery_tokenиз JSON-ответа — это единственная копия следующего токена. -
Блокировка снимается автоматически.
После этого войдите обычным способом и смените пароль затронутого пользователя.
После инцидента
-
Убедитесь, что новый токен восстановления сохранен в менеджере паролей.
-
Просмотрите следующие строки журнала в окне инцидента:
-
recovery token used -
recovery token rejected
Каждая запись должна сопоставляться с известным оператором.
-
-
Если исходный токен мог быть скомпрометирован (передан по ненадежному каналу, попал в запись экрана и т. п.), выпустите новый токен, чтобы аннулировать ротированную копию.
-
Сопоставьте пороги защиты от подбора с наблюдаемым трафиком, в первую очередь эти:
-
TNGRI_LOGIN_THROTTLE_MAX_FAILURES -
TNGRI_PASSWORD_POLICY_MAX_FAILED_LOGINS
Повысьте их в случае необходимости.
-