Разбираем атаки на Kerberos с помощью Rubeus. Часть 2
Это вторая часть статьи про возможности инструмента проведения атак на протокол Kerberos — Rubeus. Первую можно прочитать тут. В этот раз мы рассмотрим, как с помощью данного инструмента возможно реализовать следующие атаки:
- Overpass The Hash/Pass The Key (PTK);
- Pass The Ticket;
- Unconstrained Delegation;
- Constrained Delegation.
О том, почему возможны эти атаки, какие механизмы их реализации существуют, какой принцип лежит в основе работы Kerberos, написано уже много (например, коллеги из Инфосистемы Джет опубликовали хорошую статью с разбором), поэтому в своем материале я сделаю упор на реализацию атак с помощью Rubeus.
Помимо «экшенов» для проведения атак и взаимодействия с Kerberos, в Rubeus есть небольшая приятная мелочь: на основании пароля в открытом виде он может посчитать NTLM хэш, что иногда бывает очень удобно и полезно.
На этом небольшое лирическое отступление закончено, вернемся к основной части.
Тестовый стенд для проведения атак остался без изменений с момента выхода первой части статьи .
Overpass The Hash/Pass The Key (PTK)
Материал из Википедии — свободной энциклопедии:
Атака Pass-the-hash — один из видов атаки повторного воспроизведения. Она позволяет атакующему авторизоваться на удалённом сервере, аутентификация на котором осуществляется с использованием протокола NTLM или LM.
Но что делать, если в сети отключена аутентификация по протоколам NTLM или LM и используется только аутентификация Kerberos, а у вас есть хэш пароля? Здесь в игру вступает Overpass-the-hash — с помощью имеющегося хэша пароля пользователя Rubeus может запросить билет TGT для данной учетной записи.
Вот доменный пользователь Barsik решил изучить вопросы информационной безопасности, где-то раздобыл хэш пароля администратора домена ADadmin, скачал Rubeus, прочитал умных статей и пробует применить это на практике.
Видим, что кэшированных билетов у него нет, как и нет доступа к контроллеру домена DC-16.meow.local
, но дальше Barsik запускает Rubeus с «экшеном» asktgt
и аргументами /domain, /user, /rc4, /ptt
, чтобы на основании имеющегося хэша пароля учетной записи ADadmin получить валидный TGT билет, аргумент /ptt
сразу подгрузит полученный билет в текущую сессию пользователя Barsik.
Билет получен и загружен, Barsik пробует ещё раз авторизоваться на контроллере домена как Adadmin.
И на этот раз у него это успешно получается.
Pass The Ticket (PTT)
Данная атака похожа на Overpass-the-hash/Pass-the-key, атакующий старается получить билет доменного пользователя (желательно имеющего максимальные привилегии в домене) и загрузить его в текущую сессию. Один из способов получения TGT билетов — дамп билетов локально на текущей доменной машине из процесса lsass.exe
(Local Security Authentication Server). Чтобы это сделать, необходимо иметь привилегии локального администратора, а лучше NT AUTHORITY/SYSTEM. Rubeus может выгрузить билеты, хранящиеся в lsass, с помощью «экшена» dump, а «экшен» triage покажет, какие билеты хранятся в системе на данный момент.
Rubeus выгружает билеты из lsass
в кодировке base64
, при этом в самом инструменте есть заметка, как сохранить полученный base64
билет в формате .kirbi
.
Сохраним и импортируем билет в текущую сессию пользователя.
Как видно из скриншота, тикет ADadmin успешно загружен и мы можем посмотреть содержимое диска C на контроллере домена DC-16.meow.local
от имени ADadmin.
Unconstrained Delegation
Unconstrained Delegation (неограниченное делегирование) — это привилегия в домене, которая может быть предоставлена учетным записям пользователей или компьютеров. Она позволяет учетной записи проходить проверку подлинности на сервисе в сети от имени другой учетной записи.
Вот теперь пришло время немного «подкрутить» тестовый стенд и включить неограниченное делегирование: дадим привилегию неограниченного делегирования компьютеру BARSCOMP.
Один из этапов проведения тестирования безопасности домена Active Directory — поиск учетных записей с включенным делегированием, обычно для этих целей используют Powerview, но можно и вручную, используя стандартный модуль ActiveDirectory.
Для проведения данной атаки я воспользуюсь Printer Bug, который подробно описал Lee Christensen из SpecterOps. Любой прошедший проверку пользователь может удаленно подключиться к серверу печати контроллера домена и запросить обновление новых заданий на печать, сказав ему отправить уведомление учетной записи с неограниченным делегированием. Lee Christensen написал приложение SpoolSample, которое производит обращение к службе печати на КД по протоколу MS-RPRN.
На компьютере, с которого будет проводится атака (BARSCOMP.meow.local), необходимо запустить Rubeus в режиме мониторинга, используя «экшен» monitoring
. Данный режим требует привилегий NT ATHORITY/SYSTEM и «слушает» новые билеты TGT/TGS в процессе lsass. Я установлю аргументом /interval:1
(в секундах) интервал опроса lsass на наличие новых билетов, и аргументом /filteruser:DC-16$
установлю фильтр отображения только билетов пользователя DC-16$.
Rubeus запущен, параллельно в другой сессии запускаю SpoolSample.exe с аргументами dc-16.meow.local
(атакуемая машина) и barscomp.meow.local
(наш «слушающий» хост).
Посмотрим, что «намониторил» Rubeus.
Пойман TGT билет учетной записи контроллера домена. Теперь можно, используя уже известную Pass-the-ticket атаку, импортировать билет и с помощью mimikatz провести атаку DCSync, чтобы получить NTLM-хэш учетной записи krbtgt (а как вы уже знаете из первой части статьи, хэш этой учетной записи можно использовать для создания Golden Ticket и полного захвата домена AD).
Обратите внимание, что Rubeus понимает билеты как в виде .kirbi файла, так и в строке закодированной base64.
Сonstrained Delegation
Если злоумышленнику удалось скомпрометировать учетную запись пользователя или компьютера, для которого включено ограниченное делегирование, то он может выдать себя за любого пользователя домена и выполнить аутентификацию в службе, к которой разрешено делегирование.
Создадим нового доменного пользователя Backup с паролем B@ckup1234, присвоим ему SPN для службы cifs на контроллере домена.
Теперь можно установить для этой учетной записи возможность делегирования служб ldap и cifs на контроллере домена DC-16.meow.local.
Определить учетные записи, которым разрешено ограниченное делегирование, можно также с помощью Powerview или модуля ActiveDirectory.
Зная пароль или NTLM-хэш учетной записи meow.local\Backup, с помощью Rubeus можно запросить билет TGT для неё.
Теперь, используя «экшен» s4u в Rubeus можно запросить TGS для пользователя, которому разрешена аутентификация на сервисе cifs\dc-16.meow.local (например, администратору домена ADadmin).
Здесь я указываю полученный ранее билет учетной записи Backup; /impersonateuser — пользователя, права которого хочу получить; /domain — домен, в котором всё происходит; /msdsspn /asltservice — сервис, для которого нужен TGS; /ptt — сразу импортировать полученный билет в текущую сессию.
Вот что происходит в Rubeus:
Здесь можно заметить, что при ограниченном делегировании включаются 2 расширения Kerberos: это S4U2self и S4U2proxy.
S4U2self позволяет участникам службы запросить специальный TGS с флагом FORWARDABLE к себе от имени конкретного пользователя. Это нужно для того, чтобы данный билет в дальнейшем мог использоваться расширением S4U2proxy.
S4U2proxy позволяет вызывающей стороне использовать этот специальный билет, чтобы запросить TGS пользователя для службы, к которой разрешено делегирование (в данном случае cifs\dc-16.meow.local). Более подробно об этом можно прочитать здесь и здесь.
В это время Rubeus уже получил финальный тикет и импортировал его в текущую сессию.
Проверим, получится ли посмотреть диск C на контроллере домена с полученным билетом.
Да, всё прошло успешно.
На этом я заканчиваю обзор на данный инструмент, в целом мне он понравился, приятный и простой в использовании, с хорошим функционалом. Надеюсь, и вы после прочтения данных статей возьмёте его на вооружение.
Спасибо за внимание, всем добра, не болейте!