Введение
Как правило, домен на базе Active Directory обладает значительным количеством объектов, свойств и связей между ними. В общем случае «вручную» выявить недостатки в настройке домена и на их основе построить вероятный вектор атаки является довольно трудоемкой задачей и справится с ней без вспомогательных программных средств не представляется возможным.
В настоящем материале будет представлен обзор некоторых программных средств, использующихся для автоматизированного построения вероятных атак в домене. Кроме того, будут рассмотрены некоторые подходы к улучшению уже имеющихся решений, а также предложен собственный алгоритм к выявлению наиболее приоритетных целей атак.
Важно отметить, что материал рассчитан на читателя, обладающего опытом по тестированию на проникновение Active Directory.
Имеющиеся решения
На момент написания статьи в общем доступе имеется множество инструментов по анализу недостатков настроек Active Directory. Например:
- Bloodhound
- Jackdaw
- Adalanche
- Pingcastle
- Purple Knight
- StandIn
- zBang
- ADRecon
- AD-control-paths
- AttackSurfaceAnalyzer
Если грубо, то принцип работы инструментов заключается в сборе информации об исследуемом домене по протоколу LDAP. Как правило инструменты содержат ряд типовых запросов, проверяющих наличие определенного недостатка или небезопасной настройки. В дальнейшем, полученные ответы представляются для анализа специалисту.
Собранные результаты могут быть представлены в интерактивном виде (BloodHound, Adalanche, Jackdaw). В этом случае инструмент обладает графической оболочкой к некоторой базе данных с возможностью выполнения уточняющих запросов со стороны специалиста.
Другим способом представления результатов является статический сгенерированный отчет (PingCastle, Purple Knight).
Существует небезосновательное мнение, что защищающиеся мыслят списками, а атакующие мыслят графами, и пока так – последние будут побеждать.
Поэтому особой популярностью пользуются именно интерактивные инструменты, отображающие результат запросов в виде графа. На практике одним из наиболее удобных и полезных из интерактивных инструментов считается BloodHound. К его преимуществам можно отнести наличие активного сообщества пользователей, возможность расширения функционала, а также удобный интерфейс. Фактически без BloodHound не обходится ни одно тестирование на проникновение домена на базе Active Directory. Именно поэтому далее основное внимание будет уделено этому средству.
Тем не менее некоторые из других представленных инструментов также заслуживают внимания. Особенно актуально использование альтернативных средств с точки зрения перекрестной проверки получаемых результатов.
Разумеется самым лучшим способом для оценки инструмента является “метод мачете”, то есть просто начать пользоваться, пусть даже по началу и не особо вдаваясь в детали. Рекомендую попробовать применить указанный метод к Jackdaw и Adalanche.
Часть 1. Улучшения Bloodhound
Далее рассмотрим некоторые способы расширения возможностей 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
, можно в следующих источниках:
- Официальная документация Neo4j по Cypher
- Bloodhound: Intro To Cypher - более подробно о языке запросов
- BloodHound Cypher Cheatsheet- строковые и графовые запросы
- mgeeky - множество группированных запросов
Добавление новых сущностей
По умолчанию в BloodHound обрабатывается информация, добытая с помощью штатного сборщика - SharpHound. Тем не менее архитектура программы позволяет добавлять новые сущности: объекты, атрибуты объектов, а также связи.
Прежде чем выявлять какие-либо векторы атак целесообразно максимально наполнить пространство возможных вариантов, то есть собрать и загрузить в BloodHound как можно больше информации.
Certipy
Рассмотрим один из актуальных примеров добавления новых сущностей в 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-подобных инструментов, например GoWitness.
На “сетевом” уровне следует оценивать доступность объекта с точки зрения правил разграничения сетевого доступа. Проверить доступность можно следующими двумя способами:
- проанализировав настройки правил в конфигурационных файлах телекоммуникационного оборудования
- выполнив сканирование
В плане сетевого сканирования особо интересен инструмент 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
, которая позволяет скомпрометировать не отдельную систему, а домен целиком.
Cписки контроля доступа
Вопрос улучшения Bloodhound интересует и других отечественных исследователей. Не так давно Дмитрий Неверов опубликовал три статьи на эту тему.
В одной из статей “Расширение списка ACE для BloodHound” показывается, как добавить в BloodHound следующие новые ребра:
- WriteGPLink
- WriteGPOptions
- WriteSAMAccountName
- WriteUserAccountControl
- WriteTSInitialProgram
- WriteScriptPath
Рекомендую ознакомиться со статьями Дмитрия целиком. Cреди прочего в его материалах раскрыт технический процесс внедрения новых сущностей в BloodHound.
Отмечу, что список рассмотренных в статье прав, можно дополнить расширенным правом DS-Validated-Write-Computer
, позволяющим проводить атаку ShadowCredentials.
Локальные администраторы
В другой статье BloodHound: групповые политики и локальный администратор Дмитрий Неверов показывает, как и откуда добавить в BloodHound учетные записи локальных администраторов.
От себя могу заметить, что учетные записи локальных администраторов также могут быть подобраны перебором или извлечены из SYSVOL.
Аутентификационные данные
В качестве аутентификационных данных можно рассматривать связку названия домена, идентификатора учетной записи и либо пароля в открытом виде, либо NT-хеша пароля.
Анализ паролей и NT-хешей полезен при выборе наиболее подходящих целей для атак методом распыления паролей. Автоматизация указанной идеи описана в статье Неверова “BloodHound и результаты атаки PasswordSpray”.
Также выявление одинаковых паролей рассматривается в статьях:
- Representing Password Reuse in BloodHound
- Case Study: Password Analysis with BloodHound
- Expanding the Hound: Introducing Plaintext Field to Compromised Accounts
В последней статье для загрузки паролей предлагается использовать утилиту CrackHound. Альтернативная утилита - add-spw из Max.
Кроме того, анализ аутентификационных данных можно проводить на предмет выявления разных учетных записей, принадлежащих одному и тому же пользователю. Подробнее почитать об этом можно в статье: Exploring Users With Multiple Accounts In BloodHound.
В рассмотренных примерах авторы оперируют паролями или их NT-хешами, но можно пойти еще дальше и добавить NTLM v1 хеши.
Получение NTLM v1 хеша пароля к некоторой учетной записи равноценно получению доступа к указанной учетной записи ввиду возможности проведения атаки методом полного перебора за приемлемое время на соответствующем оборудовании (до 2 суток на ферме из 8 RTX 2080).
Разбор атак на NTLM v1 выходит за рамки настоящего материала. Отмечу, что в ряде случаев, когда не получается использовать радужные таблицы, важным становится вопрос выделения наиболее приоритетных хешей для брута. Именно тогда может пригодиться расширение объектов BloodHound новым атрибутом, отображающим наличие NTLM v1 хеша.
Пользовательские сервисные учетные записи
Еще один примитив, который может быть добавлен в 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”.
Ранее уже были кратко затронуты некоторые примеры объектов первоначального доступа. Для большего порядка и централизации информации приведу расширенный перечень объектов, которые могут рассматриваться в качестве отправных точек:
- Учетные записи, подверженные атаке asreproasting или kerberoasting (в ряде случаев)
- Учетные записи с паролями в описании или в материалах общедоступных утечек информации, а также сетевых папок
- Учетные записи, подверженные атаке методом распыления пароля
- Машинные учетные записи с предустановленными паролями (Diving into Pre-Created Computer Accounts, Diving Deeper Into Pre-created Computer Accounts, pre2k)
- Системы, обладающие критическими уязвимостями
- Учетные записи, позволяющие атакующему узнать NTLM v1 хеш от своих паролей
- Системы, позволяющие анонимное подключение
- Системы cо сторонними сервисами, позволяющими подобрать учетную запись и получить доступ (ssh, базы данных, vnc, web порталы и т.д.)
- Пользовательские учетные записи имеющие словарные пароли и позволяющие атакующему узнать NTLM v2 от хеш своих паролей
- Учетные записи, добытые при анализе защищенности Wi-Fi, основанного на WPA2 Enterprise
- Учетные записи, добытые из принтеров
- Системы, подверженные MouseJack
Выгрузка отчетов
Некоторые утилиты используют, обрабатываемые в BloodHound данные, для выпуска статических отчетов. Познакомимся с двумя из них ближе.
PlumHound
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
- “Streamlining BloodHound Analytics”
- “Jupyter Notebooks for BloodHound Analytics and Alternative Visualizations”
Прочие дополнения
Также для общего развития приведу ряд утилит, которые не получилось отнести к какому-либо разделу ранее.
- ADExplorerSnapshot.py - конвертер снимка состояния домена, сделанного с помощью AD Explorer, в JSON файл импортируемый BloodHound.
- ldd2bh- конвертер ldapdomaindump в формат BloodHound, может пригодиться при релей атаках.
- ACLPwn- старый скрипт для автоматизации эксплуатации уязвимостей, выявленных в BloodHound
- Max- утилита, включающая в себя ряд различных модулей, часть из которых не была рассмотрена ранее
- FoxTerrier
- BofHound
Рекомендации по противодействию BloodHound
Чтобы затруднить атакующему проведение разведки с помощью BloodHound следует минимизировать сбор сведений, которые он может получить. Для этого можно:
- Ограничить доступ к списку сессий пользователей.
- Запретить выгрузку перечня пользователей и групп из Active Directory по протоколу SAMRPC.
- Отключить анонимные учетные записи
- Исключить группу “Authenticated Users” из группы “pre-Windows 2000 compatible access” - источник
Промежуточный итог первой части
Из рассмотренного ранее материала следуют выводы:
- BloodHound можно обогатить множеством новых атрибутов, объектов и связей
- “обогащённый” BloodHound можно дополнить новыми запросами
- на основе запросов можно строить автоматизированные отчеты или интерактивные визуализации
Часть 2. Управление векторами атак
Как было показано ранее, BloodHound содержит множество данных, на основе которых можно строить вероятные вектора компьютерных атак. Управление указанными векторами позволяет решать различные задачи.
С одной стороны защищающиеся могут проактивно определить наиболее вероятно атакуемые объекты домена с целью первоочередного устранения уязвимостей и недостатков в настройке указанных объектов.
С другой стороны атакующие могут выявить наиболее приоритетные цели для проведения компьютерных атак с целью дальнейшего продвижения или закрепления в домене.
Создатели BloodHound разумеется не оставили без внимания такое перспективное направления для развития своего инструмента и выпустили на его основе полноценный продукт BloodHound Enterprise.
На официальном сайте BloodHound присутствует множество маркетинговых лозунгов и это нормально для сайта платного продукта. Тем не менее кроме пестрых заголовков авторы BloodHound написали ряд статей на тему управления векторами атак:
- The Attack Path Management Manifesto
- 3 Foundational Pillars for Attack Path Management: Pillar 1 — Continuous & Comprehensive Mapping
- 3 Foundational Pillars for Attack Path Management: Pillar 2 — Empirical Impact Assessment
- Attack Path Management Pillars: Part 3 —Practical AD Security Remediation Guidance
Важно отметить, что BloodHound Enterprise обладает моделью распространения Software-as-a-Service, что в совокупности с отсутствием общедоступной пробной версии, не позволяет оценить этот продукт рядовому исследователю. Если у кого-то есть возможность предоставить доступ к интерфейсу BloodHound Enterprise, то буду признателен.
Прежде чем выпустить платную версию, создатели BloodHound уже пробовали использовать его для управления векторами атак:
- Introducing the Adversary Resilience Methodology — Part One
- Introducing the Adversary Resilience Methodology — Part Two
Кроме того, некоторые исследователи смотрели на граф BloodHound с точки зрения анализа возможного распространения атакующего, в частности вредоносной программы вымогателя:
- BloodHound versus Ransomware: A Defender’s Guide
- Extending BloodHound: Track and Visualize Your Compromise
- Adversary Resilience Via Least Privilege Networking - Part 1
- Adversary Resilience Via Least Privilege Networking – Part 2
- Ransomulator
Значимые объекты
Одним из ключевых вопросов при исследовании векторов атак является выявление наиболее значимых объектов.
Для лучшего понимания приведу следующее нестрогое определение: наиболее значимый объект - объект, захват которого вносит существенный вклад в дальнейшее развитие векторов атак.
Некоторые подходы к определению указанных объектов и оценки их значимости предпринимаются на практике, например в следующих инструментах:
Также на момент написания настоящего материала был опубликован цикл статей:
Не будем заострять внимание на разборе каждого из представленных инструментов. Отмечу, что предложенные в них подходы к оценкам имеют место, но видятся мне относительно грубыми. На этом моменте у меня появилось желание изобрести свой велосипед.
Предлагаемый подход к оценке значимости
Для начала более формализовано опишу задачу. Имеется взвешенный мультиорграф, отображающий вероятные вектора атак в домене Active Directory, построенные от объектов первоначального доступа до заданной особо привилегированной цели, например группы “Domain Admins”. Требуется определить меру значимости каждого, входящего в указанный мультиорграф элемента с точки зрения атакующей или защищающей стороны.
На практике построить наиболее полный мультиорграф, выделить объекты первоначального доступа, а также распределить веса ребер возможно с помощью способов, рассмотренных ранее в первой части.
В ходе поиска решения, кроме Kangal и GoodHound, была также рассмотрена целесообразность использования встроенных в neo4j алгоритмов центральности. Учитывая, что настоящий материал не претендует на публикацию в журнале “Science”, без строгих сравнений и разных выкладок просто отмечу, что личная чуйка говорила, что можно найти нечто лучше.
В итоге самой интересной и перспективной мне показалась идея, основанная на электрических цепях. Про нечто подобное можно почитать в диссертации “Математические модели ранжирования вершин в графах коммуникационных сетей”.
Чуть более подробнее расскажу о предлагаемой идее. Для иллюстрации рассмотрим следующий надуманный пример:
Учетная запись, подверженная атаке AS-REP roasting, выступает в качестве точки первоначального доступа, а DC - особо привилегированная цель.
Для примера составим таблицу с весами:
Название | Вес |
---|---|
“может зайти по RDP” | 40 |
“является админом” | 5 |
“входит” | 1 |
“имеет сессию” | 50 |
“DCSync” | 5 |
Далее полученный граф преобразовывается в электрическую схему по следующим правилам:
- Точки первоначального доступа преобразуются в источники ЭДС (тока). Также в качестве улучшения имеет смысл также составить отдельную таблицу для различных классов объектов первоначального доступа, в которой в зависимости от вероятности захвата указанных объектов ставить в соответствие различные напряжения.
- Ребро перехода преобразуются в резистор, последовательно соединенный с диодом. Величина сопротивления прямо пропорциональна весу ребра. Диод необходим для учета свойства ориентированности графа.
- Особо привилегированная цель преобразуется в заземление.
В результате получившуюся долю величины тока, проходящего через выбранный объект, от общего количества поданной величины тока, можно считать мерой значимости указанного объекта.
Тем, кто знаком с правилами Кирхгофа, преимущества предлагаемого подхода должны быть очевидны.
C помощью программы Multisim была смоделирована электрическая схема с учетом предложенных преобразований:
В рассматриваемом случае, мера значимости верхних объектов составляет 56.5 единиц, а нижних 43.5. Таким образом, с точки зрения атакующего верхний путь на 13 процентов предпочтительнее нижнего. Разумеется это всего лишь иллюстрирующий пример и на практике схемы получаются куда сложнее.
Автоматизировать построение и расчёт электрических схем на языке Python можно с помощью модуля ltspice.
Немного лирики. Ток стремится идти по пути наименьшего сопротивления. Уместна аналогия с водой которая стекает со склона с разными углами наклона. Природа сама строит наиболее подходящий маршрут, а если по нему и так уже течет предостаточно, то вода все равно найдет другой путь.
Итоговый граф, содержащий посчитанные оценки значимости, можно выгрузить в общепринятом формате (graphml) и визуализировать с помощью различных сторонних инструментов. В этом плане хорошо себя показал yEd, в котором, в частности, нетрудно установить соотношение между толщиной линии и количеством тока, проходящего по эквивалентной схеме.
Для примера тестовый граф, приведенный ниже:
Преобразуется в следующую интерактивную визуализацию:
Заключение
Представленный материал не содержит готового решения, а скорее включает множество полезных ссылок для самостоятельного изучения и вдохновения. Тем не менее ряд из рассмотренных идей могут быть полезны специалистам, желающим усовершенствовать свои подходы к анализу небезопасных конфигураций Active Directory.
Также в завершении был предложен и кратко описан свой собственный алгоритм оценки значимости объектов Active Directory с точки зрения атакующих и защищающих.