
Active-Directory-Reconnaissance und schreibgeschütztes Sicherheitsaudit über ADWS (net.tcp/9389), in Go
adit ist ein Single-Binary-Tool für Active-Directory-Aufklärung und schreibgeschützte Sicherheitsaudits, das über ADWS (Active Directory Web Services, TCP/9389) statt über LDAP mit einem Domain Controller kommuniziert.
Ein adit ist der horizontale Eingang zu einer Mine — der leise Weg hinein. AD-Abfragen über ADWS statt über LDAP/389 bedeuten, dass der Datenverkehr als WCF-net.tcp-gerahmtes, binär-XML-SOAP über einen ungewöhnlichen Port übertragen wird, sodass er weit weniger wahrscheinlich inspiziert, gefiltert oder durch Signaturen erkannt wird als klassisches LDAP — während er dennoch dieselben Verzeichnisdaten zurückliefert. adit implementiert den vollständigen ADWS-Protokollstapel in Go, ohne externe Laufzeitabhängigkeiten.
┌────────────┐ net.tcp/9389 ┌──────────────┐
│ adit │ ───────────────▶ │ ADWS on DC │ ──▶ local LDAP
│ (Linux) │ NMF · NNS · │ (port 9389) │
│ │ NBFSE · SOAP └──────────────┘
└────────────┘
adit ist ein defensives Audit- und autorisiertes Assessment-Tool. Führe es nur gegen Verzeichnisse aus, für deren Assessment du autorisiert bist.
| Fähigkeit | Details |
|---|---|
| Transport | ADWS über WCF net.tcp (TCP/9389) — MC-NMF-Framing, MS-NNS-Handshake, MC-NBFS/NBFSE Binary XML, WS-Enumeration/WS-Transfer SOAP |
| Authentifizierung | NTLMv2 (Sign + Seal) und Kerberos (ccache / keytab / Passwort; RFC 4121 sealed GSS) |
| Recon-Collectors | 31 Module (siehe unten) → CSV pro Modul |
| Reporting | Gestaltete mehrblättrige XLSX-Arbeitsmappe + eigenständiges HTML-Dashboard (Suche/Sortierung, Schweregrad-Badges, Scroll-Spy) |
| Sicherheitsaudit | 30 schreibgeschützte Regeln (inkl. ADCS ESC1–4/9) → nach Schweregrad sortiertes JSON, auch im Dashboard dargestellt |
| Proxy / Jump Host | HTTP CONNECT, SOCKS5/5h, SOCKS4/4a (mit Proxy-Authentifizierung + Remote-DNS) |
| Paging | Serverseitiges WS-Enumeration-Pull-Paging, konfigurierbare Seitengröße |
| Offline-Reporting | XLSX/HTML aus zuvor gesammelten CSVs neu erstellen, kein DC erforderlich |
| Abhängigkeiten | Reines Go; keine LDAP-Bibliothek, kein .NET, keine externen Dienste |
forest, domain, trusts, sites, subnets, schemahistory, dcs,
users, userspns, groups, computers, computerspns, ous, gpos,
gplinks, passwordpolicy, fgpp, dnszones, dnsrecords, kerberoastable,
asreproastable, krbtgt, adcs, cas, laps, protectedgroups,
groupmembers, gmsa, dmsa, printers, bitlocker
ADCS (adcs) markiert ESC1–ESC4/ESC9; laps meldet, wer die einzelnen Passwörter lesen kann;
protectedgroups auditiert Protected Users. Führe adit -list-modules für die
aktuelle Liste aus.
-audit führt 30 schreibgeschützte Regeln aus. Findings enthalten eine Regel-ID, einen Schweregrad, betroffene
Objekte, Belege und Empfehlungen zur Behebung und werden in Adit-Audit.json geschrieben (und,
in Kombination mit -collect, in einen Abschnitt „Audit Findings“, der das
Dashboard anführt). Die Engine liest niemals geheime Attributwerte (LAPS / gMSA /
BitLocker), obwohl die Recon-Collectors dazu in der Lage sind.
| Regel | Schweregrad | Was sie meldet |
|---|---|---|
| AD-DOM-010 | Kritisch | DCSync-(Replikations-)Rechte, die von einem Nicht-Tier-0-Prinzipal gehalten werden |
| AD-ACL-001/005/006/007/011–016 | Kritisch | Gefährliche Kontrolle (GenericAll/Write, WriteDACL/Owner, ForceChangePassword, Write SPN / KeyCredentialLink / member / AllowedToAct) über ein privilegiertes Objekt |
| AD-SDH-001/002 | Kritisch | Unerwartete Kontrolle / Eigentümer von AdminSDHolder |
| AD-CS-001 | Kritisch–Mittel | ESC1 — Zertifikatsvorlage erlaubt vom Antragsteller bereitgestelltes Subjekt |
| AD-CS-002 | Kritisch–Mittel | ESC2 — Any-Purpose- / Zertifikatsvorlage ohne EKU |
| AD-CS-003 | Hoch–Mittel | ESC3 — Certificate Request Agent-Vorlage |
| AD-CS-004 | Hoch | ESC4 — schwache Zugriffskontrolle auf einer Zertifikatsvorlage |
| AD-CS-009 | Hoch | ESC9 — Zertifikatsvorlage fehlt die Sicherheitserweiterung |
| AD-CS-005 | Kritisch/Hoch | ESC5 — gefährliche Kontrolle über ein PKI-Objekt (NTAuthCertificates, CA-Speicher, CA-Objekt) |
| AD-CS-006 | Info | AD CS vorhanden — ESC6/ESC7/ESC8 erfordern Verifikation auf Host-Ebene (über ADWS nicht beobachtbar) |
| AD-DOM-008 | Hoch | Umkehrbare Passwortverschlüsselung domänenweit aktiviert |
| AD-USR-001 | Hoch | Kerberos-Pre-Auth deaktiviert (AS-REP roastbar) |
| AD-USR-009 | Hoch | Konto verwendet ausschließlich DES-Verschlüsselung |
| AD-CMP-006 | Hoch | Uneingeschränkte Delegierung auf einem Nicht-DC |
| AD-KCL-001 | Hoch | Key Credential (Shadow Credential) auf einem privilegierten Konto |
| AD-KRB-001 | Hoch | krbtgt-Passwort ist veraltet |
| AD-DOM-005 | Mittel | Machine Account Quota > 0 (jeder Benutzer kann Computer beitreten lassen) |
| AD-USR-002 | Mittel | Kerberoastbares Dienstkonto (Hoch, wenn privilegiert) |
| AD-USR-005 | Mittel | PASSWD_NOTREQD gesetzt |
| AD-USR-006 | Mittel | Passwort eines privilegierten Kontos läuft nie ab |
| AD-USR-011 | Mittel | Passwort eines privilegierten Kontos ist veraltet |
| AD-CMP-008 | Mittel | Ressourcenbasierte eingeschränkte Delegierung konfiguriert |
| AD-CMP-012 | Mittel | Legacy- / nicht unterstütztes Betriebssystem |
| AD-GRP-009 | Mittel | Fremdes Sicherheitsprinzipal in einer privilegierten Gruppe |
| AD-GRP-020 | Mittel | Versteckte privilegierte Mitgliedschaft über primaryGroupID |
| AD-TRU-001/003 | Hoch/Mittel | Vertrauensstellung ohne SID-Filterung / mit SID-Verlauf |
| AD-DNS-003/004 | Mittel/Niedrig | WPAD- / ISATAP-Eintrag vorhanden |
| AD-CMP-011 | Niedrig | Veraltetes Computerkonto |
| AD-INT-005 | Hoch | sIDHistory enthält eine privilegierte SID |
| AD-USR-020 | Hoch | Wiederherstellbares Passwort in userPassword / unixUserPassword gespeichert |
| AD-USR-021 | Hoch | Mögliches Passwort in description / info / comment hinterlassen (heuristisch) |
| AD-DOM-012 | Hoch/Mittel | Everyone / Anonymous / Authenticated Users in Pre-Windows 2000 Compatible Access |
Schwellenwerte sind anpassbar: -krbtgt-max-age, -priv-pwd-max-age, -stale-days.
ADCS-Hinweis: ESC1–ESC5 und ESC9 werden aus AD-Objekten über ADWS bewertet. ESC6 (
EDITF_ATTRIBUTESUBJECTALTNAME2), ESC7 (CA-Rollen-ACLs) und ESC8 (Web- Enrollment / NTLM-Relay) befinden sich in der Registry bzw. den HTTP-Endpunkten des CA-Hosts und sind über ADWS nicht beobachtbar —AD-CS-006meldet, dass eine CA existiert, damit sie auf dem Host verifiziert werden können (z. B. mit Certipy).
Erfordert Go 1.26+. Keine weiteren Build-Abhängigkeiten.
# Build the binary
go build -o adit ./cmd/adit
./adit -version
# …or run without installing
go run ./cmd/adit -h
# Cross-compile release archives for linux/windows/darwin (amd64+arm64) into dist/
bash scripts/build-release.sh