Передача событий безопасности в файл или Kafka#

В Blitz Identity Provider можно настроить регистрацию событий безопасности в один или несколько приемников. Настройка задается в блоке настроек blitz.prod.local.idp.audit.

Необходимо задать следующие настройки:

  • emitters – определяет список приемников записей аудита. По каждому приемнику заполняется блок настроек:

    • type – тип приемника. Возможные значения:

      • audit-store – запись производится в СУБД;

      • log – запись производится в логгер с именем AUDIT.

    • enabled – необязательная настройка – определяет, включен или нет приемник;

    • include – необязательная настройка – перечисляются типы событий безопасности (см. таблицу ниже), по которым осуществляется запись в приемник. Если настройка не указана, то пишутся все события безопасности;

    • exclude – необязательная настройка – перечисляются типы событий безопасности (см. таблицу ниже), которые не должны записываться в приемник. Если настройка не указана, то никакие события не исключаются. Если настройка указана вместе с include, то сначала список событий определяется настройкой include, а потом из него исключаются события, указанные в exclude. Рекомендуется не использовать совместно обе настройки include и exclude, а применять только что-то одно;

    • logger – необязательная настройка – указывается только для приемника с типом log. Позволяет определить имя логгера. Если настройка не задана, то запись производится в логгер с именем AUDIT;

    • name – необязательная настройка – указывается для приемников с типами log и kafka. Указывает имя приемника, так как для этих типов приемников можно настроить несколько приемников. Если настройка не задана, то используются log и kafka в качестве имен приемников;

    • bootstrapServers – обязательная настройка для приемника с типом kafka – указывается список адресов для первоначального подключения к кластеру Kafka;

    • topic – обязательная настройка для приемника с типом kafka – название топика Kafka, в который должно отправляться событие;

    • securityProtocol – необязательная настройка для приемника с типом kafka – в случае использования подключения по SASL может не указываться. При подключении по SSL в настройке должно быть указано значение SSL. Если в Kafka не настроен TLS, укажите значение SASL_PLAINTEXT;

    • sasl – необязательный блок настроек для приемника с типом kafka – задает параметры подключения при использовании SASL-аутентификации для подключения к Kafka:

      • jaasConfig – строка подключения, в которой можно использовать параметры подстановки из secureParams;

      • mechanism – значение PLAIN;

      • secureParams – блок с параметрами, которые будут зашифрованы в конфигурационном файле при запуске сервера.

    Пример блока:

    "sasl": {
        "jaasConfig": "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"alice\" password=\"${pswd}\";",
        "mechanism": "PLAIN",
        "secureParams": {
            "pswd": "Содержимое зашифруется при запуске",
        }
    }
    
    • ssl – необязательный блок настроек для приемника с типом kafka – задает параметры SSL для подключения к Kafka:

      • enabledProtocols – строки со списком включенных протоколов;

      • keyStore – блок настроек с параметрами доступа к ключевому контейнеру Blitz Identity Provider. Содержит настройки type, path, password;

      • trustedStore – блок настроек с параметрами доступа к контейнеру с доверенными сертификатами. Содержит настройки type, path, password;

      • keyPassword – необязательная настройка – пароль для доступа к ключу.

    Пример блока:

    "securityProtocol" : "SSL",
    "ssl" : {
        "enabledProtocols" : ["TLSv1.2,TLSv1.3"],
        "keyStore" : {
            "password" : "CHANGE-ME",
            "path" : "/etc/blitz-config/bip-d1app01-1.jks",
            "type" : "JKS"
        },
        "trustedStore" : {
            "password" : "CHANGE-ME",
            "path" : "/etc/blitz-config/ca.jks",
            "type" : "JKS"
        },
        "keyPassword": "CHANGE-ME"
    },
    
    • tuning – необязательный блок настроек для приемника с типом kafka – задает опциональные настройки producer для взаимодействия с Kafka. Имена параметров необходимо указывать с точкой как в документации Kafka.

    Пример блока:

    "tuning": {
        "client.id": "BlitzKafka"
    }
    
    • emitAtLeastOneOf – необязательная настройка – указывается список приемников, достаточно записи событий в любой из которых, чтобы операция считалась успешной;

    • emitToAllOf – необязательная настройка – указывается список приемников, по которым обязательно должно быть получено подтверждение успешной записи события, чтобы операция считалась успешной. Если настройки emitAtLeastOneOf и emitToAllOf не заданы, то обязательно подтверждение от всех настроенных приемников;

    • emitTimeoutInSec – необязательная настройка – определяет максимальное время отклика от приемника в ответ на запроса записи события. Если настройка не задана, то ожидание 60 секунд.

    Пример настроек записи аудита одновременно в лог, в СУБД и в Kafka:

    "audit": {
        "emitters": [
            {
                "type": "log",
                "name": "users-log",
                "enabled": true,
                "logger": "AUDIT",
                "exclude": ["admin_added", "admin_pswd_changed", "admin_removed", "admin_roles_changed",
                            "config_changed"]
            },
            {
                "type": "log",
                "name": "admins-log",
                "enabled": true,
                "logger": "AUDITADMIN",
                "include": ["admin_added", "admin_pswd_changed", "admin_removed", "admin_roles_changed",
                            "config_changed"]
            },
            {
                "type": "audit-store",
                "enabled": true
            },
            {
                "type" : "kafka",
                "enabled": true,
                "name" : "kafka",
                "include": ["login"],
                "bootstrapServers" : ["infra-kfk01:9443"],
                "topic" : "blitz_audit",
                "securityProtocol" : "SSL",
                "ssl" : {
                    "enabledProtocols" : ["TLSv1.2,TLSv1.3"],
                    "keyStore" : {
                        "password" : "CHANGE-ME",
                        "path" : "/etc/blitz-config/bip-app01.jks",
                        "type" : "JKS"
                    },
                    "trustedStore" : {
                        "password" : "CHANGE-ME",
                        "path" : "/etc/blitz-config/ca.jks",
                        "type" : "JKS"
                    }
                },
            }
        ],
        "emitAtLeastOneOf": ["users-log","admins-log","kafka"],
        "emitToAllOf": ["audit-store"],
        "emitTimeoutInSec": 30
    }
    

При регистрации аудита в лог можно настроить логгер с помощью файла конфигурации logback.xml (см. подробнее). Пример настройки логгера AUDIT в файле конфигурации logback.xml:

…
    <appender name="AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${dir.logs}/audit-${app.name}.log</file>
        <encoder>
            <pattern>%date - [%level] -[%file:%line] - %message%n%xException{20}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${dir.logs}/archive/audit-${app.name}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>90</maxHistory>
            <totalSizeCap>5GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <logger name="AUDIT" additivity="false">
        <appender-ref ref="AUDIT" />
    </logger>
…

Пример записи в логе:

2023-11-20 13:29:47,170 - [INFO] -[LoggerEventEmitterDriver.scala:37] - {"ip_st":"Tashkent","ip":"213.230.116.179","authnDone":"true","process_id":"b80ca03e-4718-44ff-9456-7d4255610eaa","ip_ctr":"Узбекистан","type":"login","object_id":"BIP-123456","protocol":"oAuth","subject_id":"BIP-123456","auth_methods":"cls:password","session_id":"f8d85ba2-a26a-447f-b82e-944b9218abb8","timestamp":1700476187069,"ch_platform_version":"\"14.1.0\"","ch_platform":"\"macOS\"","ip_ct":"Tashkent","id_store":"ldap01","ip_lng":"69.2494","ip_rad":"5","ch_ua":"\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","lp_id":"test-system","id":"6056828858453673-600312119","ip_lat":"41.3171","client_auth_method":"redirectUri"}

Возможные типы событий безопасности:

  • admin_added – добавлен администратор

  • admin_pswd_changed – изменен пароль администратора

  • admin_removed – удален администратор

  • admin_roles_changed – изменены роли администратора

  • app_password_changed – задан пароль для приложения

  • attribute_changed – добавлен, изменен или удален атрибут

  • attribute_confirmed – атрибут подтвержден

  • auth – выполнена аутентификация (при OAuth 2.0 Resource Owner Password Credentials)

  • auth_failed – ошибка аутентификации

  • auth_req – запрос на аутентификацию

  • authz_granted – выдано OAuth-разрешение

  • authz_rejected – отказано в выдаче OAuth-разрешения

  • authz_revoked – отозвано OAuth-разрешение

  • bind_ext_account – учетная запись привязана к внешней

  • config_changed – изменены настройки конфигурации

  • duo_put – мобильное приложение Duo Mobile привязано

  • duo_remove – мобильное приложение Duo Mobile отвязано

  • grant_right – назначение прав доступа

  • group_attr_changed – у группы пользователей изменен или удален атрибут

  • group_registered – группа пользователей создана

  • group_removed – группа пользователей удалена

  • hotp_attached – привязан HOTP-генератор

  • hotp_detached – отвязан HOTP-генератор

  • internal_user_deleted – учетная запись удалена

  • locked_methods_changed – изменен список заблокированных методов аутентификации

  • login – выполнен вход

  • login_failed – ошибка входа

  • login_stopped – неуспешный вход

  • logout – выполнен выход

  • logout_req – запрос на выход

  • member_added – пользователь включен в группу пользователей

  • member_removed – пользователь исключен из группы пользователей

  • need_password_change – установлен признак необходимости смены пароля

  • recovery – доступ к учетной записи восстановлен

  • recovery_fail – восстановление доступа не выполнено

  • recovery_req – выполнен запрос на восстановление доступа

  • registration – учетная запись зарегистрирована

  • registration_req – выполнен запрос на регистрацию

  • required_factor_changed – изменен режим аутентификации пользователя

  • reset_user_password – пароль установлен администратором

  • reset_user_sessions – выход с устройств (сброс сессий)

  • revoke_right – отзыв прав доступа

  • send_email_code – код подтверждения отправлен на email

  • send_push_code – код подтверждения отправлен в Push

  • send_sms_code – код подтверждения отправлен по SMS

  • token_exchange_failed – отказано в обмене маркера доступа

  • token_exchanged – произведен обмен маркера доступа

  • token_granted – выдан маркер доступа

  • totp_attached – привязан TOTP-генератор

  • totp_detached – отвязан TOTP-генератор

  • unbind_ext_account – учетная запись отвязана от внешней

  • user_locked – учетная запись заблокирована

  • user_password_changed – изменен пароль пользователя

  • user_sec_qsn_changed – изменен контрольный вопрос

  • user_sec_qsn_removed – удален контрольный вопрос

  • user_unlocked – учетная запись разблокирована

  • web_authn_reg_key – добавлен ключ безопасности

  • web_authn_revoke_key – удален ключ безопасности

Набор атрибутов записи может отличаться в зависимости от типа события безопасности и особенностей процесса входа. Назначения атрибутов в записи аудита приведены в таблице:

Назначение атрибутов в записи аудита

Атрибут

Назначение и возможные значения

id

Идентификатор записи о событии безопасности

type

Тип события безопасности

alt_pswd_cause

Причина, по которой пользователя просили сменить пароль. Возможные значения:

  • password_expired – пароль просрочен

  • password_reset – пароль нужно сменить при первом входе

  • password_policy_violated – пароль не соответствует парольной политике

attr_name

Имя установленного, удаленного или измененного атрибута

auth_methods

Содержит список пройденных пользователем методов аутентификации. Возможные значения:

  • password – парольная аутентификация

  • spnego – вход с помощью сеанса ОС

  • x.509 – вход с помощью средства электронной подписи

  • qrCode – вход по QR-коду

  • tls – вход с помощью HTTP-заголовков прокси-сервера

  • webAuthn – вход или подтверждение входа с помощью ключей безопасности

  • css – автоматический вход по результатам регистрации пользователя или восстановления пароля

  • sms – одноразовый пароль по SMS

  • email – одноразовый пароль по email

  • hotp – второй фактор аутентификации с помощью аппаратного брелока

  • totp – второй фактор аутентификации с помощью программного TOTP-генератора кодов подтверждения

  • externalIdps:<type>:<name> – вход с помощью внешнего поставщика идентификации (соцсети и пр.)

  • userApp – вторичная аутентификация в мобильном приложении

  • outside_%NAME% – внешний метод входа с именем %NAME%

Наличие перед методом префикса cls: означает, что вход был выполнен с помощью долгосрочной сессии, а ранее при первичном входе использовались те методы входа, что перечислены после cls:

auth_soft_id

Приложение-аутентификатор (при входе по QR-коду)

authnDone

Проводилась ли аутентификация при этом входе

captcha_passed

Признак, что при входе спрашивалась CAPTCHA

client_auth_method

Способ аутентификации вызвавшего Blitz Identity Provider приложения:

  • internal – для событий, вызванных внутренними приложениями Blitz Identity Provider

  • x.509 – для событий, вызванных SAML-приложениями, при условии, что SAML-запрос пришел подписанным

  • Basic – для приложений, вызывающих REST-сервисы, использующие Basic-авторизацию

  • redirectUri – для приложений, которые идентифицировали себя в URL (например, указали свой client_id в URL-параметре), но чья аутентификация не проводилась (достоверно не известно, что это действительно вызывает Blitz Identity Provider именно это приложение)

  • Bearer – использование access_token для аутентификации мобильным приложением с динамическими client_id/client_secret

dcId

Динамический client_id

device

ID устройства

deviceFingerprint

Отпечаток устройства

dTyp

Тип устройства (при динамической регистрации)

email

Адрес электронной почты

entry_point

Тип интерфейса, использованного для регистрации пользователя:

  • WEB – при регистрации из веб-приложения Blitz Identity Provider,

  • REST – при регистрации через REST-сервисы Blitz Identity Provider.

error

Ошибка (при неуспешных событиях)

ext_account_id

Идентификатор внешней учетной записи

ext_account_name

Имя внешнего поставщика идентификации

ext_account_type

Тип внешнего поставщика идентификации

failed_method

Указывает, какой метод аутентификации не смог пройти пользователь

group_id

Идентификатор группы пользователей

group_profile

Идентификатор профиля использования групп пользователей

id_store

Хранилище учетной записи

ip

IP адрес пользователя

ip_ctr

Страна по IP адресу

ip_st

Регион по IP адресу

ip_ct

Город по IP адресу

ip_lat

Широта по IP адресу

ip_lng

Долгота по IP адресу

ip_rad

Окрестность по IP адресу

lp_id

Идентификатор приложения (EntityId для SAML или client_id для OIDC), вызвавшего Blitz Identity Provider.

mobile

Номер мобильного телефона

module

Идентификатор измененного блока настроек

new_attr_value

Новое значение установленного или измененного атрибута

new_factor

Новое значение признака, указывающего на необходимость проверки второго фактора аутентификации

new_roles

Роли, добавленные учетной записи администратора

oauth_scopes

Список разрешений, которые выдал или отозвал пользователь

object_id

Идентификатор объекта операции (пользователь, по которому выполнялась операция)

old_attr_value

Прежнее значение удаленного или измененного атрибута

old_factor

Прежнее значение признака, указывающего на необходимость проверки второго фактора аутентификации

old_roles

Роли, отозванные у учетной записи администратора

origin_app

Идентификатор приложения, инициировавшего регистрацию пользователя или восстановление пароля

process_id

Идентификатор процесса

protocol

Протокол взаимодействия приложения с Blitz Identity Provider. Возможные значения:

  • SAML – для SAML и WS-Federation

  • OAuth – для OpenID Connect и OAuth 2.0

  • simple – для прокси-аутентификации–

  • internal – для входа в Личный кабинет (_blitz_profile)

pswd_changed

Признак, что рекомендовалась смена пароля

pswd_tmp_locked

Признак, что была временная блокировка

recovery_contact

Указанный при восстановлении контакт (email или номер мобильного телефона)

recovery_type

Тип восстановления пароля: email или mobile

right_name

Название права доступа

roles

Роли учетной записи администратора

session_id

Уникальный идентификатор сессии пользователя. Позволяет коррелировать все события пользователя, выполненные им в рамках общей пользовательской сессии

subject_id

Идентификатор субъекта операции (пользователь, который вызвал операцию)

tags

Метка назначенного или отозванного права доступа

timestamp

Дата и время события. Например, 2022-11-04T17:49:58.384+0300

tried_old_pswd

Признак того, что была попытка входа с паролем из сохраненной истории паролей (предыдущим паролем)

used_login

Логин, использованный при входе

user_agent

Данные о пользовательском устройстве (UserAgent)

wa_key_id

Идентификатор ключа безопасности

wa_key_name

Имя ключа безопасности

withDelay

Включалась задержка при входе