🔍 Contexte
Publié le 27/10/2026 sur hideandsec.sh, cet article est issu d’un retour d’expérience Red Team. L’auteur a développé un extracteur local SAM/LSA indétectable par les EDR, et documente ici la chaîne complète de déchiffrement des secrets LSA Windows stockés dans les ruches de registre SECURITY et SYSTEM.
🔑 Étape 1 : Récupération de la Boot Key
La Boot Key (16 octets) est fragmentée en 4 morceaux de 4 octets, cachés dans les class names des sous-clés de HKLM\SYSTEM\ControlSet001\Control\Lsa :
JD,Skew1,GBG,Data
Chaque fragment est récupéré via RegQueryInfoKeyW. Une permutation fixe (identique sur tous les Windows NT 6.x+) est ensuite appliquée pour reconstituer la clé réelle.
🔐 Étape 2 : Dérivation de la clé de chiffrement LSA
La clé LSA (AES-256, 32 octets) est stockée chiffrée dans HKLM\SECURITY\Policy\PolEKList. Le déchiffrement suit ce schéma :
- KDF :
SHA-256(BootKey ‖ Salt × 1000)→ clé AES-256 - Déchiffrement : AES-256-ECB sur le payload à l’offset 60
- Parsing : structures internes
NT6_CLEAR_SECRET→NT6_SYSTEM_KEYS→NT6_SYSTEM_KEY(structures issues de Mimikatz)
🗝️ Étape 3 : Déchiffrement des secrets LSA
Les secrets sont stockés sous HKLM\SECURITY\Policy\Secrets (ex: $MACHINE.ACC, _SC_ServiceName, DefaultPassword). Chaque secret utilise le même schéma :
- KDF :
SHA-256(LsaKey ‖ Salt_per_secret × 1000)→ clé AES-256 unique par secret - Déchiffrement : AES-256-ECB
- Layout :
[SecretLength:4][Reserved:12][SecretData:N]
Cas particulier $MACHINE.ACC : calcul du NT hash (MD4) du mot de passe machine, utilisable pour des attaques Pass-the-Hash ou Silver Ticket.
💾 Étape 4 : Extraction des DCC2 (Domain Cached Credentials)
Les credentials cachés sont stockés dans HKLM\SECURITY\Cache\NL$1 à NL$25. Le déchiffrement nécessite :
- Extraction de la clé NL$KM (16 octets, AES-128) via le même mécanisme LSA
- Lecture du compteur d’itérations PBKDF2 depuis
NL$IterationCount(défaut : 10240) - Déchiffrement AES-128-CBC avec IV pour obtenir les hashes DCC2 (compatibles Hashcat mode 2100)
📌 Point de détection
L’auteur précise que la phase sensible pour la détection EDR est l’extraction/chargement des ruches, pas le déchiffrement (réalisable hors ligne).
📄 Type d’article
Analyse technique offensive à visée éducative Red Team, documentant la réimplémentation complète de la pile de déchiffrement LSA Windows sans recours à Mimikatz ou Secretsdump.py.
🧠 TTPs et IOCs détectés
TTP
- T1003.004 — OS Credential Dumping: LSA Secrets (Credential Access)
- T1003.005 — OS Credential Dumping: Cached Domain Credentials (Credential Access)
- T1552.002 — Unsecured Credentials: Credentials in Registry (Credential Access)
- T1550.002 — Use Alternate Authentication Material: Pass the Hash (Lateral Movement)
IOC
- Chemins :
HKLM\SYSTEM\ControlSet001\Control\Lsa - Chemins :
HKLM\SECURITY\Policy\PolEKList - Chemins :
HKLM\SECURITY\Policy\Secrets - Chemins :
HKLM\SECURITY\Cache
⚠️ À propos de ces IOC — ils sont extraits automatiquement de l’article original le 27 octobre 2026 et n’ont pas fait l’objet d’une vérification externe. Un indicateur peut avoir été réattribué depuis : une IP de C2 peut redevenir un service légitime, un domaine sinkholé peut changer de propriétaire. Aucune garantie d’exactitude ni d’actualité — contrôlez leur validité avant tout usage opérationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
Malware / Outils
- Mimikatz (tool)
- Secretsdump.py (tool)
🟡 Indice de vérification factuelle : 40/100 (moyenne)
- ⬜ hideandsec.sh — source non référencée (0pts)
- ✅ 15000 chars — texte complet (fulltext extrait) (15pts)
- ✅ 4 IOCs (IPs/domaines/CVEs) (10pts)
- ⬜ pas d’IOC vérifié (0pts)
- ✅ 4 TTPs MITRE identifiées (15pts)
- ⬜ date RSS ou approximée (0pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ pas de CVE à vérifier (0pts)
🔗 Source originale : https://hideandsec.sh/books/windows-sNL/page/from-boot-key-to-plaintext-how-windows-lsa-secrets-are-deciphered-from-the-registry/