🔍 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 :

  1. Extraction de la clé NL$KM (16 octets, AES-128) via le même mécanisme LSA
  2. Lecture du compteur d’itérations PBKDF2 depuis NL$IterationCount (défaut : 10240)
  3. 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/