SEKurity GmbH Logo
adPEAS

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.

Alexander Sturz

Gründer & Red Team Lead

12 Min. Lesezeit
Teilen:

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.

EpisodeTitelWas erwartet wird
01Diese EpisodeEinführung und Quick Start
02Unter der HaubeWas passiert beim Start eines Scans? (coming soon)
03AuthentifizierungKerberos, Pass-the-Hash, PKINIT (coming soon)
04Security ChecksAlle Checks im Detail (coming soon)
05Output & ReportsConsole und HTML-Reports (coming soon)
06Offensive OperationsPrivEsc & Persistence (coming soon)
07Kerberos InternalsASN.1, Encryption, Protokoll-Details (coming soon)
08PAC & Ticket ForgingGolden, Silver, Diamond Tickets (coming soon)
09Tips & TricksVersteckte 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.Protocols für LDAP-Kommunikation
  • System.DirectoryServices für ACL-Parsing
  • System.Security.Principal für SID-Handling
  • System.Security.Cryptography für die Kerberos-Kryptografie
  • System.Net fü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-adPEAS kümmert sich um die komplette Authentifizierung
  • Invoke-LDAPSearch ist der zentrale Anlaufpunkt für alle LDAP-Abfragen
  • Die Get-Domain* Funktionen liefern AD-Objekte in einem einheitlichen Format
  • Get-ObjectACL analysiert Access Control Lists

Die Helper-Module stellen Hilfsfunktionen bereit:

  • ConvertFrom-SID übersetzt SIDs in lesbare Namen (mit Caching)
  • Test-IsPrivileged prüft, ob ein Account privilegiert ist
  • Kerberos-Crypto enthä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:

VarianteGrößeVerwendung
adPEAS.ps1~4-5 MBReadable — für Debugging und Code-Verständnis
adPEAS_min.ps1~3-4 MBMinimized — für Produktiveinsatz
adPEAS_ultra.ps1~3 MBUltra-compressed — wenn jedes KB zählt
adPEAS_obf.ps1<1 MBObfuscated — 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:

SymbolFarbeBedeutung
[!]RotFinding — Sicherheitsproblem, Handlungsbedarf
[+]GelbHint — Interessant, sollte geprüft werden
[*]GrünNote — Information
[#]Rot auf GelbSecure — Gute Konfiguration
[?]BlauHeader — 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

Über den Autor

Alexander Sturz

Gründer & Red Team Lead

Active Directory Ninja und Experte für offensive Sicherheit mit Spezialisierung auf Kompromittierung von Unternehmensinfrastrukturen und Post-Exploitation-Techniken.