Содержание статьи
Внутри большинства скриптов разведки работает LDAP. Например, когда ты запускаешь скрипт GetUserSPNs. из Impacket, он отправляет LDAP-запрос в службу каталогов со следующим фильтром:
(&(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(servicePrincipalName=*))
Этот фильтр запрашивает все включенные учетные записи пользователей с непустым SPN — то есть учетные записи, для которых можно запросить билет TGS.
Сборщики BloodHound получают список всех объектов в Directory Service с помощью разных запросов. Например, RustHound использует запрос такого вида:
(objectClass=*)
Аналогично запрашивается информация по LDAP при разведке сервисов AD CS, SCCM и других.
Однако у команд защиты постепенно появляется все больше способов отлавливать разведку инфраструктуры через LDAP. В сегодняшней статье разберем эти методы, а также посмотрим, какие есть возможности для обфускации запросов от средств защиты.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Краткая теория LDAP и служб каталогов
Перед тем как перейти к обнаружению атак и способам защиты, давай сначала разберемся, что такое LDAP и как он работает. Если по‑простому, LDAP — это база данных AD. Данные хранятся в службе каталогов (Directory Service) в виде древовидной структуры. Объект домена — корень, от которого отходят ветви с категориями данных.

Классический LDAP-запрос Search состоит из следующих полей:
BaseObject(StartingNode) — точка, откуда начнется поиск. Например, это может быть весь домен или отдельная ветка с пользователями, если тебе интересны только объекты пользователей;- Scope — параметр LDAP-запроса Search, который определяет глубину поиска. Значение
subtreeподойдет, если нужен поиск во вложенных ветках,onelevel— если нужен поиск на одном уровне, без углубления в ветки. Еще естьbase— поиск только по одному объекту, базе; - фильтр запроса — условие, которому должны соответствовать искомые объекты;
- запрашиваемые атрибуты — атрибуты, которые будут запрошены у найденных объектов.
Сам фильтр запроса состоит из следующих частей:
- искомый атрибут;
- значение;
- оператор сравнения;
- отрицание — если нужно исключить определенные объекты.
Пример фильтра запроса:
(name=Bob)
В результате применения фильтра сервер вернет нам все объекты, у которых в атрибуте name есть значение Bob.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Оформи подписку на материалы по тегу
Если тебе интересна эта тема целиком, можно открыть доступ не к одному материалу, а ко всем платным статьям выбранного тега.
Вариант 3. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
