Im Active Directory gibt es eine Möglichkeit einen Account so zu verbergen, dass selbst Domänen Administratoren diesen Account nicht sehen oder löschen können. Dennoch ist dieser Account aber gültig und vollständig nutzbar. Wie genau ein „Versteckter“ Account erstellt wird, würde den Rahmen dieses Beitrages sprengen. Daher möchte ich mich hier auf das Auffinden solcher Accounts konzentrieren.
Hintergrund
Wie in anderen Bereichen von Windows existiert auch im Active Directory ein umfangreiches Berechtigungskonzept, an dessen (logischer) Spitze aber nicht der Domänen-Administrator steht, sondern „SYSTEM“. Es gilt die Regel: Der Domänen Administrator darf alles, was ihn das System lässt!
Für die korrekte Funktion von Active Directory benötigt nur das „SYSTEM“ volle Berechtigungen auf die Objekte im Active Directory. Entziehe ich beispielsweise der Gruppe Domain-Admins die Berechtigungen auf einen Container, so wird der Container und dessen Inhalt den Admins nicht mehr angezeigt. Diese Änderungen haben aber keinen Einfluss auf die eigentliche Funktion des Active Directory, solange das „SYSTEM“ noch die entsprechenden Berechtigungen hat.
Demo
Den Zusammenhang möchte ich an einem einfachen Beispiel verdeutlichen. In der Domäne Contoso.com wurde ein neuer User „Versteckt“ erstellt und die Berechtigungen so manipuliert, dass er für anderen Administratoren nicht mehr sichtbar ist. Der Account Versteckt ist im Bespiel zudem selber Mitglied der Gruppe Domänen-Admins.
Im Bild wurde die DSA.msc einmal über das Konto eines Domänen-Administrators (großes Fenster) geöffnet, während im kleinen Fenster „NT-AUTORITÄT\SYSTEM“ des Domänencontrollers genutzt wurde.
Während der Administrator eine scheinbar leere OU sieht, kann das „SYSTEM“ auf den versteckten Account zugreifen. Selbst über die Gruppemitglieder der Gruppe Domänen-Admins ist der versteckte Account nicht sichtbar.
Ein solcher Account öffnet internen und externen Angreifern Tür und Tor ins gesamte System – ohne Gefahr zu laufen, zufällig entdeckt zu werden.
Gegenmaßnahmen
Ein umfassender Schutz vor diesem Angriffsszenario ist schwierig und gerade in keinen Umgebungen kaum sinnvoll umsetzbar. Entsprechende Handlungsempfehlungen und Sicherheitshinweise sind bei Microsoft unter dem Link https://technet.microsoft.com/en-us/windows-server-docs/identity/ad-ds/plan/security-best-practices/best-practices-for-securing-active-directory abrufbar.
Dennoch kann man einen solchen Angriff relativ sicher und mit verhältnismäßig wenig Aufwand entdecken.
Sysinternals hilft
Solche Accounts lassen sich nur über die Berechtigung von „SYSTEM“ wirklich zuverlässig finden. Um sich mit „SYSTEM“-Berechtigungen an das AD zu wenden, hilft das Sysinternals-Programm PsExec.
Zunächst muss man das Tool über die Microsoft-Seite laden. Eine Installation ist hier nicht erforderlich.
https://technet.microsoft.com/de-de/sysinternals/bb842062
- Auf einem Domänencontroller mit einem Domänen-Administrator-Account anmelden
- Programm PsExec auf den DC kopieren
- eine CMD mit Administratorrechten öffnen und in das Verzeichnis von PsExec wechseln
- In der CMD folgenden Befehl ausführen:
Psexec.exe -s -i -d powershell.exe - Es öffnet sich ein neues Fenster mit der Powershell – dieses läuft nun als SYSTEM.
- Den Powershell-Befehl ausführen:
get-aduser -Filter * | Measure-object - Gleichzeitig eine normale Powershell-Konsole öffnen und denselben Befehl dort nochmals ausführen
Im Normalfall sollten die Summen der Accounts im AD in beiden Zählungen übereinstimmen.
Wenn es nicht übereinstimmt!
Zeigt die Zählung im „SYSTEM“-Kontext mehr Nutzer an als bei dem Domänen-Administrator, muss man sich nun auf die Suche nach dem/den Account(s) machen. Zum Glück kann man sich auch hier der Powershell bedienen, um die Arbeit zu erleichtern.
In den beiden PowerShell-Sitzungen (1x SYSTEM, 1x Admin) lässt man sich jeweils eine Liste mit allen AD Benutzer erzeugen und in eine Textdatei schreiben. Diese Textdatei kann anschließend händisch oder ebenfalls per Skript analysiert werden.
Beispiel für einen Export aller AD Benutzer:
get-aduser -Filter * | out-file’c:\temp\System-Users.txt‘
get-aduser -Filter * | out-file’c:\temp\Admin-Users.txt‘
Über den DistinguishedName lässt sich dann sowohl der Name wie auch die Position des Accounts im AD bestimmen. Bei großen Dateien kann es sich lohnen, den Vergleich mit Compare-Object oder einem Dateivergleichswerkzeug auszuführen.
DistinguishedName : CN=Versteckt,CN=Update Service,CN=Microsoft,CN=Program
Bereinigung
Hat man den Übertäter identifiziert, muss dieser nur noch entfernt werden. Dafür braucht man allerdings wieder die Berechtigungen von SYSTEM. Also wieder eine CMD (Adminrechte) auf dem DC aufrufen.
Mit folgendem Befehl öffnet sich die „Benutzer und Computer“-MSC im SYSTEM-Kontext, wo man nun sehr bequem den Übertäter löschen kann:
Psexec.exe -s -i -d DSA.msc
Konsequenz
Wenn man einen solchen versteckten Account gefunden hat, ist dies ein Beweis für einen massiven Sicherheitsbruch. Um einen Account vor den Domänen-Administratoren verstecken zu können, muss man mit SYSTEM-Berechtigungen bis auf den Domänencontroller gekommen sein. Hier müssen dringend weitere Nachforschungen angestellt werden, wie es zu diesem Sicherheitsbruch gekommen ist. Wenn möglich, muss man die Ursache(n) beseitigen. Wenn nicht, ist eine Abschottung des Netzwerks und ein Neuaufbau oder eine Wiederherstellung des Forests erforderlich.
http://faq-o-matic.net/?p=7787