„Account is sensitive and cannot be delegated“ Option für privilegierte Accounts
Eine von vielen Maßnahmen zur Sicherung von (hoch-)privilegierten AD Accounts ist es, die Option Account is sensitive and cannot be delegated für die betroffenen Accounts zu aktivieren um sicherzustellen, dass die Credentials dieser Accounts nicht von einer vertrauenswürdigen Anwendung an einen anderen Computer oder Service weitergeleitet werden können. Diese Funktion, die einer Anwendung erlaubt „im Auftrag“ eines Benutzers zu authentifizieren (Kerberos Delegation) ist normalerweise für Admin Accounts nicht erforderlich – für solche Anwendungsfälle sollten immer möglichst niedrig-privilegierte Service Accounts angelegt und verwendet werden.
Die Konfiguration führt man über eine administrative PowerShell mit AD Modulen aus.
Import-Module ActiveDirectory
Als Erstes geben wir alle AD Accounts mit Anmeldenamen und DN nach ihrem Delegation Status aus.
Get-ADUser -Filter {AccountNotDelegated -eq $false} | Format-Table sAMAccountName,DistinguishedName,AccountNotDelegated # User Credentials können für Kerberos Delegation verwendet werden Get-ADUser -Filter {AccountNotDelegated -eq $true} | Format-Table sAMAccountName,DistinguishedName,AccountNotDelegated # User Credentials können nicht für Kerberos Delegation verwendet werden
In der Regel sind Admin Accounts in einer eigenen OU separiert von unprivilegierten Usern. Entsprechend lässt sich die Abfrage auch einschränken.
$OU = 'OU=Admins,OU=Privileged Objects,DC=lab,DC=local' Get-ADUser -Filter {AccountNotDelegated -eq $false} -SearchBase $OU | Format-Table sAMAccountName,DistinguishedName,AccountNotDelegated # User Credentials können für Kerberos Delegation verwendet werden Get-ADUser -Filter {AccountNotDelegated -eq $true} -SearchBase $OU | Format-Table sAMAccountName,DistinguishedName,AccountNotDelegated # User Credentials können nicht für Kerberos Delegation verwendet werden
Optional lassen sich alle User mit aktiver Delegation ausgeben, die durch AdminSDHolder geschützt sind.
Get-ADUser -Filter {(AdminCount -eq 1) and (AccountNotDelegated -eq $false)} | Format-Table sAMAccountName,DistinguishedName,AccountNotDelegated
Sehr schön ist auch die Möglichkeit, alle User mit aktivierter Kerberos Delegation zu ermitteln und zu prüfen, ob diese in einer High Privilege Group Mitglied sind. In der Microsoft Gallery gibt es hierzu ein PowerShell Modul, welches heruntergeladen und importiert werden muss (Download Link am Ende des Beitrags).
. .\Test-ADUserHighPrivilegeGroupMembership.ps1 Get-ADUser -Filter {AccountNotDelegated -eq $true} | Test-ADUserHighPrivilegeMembership
Um die Delegation Möglichkeit zu unterbinden, suche ich mir nun alle Accounts im Scope meiner Admin-OU heraus und setzte das Attribut.
$OU = 'OU=Admins,OU=Privileged Objects,DC=lab,DC=local' Get-ADUser -Filter {AccountNotDelegated -eq $false} -SearchBase $OU | ForEach-Object { Set-ADUser -Identity $_ -AccountNotDelegated $true }
Eine andere Alternative ist z.B. das Deaktivieren der Delegation für alle Mitglieder einer Admin Gruppe:
Get-ADGroupMember -Identity "<Admin-Group-Name>" | ForEach-Object { Set-ADUser -Identity $_ -AccountNotDelegated $true }
Und auch hier wieder die AdminSDHolder geschützten User:
Get-ADUser -Filter {(AdminCount -eq 1) and (AccountNotDelegated -eq $false)} | ForEach-Object { Set-ADUser -Identity $_ -AccountNotDelegated $true }
Quellen:
https://gallery.technet.microsoft.com/scriptcenter/Test-ADUserHighPrivilegeGro-7660b3a4
Downloads:
Test-ADUserHighPrivilegeGroupMembership
Interessanter Artikel.
Der Link https://gallery.technet.microsoft.com/scriptcenter/Test-ADUserHighPrivilegeGro-7660b3a4 funktioniert nicht mehr.
D. Emmermacher