
Содержание статьи
Внутри большинства скриптов разведки работает LDAP. Например, когда ты запускаешь скрипт GetUserSPNs. py из Impacket, он отправляет LDAP-запрос в службу каталогов со следующим фильтром:
Этот фильтр запрашивает все включенные учетные записи пользователей с непустым SPN — то есть учетные записи, для которых можно запросить билет TGS.
Сборщики BloodHound получают список всех объектов в Directory Service с помощью разных запросов. Например, RustHound использует запрос такого вида:
Аналогично запрашивается информация по LDAP при разведке сервисов AD CS, SCCM и других.
Однако у команд защиты постепенно появляется все больше способов отлавливать разведку инфраструктуры через LDAP. В сегодняшней статье разберем эти методы, а также посмотрим, какие есть возможности для обфускации запросов от средств защиты.
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Краткая теория LDAP и служб каталогов
Перед тем как перейти к обнаружению атак и способам защиты, давай сначала разберемся, что такое LDAP и как он работает. Если по‑простому, LDAP — это база данных AD. Данные хранятся в службе каталогов (Directory Service) в виде древовидной структуры. Объект домена — корень, от которого отходят ветви с категориями данных.
Классический LDAP-запрос Search состоит из следующих полей:
BaseObject ( StartingNode ) — точка, откуда начнется поиск. Например, это может быть весь домен или отдельная ветка с пользователями, если тебе интересны только объекты пользователей;
Scope — параметр LDAP-запроса Search, который определяет глубину поиска. Значение subtree подойдет, если нужен поиск во вложенных ветках, onelevel — если нужен поиск на одном уровне, без углубления в ветки. Еще есть base — поиск только по одному объекту, базе;
фильтр запроса — условие, которому должны соответствовать искомые объекты;
запрашиваемые атрибуты — атрибуты, которые будут запрошены у найденных объектов.
Сам фильтр запроса состоит из следующих частей:
искомый атрибут;
значение;
оператор сравнения;
отрицание — если нужно исключить определенные объекты.
Пример фильтра запроса:
В результате применения фильтра сервер вернет нам все объекты, у которых в атрибуте name есть значение Bob .
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
9990 рублей 5000 р.
950 р.
За последние годы мы слышали про блокчейн много: про революцию финансов, про свободные ден…