Всем привет!

Это вторая часть статьи про возможности инструмента проведения атак на протокол 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 на контроллере домена с полученным билетом.



Да, всё прошло успешно.

На этом я заканчиваю обзор на данный инструмент, в целом мне он понравился, приятный и простой в использовании, с хорошим функционалом. Надеюсь, и вы после прочтения данных статей возьмёте его на вооружение.

Спасибо за внимание, всем добра, не болейте!