Подбор пароля пользователя по LDAP в FreeIPA.md
Описание
В инфраструктуре FreeIPA наряду с Kerberos активно используется протокол LDAP для аутентификации и управления данными. Атакующие могут осуществлять подбор паролей пользователей через LDAP BIND-операции, обходя некоторые ограничения Kerberos. Поскольку LDAP-аутентификация широко используется в различных сервисах, такую активность следует детально анализировать.
Разбор
LDAP BIND — это операция аутентификации в LDAP, где клиент предоставляет DN (Distinguished Name) и пароль для установления сессии.
Для выполнения операции аутентификации можно воспользоваться утилитой ldapsearch:
ldapsearch -x -h <ipa_server_ip> \
-D "uid=<user_name>,cn=users,cn=accounts,dc=domain,dc=local" \
-w "<password>" \
-b "dc=domain,dc=local" \
"(objectClass=*)"
-x: использование простой аутентификации.-D: DN пользователя для аутентификации.-w: пароль пользователя.-h: хост FreeIPA сервера.-b: база поиска."(objectClass=*)": фильтр поиска (все объекты).
Примеры событий
При попытке аутентификации генерируется цепочка из двух событий.
Запрос аутентификации (BIND-операции)
Это событие фиксирует саму попытку аутентификации.

Событие запроса BIND-операции
Ключевые поля:
src_process_parent_id: идентификатор соединения (например,22866).device_event_class: класс события (журнал доступа 389 Directory Server).dst_object_path: DN пользователя, выполняющего запрос.
Результат аутентификации
Это событие показывает результат попытки.
- При неуспешной аутентификации:

Событие с результатом “неверные учетные данные”
Ключевые поля:
src_process_parent_id: тот же идентификатор соединения.device_event_class: класс события.device_reason: причина неудачного входа.
Важно отметить, что в событии о неудаче отсутствует DN пользователя (dst_object_path), поэтому для определения цели атаки необходима корреляция с событием запроса по src_process_parent_id.
Событие 1 (BIND запрос) → Событие 2 (BIND результат): цепочка при неуспешной попытке аутентификации
↓ ↓
conn=22866 conn=22866
op=0 op=0
dn=uid=bak3... err=49
- При успешной аутентификации:

Событие с результатом “успех”
Ключевые поля:
src_process_parent_id: идентификатор соединения.device_event_class- класс события.device_reason: причина удачного входа.dst_object_path: DN пользователя, который успешно прошел аутентификацию.
При успешной попытке перебора паролей цепочка событий будет выглядеть так:
Событие 1 (BIND запрос) → Событие 2 (BIND результат)
↓ ↓
conn=23996 conn=23996
op=0 op=0
dn=uid=bak3... err=0
dn=uid=bak3...
Ссылки на дополнительные материалы
Вывод
LDAP-интерфейс FreeIPA создает дополнительный вектор для атак на подбор паролей. Основная сложность детектирования заключается в том, что информация о пользователе и результате аутентификации разделена между разными событиями, что требует их корреляции по идентификатору соединения (conn).
Возможный способ обнаружения
Подбор пароля пользователя по LDAP в FreeIPA
Правило детектирования основано на корреляции двух событий, произошедших на одном хосте:
- Событие 1 (Запрос):
device_event_category=bind. - Событие 2 (Результат):
device_event_category=resultиdevice_reason=неверные учетные данные.
События связываются по src_process_parent_id для определения имени пользователя из первого события.
Успешный подбор пароля пользователя по LDAP в FreeIPA
Правило детектирования основано на корреляции трех событий:
- Событие 1 (Запрос):
device_event_category=bind. - Событие 2 (Неудача):
device_event_category=resultиdevice_reason=неверные учетные данные. - Событие 3 (Успех):
device_event_category=resultиdevice_reason=успех.
Первые два события связываются по src_process_parent_id. Событие успеха связывается с ними по dst_object_path (имени пользователя).
Правила
Подбор пароля пользователя по LDAP в FreeIPA
id: RV-D-1102
rid: d0d29228-a9e0-44c9-8bf2-efd94e4bcdc3
name: Подбор пароля пользователя по LDAP в FreeIPA
Тестирование
- FreeIPA
False Positive
- Устаревшие сохраненные учетные данные
Успешный подбор пароля пользователя по LDAP в FreeIPA
id: RV-D-1103
rid: 2155714e-a64d-40e6-b766-1fabfa2a33c8
name: Успешный подбор пароля пользователя по LDAP в FreeIPA
Тестирование
- FreeIPA
False Positive
- Устаревшие сохраненные учетные данные