adPEAS v2 Blog-Serie: Active Directory Sicherheitsanalyse mit adPEAS
Einführung in adPEAS v2 — eine komplette Neuentwicklung des PowerShell-basierten Active Directory Analyse-Tools mit nativem Kerberos-Support, null Abhängigkeiten und über 40 Security-Checks.
Viele kennen vielleicht bereits adPEAS, aber kurz zur Einordnung: adPEAS ist ein PowerShell-basiertes Active Directory Analyse Tool. Es identifiziert Schwachstellen und Fehlkonfigurationen in AD-Umgebungen.
Als ich vor vielen Jahren mit Active Directory Security begonnen habe, war schnell klar: Es gab zwar bereits einige hervorragende Tools — BloodHound, PingCastle, PowerView und andere — aber für die täglichen Pentest-Aufgaben fehlte etwas, das die vielen manuellen Analysen automatisiert durchführt. Der Fokus sollte auf dem eigentlichen Testen liegen, nicht auf stundenlangem Eintippen von Befehlen und Parsen von Output.
Also entstand adPEAS. Die erste Version — nennen wir sie “adPEAS legacy” — nutzte als Grundlage PowerView von HarmJ0y (Will Schroeder). Wills Arbeit an PowerView war phänomenal und hat die AD-Security-Community nachhaltig unterstützt. adPEAS legacy war im Grunde ein Wrapper, der PowerView nutzt, um die wichtigsten Security-Checks automatisiert durchzuführen. Das hat mehr oder weniger gut funktioniert, denn es kam ziemlich schnell die Realität um die Ecke: Die EDR- und AV-Lösungen sind in den letzten Jahren deutlich besser geworden. PowerView-Signaturen werden mittlerweile von fast jeder Enterprise-Lösung erkannt und geblockt. AMSI, das Antimalware Scan Interface von Microsoft, identifiziert und blockiert bekannte Patterns.
Es war Zeit für etwas Neues.
Allerdings — ganz ehrlich: Die Vorstellung, eine komplette Neuentwicklung zu stemmen, war beängstigend (zumindest für mich). Ein komplettes Tool von Grund auf neu schreiben? Mit nativer Kerberos-Implementierung? Ohne jegliche Dependencies? Das klang nach einem Projekt, das Jahre dauern würde. Dann kam AI ins Spiel und so begann das Abenteuer “Vibe-Coding” mit Claude. Es war ein intensiver Lernprozess — viel Trial-and-Error in der Handhabung von KI, Stunden über Stunden der Betreuung von Claude. Manchmal vergisst Claude, was vor zwei Minuten passiert ist, und gelegentlich entstehen “kreative Interpretationen” der Aufgabenstellung.
Aber am Ende hat es funktioniert. adPEAS v2 ist da. Komplett neu geschrieben in reinem PowerShell, mit zahlreichen neuen Features, und dem wichtigsten Ziel treu geblieben: Die Analyse von Active Directory bis zu einem gewissen Grad zu automatisieren.
Und vorab: adPEAS v2 will und soll kein Ersatz für dedizierte Tools wie BloodHound, PingCastle, Certipy und Co. sein. Diese Tools haben ihren Platz und machen ihren Job hervorragend. adPEAS ist der schnelle erste Blick, die Triage, der initiale Überblick, bevor die spezialisierten Tools zum Einsatz kommen.
Keine Geduld? Direkt zum adPEAS GitHub Repository und loslegen.
Die Episoden
Diese Blog-Serie führt durch adPEAS v2 — von den Grundlagen bis hin zu den Details der nativen Kerberos-Implementierung. Ob Pentester, Security-Analyst oder IT-Admin: Hier gibt es für jeden etwas Nützliches.
| Episode | Titel | Was erwartet wird |
|---|---|---|
| 01 | Diese Episode | Einführung und Quick Start |
| 02 | Unter der Haube | Was passiert beim Start eines Scans? (coming soon) |
| 03 | Authentifizierung | Kerberos, Pass-the-Hash, PKINIT (coming soon) |
| 04 | Security Checks | Alle Checks im Detail (coming soon) |
| 05 | Output & Reports | Console und HTML-Reports (coming soon) |
| 06 | Offensive Operations | PrivEsc & Persistence (coming soon) |
| 07 | Kerberos Internals | ASN.1, Encryption, Protokoll-Details (coming soon) |
| 08 | PAC & Ticket Forging | Golden, Silver, Diamond Tickets (coming soon) |
| 09 | Tips & Tricks | Versteckte Werkzeuge für den Pentest-Alltag (coming soon) |
Die zwei großen Neuerungen
Was hat sich wirklich geändert von adPEAS legacy zu adPEAS v2? Die zwei wichtigsten Punkte vorweg:
1. LDAP Only - Fast
PowerView und damit adPEAS legacy nutzte LDAP nicht durchgängig. Immer wieder wurden native API-Aufrufe gemacht, die in Kundenumgebungen — besonders beim Testen von non-domain-joined Computern — gerne zu Problemen führten. In adPEAS v2 ist jetzt tatsächlich fast alles LDAP. Das “fast” ist wichtig, denn für den Zugriff auf SYSVOL (GPO-Analyse, Scheduled Tasks, etc.) wird weiterhin CIFS benötigt. Aber alles, was AD-Objekte, ACLs oder Schema-Informationen betrifft, läuft über eine saubere LDAP-Connection.
Was bedeutet das in der Praxis? Weniger Kompatibilitätsprobleme und weniger Fehlerquellen. Wenn etwas nicht funktioniert, liegt es eher an Firewall-Regeln als an obskuren API-Problemen.
2. Native Kerberos - Die eigentliche Revolution
Die größte Neuerung ist der native Support von Kerberos. Und damit ist wirklich native gemeint — kein Rubeus im Hintergrund, kein Mimikatz, keine externen Tools. adPEAS v2 implementiert den kompletten Kerberos-Protokollstack in reinem PowerShell.
TGT-Anforderungen, TGS-Requests, Key-Derivation, AES-Encryption — alles in PowerShell. War das eine gute Idee? Wahrscheinlich nicht. Hat es funktioniert? Definitiv.
Der große Vorteil: Von non-domain-joined Computern aus lässt sich native Kerberos-Authentifizierung nutzen. Pass-the-Hash, Pass-the-Key, PKINIT — alles möglich.
Falls Kerberos nicht funktioniert (Firewall blockiert Port 88, KDC nicht erreichbar, etc.), fällt adPEAS automatisch zurück auf NTLM Impersonation (unterstützt LDAP Signing), und falls auch das fehlschlägt, auf LDAP SimpleBind. adPEAS versucht immer den besten verfügbaren Weg.
Keine Dependencies - Wirklich
Dieser Punkt verdient besondere Betonung:
adPEAS v2 hat keine externen Abhängigkeiten. Null. Nada. Zip.
Das bedeutet:
- Kein PowerView
- Kein ActiveDirectory PowerShell-Modul
- Keine RSAT-Tools
- Keine externen DLLs
Alles, was adPEAS braucht, ist bereits in Windows PowerShell 5.1 eingebaut. Das .NET Framework, das auf jedem Windows-System läuft, bietet alle Bausteine:
System.DirectoryServices.Protocolsfür LDAP-KommunikationSystem.DirectoryServicesfür ACL-ParsingSystem.Security.Principalfür SID-HandlingSystem.Security.Cryptographyfür die Kerberos-KryptografieSystem.Netfür Netzwerk-Operationen
Eine einzige PowerShell-Datei auf das Zielsystem kopieren, ausführen — fertig. Keine Installation, keine Diskussionen mit dem Kunden.
Die Architektur unter der Haube
Für alle, die wissen wollen, wie das Ganze zusammenhängt, hier ein kurzer Blick auf die Architektur. adPEAS v2 folgt einer sauberen Schichtenarchitektur:
+----------------------------------------------+
| adPEAS.ps1 (Main) |
| (Der Dirigent) |
+----------------------+-----------------------+
|
+------------------+------------------+
| | |
+---v------+ +------v------+ +-----v-----+
| Helpers | | Core | | Checks |
+----------+ +-------------+ +-----------+
| Convert |<---| Get-Domain*|<---| Security |
| Ensure | | Invoke-LDAP| | Analyses |
| Format | | Connect-* | | Findings |
+----------+ +------+------+ +-----------+
|
+------v------+
| Reporting |
+-------------+
| HTML Report |
| Console Out |
+-------------+
Das Hauptskript sitzt ganz oben und orchestriert den Ablauf. Es parst die Parameter, stellt die Verbindung her und ruft nacheinander die Check-Module auf.
Die Core-Module sind das Herzstück:
Connect-adPEASkümmert sich um die komplette AuthentifizierungInvoke-LDAPSearchist der zentrale Anlaufpunkt für alle LDAP-Abfragen- Die
Get-Domain*Funktionen liefern AD-Objekte in einem einheitlichen Format Get-ObjectACLanalysiert Access Control Lists
Die Helper-Module stellen Hilfsfunktionen bereit:
ConvertFrom-SIDübersetzt SIDs in lesbare Namen (mit Caching)Test-IsPrivilegedprüft, ob ein Account privilegiert istKerberos-Cryptoenthält die komplette Kryptografie-Bibliothek
Die Check-Module machen die eigentliche Security-Analyse. Über 40 dedizierte Checks für verschiedene Aspekte der AD-Sicherheit.
Das Reporting-Modul führt alles zusammen und gibt es aus — als farbcodierte Console-Ausgabe und als interaktiver HTML-Report.
Die Build-Varianten
adPEAS v2 kommt in verschiedenen Varianten. Die Entwicklung passiert modular (separate Dateien für jedes Modul), aber der Build-Prozess fügt alles zu einer standalone Datei zusammen:
| Variante | Größe | Verwendung |
|---|---|---|
adPEAS.ps1 | ~4-5 MB | Readable — für Debugging und Code-Verständnis |
adPEAS_min.ps1 | ~3-4 MB | Minimized — für Produktiveinsatz |
adPEAS_ultra.ps1 | ~3 MB | Ultra-compressed — wenn jedes KB zählt |
adPEAS_obf.ps1 | <1 MB | Obfuscated — für AV-Umgehung |
Die obfuscated Version ist kein Fort Knox. Jeder mit etwas PowerShell-Wissen kann das reverse-engineeren. Aber es reicht typischerweise aus, um signaturbasierte AV-Erkennung zu umgehen — und das ist oft alles, was benötigt wird.
Quick Start - Los geht’s!
Voraussetzungen
Bevor es losgeht, ein kurzer Check der Voraussetzungen. Spoiler: Wahrscheinlich ist bereits alles vorhanden.
Benötigt wird ein Windows-System mit PowerShell 5.1 oder neuer. Das ist bei jedem halbwegs aktuellen Windows dabei — Windows 10, Windows 11, Windows Server 2016 und neuer haben das alles bereits an Bord. Die installierte Version lässt sich mit $PSVersionTable.PSVersion prüfen.
Dann braucht es Netzwerkzugriff zum Domain Controller. Konkret müssen Port 389 (LDAP) oder Port 636 (LDAPS) erreichbar sein. Für die volle Kerberos-Authentifizierung sollte zusätzlich Port 88 offen sein — aber keine Sorge, adPEAS hat Fallbacks wenn Kerberos nicht funktioniert.
Und schließlich wird ein Domain-Account benötigt. Das kann der normale Windows-Login sein (bei Anmeldung an der Domain) oder separat angegebene Credentials. Für die meisten Checks reicht ein normaler Benutzer-Account völlig aus — Admin-Rechte sind nicht erforderlich, um die Domain auf Sicherheitsprobleme zu scannen.
Das war’s. Keine zusätzliche Software, keine Module, keine Installation.
adPEAS herunterladen
Es gibt verschiedene Wege, an adPEAS zu kommen.
Der schnelle Weg: Direkter Download
Der schnellste Weg ist ein direkter Download mit PowerShell:
# In ein Verzeichnis wechseln
cd C:\Tools
# adPEAS herunterladen
Invoke-WebRequest -Uri "https://github.com/61106960/adPEAS/raw/main/adPEAS.ps1" -OutFile "adPEAS.ps1"
Der Git-Weg
Mit installiertem Git lässt sich das gesamte Repository klonen:
git clone https://github.com/61106960/adPEAS.git
cd adPEAS
Der manuelle Weg
Natürlich kann auch einfach im Browser auf https://github.com/61106960/adPEAS navigiert, auf adPEAS.ps1 geklickt und die Datei über den Download-Button gespeichert werden.
Der erste Scan
Die Datei ist da. Zeit für den ersten Scan.
Schritt 1: adPEAS laden
Import-Module .\adPEAS.ps1
Schritt 2: Scan starten
# Windows-Auth mit aktuellem User
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth
# Mit Credential-Dialog
Invoke-adPEAS -Domain "contoso.com" -Credential (Get-Credential)
# Mit Username und Password
Invoke-adPEAS -Domain "contoso.com" -Username "domain\user" -Password "P@ssw0rd"
# Mit spezifischem DC
Invoke-adPEAS -Domain "contoso.com" -Server "dc01.contoso.com" -UseWindowsAuth
Das war’s. adPEAS enumeriert die Domain und zeigt die Findings an.
Was passiert nach dem Start
Beim Start begrüßt adPEAS mit dem ASCII-Art-Logo:
_ _____ ______ _____
| | __ \| ____| /\ / ____|
____ __| | |__) | |__ / \ | (___
/ _ |/ _ | ___/| __| / /\ \ \___ \
| (_| | (_| | | | |____ / ____ \ ____) |
\__,_|\__,_|_| |______/_/ \_\_____/
Version 2.0.0
Active Directory Enumeration
by @61106960
Legend
[?] Searching for juicy information
[!] Found a vulnerability which may be exploitable
[+] Found some interesting information for further investigation
[*] Some kind of note
[#] Some kind of secure configuration
Die Ausgabe verstehen
Die Console-Ausgabe von adPEAS ist farbcodiert:
| Symbol | Farbe | Bedeutung |
|---|---|---|
[!] | Rot | Finding — Sicherheitsproblem, Handlungsbedarf |
[+] | Gelb | Hint — Interessant, sollte geprüft werden |
[*] | Grün | Note — Information |
[#] | Rot auf Gelb | Secure — Gute Konfiguration |
[?] | Blau | Header — Abschnittsüberschrift |
Ein Beispiel
[?] Collecting domain information...
[*] Found domain information:
domainNameDNS: contoso.com
domainNameNetBIOS: contoso
domainSID: S-1-5-21-1234567890-1234567890-1234567890
domainFunctionalLevel: Windows 2025
forestFunctionalLevel: Windows 2016
forestName: contoso.com
[?] Analyzing Kerberos policy...
[+] Found Kerberos policy:
maxTicketAgeTGT: 10 hours (default)
maxRenewalAge: 7 days (default)
[+] krbtgtPasswordAge: 224 days (last changed: 2025-07-04)
[?] Searching for Domain Controllers...
[*] Found 2 domain controller(s):
domainControllers: dc01.contoso.com [PDC Emulator, Schema Master, Infrastructure Master, Domain Naming Master, RID Master]
dc02.contoso.com
HTML-Report generieren
Die Console-Ausgabe eignet sich gut für den schnellen Überblick, aber für Dokumentation braucht es einen Report:
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Outputfile .\report -Format HTML
adPEAS generiert eine HTML-Datei mit:
- Security Score — Gesamtbewertung der Sicherheitslage
- Finding Cards — Aufklappbare Details zu jedem Problem
- Table View — Sortierbare Tabelle aller Findings
- Dark Mode — Für die Nachteulen
- Export — Print / PDF (via Browser)
Der Report ist komplett standalone — die HTML-Datei kann einfach per E-Mail verschickt werden.
Die wichtigsten Parameter
Authentifizierung
Standard: Invoke-adPEAS (One-Liner)
# Windows-Auth
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth
# Credential-Dialog
Invoke-adPEAS -Domain "contoso.com" -Credential (Get-Credential)
# Username und Password
Invoke-adPEAS -Domain "contoso.com" -Username "domain\user" -Password "P@ssw0rd"
Session-basiert: Connect-adPEAS + Invoke-adPEAS
Für erweiterte Auth-Methoden (Pass-the-Hash, PKINIT) oder interaktives Arbeiten:
# Schritt 1: Session aufbauen
Connect-adPEAS -Domain "contoso.com" -UseWindowsAuth
# Oder mit Pass-the-Hash
Connect-adPEAS -Domain "contoso.com" -Username "admin" -NTHash "32ED87BDB5FDC5E9CBA88547376818D4"
# Oder mit PKINIT (Zertifikat)
Connect-adPEAS -Domain "contoso.com" -Certificate "user.pfx"
# Schritt 2: Scan ausführen
Invoke-adPEAS
# Oder einzelne Checks
Get-KerberoastableAccounts
Get-PrivilegedGroupMembers
Get-ADCSVulnerabilities
# Schritt 3: Aufräumen
Disconnect-adPEAS
Verbindungsoptionen
# Spezifischer Domain Controller
Invoke-adPEAS -Domain "contoso.com" -Server "dc01.contoso.com" -UseWindowsAuth
# LDAPS erzwingen (SSL/TLS)
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -UseLDAPS
Module steuern
# Nur ein bestimmtes Modul ausführen
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Module Accounts
# Mehrere Module
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Module Domain,Accounts,ADCS
Verfügbare Module: Domain, Creds, Rights, Delegation, ADCS, Accounts, GPO, Computer, Application, Bloodhound
OPSEC-Modus
Verzichtet auf aktive Kerberos-Ticket-Anforderungen und massive LDAP-Abfragen — kein Kerberoasting, kein AS-REP Roasting, keine BloodHound-Collection.
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -OPSEC
Typische Szenarien
Security-Quick-Check
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Module Domain,Accounts
Vollständiger Audit mit Report
# Erstellt Text- UND HTML-Report
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Outputfile .\contoso_audit
# Nur HTML-Report
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Outputfile .\contoso_audit -Format HTML
Pentest mit kompromittiertem Hash
# Session mit Pass-the-Hash aufbauen
Connect-adPEAS -Domain "contoso.com" -Username "svc_backup" -NTHash "A4F49C406510BDCAB6824EE7C30FD852"
# Scan ausführen
Invoke-adPEAS
ADCS-fokussierte Analyse
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Module ADCS -Outputfile .\adcs_report
Troubleshooting
Verbindung fehlgeschlagen
# DC erreichbar?
Test-NetConnection -ComputerName dc01.contoso.com -Port 389
# DNS funktioniert?
Resolve-DnsName contoso.com
Resolve-DnsName _ldap._tcp.dc._msdcs.contoso.com -Type SRV
Authentifizierung fehlgeschlagen
# Mit Verbose für mehr Details
Connect-adPEAS -Domain "contoso.com" -Credential (Get-Credential) -Verbose
Scan dauert zu lange
Bei großen Domains einzelne Module separat testen:
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Module Domain
Invoke-adPEAS -Domain "contoso.com" -UseWindowsAuth -Module Accounts
Episode 2: Unter der Haube — coming soon