![](https://habrastorage.org/webt/au/zu/5f/auzu5ftics2dqztbmgob5xcrvfm.png)
Всем привет!
Это вторая часть статьи про возможности инструмента проведения атак на протокол Kerberos — Rubeus. Первую можно прочитать тут. В этот раз мы рассмотрим, как с помощью данного инструмента возможно реализовать следующие атаки:?
- Overpass The Hash/Pass The Key (PTK);
- Pass The Ticket;
- Unconstrained Delegation;
- Constrained Delegation.
О том, почему возможны эти атаки, какие механизмы их реализации существуют, какой принцип лежит в основе работы Kerberos, написано уже много (например, коллеги из Инфосистемы Джет опубликовали хорошую статью с разбором), поэтому в своем материале я сделаю упор на реализацию атак с помощью Rubeus.
Помимо «экшенов» для проведения атак и взаимодействия с Kerberos, в Rubeus есть небольшая приятная мелочь: на основании пароля в открытом виде он может посчитать NTLM хэш, что иногда бывает очень удобно и полезно.
![](https://habrastorage.org/webt/ch/kg/rz/chkgrzp39w9n9crzqrogziblktu.jpeg)
На этом небольшое лирическое отступление закончено, вернемся к основной части.
Тестовый стенд для проведения атак остался без изменений с момента выхода первой части статьи .
Overpass The Hash/Pass The Key (PTK)
Материал из Википедии — свободной энциклопедииНо что делать, если в сети отключена аутентификация по протоколам NTLM или LM и используется только аутентификация Kerberos, а у вас есть хэш пароля? Здесь в игру вступает Overpass-the-hash — с помощью имеющегося хэша пароля пользователя Rubeus может запросить билет TGT для данной учетной записи.
Атака Pass-the-hash — один из видов атаки повторного воспроизведения. Она позволяет атакующему авторизоваться на удалённом сервере, аутентификация на котором осуществляется с использованием протокола NTLM или LM.
Вот доменный пользователь Barsik решил изучить вопросы информационной безопасности, где-то раздобыл хэш пароля администратора домена ADadmin, скачал Rubeus, прочитал умных статей и пробует применить это на практике.
![](https://habrastorage.org/webt/nr/hy/ru/nrhyruvkvj2ysnoyqmg2y-38p-8.jpeg)
Видим, что кэшированных билетов у него нет, как и нет доступа к контроллеру домена
DC-16.meow.local
, но дальше Barsik запускает Rubeus с «экшеном» asktgt
и аргументами /domain, /user, /rc4, /ptt
, чтобы на основании имеющегося хэша пароля учетной записи ADadmin получить валидный TGT билет, аргумент /ptt
сразу подгрузит полученный билет в текущую сессию пользователя Barsik.![](https://habrastorage.org/webt/u1/q-/yb/u1q-ybulumwetfyci6xxcynm094.jpeg)
Билет получен и загружен, Barsik пробует ещё раз авторизоваться на контроллере домена как Adadmin.
![](https://habrastorage.org/webt/t6/-o/ud/t6-oudjllveytteq5rhnz3wqmpw.jpeg)
И на этот раз у него это успешно получается.
Pass The Ticket (PTT)
Данная атака похожа на Overpass-the-hash/Pass-the-key, атакующий старается получить билет доменного пользователя (желательно имеющего максимальные привилегии в домене) и загрузить его в текущую сессию. Один из способов получения TGT билетов — дамп билетов локально на текущей доменной машине из процесса
lsass.exe
(Local Security Authentication Server). Чтобы это сделать, необходимо иметь привилегии локального администратора, а лучше NT AUTHORITY/SYSTEM. Rubeus может выгрузить билеты, хранящиеся в lsass, с помощью «экшена» dump, а «экшен» triage покажет, какие билеты хранятся в системе на данный момент.![](https://habrastorage.org/webt/vc/lf/0n/vclf0nmiruy1leqh8yxumriejyu.jpeg)
![](https://habrastorage.org/webt/kf/0h/wm/kf0hwm6p_ik77r5k8-7imjbfpvm.jpeg)
Rubeus выгружает билеты из
lsass
в кодировке base64
, при этом в самом инструменте есть заметка, как сохранить полученный base64
билет в формате .kirbi
.![](https://habrastorage.org/webt/hn/r_/p_/hnr_p_dxmg03oqwj2h0zb3e-u5q.jpeg)
Сохраним и импортируем билет в текущую сессию пользователя.
![](https://habrastorage.org/webt/df/hg/wm/dfhgwm9lqfnus0kvrmyzkp_4yyk.jpeg)
Как видно из скриншота, тикет ADadmin успешно загружен и мы можем посмотреть содержимое диска C на контроллере домена
DC-16.meow.local
от имени ADadmin.Unconstrained Delegation
Unconstrained Delegation (неограниченное делегирование) — это привилегия в домене, которая может быть предоставлена учетным записям пользователей или компьютеров. Она позволяет учетной записи проходить проверку подлинности на сервисе в сети от имени другой учетной записи.
Вот теперь пришло время немного «подкрутить» тестовый стенд и включить неограниченное делегирование: дадим привилегию неограниченного делегирования компьютеру BARSCOMP.
![](https://habrastorage.org/webt/bp/vc/0b/bpvc0bytc7xnrsqsjxyut9uh7lo.jpeg)
Один из этапов проведения тестирования безопасности домена Active Directory — поиск учетных записей с включенным делегированием, обычно для этих целей используют Powerview, но можно и вручную, используя стандартный модуль ActiveDirectory.
![](https://habrastorage.org/webt/z-/rr/q5/z-rrq5prktxkfowq7djeckbcyfw.jpeg)
Для проведения данной атаки я воспользуюсь 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$.![](https://habrastorage.org/webt/nm/bw/dl/nmbwdlo2s84j-ofjygfa23fp2_s.jpeg)
Rubeus запущен, параллельно в другой сессии запускаю SpoolSample.exe с аргументами
dc-16.meow.local
(атакуемая машина) и barscomp.meow.local
(наш «слушающий» хост).![](https://habrastorage.org/webt/wk/ir/ec/wkirecjx0z9thtgwomqcl4nbrui.jpeg)
Посмотрим, что «намониторил» Rubeus.
![](https://habrastorage.org/webt/hr/cz/nu/hrcznuugxrsg7_8xmxrksjo9fgc.jpeg)
Пойман TGT билет учетной записи контроллера домена. Теперь можно, используя уже известную Pass-the-ticket атаку, импортировать билет и с помощью mimikatz провести атаку DCSync, чтобы получить NTLM-хэш учетной записи krbtgt (а как вы уже знаете из первой части статьи, хэш этой учетной записи можно использовать для создания Golden Ticket и полного захвата домена AD).
![](https://habrastorage.org/webt/hx/t0/qv/hxt0qvkg8emcdwjwedtyy214msa.jpeg)
Обратите внимание, что Rubeus понимает билеты как в виде .kirbi файла, так и в строке закодированной base64.
Сonstrained Delegation
Если злоумышленнику удалось скомпрометировать учетную запись пользователя или компьютера, для которого включено ограниченное делегирование, то он может выдать себя за любого пользователя домена и выполнить аутентификацию в службе, к которой разрешено делегирование.
Создадим нового доменного пользователя Backup с паролем B@ckup1234, присвоим ему SPN для службы cifs на контроллере домена.
![](https://habrastorage.org/webt/nx/_a/2n/nx_a2nx2gxxxuoaa-wu3ucfnhr8.jpeg)
Теперь можно установить для этой учетной записи возможность делегирования служб ldap и cifs на контроллере домена DC-16.meow.local.
![](https://habrastorage.org/webt/jp/og/2o/jpog2of4z2auwdsxfoxcgse9pk4.jpeg)
Определить учетные записи, которым разрешено ограниченное делегирование, можно также с помощью Powerview или модуля ActiveDirectory.
![](https://habrastorage.org/webt/ui/6v/ge/ui6vgefmnggsi-jbmaxpskieutu.jpeg)
Зная пароль или NTLM-хэш учетной записи meow.local\Backup, с помощью Rubeus можно запросить билет TGT для неё.
![](https://habrastorage.org/webt/z8/mm/kj/z8mmkjv0qg1xgwocdkyupv0rvgm.jpeg)
Теперь, используя «экшен» s4u в Rubeus можно запросить TGS для пользователя, которому разрешена аутентификация на сервисе cifs\dc-16.meow.local (например, администратору домена ADadmin).
![](https://habrastorage.org/webt/0t/5w/k5/0t5wk51b96mqyb5ekbsozz1jmmy.jpeg)
Здесь я указываю полученный ранее билет учетной записи Backup; /impersonateuser — пользователя, права которого хочу получить; /domain — домен, в котором всё происходит; /msdsspn /asltservice — сервис, для которого нужен TGS; /ptt — сразу импортировать полученный билет в текущую сессию.
Вот что происходит в Rubeus:
![](https://habrastorage.org/webt/cs/iu/7s/csiu7s_wpl9zus6etti-mdh1vgm.jpeg)
Здесь можно заметить, что при ограниченном делегировании включаются 2 расширения Kerberos: это S4U2self и S4U2proxy.
S4U2self позволяет участникам службы запросить специальный TGS с флагом FORWARDABLE к себе от имени конкретного пользователя. Это нужно для того, чтобы данный билет в дальнейшем мог использоваться расширением S4U2proxy.
S4U2proxy позволяет вызывающей стороне использовать этот специальный билет, чтобы запросить TGS пользователя для службы, к которой разрешено делегирование (в данном случае cifs\dc-16.meow.local). Более подробно об этом можно прочитать здесь и здесь.
В это время Rubeus уже получил финальный тикет и импортировал его в текущую сессию.
![](https://habrastorage.org/webt/9r/d1/23/9rd123rt5c-tc_l-rv4uzozka9a.jpeg)
Проверим, получится ли посмотреть диск C на контроллере домена с полученным билетом.
![](https://habrastorage.org/webt/kc/p0/x8/kcp0x8uqrbvt0afl-udz49wl4rw.jpeg)
Да, всё прошло успешно.
На этом я заканчиваю обзор на данный инструмент, в целом мне он понравился, приятный и простой в использовании, с хорошим функционалом. Надеюсь, и вы после прочтения данных статей возьмёте его на вооружение.
Спасибо за внимание, всем добра, не болейте!