BloodHound — це один із найзручніших інструментів для аналізу Active Directory, який допомагає помічати ризиковані зв’язки та слабкі налаштування у домені. Покращена робота з даними, нові можливості візуалізації та додаткові сценарії аналізу роблять його ще кориснішим як для фахівців з безпеки, так і для початківців. У статті розповідається, які саме удосконалення допомагають побачити більше проблем у AD та спростити роботу з інструментом.
Як правило, домен на базі Active Directory має значну кількість об’єктів, властивостей та зв’язків між ними. У загальному випадку «вручну» виявити недоліки в налаштуванні домену і на їх основі побудувати ймовірний вектор атаки є досить трудомістким завданням і впоратися з нею без допоміжних програмних засобів неможливо.
У цьому матеріалі буде представлений огляд деяких програмних засобів, що використовуються для автоматизованого побудови можливих атак у домені. Крім того, будуть розглянуті деякі підходи до покращення вже наявних рішень, а також запропоновано власний алгоритм виявлення найпріоритетніших цілей атак.
Важливо, що матеріал розрахований на читача, який має досвід з тестування на проникнення Active Directory.
На момент написання статті в загальному доступі є безліч інструментів аналізу недоліків налаштувань Active Directory. Наприклад:
Якщо грубо, то принцип роботи інструментів полягає у збиранні інформації про досліджуваний домен протоколу LDAP. Як правило, інструменти містять ряд типових запитів, які перевіряють наявність певного недоліку або небезпечного налаштування. Надалі отримані відповіді надаються для аналізу фахівця.
Зібрані результати можуть бути представлені в інтерактивному вигляді (BloodHound, Adalanche, Jackdaw). У цьому випадку інструмент має графічну оболонку до деякої бази даних з можливістю виконання уточнюючих запитів з боку фахівця.
Іншим способом подання результатів є статичний звіт, що згенерував (PingCastle, Purple Knight).
Існує небезпідставна думка, що ті, хто захищається, мислять списками, а атакуючі мислять графами, і поки так – останні перемагатимуть.
Тому особливу популярність мають саме інтерактивні інструменти, що відображають результат запитів у вигляді графа. На практиці одним із найбільш зручних та корисних з інтерактивних інструментів вважається BloodHound. До його переваг можна віднести наявність активної спільноти користувачів, можливість розширення функціоналу та зручний інтерфейс. Фактично без BloodHound не обходиться жодне тестування проникнення домену з урахуванням Active Directory. Саме тому основна увага буде приділена цьому засобу.
Проте деякі з інших представлених інструментів також заслуговують на увагу. Особливо актуальним є використання альтернативних засобів з погляду перехресної перевірки одержуваних результатів.
Зрозуміло найкращим способом для оцінки інструменту є “метод мачете”, тобто просто почати користуватися, нехай навіть спочатку і не особливо вдаючись в деталі. Рекомендую спробувати застосувати зазначений метод до Jackdaw та Adalanche.


Далі розглянемо деякі засоби розширення можливостей BloodHound.
BloodHound представляє графічну оболонку для роботи з базою даних Neo4j. Запити до бази Neo4j бувають:
“графові” – результат представляє граф, який може бути відображений у додатку BloodHound.
“Консольні” – результат представляє таблицю з рядками, яку можна подивитися в Neo4j Browser. В інтерфейсі BloodHound працювати із зазначеними запитами не можна.
BloodHound дозволяє фахівцю додати в інтерфейс власні найчастіше використовувані графові запити. Для цього необхідно зберегти зазначені запити у визначеному форматі у файл customqueries.json.
У Windows цей файл зберігається наступним шляхом:
C:\Users[USERNAME]\AppData\Roaming\BloodHound\customqueries.json
У Linux:
~/.config/bloodhound/customqueries.json
Подивитися приклади додаткових запитів користувача, а також ознайомитися зі структурою файлу customqueries.json, можна в наступних джерелах:
Bloodhound: Intro To Cypher – докладніше про мову запитів
BloodHound Cypher Cheatsheet – строкові та графові запити
mgeeky – безліч групованих запитів
За замовчуванням у BloodHound обробляється інформація, здобута за допомогою штатного збирача – SharpHound. Тим не менш, архітектура програми дозволяє додавати нові сутності: об’єкти, атрибути об’єктів, а також зв’язки.
Перш ніж виявляти будь-які вектори атак, доцільно максимально наповнити простір можливих варіантів, тобто зібрати і завантажити в BloodHound якомога більше інформації.
Розглянемо один із актуальних прикладів додавання нових сутностей у BloodHound.
Влітку 2021 року була опублікована знакова стаття Certified Pre-Owned:Abusing Active Directory Certificate Services. В результаті публікації арсенал фахівців із тестування на проникнення збагатився безліччю нових методів атак, пов’язаних з експлуатацією небезпечних налаштувань центрів сертифікації.
Згодом з’явилися програмні засоби, що автоматизують пошук та експлуатацію вразливих налаштувань. Один із зазначених засобів під назвою Certipy має модуль збору інформації, що має можливість інтеграції з BloodHound.
У результаті BloodHound можуть бути додатково завантажені такі дані:
налаштування центрів сертифікацій
шаблони для випуску сертифікатів
Також за допомогою Certipy до BloodHound додаються нові зв’язки (“enroll”, “ManageCA” тощо) між стандартними та новими об’єктами. Більш того, автор Certipy також створив власну версію BloodHound, щоб красиво відображати нові сутності, тобто відобразити їх іконки та вкладку з властивостями, що з’являється при виділенні об’єкта.



Крім того, для зручної роботи з отриманими даними Certipy передбачено перелік типових запитів до BloodHound.

Важливо, що при всій своїй пишності Certipy іноді надає неправильну інформацію. Це пов’язано з неправильною перевіркою прав доступу до шаблонів сертифікатів. У цьому плані краще орієнтуватися на PingCastle, в якому аналіз налаштувань виконується коректно.
Використовувані джерела:
Certipy 2.0: BloodHound, New Escalations, Shadow Credentials, Golden Certificates, and more!
Certipy 4.0: ESC9 & ESC10, BloodHound GUI, New Authentication and Request Methods – and more!
З розглянутого раніше прикладу, видно що BloodHound можна самостійно додати підтримку абсолютно нових сутностей.
Повний розбір додавання нових сутностей виходить за межі цього матеріалу. Тим не менш, для більш досвідчених читачів позначу напрямок, що дозволяє розібратися у питанні.
Рекомендую взяти дві наступні версії BloodHound:
Далі за допомогою WInMerge потрібно порівняти вказані версії між собою. В результаті порівняння буде видно, де і як потрібно підправити програмний код. Залишається всього за аналогією внести необхідні зміни і заново скомпілювати програму.
Загалом базових знань у програмуванні достатньо, щоб розібратися, як додати абсолютно новий об’єкт у BloodHound.
Продовжимо розглядати ідеї для збагачення BloodHound новими сутностями.
Насамперед варто відзначити, що BloodHound працює з інформацією “адміністративного” рівня, тобто з атрибутами об’єктів домену. Проте можна додати інші рівні: “прикладний” та “мережевий”.
“Прикладний” рівень містить інформацію про програмне забезпечення, що використовується. По суті додавання об’єктів на прикладному рівні зводиться до інструментального сканування щодо наявності критичних уразливостей.
Допустимо один із серверів домену схильний до MS17-10. У цьому випадку має сенс відзначити зазначений сервер, як захоплений і подальшу побудову векторів атак проводити з урахуванням нової початкової точки.
Також на прикладному рівні можна виділяти веб-програми для подальшого пошуку вразливостей або перебору облікових записів. Здійснити вказаний пошук можна за допомогою Witness-подібних інструментів, наприклад GoWitnes.
На ” мережному ” рівні слід оцінювати доступність об’єкта з погляду правил розмежування мережного доступу. Перевірити доступність можна двома способами:
проаналізувавши налаштування правил у конфігураційних файлах телекомунікаційного обладнання
виконавши сканування
У плані мережевого сканування особливо цікавий інструмент cornershot. Однією з відмінних рис зазначеного інструменту є можливість перевірки доступності мережі вузла Б з боку вузла Ц, перебуваючи на вузлі А.
Таким чином, в результаті аналізу “мережевого” рівня можна зменшити кількість хибних векторів, наприклад:
є ребро “CanRDP”, але за фактом по RDP підключитися не можна
є критична вразливість, але відсутній мережевий доступ до служби, необхідної для експлуатації вразливості
Спроба реалізувати розглянуті підходи здійснювалася в інструментах BlueHound, ShotHound.

Також можна пошукати системи з кількома мережевими інтерфейсами:
За допомогою наведених інструментів можна виявити мережний доступ у сторонні підмережі, наприклад, технологічні.
Той факт, що Sharphound збирає безліч інформації з групових політик домену, не означає, що більше нічого цікавого в них знайти не вийде.
У 2020 році Riccardo Ancarani написав чудову статтю ” Extending BloodHound Part 1 – GPOs and User Right Assignment”, в якій розповідається, як доповнити BloodHound інформацією про наявність критичних привілеїв у користувачів домену.
Справа в тому, що групові політики можуть використовуватися для призначення привілеїв, у тому числі “небезпечних”, наприклад:
SeAssignPrimaryToken
SeBackupPrivilege
SeCreateTokenPrivilege
SeDebugPrivilege
SeImpersonatePrivilege
SeLoadDriverPrivilege
SeRestorePrivilege
SeTakeOwnershipPrivilege
SeTcbPrivilege
Володіння будь-яким із зазначених привілеїв дозволяє користувачеві успішно локально підвищити свої права до рівня системи. Докладніше про експлуатацію зазначених привілеїв можна переглянути в доповіді “Show me your privileges and I will lead you to SYSTEM”
У BloodHound граф атаки, що вийшов, виглядає наступним чином:
Крім того, важливо виділити привілей SeEnableDelegationPrivilege, який дозволяє скомпрометувати не окрему систему, а домен цілком.
Питання покращення Bloodhound цікавить і інших вітчизняних дослідників. Нещодавно Дмитро Неверов опублікував три статті на цю тему.
В одній із статей “Розширення списку ACE для BloodHound” показується, як додати до BloodHound наступні нові ребра:
WriteGPLink
WriteGPOptions
WriteSAMAccountName
WriteUserAccountControl
WriteTSInitialProgram
WriteScriptPath
Рекомендую ознайомитись із статтями Дмитра цілком. Серед іншого в його матеріалах розкрито технічний процес впровадження нових сутностей у BloodHound.
Зазначу, що список розглянутих у статті прав можна доповнити розширеним правом DS-Validated-Write-Computer, що дозволяє проводити атаку ShadowCredentials.
Ще один примітив, який може бути доданий в BloodHound – ребро, що свідчить про використання облікового запису користувача як сервісної на певній системі. За словами автора, у 2/3 випадків вдається отримати пароль у відкритому вигляді до вказаного облікового запису зі сховища секретів LSA.
Для створення вказаного ребра можна використовувати утиліту add-spns з Max.
Розглянемо наступні два результати запиту на пошук найкоротшого шляху до адміністраторів домену:


З точки зору BloodHound другий шлях виглядає кращим, оскільки він коротший ніж перший. Насправді навпаки, перший шлях представляє послідовність вкладених груп, тобто ніяких зусиль для доступу до групи “Domain Admins” робити не треба. На другому шляху потрібно виконання додаткових умов, зокрема “User B” після входу RDP має якимось чином підвищити свої права на “CALABDC.HACKERS.LAB”.
Наведений приклад добре ілюструє таку думку: “різні ребра графа мають різні характеристики, які ніяк не враховуються в BloodHound”.
Як характеристики можна розглядати такі параметри:
складність переходу по ребру з погляду реалізації практично
скритність експлуатації
Визначившись із категоріями характеристик, фахівець повинен вручну задати вагові параметри для кожного з можливих ребер графа. За підсумком виходить така таблиця:
Чим гірше проявляється властивість, тим вища вага. Відразу зазначу, що завдання розподілу терезів зводиться до експертної оцінки фахівця.
Після розподілу ваги для подальшої роботи необхідно скласти відповідні запити. За промовчанням BloodHound не враховує ваги при пошуку найкоротших шляхів. Для використання в Neo4j алгоритмів пошуку найменших відстаней у виваженому графі слід підключити бібліотеку Graph Data Science.
Докладніше питання застосування вагових коефіцієнтів описується у статті Not All Paths are Created Equal.
Детальніше ознайомитися з поняттям багаторівневої архітектури безпеки можна за наступними посиланнями:
Запис трансляції у форматі тестової співбесіди
Mitigate Credential theft with Administrative Tier Model – копія статті з офіційної документації Microsoft
Стосовно BloodHound існує інструмент ImproHound, за допомогою якого можна розподілити всі об’єкти домену між трьома рівнями.
Після закінчення розподілу інструмент здійснює пошук шляхів між об’єктами нижчих рівнів до об’єктів вищого рівня та подає результат у вигляді csv таблиці.
Як альтернативне рішення, але вже без прив’язки до BloodHound, можна розглянути програму Forest Druid.
При побудові векторів атак важливо визначити об’єкти початкового доступу. Надалі пошук векторів здійснюється у припущенні про наявність контролю над зазначеними об’єктами. У BloodHound еквівалентом об’єкта початкового доступу можна вважати мітку “owned”.
Раніше вже було коротко порушено деякі приклади об’єктів первинного доступу. Для більшого порядку та централізації інформації наведу розширений перелік об’єктів, які можуть розглядатися як відправні точки:
Облікові записи, схильні до атаки якпроастування або kerberoasting (у ряді випадків)
Облікові записи з паролями в описі або матеріалах загальнодоступних витоків інформації, а також мережевих папок
Облікові записи, схильні до атаки методом розпилення пароля
Машинні облікові записи з встановленими паролями ( Diving into Pre-Created Computer Accounts , Diving Deeper)
Системи, що мають критичні вразливості
Облікові записи, що дозволяють атакуючому дізнатися NTLM v1 хеш від своїх паролів
Системи, що дозволяють анонімне підключення
Системи зі сторонніми сервісами, що дозволяють підібрати обліковий запис та отримати доступ (ssh, бази даних, vnc, web портали і т.д.)
Облікові записи користувача мають словникові паролі і дозволяють атакуючому дізнатися NTLM v2 від хеш своїх паролів
Облікові записи, отримані під час аналізу захищеності Wi-Fi, заснованого на WPA2 Enterprise
Облікові записи, отримані з принтерів
Системи, схильні до MouseJack
Деякі утиліти використовують дані, що обробляються в BloodHound, для випуску статичних звітів. Познайомимося із двома з них ближче.
PlumHound дозволяє значно спростити випуск додатків до звітів. Ось лише деякі з розділів, які можуть бути складені з використанням зазначеної утиліти:
перелік застарілих операційних систем із зазначенням DNS імен
перелік сесій користувачів
перелік облікових записів, що піддаються атаці Kerberoasting

Важливо, що програма розрахована на додавання довільних запитів користувача. Таким чином, PlumHound може бути використана для роботи з новими сутностями.
Доцільність аналізу вивантаження NT-хешів користувачів домену є досить дискусійним питанням. Думки фахівців щодо цього різняться, але якщо проводити зазначений аналіз, то варто звернути увагу на інструмент DPAT-max.
Як вступні дані DPAT-max приймає potfile Hashcat, перелік облікових записів з NT-хешами у форматі pwdump, а також логін і пароль до BloodHound.
Підсумковий звіт має такі розділи:

Докладніше ознайомитися з можливостями та пристроєм DPAT-max можна у блозі автора зазначеної утиліти: Max: BloodHound Domain Password Audit Tool.
У наступних статтях розповідається про додаткові способи візуалізації відомостей, зібраних для BloodHound, у тому числі з використанням Jupyter Notebooks:
“Visualizing BloodHound Data with PowerBI” частина 1 , частина 2
“Jupyter Notebooks for BloodHound Analytics and Alternative Visualizations”

Також для загального розвитку наведу ряд утиліт, які не вдалося віднести до якогось розділу раніше.
ADExplorerSnapshot.py – конвертер знімка стану домену, зробленого за допомогою AD Explorer в JSON файл імпортований BloodHound.
ldd2bh – конвертер ldapdomaindump у формат BloodHound, може стати в нагоді при релей атаках.
ACLPwn – старий скрипт для автоматизації експлуатації вразливостей, виявлених у BloodHound
Max – утиліта, що включає ряд різних модулів, частина з яких не була розглянута раніше
Щоб утруднити атакуючому проведення розвідки за допомогою BloodHound, слід мінімізувати збір відомостей, які він може отримати. Для цього можна:
Обмежити доступ до списку сесій користувачів.
Заборонити вивантаження переліку користувачів та груп з Active Directory за протоколом SAMRPC.
Вимкнути анонімні облікові записи
Виключити групу “Authenticated Users” із групи “pre-Windows 2000 compatible access”
З розглянутого раніше матеріалу випливають висновки:
BloodHound можна збагатити безліччю нових атрибутів, об’єктів та зв’язків
“збагачений” BloodHound можна доповнити новими запитами
на основі запитів можна створювати автоматизовані звіти або інтерактивні візуалізації
Як було показано раніше, BloodHound містить безліч даних, на основі яких можна будувати ймовірні вектори комп’ютерних атак. Управління зазначеними векторами дозволяє вирішувати різноманітні завдання.
З одного боку, що захищаються, можуть проактивно визначити найбільш ймовірно атаковані об’єкти домену з метою першочергового усунення вразливостей і недоліків у налаштуванні зазначених об’єктів.
З іншого боку, атакуючі можуть виявити найбільш пріоритетні цілі для проведення комп’ютерних атак з метою подальшого просування або закріплення в домені.
Творці BloodHound, зрозуміло, не залишили поза увагою такий перспективний напрямок для розвитку свого інструменту і випустили на його основі повноцінний продукт BloodHound Enterprise.

На офіційному сайті BloodHound є безліч маркетингових гасел і це нормально для сайту платного продукту. Проте крім строкатих заголовків автори BloodHound написали низку статей на тему управління векторами атак:
3 Foundational Pillars for Attack Path Management: Pillar 1 — Continuous & Comprehensive Mapping
3 Фундаційні Pillars для Attack Path Management: Pillar 2 — Empirical Impact Assessment
Важливо відзначити, що BloodHound Enterprise має модель поширення Software-as-a-Service, що в сукупності з відсутністю загальнодоступної пробної версії, не дозволяє оцінити цей продукт рядовому досліднику. Якщо хтось має можливість надати доступ до інтерфейсу BloodHound Enterprise, то буду вдячний.

Перш ніж випустити платну версію, творці BloodHound вже намагалися використовувати його для управління векторами атак:
Крім того, деякі дослідники дивилися на граф BloodHound з погляду аналізу можливого поширення атакуючого, зокрема шкідливої програми здирника:
Adversary Resilience Via Least Privilege Networking – Part 1
Adversary Resilience Via Least Privilege Networking – Part 2
Однією з ключових питань щодо векторів атак є виявлення найбільш значущих об’єктів.
Для кращого розуміння наведу таке несуворе визначення: найбільш значущий об’єкт – об’єкт, захоплення якого робить істотний внесок у розвиток векторів атак.
Деякі підходи до визначення зазначених об’єктів та оцінки їхньої значущості робляться на практиці, наприклад, у наступних інструментах:



Також на момент написання цього матеріалу було опубліковано цикл статей:
Не загострюватимемо увагу на розборі кожного з представлених інструментів. Зазначу, що запропоновані у них підходи до оцінок мають місце, але бачаться мені відносно грубими. На цьому моменті в мене виникло бажання винайти свій велосипед.
Для початку формалізованіше опишу завдання. Існує зважений мультиорграф, що відображає ймовірні вектори атак в домені Active Directory, побудовані від об’єктів початкового доступу до заданої особливо привілейованої мети, наприклад групи Domain Admins. Потрібно визначити міру значущості кожного, що входить у вказаний мультиорграф елемента з точки зору сторони, що атакує або захищає.
Насправді побудувати найповніший мультиорграф, виділити об’єкти початкового доступу, і навіть розподілити ваги ребер можна з допомогою способів, розглянутих раніше у частині.
У ході пошуку рішення, крім Kangal та GoodHound, була також розглянута доцільність використання вбудованих у neo4j алгоритмів центральності. Враховуючи, що справжній матеріал не претендує на публікацію в журналі Science, без суворих порівнянь і різних викладок просто зазначу, що особиста чуйка говорила, що можна знайти щось краще.
У результаті найцікавішою і найперспективнішою мені здалася ідея, заснована на електричних ланцюгах. Щось подібне можна почитати у дисертації “Математичні моделі ранжування вершин у графах комунікаційних мереж”.
Трохи докладніше розповім про запропоновану ідею. Для ілюстрації розглянемо наступний надуманий приклад:
Обліковий запис, підданий атаці AS-REP roasting, виступає як точка початкового доступу, а DC – особливо привілейована мета.
Наприклад складемо таблицю з вагами:
Далі отриманий граф перетворюється на електричну схему за такими правилами:
Точки початкового доступу перетворюються на джерела ЕРС (струму). Також як поліпшення має сенс скласти окрему таблицю для різних класів об’єктів початкового доступу, в якій в залежності від ймовірності захоплення зазначених об’єктів ставити у відповідність різні напруги.
Ребро переходу перетворюються на резистор, послідовно з’єднаний з діодом. Розмір опору прямо пропорційна вазі ребра. Діод необхідний обліку якості орієнтованості графа.
Особливо привілейована мета перетворюється на заземлення.
В результаті частку величини струму, що проходить через обраний об’єкт, від загальної кількості поданої величини струму, можна вважати мірою значимості зазначеного об’єкта.
Тим, хто знайомий з правилами Кірхгофа, переваги запропонованого підходу мають бути очевидними. За допомогою програми Multisim було змодельовано електричну схему з урахуванням запропонованих перетворень:
У цьому випадку, міра значимості верхніх об’єктів становить 56.5 одиниць, а нижніх 43.5. Таким чином, з точки зору атакуючого верхній шлях на 13 відсотків краще нижнього. Зрозуміло це лише ілюструючий приклад і практично схеми виходять значно складніше.
Автоматизувати побудову та розрахунок електричних схем мовою Python можна за допомогою модуля ltspice.
Небагато лірики. Струм прагне йти шляхом найменшого опору. Доречна аналогія з водою, яка стікає зі схилу з різними кутами нахилу. Природа сама будує найбільш підходящий маршрут, а якщо ним і так уже тече достатньо, то вода все одно знайде інший шлях.
Підсумковий граф, що містить пораховані оцінки значущості, можна вивантажити у загальноприйнятому форматі (graphml) та візуалізувати за допомогою різних сторонніх інструментів. У цьому плані добре себе показав yEd, в якому, зокрема, неважко встановити співвідношення між товщиною лінії та кількістю струму, що проходить за еквівалентною схемою.
Наприклад тестовий граф, наведений нижче:
Перетворюється на наступну інтерактивну візуалізацію:
Представлений матеріал не містить готового рішення, а скоріше включає безліч корисних посилань для самостійного вивчення та натхнення. Тим не менш, ряд з розглянутих ідей можуть бути корисні фахівцям, які бажають удосконалити свої підходи до аналізу небезпечних конфігурацій Active Directory.
Також на завершення було запропоновано та коротко описано свій власний алгоритм оцінки значущості об’єктів Active Directory з точки зору атакуючих та захищаючих.