Совет
Данный скрипт можно использовать и для других проверок установки, в реестре необходимо только изменить ключевое слово поиска.
Запустим скрипт и после получения результатов загрузим их в базу 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 (