
FrĂŒher oder spĂ€ter, wĂ€hrend des Pentests, besteht die Aufgabe darin, den gesamten Wald zu gefĂ€hrden - vorausgesetzt, es gibt Rechte in einer der DomĂ€nen. In solchen Momenten stellen sich viele Fragen zu Trusts, ihren Eigenschaften und den Angriffen selbst. Lassen Sie uns versuchen, alles herauszufinden.
Vertrauen zwischen DomÀnen wird verwendet, um Benutzer einer DomÀne auf dem Controller einer anderen DomÀne zu authentifizieren. Mit anderen Worten, damit Benutzer aus DomÀne A Zugriff auf die Ressourcen von DomÀne B haben können. Es gibt zwei Arten von DomÀnenstrukturen:
- DomÀnenbÀume
- DomÀnenwÀlder.

Beim Erstellen eines DomĂ€nenbaums zwischen DomĂ€nen werden standardmĂ€Ăig transitive Vertrauensstellungen eingerichtet. Alle Computer haben gemeinsame:
- globaler Katalog
- Namespace
- Schema.
DomÀnenbÀume können zu WÀldern zusammengefasst werden. Beim Erstellen einer DomÀnengesamtstruktur werden transitive Vertrauensstellungen eingerichtet, und alle Computer in der Gesamtstruktur haben Folgendes gemeinsam:
Die folgende Tabelle zeigt die Vertrauensarten zwischen DomÀnen und ihre Eigenschaften.
In der folgenden Abbildung sind die Arten von Vertrauensstellungen zwischen DomÀnen deutlicher dargestellt.

TransitivitÀt
TransitivitĂ€t ist erforderlich, um das Vertrauen auĂerhalb der beiden DomĂ€nen zu definieren, zwischen denen es gebildet wurde, und wird verwendet, um Vertrauensbeziehungen mit anderen DomĂ€nen zu erweitern. Wenn wir der DomĂ€ne eine untergeordnete DomĂ€ne hinzufĂŒgen, wird eine wechselseitige Vertrauensbeziehung zwischen der ĂŒbergeordneten und der untergeordneten DomĂ€ne hergestellt. Diese Beziehungen sind transitiv, d.h. Wenn DomĂ€ne A DomĂ€ne D und DomĂ€ne D DomĂ€ne E vertraut, vertraut DomĂ€ne A auch DomĂ€ne E.

Nichttransitives Vertrauen kann verwendet werden, um das Vertrauen in andere DomÀnen zu verweigern.
Richtung
Ein Vertrauensstellungspfad ist eine Reihe von Vertrauensbeziehungen zwischen DomĂ€nen, an die Authentifizierungsanforderungen empfangen werden mĂŒssen. Mit anderen Worten, vor der Authentifizierung eines Benutzers wird das Vertrauen zwischen DomĂ€nen bestimmt. Damit Benutzer von DomĂ€ne A auf die Ressourcen von DomĂ€ne D zugreifen können, muss DomĂ€ne D DomĂ€ne A vertrauen.
Es gibt zwei Arten von Vertrauensrichtungen:
One-Way-Trust ist ein One-Way-Authentifizierungspfad, der zwischen zwei DomÀnen erstellt wird. Bei einer unidirektionalen Vertrauensstellung zwischen DomÀne A und DomÀne B haben Benutzer in DomÀne B Zugriff auf Ressourcen in DomÀne A. Benutzer in DomÀne A haben jedoch keinen Zugriff auf Ressourcen in DomÀne B. Diese Art der Vertrauensstellung ist nicht transitiv.
Bilaterales Vertrauen ist eine Kombination aus zwei unidirektionalen Vertrauensbeziehungen. Bei bidirektionaler VertrauenswĂŒrdigkeit zwischen den DomĂ€nen A und B haben ihre Benutzer Zugriff auf die Ressourcen beider DomĂ€nen. Diese Art von Vertrauen ist transitiv.
Die Richtung des Vertrauens ist immer entgegengesetzt zur Richtung des Zugriffs. Das reprÀsentative Diagramm von Microsoft unten:

Links fĂŒr detailliertere Vertrauensarten:
Kerberos zwischen vertrauenswĂŒrdigen DomĂ€nen
Betrachten Sie ein Beispiel. Der Client versucht, auf den Server zuzugreifen.
Von Punkt 1 bis 3 werden Standardaktionen ausgefĂŒhrt, wenn das Kerberos-Protokoll verwendet wird.- 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.
- 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.
- Ein Benutzer sendet ein TGT-Ticket an einen DomĂ€nencontroller, wenn er ein TGS-Ticket (TGS-REQ) anfordert. Der DomĂ€nencontroller öffnet ein TGT-Ticket und ĂŒberprĂŒft die PAC-PrĂŒfsumme.
Ănderungen beginnen ab Punkt 4: Ein Inter-Realm-TGT-Ticket wird angezeigt, das sogenannte Empfehlungs-Ticket, das mit einem Inter-Realm-SchlĂŒssel verschlĂŒsselt / signiert wird, der aus einem vertrauenswĂŒrdigen Kennwort erstellt wurde. Ein vertrauenswĂŒrdiges Kennwort wird festgelegt, wenn eine Vertrauensstellung hergestellt wird, und ist beiden DomĂ€nencontrollern bekannt. Mithilfe des Inter-Realm-TGT-Tickets kann ein Benutzer der DomĂ€ne 1 ein TGS-Ticket anfordern, um auf Ressourcen der DomĂ€ne 2 zuzugreifen.

NTLM zwischen vertrauenswĂŒrdigen DomĂ€nen

- Der Client sendet eine Authentifizierungsanforderung direkt an die Ressource selbst in einer anderen DomÀne, auf die er zugreifen möchte.
- Der Server empfĂ€ngt eine Anfrage vom Client und sendet ihm eine Antwort CHALLENGE_MESSAGE, die eine zufĂ€llige Folge von 8 Bytes enthĂ€lt. Es heiĂt Server Challenge.
- Der Client, der die Server Challenge-Sequenz vom Server erhalten hat, verschlĂŒsselt diese Sequenz mit seinem Kennwort und sendet dem Server eine Antwort, die 24 Bytes enthĂ€lt.
- Der Server sendet eine Anfrage und Antwort an den Controller seiner DomÀne B.
- Bei der Authentifizierung zwischen Vertrauensstellungen wird die folgende Logik ausgefĂŒhrt:
- ĂberprĂŒfte Richtungsvertrauensbeziehungen.
- Client-Anmeldeinformationen werden zur Authentifizierung an DomÀne A gesendet.
- Wenn keine Vertrauensbeziehung besteht, wird die TransitivitĂ€t mit DomĂ€ne A ĂŒberprĂŒft.
- TransitivitĂ€tsĂŒberprĂŒfung zwischen DomĂ€nen
- Wenn zwischen DomÀnen TransitivitÀt besteht, wird eine Authentifizierungsanforderung an die nÀchste DomÀne im Vertrauenspfad gesendet. Dieser DomÀnencontroller wiederholt den Vorgang und vergleicht die Benutzeranmeldeinformationen mit seiner Datenbank mit Sicherheitskonten.
- Wenn keine TransitivitĂ€t vorliegt, wird eine Nachricht mit verweigertem Zugriff an den Client zurĂŒckgegeben.
6-8. Die Antwort mit der Entscheidung, den Client zu authentifizieren.
Angriffe zwischen Vertrauensstellungen zwischen DomÀnen
Um einen Angriff durchfĂŒhren zu können, benötigen wir Informationen ĂŒber vertrauenswĂŒrdige Beziehungen in unserer DomĂ€ne.
Auflisten von Trusts
Es gibt drei Hauptmethoden zum Auflisten von Vertrauensstellungen in einer DomÀne:
- ĂŒber die Win32-API;
- ĂŒber .NET-Methoden;
- ĂŒber LDAP.
Win32 API
Die AufzĂ€hlung erfolgt durch Aufrufen der Funktion DsEnumerateDomainTrusts , die die Struktur DS_DOMAIN_TRUSTSA zurĂŒckgibt . Bei dieser Methode werden die SID und GUID der ZieldomĂ€ne sowie Flags und Attribute zurĂŒckgegeben, die das aktuelle Vertrauen in die DomĂ€ne kennzeichnen.
BloodHound sammelt Informationen mithilfe der Win32-API-Methode.

.Net
Die GetCurrentDomain- Methode aus dem Namespace [System.DirectoryServices.ActiveDirectory.Domain] wird verwendet, die eine Instanz der Klasse System.DirectoryServices.ActiveDirectory.Domain zurĂŒckgibt. Diese Klasse implementiert die GetAllTrustRelationships- Methode, die alle Vertrauensstellungen fĂŒr die aktuelle DomĂ€ne zurĂŒckgibt.
([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).GetAllTrustRelationships()
Die Verwendung dieser Methode ist im Modul Get-DomainTrust in PowerView implementiert .

Einer der Vorteile dieser Methode ist ihre Einfachheit. Informationen sind leicht zu lesen und zu verstehen, aber ihr Volumen ist viel kleiner als bei der AufzÀhlung mit anderen Methoden.
LDAP
DomÀnenvertrauensinformationen werden in Active Directory als objectClass der trustDomain- Klasse gespeichert .
Anwendungsbeispiel:
dsquery * -filter "(objectClass=trustedDomain)" -attr *

PowerView verwendet diese Methode standardmĂ€Ăig.

Mit Informationen zu DomÀnen und Vertrauensarten können Sie direkt zum Angriff selbst wechseln. Betrachten Sie 2 Optionen:
- Wir haben es geschafft, die Domain zu gefÀhrden, und wir haben Domain-Administratorrechte.
- Wir haben keine Domain-Administratorrechte.
Mit Administratorrechten fĂŒr eine der DomĂ€nen
AbhÀngig von der DomÀne, die kompromittiert wurde, können mehrere Angriffsvektoren unterschieden werden:
Es ist erwĂ€hnenswert, dass fĂŒr die erfolgreiche Implementierung aller Vektoren bilaterales Vertrauen zwischen DomĂ€nen erforderlich ist.
1. Betriebs-SID-Verlauf
Der SID-Verlauf wurde eingefĂŒhrt, um die Migration von Benutzern von einer DomĂ€ne zu einer anderen zu erleichtern. Das Attribut enthĂ€lt die vorherigen SID-Objekte. Jedes Mal, wenn ein Objekt von einer DomĂ€ne in eine andere verschoben wird, wird eine neue SID erstellt, die zu einer objectSID wird. Die vorherige SID wird der Eigenschaft sIDHistory hinzugefĂŒgt.
Jede Gesamtstruktur verfĂŒgt ĂŒber eine Benutzergruppe fĂŒr Unternehmensadministratoren, die nur in der StammdomĂ€ne vorhanden ist und ĂŒber lokale Administratorrechte auf den DomĂ€nencontrollern aller untergeordneten DomĂ€nen in der Gesamtstruktur verfĂŒgt. Dieser Angriff wurde erstmals von Sean Metcalf auf der BlackHat USA 2015 demonstriert. Das Wesentliche des Angriffs ist, dass wir ein Goldenes Ticket mit einer zusĂ€tzlichen SID der Enterprise Admins-Gruppe ausstellen. Dies erfolgt durch HinzufĂŒgen von ExtraSids in der Struktur KERB_SID_AND_ATTRIBUTES , die in der Struktur KERB_VALIDATION_INFO gesendet wird .

Angriffsdemo:

Impacket hat ein Skript , das all dies automatisiert.
2. Golden Ticket + Enterprise Admin Group
Mit Administratorrechten in der StammdomĂ€ne können wir ein Goldenes Ticket erstellen, indem wir einen Benutzer zur Gruppe der Unternehmensadministratoren hinzufĂŒgen (519).
Kerberos::golden /domain:<domain> /sid:<domain_SID> /krbtgt:<ntlm_hash_krbtgt_user> /user:<user> /groups:500,501,513,512,520,518,519 /ptt
Wie oben beschrieben, verfĂŒgt Enterprise Admin ĂŒber lokale Administratorrechte fĂŒr untergeordnete DC-DomĂ€nen. Auf diese Weise können wir alle untergeordneten DomĂ€nen in der Gesamtstruktur gefĂ€hrden.
3. Betrieb von Trust Tickets
FĂŒr den Zugriff auf eine Ressource mithilfe des Kerberos-Protokolls benötigen Sie ein TGS-Ticket, das mit dem NTLM-Hash des Dienstkontokennworts verschlĂŒsselt ist. Ein DomĂ€nencontroller speichert nur Hashes von Benutzerkennwörtern fĂŒr seine DomĂ€ne. Wenn also ein Benutzer aus DomĂ€ne A Zugriff auf eine Ressource in DomĂ€ne B benötigt, wird ein Inter-Realm-SchlĂŒssel verwendet. Dieser SchlĂŒssel wird auf der Grundlage eines vertrauenswĂŒrdigen Kennworts erstellt, das beim Erstellen von Vertrauensstellungen zwischen DomĂ€nen in derselben Gesamtstruktur festgelegt wird. In der Kennwortdatenbank (NTDS.dit) auf dem DomĂ€nencontroller finden Sie Benutzer mit dem $ -Zeichen am Ende. Ihr Passwort wird auch zum Erstellen von Inter-Realm-SchlĂŒsseln verwendet. Um ein Inter-Realm-TGT-Ticket zu erstellen, benötigen wir einen Passwort-Hash dieses Kontos.
Kerberos::golden /user:<user> /domain:<domain> /sid:<sid_domain> /sids:<extra_sid_entrprice_admin_group_from _another_domain> /aes256:<aes256_trust_user_password> /service:krbtgt /target:<target_domain> /ptt
Angriffsdemo:

Der Angriff ist besonders relevant, wenn der IS-Dienst eine Bedrohung festgestellt und das Kennwort krbtgt zweimal geĂ€ndert hat. In diesem Fall können wir goldene Tickets mit einem vertrauenswĂŒrdigen Kennwort zwischen DomĂ€nen erstellen.
4. Druckerfehler
FĂŒr das Windows Print System-Remoteprotokoll (MS-RPRN) ist standardmĂ€Ăig die Methode RpcRemoteFindFirstPrinterChangeNotification (Ex) aktiviert, mit der Sie die Authentifizierung auf jedem Computer erzwingen können, auf dem der Spooler-Dienst auf dem angegebenen Host mithilfe des Kerberos- oder NTLM-Protokolls ausgefĂŒhrt wird. Im Fall von c NTLM können wir NTLM-Relay ausfĂŒhren oder das Computerkennwort knacken (niemals deaktivieren). Bei Kerberos ist ein kompromittierter Computer mit unbegrenzter Delegierung erforderlich. Dann können wir ein TGT-Ticket abholen und einen Angriff entwickeln.
Angriffsdemo:

Die folgende Abbildung zeigt die im Video gezeigten Schritte.

Wir haben keine Domain-Administratorrechte
Ein bisschen Theorie. Carlos Garsia gab in seinem Bericht eine ausgezeichnete Tabelle, die die Eigenschaften verschiedener Arten von Gruppen veranschaulicht.

Bei den Funktionen ist zu berĂŒcksichtigen, dass lokale AD-DomĂ€nen- und globale AD-Gruppen ohne Gruppenmitglieder in den globalen Katalog repliziert werden und AD Universal-Gruppen mit Benutzern repliziert werden.
Aufgrund der Art und Weise, wie Gruppen im globalen Katalog aufgelistet werden, können die Ergebnisse einer Backlink-Suche (dh der Memb-Suche) variieren, je nachdem, ob Sie den globalen Katalog (Port 3268) oder die DomÀne (Port 389) durchsuchen Gruppen, zu denen der Benutzer gehört (globale Gruppen vs. lokale DomÀnengruppen).
FĂŒr den Fall, dass wir keine DomĂ€nenadministratorrechte haben, listen wir die Objekte auf. Wir interessieren uns fĂŒr:
- Benutzer einer anderen DomÀne mit lokalen Administratorrechten auf Computern in unserer DomÀne.
- Benutzer aus anderen DomÀnen, die Mitglieder von BenutzerdomÀnengruppen sind. Gruppen mit Benutzern aus einer anderen DomÀne.
- AuslÀndische ACL-Principals.
1. Benutzer einer anderen DomÀne mit lokalen Administratorrechten auf Computern in unserer DomÀne
Suchen Sie in BloodHound nach Benutzern aus einer anderen Domain, die lokale Administratoren auf Hosts in unserer Domain sind:
MATCH (c:Computer) OPTIONAL MATCH p1 = (u1)-[:AdminTo]->(c) WHERE NOT u1.domain = c.domain WITH p1,c OPTIONAL MATCH p2 = (u2)-[:MemberOf*1..]->(:Group)-[:AdminTo]->(c) WHERE NOT u2.domain = c.domain RETURN p1,p2

Befehl in PowerView :
Get-NetLocalGroupMember <server>
2. Benutzer aus anderen DomÀnen, bestehend aus BenutzerdomÀnengruppen. Gruppen mit Benutzern aus einer anderen DomÀne
Wie oben erwÀhnt, werden Benutzer, die nur Mitglieder von Universal-Gruppen sind, in den globalen Katalog repliziert. Um diese Funktion zu demonstrieren, werden Gruppen im globalen Katalog abgefragt, die mindestens einen Benutzer und eine direkte LDAP-Anforderung an den DomÀnencontroller enthalten.
Get-DomainGroup -Properties name, grouptype, member, DistinguishedName -LDAPFilter '(member=*)' -SearchBase "GC://jet.lab"

Beim AusfĂŒhren einer Abfrage an den globalen Katalog wird nur eine Universalgruppengruppe mit dem Typ AD Universal aus der DomĂ€ne one.jet.lab angezeigt.
Wenn wir eine direkte LDAP-Abfrage an one.jet.lab ausfĂŒhren, werden andere Gruppen vom Typ AD Domain local und AD Global angezeigt.

Dies ist wichtig, wenn Benutzer und Gruppen aufgelistet werden.
Befehle in PowerView :
Get-DomainForeignUser -Domain <Domain> Get-DomainForeignGroupMember -Domain <Domain>


3. AuslÀndische ACL-Prinzipien
Der Sicherheitsdeskriptor ntSecurityDescriptor (https://docs.microsoft.com/en-us/windows/win32/adschema/a-ntsecuritydescriptor) ist fĂŒr alle Benutzer aus vertrauenswĂŒrdigen DomĂ€nen zugĂ€nglich und wird in den globalen Katalog repliziert. Auf diese Weise können wir alle DACLs fĂŒr alle Objekte in vertrauenswĂŒrdigen DomĂ€nen abfragen und Benutzer aus anderen DomĂ€nen filtern.
Get-DomainObjectAcl -Domain jet.lab -ResolveGuids | ?{$_.SecurityIdentifier -like 'SID_Domain*'}

Daher konnten wir den Benutzer Mike aus der DomÀne "c.c.lab "identifizieren, der Rechte an der globalen Gruppe in der DomÀne" jet.lab "hatte.
PS SID-Filterung und selektive Authentifizierung werden zum Schutz zwischen Gesamtstrukturen verwendet. Ein Angriff zwischen WĂ€ldern mit SID-Filterung ermöglichte Dirkjan in seinem Blog . Ebenfalls am 9. Juli veröffentlichte Microsoft ein Update , das die TGT-Delegierung zwischen Gesamtstrukturen standardmĂ€Ăig deaktiviert. Jetzt funktioniert die Story mit unbegrenzter Delegierung und Kompromittierung einer Gesamtstruktur von einer anderen mithilfe des Kerberos-Protokolls nicht mehr.