# Служба каталогов

````markdown
---
description: >-
  Что надо знать аналитику SOC об Active Directory, чтобы эффективно мониторить
  и выявлять атаки
---

# Служба каталогов

## **Служба каталогов и LDAP**

**Служба каталогов (Directory Service)** — это специализированная база данных, которая хранит информацию об объектах в сети, таких как пользователи, компьютеры, принтеры и другие ресурсы. Она обеспечивает централизованное управление этими объектами, а также их аутентификацию и авторизацию.

Некоторые примеры службы каталогов:

* **Active Directory (AD)** - наиболее распространённая служба каталогов от Microsoft.
* OpenLDAP - открытая реализация LDAP-сервера, часто используется в Linux-средах
* FreeIPA - решение на основе OpenLDAP
* **Azure Active Directory (Azure AD, теперь Microsoft Entra ID)** – облачная служба от Microsoft, интегрируется с локальным AD.

Служба каталогов как правило использует протокол **LDAP (Lightweight Directory Access Protocol)** для доступа к данным.

**LDAP (Lightweight Directory Access Protocol)** — это протокол для доступа к службам каталогов. Он позволяет клиентам запрашивать и изменять данные, хранящиеся в каталоге, такие как информация о пользователях, группах, компьютерах и других объектах.

**Основные компоненты LDAP**

1. **Объекты**:
   * Каждый элемент в каталоге (пользователь, группа, компьютер) представлен как объект.
   * Объекты имеют уникальный идентификатор (DN — Distinguished Name).
2. **Distinguished Name (DN)**:
   * Уникальный путь к объекту в каталоге.
   * Пример: `cn=JohnDoe,ou=Users,dc=example,dc=com` — объект "JohnDoe" в организационном подразделении "Users" домена "example.com".
3. **Атрибуты**:
   * Объекты состоят из атрибутов, которые хранят информацию (например, `cn` — common name, `mail` — электронная почта).
   * Для разных типов объектов существуют разные атрибуты.
   *   для получения полного списка атрибутов LDAP объекта (например, пользователя, группы или компьютера) из Active Directory можно использовать следующие команды:

       ```
       Get-ADObject -Identity "DN_объекта" -Properties *
       ```
4.  **Схема (Schema)**:

    * Определяет типы объектов и их атрибуты.
    * Например, схема может указывать, что объект "пользователь" должен иметь атрибуты `cn`, `mail`, `uid`.
    * Получить список всех возможных атрибутов схемы Active Directory

    <pre><code><strong>Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -Filter {objectClass -eq "attributeSchema"} -Properties * | Select-Object name, lDAPDisplayName
    </strong></code></pre>

Атакующие используют протокол LDAP для разведки и поиска уязвимостей, таких как слабые права доступа или неправильно настроенные объекты.

Популярные инструменты: **BloodHound, ldapsearch, AD Explorer, Powerview**. \
Также инфомацию из домена можно получить, используя встроенные утилиты Windows: модуль ActiveDirectory Powershell, net.exe.

{% hint style="info" %}
BloodHound/SharpHound — это мощный инструмент для анализа домена Active Directory, который помогает атакующим (и защитникам) визуализировать отношения между объектами домена и находить пути для повышения привилегий.
{% endhint %}

## Домен Active Directory

Домен — это логическая группа компьютеров, пользователей и других объектов, которые управляются централизованно с помощью службы каталогов, такой как Active Directory.

Ключевые элементы домена, которые важны для понимания его структуры и функционирования.

**Контроллеры домена (Domain Controllers, DC)** - серверы, которые управляют доменом и хранят базу данных Active Directory.

**Основные функции**:

* Аутентификация пользователей. ([**Kerberos**](../kerberos/kerberos.md) — протокол аутентификации)
* Хранение информации об объектах домена. (**LDAP** — протокол доступа к каталогу)
* Репликация данных между контроллерами домена. (Механизмы реплекации используются для атак DCShadow и DCSync).

Также на первичном контроллере домена обычно находится DNS-сервер для разрешения имен.

{% content-ref url="../../other/dns.md" %}
[dns.md](../../other/dns.md)
{% endcontent-ref %}

### Основной контроллер и FSMO-роли

Контроллеры домена в Active Directory (AD) в большинстве случаев являются равноправными участниками репликации и могут выполнять одинаковые функции, включая запись и изменение данных в базе AD. Такая модель называется мультимастеровой репликацией (multimaster replication), где каждый контроллер домена может вносить изменения, которые затем реплицируются на другие контроллеры.

Однако в AD существуют операции, которые не могут выполняться одновременно на нескольких контроллерах домена, чтобы избежать конфликтов. Для этих задач выделены специальные роли — FSMO (Flexible Single Master Operations), которые назначаются уникальным контроллерам домена в лесу или домене. Всего таких ролей пять:

* Schema Master (мастер схемы) - управляет изменениями **схемы Active Directory** (например, добавление новых атрибутов). Изменять схему может только DC с этой ролью.
* Domain Naming Master (мастер именования доменов) - контролирует создание и удаление доменов в лесу.
* Infrastructure Master (мастер инфраструктуры) - отвечает за обновление ссылок между доменами (например, если пользователь из одного домена добавлен в группу другого).
* RID Master (мастер RID) - генерирует **RID** (Relative Identifiers) для новых объектов (пользователей, групп, компьютеров). Без него нельзя создавать новые объекты.
* PDC Emulator (эмулятор основного контроллера домена) - отвечает за время, пароли, блокировки аккаунтов и GPO

FSMO роли можно перенести с одного контроллера на другой. Либо захватить.

| **Действие**           | **Когда использовать**                            | **Риски**                                  |
| ---------------------- | ------------------------------------------------- | ------------------------------------------ |
| **Transfer** (перенос) | Если старый DC **доступен** и исправен.           | Безопасно.                                 |
| **Seize** (захват)     | Если старый DC **недоступен** (например, сгорел). | **Требует удаления старого DC из домена!** |

Active Directory **не предусматривает автоматического захвата FSMO-ролей**. Это делается только вручную для предотвращения конфликтов.\
Сделать это можно через PowerShell (требует модуль AD):

````

Move-ADDirectoryServerOperationMasterRole -Identity "НОВЫЙ-DC" -OperationMasterRole PDCEmulator, RIDMaster, InfrastructureMaster, SchemaMaster, DomainNamingMaster -Force

```

Ключ `-Force` выполняет **захват** (seize), а не перенос.

### SYSVOL, NETLOGON, NTDS

В Active Directory (AD) есть несколько системных папок, которые играют ключевую роль в работе домена. Они хранят критически важные данные, такие как групповые политики (GPO), скрипты входа, службы аутентификации и репликации.

**SYSVOL** (`\\<domain>\SYSVOL\<domain>\`) **-** Сетевая папка, которая реплицируется между всеми контроллерами домена. Она хранит групповые политики (GPO) в формате XML, скрипты входа/выхода и другие общие файлы домена (например, файлы конфигурации для всех компьютеров домена).

Многие администраторы хранят пароли в GPO (например, для автоматической настройки служб). Эти пароли можно извлечь.

Если злоумышленник получает доступ на запись в `SYSVOL`, он может подменить `logon.bat` и выполнить код на всех компьютерах домена.

**NETLOGON** (`\\<domain>\NETLOGON\` или `C:\Windows\SYSVOL\sysvol<domain>\SCRIPTS`) **-** Сетевая папка, используемая для хранения скриптов входа в домен (`Logon Scripts`), которые выполняются при входе пользователя в систему.
**Доступна всем аутентифицированным пользователям** по умолчанию.

Атакующий может искать пароли в скриптах.

**NTDS** (`C:\Windows\NTDS`) - хранит:
Базу данных AD, все объекты домена (пользователи, группы, компьютеры),
Файлы журналов транзакций **(`edb*.log`)** – для целостности данных.
Кэш Kerberos-билетов (если включено кэширование).

Злоумышленник с правами репликации может выгрузить все хэши паролей всех пользователей домена.

<div data-gb-custom-block data-tag="content-ref" data-url='../domain-takeover.md'>

[domain-takeover.md](../domain-takeover.md)

</div>

## **Пользователи (Users)**

Учётные записи, которые представляют физических лиц или службы. Пользователи могут быть обычными или привилегированными (например, члены групп "Domain Admins" или "Enterprise Admins")

* **Основные атрибуты**:
  * `sAMAccountName` — логин пользователя.
  * `userPrincipalName` (UPN) — уникальный идентификатор (например, `user@domain.com`). Для сервисных учетных записей еще используется SPN.
  * `memberOf` — группы, в которые входит пользователь.

<details>

<summary>SPN (<strong>Service Principal Name</strong>)</summary>

**SPN** — это уникальный идентификатор, который связывает службу (например, SQL Server, IIS) с учётной записью, под которой она работает в домене. SPN используется в протоколе Kerberos для аутентификации служб. Пример SPN: `MSSQLSvc/sqlserver.example.com:1433`.

SPN указывает, какие в домене есть сервисы, какие учётные записи используются для запуска служб (например, SQL Server, Exchange).

Также SPN используется для атак Silver Ticket (Подробнее в разделе про [kerberos](../kerberos/kerberos.md "mention")).

</details>

**Что интересно атакующему:**
Привилегированные учётные записи (например, членов групп "Domain Admins").
Анализ членства в группах для поиска путей повышения привилегий.
Поиск неактивных или устаревших учётных записей, которые могут быть скомпрометированы (Информация о последнем входе (`lastLogon`) и смене пароля (`pwdLastSet`)).

## **Компьютеры (Computers)**

Учётные записи, представляющие компьютеры, присоединённые к домену.

* `sAMAccountName` — имя компьютера (заканчивается на `$`, например, `PC01$`).

**Что интересно атакующему:** \
Информация о настройках делегирования, таких как **Unconstrained Delegation**, **Constrained Delegation** и **Resource-Based Constrained Delegation.** \
Информация о компьютерах, на которых используется LAPS.  Атрибуты, связанные с LAPS, такие как `ms-Mcs-AdmPwd`.

<details>

<summary>LAPS (Local Administrator Password Solution)</summary>

**LAPS** — это решение от Microsoft для управления паролями локальных администраторов на компьютерах в домене. Оно автоматически генерирует уникальные сложные пароли для локальных учётных записей администраторов на каждом компьютере и хранит их в Active Directory (AD). Это упрощает управление паролями и повышает безопасность, так как пароли регулярно меняются.

**Как работает LAPS**

1. **Установка LAPS**:
   * LAPS состоит из двух компонентов: клиентской части (устанавливается на компьютеры) и серверной части (устанавливается на контроллеры домена).
   * Клиентская часть отвечает за генерацию и смену паролей.
   * Серверная часть хранит пароли в атрибутах объектов компьютеров в AD.
2. **Генерация паролей**:
   * LAPS автоматически генерирует сложные пароли для локальной учётной записи администратора на каждом компьютере.
   * Пароли меняются через определённые интервалы времени (по умолчанию — каждые 30 дней).
3. **Хранение паролей**:
   * Пароли хранятся в атрибутах объекта компьютера в Active Directory.
   * Эти атрибуты защищены ACL, чтобы только авторизованные пользователи или группы могли читать пароли.
4. **Получение паролей**:
   * Администраторы могут использовать инструменты, такие как **LAPS UI** или PowerShell, чтобы получить пароль локального администратора для конкретного компьютера.

**Атрибуты LAPS в объектах LDAP**

LAPS использует два основных атрибута в объектах компьютеров для хранения информации о паролях:

1. **ms-Mcs-AdmPwd**:
   * Этот атрибут хранит текущий пароль локального администратора в открытом виде.
   * **Важно**: Этот атрибут доступен только пользователям или группам, которым явно предоставлены права на чтение.
2. **ms-Mcs-AdmPwdExpirationTime**:
   * Этот атрибут хранит время истечения срока действия текущего пароля.
   * **Пример значения**: `132558739200000000` (это значение представляет дату и время в формате FILETIME).
   * Используется для определения, когда пароль должен быть изменён.

***

Если права доступа к атрибутам LAPS настроены неправильно, атакующий может получить доступ к паролям. Если атакующий получает доступ к атрибуту `ms-Mcs-AdmPwd`, он может получить пароль локального администратора на компьютере.

</details>

## **Группы (Groups)**

Коллекции пользователей, компьютеров или других групп, которые упрощают управление правами доступа.

* **Типы групп**:
  * **Security Groups** — используются для управления доступом к ресурсам.
  * **Distribution Groups** — используются для рассылки сообщений (например, почтовые рассылки).
* **Примеры групп**:
  * **Domain Admins** — полный контроль над доменом.
  * **Enterprise Admins** — полный контроль над всеми доменами в лесу.
  * **Domain Users** — все пользователи домена.

**Что интересно атакующему:**
Группы с высокими привилегиями (например, "Domain Admins", "Enterprise Admins").
Группы, которые имеют опасные права на другие объекты (например, право изменять членство в других группах).
Пользователи, которые могут быть добавлены в привилегированные группы.

### Опасные права на объекты

В Active Directory (AD) права на объекты определяют, какие действия могут выполнять пользователи или группы над определёнными объектами. Эти права задаются через **ACL (Access Control List)** — списки управления доступом, которые привязаны к каждому объекту.

* **Опасные права**:
  * **GenericAll**: Даёт полный контроль над объектом, включая изменение атрибутов, добавление в группы и удаление объекта. Атакующий может изменить пароль пользователя, добавить себя в привилегированные группы или удалить объект.
  * **GenericWrite**: Позволяет изменять атрибуты объекта, но не даёт полного контроля. Может быть использовано для изменения членства в группах или других атрибутов, что позволяет повысить привилегии.
  * **WriteDACL**: Позволяет изменять список управления доступом (ACL) объекта. Атакующий может изменить права доступа к объекту, предоставив себе дополнительные привилегии.
  * **WriteOwner**: Позволяет изменить владельца объекта. Атакующий может стать владельцем объекта и затем изменить его ACL или другие атрибуты.
* **Примеры эксплуатации**:
  * **GenericAll на группу "Domain Admins"**:
    * Атакующий может добавить себя в группу "Domain Admins" и получить полный контроль над доменом.
  * **WriteDACL на объект пользователя**:
    * Атакующий может изменить ACL пользователя, предоставив себе право **GenericAll**, а затем изменить пароль пользователя.
  * **WriteOwner на объект компьютера**:
    * Атакующий может стать владельцем объекта компьютера, изменить его ACL и затем использовать его для атак.
  * **GenericWrite на группу "IT Support"**:
    * Атакующий может добавить себя в группу "IT Support", которая имеет доступ к критически важным ресурсам.

## **Организационные подразделения (Organizational Units, OU)**

Контейнеры для группировки объектов (пользователей, групп, компьютеров) в домене.

* **Зачем нужны**:
  * Упрощение управления объектами.
  * Применение групповых политик (GPO) к определённым группам объектов.
* **Пример**:
  * `OU=Sales,DC=example,DC=com` — подразделение для отдела продаж.

## **Групповые политики (Group Policy Objects, GPO)**

Групповые политики используются для централизованного управления настройками пользователей и компьютеров в домене.

Они позволяют, например, ограничить доступ к определённым функциям операционной системы, настроить параметры безопасности или автоматически устанавливать программное обеспечение.

GPO могут быть привязаны к домену, сайту или организационному подразделению (OU).

**Что интересно атакующему:**\
Поиск слабых настроек безопасности в GPO.

Политики, которые могут быть использованы для распространения вредоносного ПО или повышения привилегий. Атакующий с правами на редактирование GPO может добавить **локального администратора** на все компьютеры внедрить **постоянный бекдор** (через автозагрузку), отключить защиту (например, Defender) и многое другое.

Администраторы часто хранят пароли в настройках GPO (например, для автоматического подключения сетевых дисков или запуска служб). Эти пароли сохраняются в файлах `Groups.xml`, `Services.xml` и других в зашифрованном виде, но **ключ шифрования известен** (используется AES-256 с фиксированным ключом `MS-SAM`).\
Атакующие могут извлечь эти пароли с помощью инструментов, таких как **Get-GPPPassword**.

### **Инструменты для эксплуатации GPO**

| Инструмент                        | Описание                                  |
| --------------------------------- | ----------------------------------------- |
| **SharpGPOAbuse**                 | Внедрение вредоносных настроек через GPO. |
| **PowerSploit (Get-GPPPassword)** | Извлечение паролей из GPO.                |
| **Grouper2**                      | Анализ GPO на уязвимости.                 |

## **Лес (Forest) и Дерево (Tree)**

*   **Лес (Forest) -** это наивысший уровень логической структуры AD, состоящий из одного или нескольких **доменов**, объединённых общими:

    * **Схемой (Schema)** — определяет типы объектов (пользователи, компьютеры и т. д.).
    * **Конфигурацией** — настройки сайтов, репликации.
    * **Глобальным каталогом (Global Catalog)** — содержит частичную информацию обо всех объектах леса.

    **Каждый лес имеет уникальное имя** (например, `contoso.com`).
* **Дерево (Tree) -** Иерархия доменов, которые имеют общее корневое доменное имя (например, `example.com` и `sales.example.com`).\
  Все домены в дереве автоматически **доверяют друг другу** (двусторонние транзитивные trusts).

### **Доверительные отношения (Trusts)**

Механизмы, которые позволяют доменам взаимодействовать друг с другом. Например, пользователи из домена A могут получать доступ к ресурсам в домене B, если между ними установлено доверие.

* **Типы доверия**:
  * **Одностороннее** — один домен доверяет другому, но не наоборот.
  * **Двустороннее** — оба домена доверяют друг другу.
  * **Транзитивное** — доверие распространяется на другие домены в лесу.

**Что интересно атакующему:**\
Поиск путей для перемещения между доменами (например, использование транзитивного доверия).\
Поиск доменов, которые имеют доверие к текущему домену, для атак, таких как **SID History.**

<details>

<summary>Атака SID-History</summary>

**SID-History** — это атрибут объектов пользователей в Active Directory (AD), который используется для миграции пользователей между доменами. Он позволяет сохранять старые идентификаторы безопасности (SID) пользователя, чтобы сохранить доступ к ресурсам в старом домене после миграции. Однако этот атрибут может быть использован атакующими для повышения привилегий в домене.

**Когда возможно?**

* SID Filtering отключен
* Есть домены с доверительными отношениями

**Что такое SID-History?**

* **SID (Security Identifier)** — это уникальный идентификатор, который присваивается каждому объекту в домене (пользователю, группе, компьютеру).
* **SID-History** — это атрибут объекта пользователя, который хранит список SID, связанных с этим пользователем. Обычно он используется для миграции пользователей между доменами, чтобы сохранить доступ к ресурсам в старом домене.

**Как это работает?**

* Когда пользователь аутентифицируется, система проверяет не только его текущие группы, но и SID, указанные в атрибуте `SID-History`.
* Если в `SID-History` есть SID привилегированной группы, система предоставляет пользователю соответствующие права.

**Шаги атаки**:

* Атакующий получает доступ к учётной записи с правами на изменение атрибута `SID-History` (например, с помощью права **WriteProperty** или **GenericAll**).
* Атакующий добавляет SID привилегированной группы (например, "Domain Admins") в атрибут `SID-History` своей учётной записи.
* После этого атакующий получает доступ к ресурсам, доступным для этой группы.

</details>

## Инструменты для сбора информации о домене

**BloodHound** строит графы, которые показывают отношения между объектами и возможные пути атаки.

* Пример: пользователь "UserA" имеет право `GenericWrite` на группу "Domain Admins", что позволяет ему добавить себя в эту группу.

**Для чего это нужно атакующим:**

* Поиск кратчайших путей для повышения привилегий.
* Поиск уязвимостей в структуре домена, которые могут быть использованы для атак.

**Пример использования BloodHound**

1. Атакующий запускает сбор данных с помощью **SharpHound** (сборщик данных для BloodHound).
2. BloodHound анализирует данные и показывает, что пользователь "UserA" имеет право `GenericWrite` на группу "IT Support".
3. Атакующий использует это право, чтобы добавить себя в группу "IT Support".
4. BloodHound показывает, что группа "IT Support" имеет право `WriteDACL` на группу "Domain Admins".
5. Атакующий использует это право, чтобы изменить ACL группы "Domain Admins" и добавить себя в неё.

## Мониторинг

### **Event ID 1644**

Для обнаружение разведки в домене (без привязки к конкретному инструменту) поможет мониторинг LDAP-запросов (**Event ID 1644**) или LDAP-трафика. \
Особое внимание стоит обращать на запросы специфичных атрибутов LDAP, связанных с делегированием, LAPS, SPN, службой сертификатов...\
А также на массовые выгрузки объектов из службы каталогов (но такие правила могут генерировать много False Positive), так как некоторые сервисы с доменной авторизацией тоже получают информацию о пользователях службы каталогов, их группах и правах.

### **Event ID 5136**

**Event ID 5136** поможет отследить изменения объектов. Такие как SID-History, изменение GPO, настройка делегирования, Shadow Cred и многих других.

Интересные атрибуты LDAP, за изменением которых стоит следить:[top-ldap-attributes.md](top-ldap-attributes.md "mention")

<div data-gb-custom-block data-tag="embed" data-url='https://www.ultimatewindowssecurity.com/securitylog/encyclopedia/event.aspx?eventid=5136'></div>

### Sysmon 11

Это событие поможет отследить создание или изменение файлов в SYSVOL или NETLOGON.
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://vasilisa-l.gitbook.io/blue-team-cookbook/a-d/directory-service.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
