
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 - Pbvf2019NTLM-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.
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 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.
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:
- Braten
- Angriff über ACL
- Kerberos-Delegation
- Missbrauch von Gruppenrichtlinienobjektberechtigungen
Braten
Diese Art von Angriff zielt auf das Kerberos-Protokoll ab. Es gibt zwei Arten von Angriffen wie Braten:
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
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:
- Der Benutzer wird zu den erforderlichen Gruppen hinzugefügt.
- Den ACLs des Domänenobjekts werden zwei ACEs (Replizieren von Verzeichnisänderungen und Replizieren von Verzeichnisänderungen ALL) hinzugefügt.
- Wenn Sie mit dem Dienstprogramm Mimikatz Rechte an DCSync haben, wird der Kennwort-Hash des Benutzers krbtgt angefordert (Standardeinstellung).
- 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:
- Unbegrenzt (uneingeschränkte Delegation). Die einzige Delegierungsoption vor Windows Server 2003
- Eingeschränkte Delegierung seit Windows Server 2003
- 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.

- 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.
- 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.
- Der Benutzer fordert ein TGS-Ticket an, um auf den Webservice auf dem Webserver zuzugreifen.
- Der Domänencontroller stellt ein TGS-Ticket bereit.
- Der Benutzer sendet TGT- und TGS-Tickets an den Webserver.
- Das Webserver-Dienstkonto verwendet das TGT-Ticket des Benutzers, um ein TGS-Ticket für den Zugriff auf den Datenbankserver anzufordern.
- 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:
Ticket Export:

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:
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 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.