Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


powershell:active-directory:ps-script-to-get-list-of-all-accounts-with-kerberos-unconstrained-delegation

Powershell скрипт для получения списка всех учётных записей с Kerberos Unconstrained Delegation в домене Active Directory

В рамках аудита безопасности в домене Active Directory бывает полезно получить перечень всех учётных записей разных типов, имеющих включённое делегирование. Особенно в этом контексте интересны учётные записи с полным делегированием Kerberos (Unconstrained Delegation).

Представленный ниже скрипт позаимствован из статьи "Microsoft Learn : Get rid of accounts that use Kerberos Unconstrained Delegation" и позволяет получить соответствующий перечень учётных записей.

Перед запуском скрипта необходимо изменить переменную $DN, указав путь в каталоге Active Directory (в формате distinguishedName) к корневому контейнеру, в рамках которого нужно выполнять поиск.

[CmdletBinding()]
Param
(
# start the search at this DN. Default is to search all of the domain.
[string]$DN = "OU=SUB,DC=my,DC=domain,DC=com"
)
 
$SERVER_TRUST_ACCOUNT = 0x2000
$TRUSTED_FOR_DELEGATION = 0x80000
$TRUSTED_TO_AUTH_FOR_DELEGATION= 0x1000000
$PARTIAL_SECRETS_ACCOUNT = 0x4000000
$bitmask = $TRUSTED_FOR_DELEGATION -bor $TRUSTED_TO_AUTH_FOR_DELEGATION -bor $PARTIAL_SECRETS_ACCOUNT
 
# LDAP filter to find all accounts having some form of delegation.
# 1.2.840.113556.1.4.804 is an OR query.
$filter = @"
(&
(servicePrincipalname=*)
(|
(msDS-AllowedToActOnBehalfOfOtherIdentity=*)
(msDS-AllowedToDelegateTo=*)
(UserAccountControl:1.2.840.113556.1.4.804:=$bitmask)
)
(|
(objectcategory=computer)
(objectcategory=person)
(objectcategory=msDS-GroupManagedServiceAccount)
(objectcategory=msDS-ManagedServiceAccount)
)
)
"@ -replace "[\s\n]", ''
 
$propertylist = @(
"servicePrincipalname",
"useraccountcontrol",
"samaccountname",
"msDS-AllowedToDelegateTo",
"msDS-AllowedToActOnBehalfOfOtherIdentity"
)
Get-ADObject -LDAPFilter $filter -SearchBase $DN -SearchScope Subtree -Properties $propertylist -PipelineVariable account | ForEach-Object {
$isDC = ($account.useraccountcontrol -band $SERVER_TRUST_ACCOUNT) -ne 0
$fullDelegation = ($account.useraccountcontrol -band $TRUSTED_FOR_DELEGATION) -ne 0
$constrainedDelegation = ($account.'msDS-AllowedToDelegateTo').count -gt 0
$isRODC = ($account.useraccountcontrol -band $PARTIAL_SECRETS_ACCOUNT) -ne 0
$resourceDelegation = $account.'msDS-AllowedToActOnBehalfOfOtherIdentity' -ne $null
 
$comment = ""
if ((-not $isDC) -and $fullDelegation) {
$comment += "WARNING: full delegation to non-DC is not recommended!; "
}
if ($isRODC) {
$comment += "WARNING: investigation needed if this is not a real RODC; "
}
if ($resourceDelegation) {
# to count it using PS, we need the object type to select the correct function... broken, but there we are.
$comment += "INFO: Account allows delegation FROM other server(s); "
}
if ($constrainedDelegation) {
$comment += "INFO: constrained delegation service count: $(($account.'msDS-AllowedToDelegateTo').count); "
}
 
[PSCustomobject] @{
samaccountname = $account.samaccountname
objectClass = $account.objectclass
uac = ('{0:x}' -f $account.useraccountcontrol)
isDC = $isDC
isRODC = $isRODC
fullDelegation = $fullDelegation
constrainedDelegation = $constrainedDelegation
resourceDelegation = $resourceDelegation
comment = $comment
}
} | Out-Gridview

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



Проверено на следующих конфигурациях:

Версия ОС Версия PowerShell
Microsoft Windows Server 2016 Standard 10.0.14393 (Build 14393) PowerShell 5.1.14393.5127

Автор первичной редакции:
Алексей Максимов
Время публикации: 15.12.2022 16:44

Обсуждение

Ваш комментарий:
 
powershell/active-directory/ps-script-to-get-list-of-all-accounts-with-kerberos-unconstrained-delegation.txt · Последнее изменение: 15.12.2022 16:44 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki