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

Совет

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

Запустим скрипт и после получения результатов загрузим их в базу BloodHound (рис. 4.41):

..\GetRightsAssessments.ps1

Get-RigthsAssesment

..\neo4j_uploaddata.ps1

UploadData -file.\RigthsAssesment_25032024024435.log


Рис. 4.41. Результат запуска скриптов


Добавление новых связей в BloodHound

Вне зависимости от выбора связей их необходимо добавить в BloodHound для отображения. Поэтому заходим в каталог

src
и открываем файл
AppContainer.jsx
, находим массив
fullEdgeList
и добавляем связи:

const fullEdgeList = [

'CreateUser'
,

'SharePasswordWith'
,

'SeMachineAccount',

'SeRestore',

'SeTcb',

'SeBackup',

'SeCreateToken',

'SeCreateGlobal',

'SeDebug',

'SeImpersonate',

'SeLoadDriver',

'SeTakeOwnership',

'SeAssignPrimaryToken',

'SeRemoteInteractiveLogonRight',

'SeInteractiveLogonRight'

];

Сохраняем файл и открываем файл

index.js
в том же каталоге, находим строчку
global.appStore
, двигаемся до
edgeScheme
и добавляем:

global.appStore = {

dagre: true,

edgeScheme:{

SharePasswordWith:'tapered'
,

SeEnableDelegation:'tapered',

SeMachineAccount:'tapered',

SeRestore:'tapered',

SeTcb:'tapered',

SeBackup:'tapered',

SeCreateToken:'tapered',

SeCreateGlobal:'tapered',

SeDebug:'tapered',

SeImpersonate:'tapered',

SeLoadDriver:'tapered',

SeTakeOwnership:'tapered',

SeAssignPrimaryToken:'tapered',

SeRemoteInteractiveLogonRight:'tapered',

SeInteractiveLogonRight:'tapered'

},


Находим строчку

lowResPalette и в edgeScheme
добавляем:

lowResPalette:{

edgeScheme:{

CreateUser:'line',

SharePasswordWith:'line'
,

SeEnableDelegation:'line',

SeMachineAccount:'line',

SeRestore:'line',

SeTcb:'line',

SeBackup:'line',

SeCreateToken:'line',

SeCreateGlobal:'line',

SeDebug:'line',

SeImpersonate:'line',

SeLoadDriver:'line',

SeTakeOwnership:'line',

SeAssignPrimaryToken:'line',

SeRemoteInteractiveLogonRight:'line',

SeInteractiveLogonRight:'line'

},

Находим строчку

if (typeof conf.get('edgeincluded')
и там тоже добавляем наши связи:

if (typeof conf.get('edgeincluded') === 'undefined') {

conf.set('edgeincluded', {

SetPassword: true,

CreateUser: true,

SharePasswordWith: true,

SeEnableDelegation: true,

SeMachineAccount: true,

SeRestore: true,

SeTcb: true,

SeBackup: true,

SeCreateToken: true,

SeCreateGlobal: true,

SeDebug: true,

SeImpersonate: true,

SeLoadDriver: true,

SeTakeOwnership: true,

SeAssignPrimaryToken: true,

SeRemoteInteractiveLogonRight: true,

SeInteractiveLogonRight: true

});

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

npm run build: win32

Запустим обновленную версию BloodHound и проверим, какие пользователи какие имеют права. Для этого запустим в Raw Query следующий Cypher-запрос:

MATCH p=(n)-[r]->(m) WHERE r.isright = TRUE RETURN p


Рис. 4.42. Результат выполнения запроса


Подпись SMB (SMB Signing)

Подпись SMB (SMB Signing) – это механизм, который используется в протоколе SMB для обеспечения целостности и аутентификации сообщений между клиентом и сервером. Подпись SMB предотвращает атаки Relay.

В большинстве случаев администраторы будут настраивать подпись SMB через групповые политики, следовательно, самый простой способ обнаружить машины, на которых установлена подпись, – это найти

EnableSecuritySignature.
Если значение стоит в 1, то подпись включена. То же самое будет с параметром
RequireSecuritySignature
.


Сбор информации

Сбор информации происходит аналогично с предыдущим разделом.

Get-ChildItem -Path \\dc\SYSVOL\domain.local\Policies\ -Recurse -ea SilentlyContinue -Include ('*.inf')| Select-String -Pattern "EnableSecuritySignature"|ForEach-Object {$name = $_.Path; $name; Get-Content $name;""}| Out-File Signed.txt

Внимание

В результатах будет показан GUID

6AC1786C-016F-11D2–945F-00C04fB984F9
, он относится к групповой политике Default Domain Controllers Policy, на контроллерах домена подпись SMB включена по умолчанию.

Поиск с помощью PowerView:

(Get-GptTmpl -GptTmplPath "\\dc\SYSVOL\windomain.local\Policies\{6AC1786C-016F-11D2–945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf" -OutputObject).RegistryValues|fl

Запрос Cypher добавления к хосту свойства

smbsighing
будет выглядеть следующим образом:

MATCH (c: Computer) WHERE c.name = "COMP1@DOMAIN.LOCAL" SET c.smbsighing = TRUE

Внимание

Если добавлять через powershell-скрипт, то лучшим вариантом будет использовать не имя, а

SID
.

Для автоматизации процесса с помощью Powershell воспользуемся скриптом, описанным в предыдущем разделе. Назовем его

SMBSigningGPO.ps1.
Немного изменим алгоритм:

● Получить все inf-файлы, где есть строка

EnableSecuritySignature
.

● С помощью функции

Get-IniContent
разобрать по циклу полученные inf-файлы.

● Выбрать интересующую настройку реестра.

● Сравнить второе значение из свойств реестра.

● Сформировать строку Cypher.

function Invoke-SMBSigningGPO()

{

# Создание файла отчета

[string]$OutFile = "SMBSigning.log"

$DomainName = "domain.local"

$DC = "dc"

# Поиск во всех inf-файлах строки EnableSecuritySignature

$GPOs = Get-ChildItem -Path \\$DC\SYSVOL\$DomainName\

Policies\ -Recurse -ea SilentlyContinue -Include (