Учётная запись администратора Stronghold даёт доступ к политикам, методам аутентификации и секретам, поэтому одного пароля или сессии IdP для неё недостаточно. В этом руководстве для всех администраторов включается обязательная проверка одноразового кода TOTP при входе.

Механизмы MFA в Stronghold

Stronghold проверяет второй фактор на этапе входа (login MFA): после успешной проверки основного метода аутентификации токен выдаётся только после подтверждения второго фактора. Методы MFA и правила их применения настраиваются в подсистеме Identity по путям identity/mfa/method/* и identity/mfa/login-enforcement/*.

В документации описаны два метода MFA:

МетодКак подтверждается входКогда выбирать
TOTPОдноразовый код из приложения-аутентификатораНе нужен внешний сервис, подходит для закрытого контура
MultifactorPush-уведомление, Telegram или звонок через сервис MultifactorВ организации уже используется Multifactor

Правило login enforcement может применяться к сущностям (identity_entity_ids), группам Identity (identity_group_ids), конкретным подключениям методов аутентификации (auth_method_accessors) или ко всем подключениям метода определённого типа (auth_method_types).

В базовом Stronghold доступна только MFA при входе. Проверка MFA при обращении к отдельным путям (sys/mfa/method/* и mfa_methods в политиках) доступна только в Stronghold EE.

Цель

После настройки:

  • Все администраторы Stronghold при входе вводят код TOTP.
  • Проверка применяется к группе Identity ad-stronghold-admins, поэтому новые администраторы получают её автоматически.
  • Задокументирована процедура восстановления, если администратор потерял устройство с аутентификатором.
  • Операции с настройками MFA видны в журнале аудита.

Схема входа администратора с TOTP

Предварительные требования

Перед началом подготовьте:

  • Токен Stronghold с правами на настройку Identity и политик.
  • Группа Identity ad-stronghold-admins, в которую входят сущности администраторов. Для каталогов и IdP используйте внешнюю группу с псевдонимом группы каталога, как в руководстве «Интеграция с Active Directory».
  • Приложение-аутентификатор с поддержкой TOTP у каждого администратора.
  • Подготовленный аварийный доступ, на который правило MFA не распространяется.
  • Утилита jq на рабочей станции администратора.
  • Для контроля по журналу аудита — включённое устройство аудита.

Шаг 1. Создайте метод TOTP

Создайте метод MFA TOTP и сохраните его идентификатор:

TOTP_METHOD_ID=$(d8 stronghold write -format=json identity/mfa/method/totp method_name=admin-totp issuer=Stronghold period=30 algorithm=SHA256 digits=6 max_validation_attempts=5 | jq -r '.data.method_id')
echo $TOTP_METHOD_ID

Основные параметры метода:

ПараметрОписание
method_nameУникальное имя метода MFA
issuerНазвание, которое приложение-аутентификатор показывает рядом с кодом
periodПериод смены кода в секундах. По умолчанию — 30
algorithmАлгоритм хеширования: SHA1 (по умолчанию), SHA256 или SHA512
digitsКоличество цифр в коде: 6 или 8
skewДопустимое отклонение в периодах при проверке кода: 0 или 1. По умолчанию — 1
max_validation_attemptsМаксимальное количество попыток проверки кода

Полный список параметров приведён в справочнике API Identity.

Не все приложения-аутентификаторы поддерживают SHA256 и 8-значные коды. Если у администраторов разные приложения, используйте algorithm=SHA1 и digits=6.

Шаг 2. Зарегистрируйте аутентификаторы администраторов

Зарегистрируйте TOTP у всех администраторов до включения обязательной проверки. Если у сущности нет секрета, проверка второго фактора завершается ошибкой MFA secret … not present in entity, и вход не удаётся.

Сущность администратора создаётся при первом входе в Stronghold. Чтобы узнать идентификатор своей сущности, администратор выполняет команду:

d8 stronghold token lookup -format=json | jq -r '.data.entity_id'

Выберите один из способов регистрации.

Выпуск QR-кода администратором безопасности

Администратор безопасности выпускает QR-код для сущности администратора.

  1. Получите идентификатор сущности по имени:

    ENTITY_ID=$(d8 stronghold read -field=id identity/entity/name/<ENTITY_NAME>)

    <ENTITY_NAME> — имя сущности администратора.

  2. Сгенерируйте TOTP-секрет и QR-код:

    d8 stronghold write -field=barcode identity/mfa/method/totp/admin-generate method_id=$TOTP_METHOD_ID entity_id=$ENTITY_ID | base64 -d > /tmp/qr-code.png
  3. Передайте QR-код администратору по защищённому каналу, дождитесь, пока он отсканирует его в приложении-аутентификаторе, и удалите файл:

    shred -u /tmp/qr-code.png

Повторный вызов admin-generate для сущности, у которой уже есть секрет этого метода, новый секрет не создаёт: Stronghold возвращает предупреждение Entity already has a secret for MFA method. Чтобы перерегистрировать TOTP, сначала удалите секрет через admin-destroy (подробнее — в разделе «Восстановление при утере устройства»).

Самостоятельная регистрация

Администратор выпускает QR-код для своей сущности.

  1. Добавьте в политику администраторов право на выпуск собственного секрета:

    path "identity/mfa/method/totp/generate" {
      capabilities = ["update"]
    }
  2. Администратор получает QR-код для своей сущности в веб-интерфейсе Stronghold или через CLI:

    d8 stronghold write -field=barcode identity/mfa/method/totp/generate method_id=$TOTP_METHOD_ID | base64 -d > /tmp/qr-code.png

Если секрет метода у сущности уже есть, generate его не перезаписывает, а возвращает предупреждение, поэтому украденная сессия не позволяет перерегистрировать TOTP; для сброса нужен admin-destroy.

Шаг 3. Включите обязательную проверку

Создайте правило login enforcement для группы администраторов.

  1. Получите идентификатор группы администраторов:

    ADMINS_GROUP_ID=$(d8 stronghold read -field=id identity/group/name/ad-stronghold-admins)
  2. Создайте правило login enforcement:

    d8 stronghold write identity/mfa/login-enforcement/admin-totp mfa_method_ids="$TOTP_METHOD_ID" identity_group_ids="$ADMINS_GROUP_ID"

Если администраторы входят через отдельное подключение метода аутентификации, например userpass по пути admin/, создайте ещё одно правило, привязанное к этому подключению. Дайте ему другое имя, admin-totp-mount, чтобы оно не перезаписало правило admin-totp. Stronghold проверяет все правила, подходящие под вход, поэтому условия обоих правил складываются:

ADMIN_ACCESSOR=$(d8 stronghold auth list -format=json -detailed | jq -r '."admin/".accessor')

d8 stronghold write identity/mfa/login-enforcement/admin-totp-mount mfa_method_ids="$TOTP_METHOD_ID" auth_method_accessors="$ADMIN_ACCESSOR"

Не включайте в правило аварийную учётную запись и её подключение метода аутентификации (например, breakglass/). Иначе при потере аутентификаторов войти в Stronghold не сможет никто.

Вход с MFA

CLI

После проверки основного фактора CLI запрашивает код TOTP:

d8 stronghold login -method=oidc

Пример вывода:

Initiating Interactive MFA Validation...
Enter the passphrase for methodID "22c35aa4-bf37-cf31-4187-c5a676c19aca" of type "totp":

Введите текущий код из приложения-аутентификатора. После успешной проверки CLI сохранит токен.

При входе через API ответ метода аутентификации содержит mfa_request_id. Передайте его вместе с кодом в sys/mfa/validate:

d8 stronghold write -format=json sys/mfa/validate - <<EOF
{
  "mfa_request_id": "<MFA_REQUEST_ID>",
  "mfa_payload": {
    "$TOTP_METHOD_ID": ["<TOTP_CODE>"]
  }
}
EOF

Плейсхолдеры:

  • <MFA_REQUEST_ID> — значение поля auth.mfa_requirement.mfa_request_id из ответа метода аутентификации;
  • <TOTP_CODE> — текущий код из приложения-аутентификатора.

Чтобы CLI не запрашивал код интерактивно и только вывел mfa_request_id, добавьте флаг -non-interactive к d8 stronghold login.

Веб-интерфейс

Чтобы войти через веб-интерфейс, выполните следующие шаги:

  1. Откройте веб-интерфейс Stronghold и выполните вход выбранным методом.
  2. После проверки основного фактора введите код TOTP из приложения-аутентификатора.

Восстановление при утере устройства

Если администратор потерял устройство с аутентификатором или оно могло быть скомпрометировано:

  1. Подтвердите личность администратора по независимому каналу, например лично или через руководителя. Зафиксируйте обращение в журнале инцидентов.

  2. Войдите учётной записью администратора безопасности с правами на admin-destroy и admin-generate. Пример политики:

    path "identity/entity/name/*" {
      capabilities = ["read"]
    }
    
    path "identity/mfa/method/totp/admin-destroy" {
      capabilities = ["update"]
    }
    
    path "identity/mfa/method/totp/admin-generate" {
      capabilities = ["update"]
    }
  3. Удалите TOTP-секрет сущности администратора:

    ENTITY_ID=$(d8 stronghold read -field=id identity/entity/name/<ENTITY_NAME>)
    
    d8 stronghold write identity/mfa/method/totp/admin-destroy method_id=$TOTP_METHOD_ID entity_id=$ENTITY_ID

    <ENTITY_NAME> — имя сущности администратора.

  4. Выпустите новый QR-код, как в шаге 2, и передайте его администратору по защищённому каналу.

  5. Если устройство могло попасть к посторонним вместе с паролем, смените пароль или учётные данные основного метода входа.

Если восстановить нужно доступ единственного администратора, а других учётных записей с правами на admin-destroy нет, воспользуйтесь аварийным доступом.

Контроль по журналу аудита

Изменения настроек MFA и проверки второго фактора записываются в журнал аудита.

  1. Убедитесь, что устройство аудита включено:

    d8 stronghold audit list
  2. Настройте в SIEM оповещения об изменении настроек MFA. Признаки в журнале аудита:

    • request.path равен identity/mfa/method/totp/admin-destroy или identity/mfa/method/totp/admin-generate;
    • request.path начинается с identity/mfa/login-enforcement/ или identity/mfa/method/, а request.operation равен update или delete.

    Пример поиска по файловому журналу:

    jq -c 'select(.type == "request" and (.request.path | startswith("identity/mfa/")))
      | {time, path: .request.path, op: .request.operation, entity: .auth.entity_id}' /var/log/stronghold_audit.log
  3. Отслеживайте проверки второго фактора — запросы к sys/mfa/validate. Большое количество неуспешных проверок для одной сущности может означать попытку подбора кода. Как однофазный вход (заголовок MFA в запросе входа), так и двухфазный (отдельный запрос к sys/mfa/validate) проходят через обычную обработку запросов и записываются в устройства аудита, включая неуспешные проверки; CLI и веб-интерфейс используют тот же API.

Проверка

Проверьте результат:

  1. Убедитесь, что правило создано:

    d8 stronghold read identity/mfa/login-enforcement/admin-totp
  2. Войдите учётной записью администратора и убедитесь, что Stronghold запрашивает код TOTP.

  3. Введите неверный код и убедитесь, что токен не выдан.

  4. Войдите аварийной учётной записью и убедитесь, что код TOTP не запрашивается.

Очистка

Удалите объекты, созданные в этом руководстве.

  1. Удалите правило login enforcement. Если вы создали правило admin-totp-mount, удалите его так же:

    d8 stronghold delete identity/mfa/login-enforcement/admin-totp
  2. Удалите метод TOTP:

    d8 stronghold delete identity/mfa/method/totp/$TOTP_METHOD_ID

Дополнительные ресурсы