Einleitung
In meinen vorherigen Artikel Simulation eines Angriffs habe ich euch gezeigt, wie ein Angreifer eine verwaiste Rechtedelegation mit einem GPO-Poisoning ausnutzen konnte. Die Hintergrundinformationen dazu hatte ich im Artikel Privilege Escalation & Lateral Movement mit GPO Poisoning erläutert. In diesem Beitrag geht es um die Bereinigung solcher falschen bzw. verwaisten Rechtedelegationen.
Die Bereinigung mit meinem PowerShell-Script
Es kann immer wieder vorkommen, dass sich problematische GPO-Rechtedelegationen ergeben, die ihr breinigen müsst. Daher habe ich ein komplettes PowerShell-Bereinigungsscript erstellt. Dieses könnt ihr euch aus meinem Gitlab herunterladen: https://gitlab.ws-its.de/stephan/gpo-acl-cleanup
Die Verwendung ist recht einfach. Speichert das Script auf einem eurer Domain Controller und führt es dort mit F5 in einer administrativen PowerShell-ISE als Domain Admin aus. Die Ausführung stoppt nach dem Anlernen der Funktionen bei dem Schlüsselwort break. Es wird also noch keine Funktion gestartet!
Es gibt eine Protokoll-Funktion. Dafür müsst ihr bei der Funktion “starte-Vorbereitung” einen vollständigen Dateipfad angeben. Führt die Zeile mit der Funktion mit F8 aus. Dabei werden einige Variablen befüllt. Es werden z.B. verschiedene Identities gesucht, deren Berechtigungen nicht entfernt werden (sonst würden eure GPO unbrauchbar werden). Dazu schaut die Funktion, ob es noch weitere Identities mit hohen Rechten gibt. Ist das der Fall, dann werden diese aufgelistet. Nun könnt ihr überlegen, ob ihr diese zur Ausnahme hinzufügen wollt. Gebt dafür einfach die dazugehörige Zahl ein. Wenn ihr fertig seid, dann bestätigt die Auswahl ohne Eingabe mit einem Enter:
Nun könnt ihr die nächste Funktion starten. Diese sucht nach Dateien und Verzeichnissen, auf denen nicht ausgenommene Identities zu hohe Rechte haben. Das Ergebnis wird in einem Gridview angezeigt. Hier könnt ihr euch einen Überblick verschaffen:
Nun folgt die eigentliche Bereinigung. Schließt dafür das Gridview und startet die Funktion “bereinige Berechtigungsfehler”. Diese wird in 2 Stufen arbeiten: zuerst werden alle unerwünschten Rechtedelegationen auf den GPO selber entfernt. Dabei werden teilweise auch die Dateisystemberechtigungen korrigiert. Da das aber oft unvollständig ist, wird in der zweiten Stufe eine Korrektur der Dateisystem-ACL erfolgen. Das ist im Bild gut zu sehen. Für einige Berechtigungen gibt es keine Rechtedelegation an der GPO. Die Korrektur erfolgt dann in der zweiten Stufe:
Die vorletzte Funktion “suche-Eigentumsfehler” ermittelt nun noch nicht ausgenommene Owner auf den Dateien und Ordnern im SYSVOL. Owner können sich selber Berechtigungen an den Dateien vergeben. Daher stellen nicht ausgenommene Identities ein Risiko dar. Das Suchen selber ist wieder nur lesend. Das Ergebnis wird in einem Gridview angezeigt:
Um diese problematischen Owner zu bereinigen schließt ihr das Gridview und startet die letzte Funktion. Diese ersetzt die Owner durch die BuiltIn\Administrators (das ist der Default):
Führt zum Abschluss die Funktionen noch einmal einzeln aus. Die Bereinigung der Berechtigungsfehler kann durch Vererbungen durchaus einen zweiten Lauf benötigen:
Das Logfile könnt ihr dann abschließend kontrollieren:
Zusammenfassung
Die Bereinigung ist mit meinem Script nicht schwer. Ihr solltet es regelmäßig ausführen. Auch eine automatische, zeitgesteuerte Ausführung wäre denkbar. In diesem Fall müssten aber die manuellen Auswahlen deaktiviert werden. Das werde ich in einer nächsten Version einbauen.
Stay tuned!