Идём по киберследу: Анализ защищенности Active Directory c помощью утилиты BloodHound — страница 46 из 46

",

"query": "MATCH (n: Domain) RETURN n.name ORDER BY n.name DESC"

},

{

"final":true,

"query": "MATCH (c: CA) WHERE c.attributesubjectaltname2 = 'Enabled' AND c.domain = $result RETURN c",

"allowCollapse":true

}

]

},

{

"name": "ESC7",

"category": "ADCS Paths",

"queryList":[

{

"final":false,

"title": "Select a Domain…",

"query": "MATCH (n: Domain) RETURN n.name ORDER BY n.name DESC"

},

{

"final":true,

"query": " MATCH p=allshortestpaths((m)-[r: MemberOf|ManageCA|ManageCertificates*1..]->(n: CA)) WHERE m<>n AND n.domain = $result RETURN p",

"allowCollapse":true

}

]

},

{

"name": "ESC8",

"category": "ADCS Paths",

"queryList":[

{

"final":false,

"title": "Select a Domain…",

"query": "MATCH (n: Domain) RETURN n.name ORDER BY n.name DESC"

},

{

"final":true,

"query": "MATCH (c: CA) WHERE c.webenrollement = 'Enabled' AND c.domain = $result RETURN c",

"allowCollapse":true

}

]

},

{

"name": "ESC9 & ESC10 only template",

"category": "ADCS Paths",

"queryList":[

{

"final":false,

"title": "Select a Domain…",

"query": "MATCH (n: Domain) RETURN n.name ORDER BY n.name DESC"

},

{

"final":true,

"query": "MATCH p=(t: Template)-[r: HostedOn]->(c: CA) WHERE t.nosecurityextension = TRUE AND t.domain = $result RETURN c",

"allowCollapse":true

}

]

},

{

"name": "ESC11",

"category": "ADCS Paths",

"queryList":[

{

"final":false,

"title": "Select a Domain…",

"query": "MATCH (n: Domain) RETURN n.name ORDER BY n.name DESC"

},

{

"final":true,

"query": "MATCH (c: CA) WHERE c.enforceencrypticertrequest = 'Disabled' AND c.domain = $result RETURN c",

"allowCollapse":true

}

]

}

Совет

Рекомендуется собирать приложение после каждого добавленного блока, это избавит от поиска ошибок во всем коде, если вдруг что-то пойдет не так.

Сохраняем измененный файл и собираем приложение:

npm run build: win32

После сборки запустим обновленную версию BloodHound и перейдем во вкладку Analysis:


Рис. 4.86. Встроенные запросы для работы с шаблонами сертификатов


Добавление фильтров для запросов

Ранее в разделе Добавление атрибутов с правами

WriteProperty
мы уже добавляли фильтры для запросов, теперь то же самое сделаем для ADCS.

Открываем файл

EdgeFilter.jsx
, расположенный в
\src\components\SearchContainer\EdgeFilter
, находим
div
, где расположен
MS Graph App Roles
, и в него добавляем следующий код:

title='ADCS'

edges={[

'CanEnroll',

'CanAutoEnroll',

'WriteProperty',

'RequestCertificates',

'ManageCA',

'ManageCertificates',

'Read',

'HostedOn',

]}

sectionName='adcs'

/>

Сохраняем измененный файл и собираем приложение:

npm run build: win32

Запускаем обновленную версию BloodHound. Нажимаем на фильтр и в результате видим, что появился новый раздел ADCS (рис 4.87).


Рис. 4.87. Добавленные фильтры


Добавление статистики

Заключительным штрихом будет добавление статистики во вкладку Database Info. Для этого откроем файл

DatabaseDataDisplay.jsx,
который находится в директории
src\components\SearchContainer\Tabs.
Находим раздел
ONPREM
OBJECTS
и после статистики о групповых политиках добавляем запросы о центрах сертификации и шаблонах сертификатов:

query={'MATCH (n: GPO) RETURN count(n) AS count'}

index={index}

label={'GPOs'}

/>

query={'MATCH (n: CA) RETURN count(n) AS count'}

index={index}

label={'CAs'}

/>

query={'MATCH (n: Template) RETURN count(n) AS count'}

index={index}

label={'Certificate Templates'}

/>

Сохраним измененный файл и соберем наше приложение:

npm run build: win32

Запускаем обновленную версию BloodHound. Переходим во вкладку Database Info и можем наблюдать добавленную статистику по центрам сертификации и шаблонам сертификации.


Рис. 4.88. Статистика


Вместо заключения

BloodHound и neo4j предоставляют огромные возможности для анализа данных. И хотя в книге были рассмотрены только некоторые объекты инфраструктуры, их количество зависит только от фантазии.

В книге были рассмотрены различные примеры улучшения BloodHound, начиная с создания новых меток и связей и заканчивая добавлением новых интерфейсов в управление.