Апокриф 10

Домен и облако: сетевые векторы доверия

Домен и облако: сетевые векторы доверия

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

Облако устроено похоже, но вместо билетов — токены, вместо контроллера домена — сервис метаданных, вместо GPO — роли и политики. Общее одно: доверие к тому, кто предъявил учётные данные, и к тому, откуда они пришли.

Тема 18 основной программы разбирала сетевую безопасность, тема 21 — ЦОД и виртуализацию. Здесь эти инфраструктуры рассматриваются как набор протоколов, которые можно перепутать, перехватить или обойти. Границы: эксплуатация уязвимостей ОС — тема 05 основной программы, веб-атаки — тема 16.

Тень базового курса: доверие как протокол

В основной программе безопасность выглядела как набор мер: межсетевой экран, сегментация, TLS. Домен добавляет к этому слой, где решение принимается не по адресу и не по сертификату, а по билету. Билет выдаётся один раз и действует ограниченное время; если его украсть, он работает до истечения срока.

Облако заменяет билет токеном, который выдаётся роли. Роль привязана к экземпляру, а экземпляр — к сети. Если экземпляр может прочитать метаданные, он может получить токен; если токен украден, он работает до истечения.

Kerberos: билеты и их слабости

TGT, TGS и PAC

Kerberos описан в RFC 4120 1. Клиент аутентифицируется на KDC и получает Ticket Granting Ticket (TGT); затем предъявляет TGT и получает Service Ticket (TGS) на конкретную службу. Билет зашифрован ключом службы, поэтому служба может проверить его, не обращаясь к KDC.

Последовательность получения TGT и сервисного билета в Kerberos
Два обмена с KDC и один с сервисом: где именно возникают Kerberoasting и AS-REP roasting

В Active Directory билет содержит PAC — структуру с идентификаторами групп и привилегиями 24. PAC подписан ключом KDC, и именно он определяет права пользователя.

kinit user@NSU.EXAMPLE
klist

Kerberoasting и AS-REP Roasting

Приёмы кражи учётных данных систематизированы в матрице ATT&CK 5. Kerberoasting: любой пользователь может запросить TGS на службу с зарегистрированным SPN. Билет зашифрован ключом службы, выведенным из пароля. Если пароль службы слабый, его можно перебрать офлайн.

impacket-GetUserSPNs nsu.example/user:pass -dc-ip 192.0.2.10 -request
hashcat -m 13100 tgs.txt rockyou.txt

AS-REP Roasting: если у учётной записи отключена предварительная аутентификация, KDC отвечает на AS-REQ данными, зашифрованными ключом пользователя, — и их можно перебирать без входа в систему.

impacket-GetNPUsers nsu.example/ -dc-ip 192.0.2.10 -usersfile users.txt -no-pass

Золотые и серебряные билеты

Золотой билет — поддельный TGT, подписанный ключом krbtgt. Серебряный — поддельный TGS, подписанный ключом службы. Оба требуют знания ключа, то есть компрометации контроллера домена или службы, и дают доступ без пароля.

NTLM и ретрансляция

Challenge/response

NTLM — вызов-ответ: сервер отправляет случайное число, клиент отвечает хешем пароля и этим числом. Сам пароль по сети не идёт, но ответ можно перехватить и использовать в ретрансляции.

Relay и подпись

NTLM Relay — атакующий принимает аутентификацию от жертвы и передаёт её другому серверу, выдавая себя за жертву. Работает там, где сервер принимает NTLM и не требует подписи SMB.

impacket-ntlmrelayx -tf targets.txt -smb2support

Защита: отключить NTLM, включить SMB signing, EPA для LDAP, запретить анонимные сессии. Подпись SMB ломает ретрансляцию, потому что сессия привязана к каналу.

LDAP, DNS и GPO

Перечисление и ACL

LDAP (RFC 4511) — основной способ читать каталог 3. Анонимное связывание часто разрешено, и тогда видны пользователи, группы, компьютеры и политики.

ldapsearch -x -H ldap://192.0.2.10 -b "dc=nsu,dc=example" "(objectClass=user)" sAMAccountName

Права в AD задаются списками ACL на объектах. Ошибка в ACL — например, право GenericAll для всех пользователей на группу — превращается в путь эскалации, который ищут графовые инструменты.

DNS и GPO

AD зависит от DNS: контроллеры домена регистрируются в _ldap._tcp, клиенты находят их по этим записям. Подмена DNS в домене — прямой путь к подставному контроллеру.

GPO распространяются через SYSVOL, доступный по SMB. Если у пользователя есть право записи в SYSVOL, он может изменить скрипт входа, который выполнят все машины.

BloodHound и DCSync

Граф доверия

BloodHound собирает данные из LDAP и сессий и строит граф: кто на кого имеет права, кто где залогинен, какие пути ведут к администраторам. Путь может быть длинным и неочевидным — например, через группу, у которой есть право сброса пароля.

bloodhound-python -u user -p pass -d nsu.example -ns 192.0.2.10 -c All

DCSync

DCSync имитирует репликацию: атакующий с правами Replicating Directory Changes просит контроллер домена отдать хеши. Это не эксплуатация уязвимости, а злоупотребление штатным протоколом.

impacket-secretsdump nsu.example/user:pass@192.0.2.10 -just-dc

Защита: ограничить права репликации, включить аудит, отслеживать обращения к DRSUAPI с необычных хостов.

Облако: метаданные, сеть, контейнеры

Метаданные и IMDSv2

Сервис метаданных доступен по 169.254.169.254 и выдаёт токены роли экземпляра 6. Если приложение уязвимо к SSRF, атакующий может прочитать метаданные и получить токен.

curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/
curl -s -X PUT "http://169.254.169.254/latest/api/token" \
  -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"

IMDSv2 требует токен, полученный через PUT, и ограничивает SSRF: простой GET без токена не работает. Это не полная защита, но существенное усложнение.

VPC peering, security groups, контейнеры

VPC peering соединяет сети, и ошибка в маршрутах или группах безопасности делает «изолированную» базу доступной из другого аккаунта. Security groups по умолчанию разрешают исходящие соединения, поэтому обратные оболочки проходят.

aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0
aws ec2 describe-vpc-peering-connections

Контейнеры добавляют CNI: сеть подов, политики, service mesh. Перехват трафика между подами возможен, если CNI не шифрует и не сегментирует; escape в сеть узла превращает под в точку опоры 7.

Числа: время жизни билетов и токенов

В домене по умолчанию TGT живёт 10 часов, TGS — 10 часов, а renewal допускается до 7 суток. Украденный билет работает до истечения срока; отзыв требует изменения пароля или блокировки учётной записи.

TGT:      10 часов
TGS:      10 часов
renewal:  7 суток

Токен роли в облаке обычно живёт от 15 минут до 6 часов в зависимости от сервиса. Это меньше, чем TGT, но достаточно, чтобы прочитать данные или создать ресурс. IMDSv2 ограничивает срок токена метаданных шестью часами и требует PUT-запрос, что усложняет SSRF, но не делает его невозможным: если приложение умеет выполнять произвольные запросы, оно умеет и PUT.

Стоимость перебора Kerberos-хешей зависит от типа шифрования. RC4 (etype 23) перебирается на порядки быстрее AES; поэтому отключение RC4 в домене — не формальность, а прямое снижение риска.

Обнаружение и защита

ПриёмПризнакКонтрмера
Kerberoastingмассовые TGS-запросыдлинные пароли служб, аудит
AS-REP RoastingAS-REQ без preauthвключить preauth
NTLM Relayаутентификация с чужого хостаSMB signing, отключить NTLM
DCSyncDRSUAPI с необычного хостааудит, ограничить права
BloodHoundмассовые LDAP-запросыаудит, лимиты
SSRF к метаданнымзапросы к 169.254.169.254IMDSv2, egress-фильтр
Открытый peeringмаршруты между аккаунтамиаудит маршрутов и SG

Правило Suricata на обращение к метаданным из контейнера:

alert http any any -> 169.254.169.254 any (msg:"Cloud metadata access"; \
  classtype:attempted-recon; sid:1000500; rev:1;)

Итоги темы

Домен держится на билетах, облако — на токенах. Оба доверяют предъявителю и оба уязвимы к краже: Kerberoasting и AS-REP Roasting дают материал для офлайн-перебора, NTLM Relay — доступ без пароля, DCSync — все хеши сразу.

Облачная сеть добавляет метаданные и peering. SSRF к метаданным — самый короткий путь от веб-уязвимости к роли; IMDSv2 усложняет его, но не отменяет. Контейнеры добавляют CNI и общую сеть узла, где ошибка сегментации стоит дорого.

Защита строится на сокращении доверия: меньше прав репликации, подпись SMB, отключение NTLM, проверка метаданных, аудит маршрутов. Следующая тема выходит за пределы ИТ — в промышленные сети, где те же принципы выглядят ещё жёстче.

Литература

  1. Neuman C., Yu T., Hartman S., Raeburn K. The Kerberos Network Authentication Service (V5). — RFC 4120, IETF, 2005. https://www.rfc-editor.org/rfc/rfc4120
  2. Zhu L., Leach P., Jaganathan K. The Kerberos Version 5 Generic Security Service Application Program Interface (GSS-API) Mechanism: Version 2. — RFC 4121, IETF, 2005. https://www.rfc-editor.org/rfc/rfc4121
  3. Sermersheim J. Lightweight Directory Access Protocol (LDAP): The Protocol. — RFC 4511, IETF, 2006. https://www.rfc-editor.org/rfc/rfc4511
  4. Microsoft. Kerberos Protocol Extensions (MS-KILE). — https://learn.microsoft.com/openspecs/windows_protocols/ms-kile
  5. MITRE ATT&CK. Credential Access. — https://attack.mitre.org/tactics/TA0006/
  6. Amazon Web Services. Instance Metadata and User Data. — https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
  7. NIST. Application Container Security Guide. — NIST Special Publication 800-190, 2017. https://doi.org/10.6028/NIST.SP.800-190