Secretos LSA¶
Qué son¶
La Autoridad de seguridad local (LSA) guarda secretos en el hive SECURITY. Entre ellos se encuentran la
contraseña de inicio de sesión automático, las contraseñas de las cuentas con las que se ejecutan los servicios, la contraseña de dominio
de la cuenta de equipo, las claves del sistema de DPAPI y la clave con la que se cifran los inicios de sesión de dominio en caché.
También guarda los inicios de sesión de dominio en caché, para que los usuarios del dominio puedan iniciar sesión sin un controlador de dominio.
parse-registry lsa-secrets enumera qué secretos contiene un sistema y cuándo se establecieron, así como cuántos
inicios de sesión en caché conserva y utiliza. Solo lee nombres y horas: no se descifra nada y
no se leen ni escriben los bytes de ningún secreto. Juntei lee evidencias; no extrae credenciales.
Mejor conclusión: el sistema contenía un secreto con este nombre, establecido
en esta hora. El secreto de un servicio (_SC_<service>) significa que LSA almacena la contraseña de la cuenta
con la que se ejecuta ese servicio.
Ubicación¶
C:\Windows\System32\config\SECURITY
Policy\Secrets\<name>\CurrVal the current value (encrypted)
Policy\Secrets\<name>\OldVal the previous value
Policy\Secrets\<name>\CupdTime when the current value was set (FILETIME)
Policy\Secrets\<name>\OupdTime when the previous value was set
Cache\NL$1 … NL$n cached domain logons, one slot each
Cache\NL$Control how many slots Windows keeps
| Nombre | Tipo | Qué es |
|---|---|---|
DefaultPassword |
autologon |
La contraseña con la que Winlogon inicia sesión automáticamente. |
_SC_<service> |
service_account |
La contraseña de la cuenta con la que se ejecuta <service>. |
$MACHINE.ACC |
machine_account |
La contraseña de la cuenta de equipo en su dominio. |
DPAPI_SYSTEM |
dpapi_system |
Las claves DPAPI del sistema. |
NL$KM |
cached_logon_key |
La clave con la que se cifran los inicios de sesión en caché. |
L$_SQSA_<SID> |
security_questions |
Las preguntas de seguridad de una cuenta local (Windows 10 y posteriores). |
RasDialParams!<SID>#n, L$_Ras… |
ras_credentials |
Credenciales de acceso telefónico y de VPN. |
L$…, G$…, M$… |
local, global, machine |
Otros datos privados, según el prefijo que les asigna LsaStorePrivateData. |
Recopile SECURITY con sus registros de transacciones, así como el hive SYSTEM del sistema, que proporciona el nombre del
host.
Precauciones para el analista¶
- Nombres y horas, no valores. Si un valor contiene datos se deduce de su tamaño. Su contenido no se lee.
DefaultPasswordno implica inicio de sesión automático. El secreto existe en la mayoría de los sistemas, incluidos los que nunca inician sesión automáticamente. La claveMicrosoft\Windows NT\CurrentVersion\WinlogondeSOFTWARE(AutoAdminLogon,DefaultUserName) indica si el inicio de sesión automático está configurado. UnCurrentSetUTCreciente es un cambio que conviene explicar.- Secretos de servicios:
_SC_<service>aparece cuando un servicio está configurado para ejecutarse con una cuenta con contraseña. Compárelo conparse-registry services(ObjectName) y busque servicios instalados recientemente o desconocidos. El secreto puede permanecer después de que el servicio desaparezca. - Horas:
CurrentSetUTCyOldSetUTCindican cuándo estableció Windows los valores actual y anterior. De forma predeterminada, la contraseña de$MACHINE.ACCcambia cada 30 días, por lo que sus horas varían.KeyLastWrittenUTCy las horas de las clavesCurrVal/OldValindican aproximadamente cuándo cambió el secreto por última vez. - Inicios de sesión en caché: una ranura está en uso cuando su registro nombra a un usuario. El encabezado del registro no está
cifrado; solo se lee la longitud del nombre de usuario.
CachedLogonsKeptes el recuento deNL$Control, que sigue aCachedLogonsCount(10 de forma predeterminada). Las ranuras en uso significan que usuarios del dominio iniciaron sesión de forma interactiva, y sus credenciales pueden descifrarse sin conexión a partir del hive. Los nombres de los usuarios están cifrados y no se decodifican. Solo los registros binarios validados con un encabezado completo y una longitud de nombre de usuario coherente cuentan como en uso. SiProblemsinforma de ranuras dañadas, el recuento de ranuras en uso abarca solo las ranuras validadas; no interprete las ranuras dañadas como vacías.
Análisis con Juntei¶
Usage: juntei parse-registry lsa-secrets <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SECURITY hives
-f, --file <FILE> Parse one SECURITY hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry lsa-secrets -d collection/ -o lsa-secrets.csv
juntei parse-registry lsa-secrets -f SECURITY -t jsonl | jq 'select(.Kind == "service_account")'
Para cada hive, el resumen enumera cada secreto con su tipo y cuándo se estableció. A continuación, nombra los servicios cuyas contraseñas de cuenta almacena LSA y cuenta las ranuras de inicio de sesión en caché que están en uso.
Campos de salida¶
| Campo | Interpretación |
|---|---|
Host, SourcePath |
Host (según el hive SYSTEM del sistema) y el hive SECURITY. |
Secret, Kind |
El nombre del secreto y qué es (consulte la tabla anterior); Cache y cached_logons para el registro de inicios de sesión en caché. |
ServiceName, UserSID |
El servicio al que corresponde un secreto _SC_ y el SID de usuario que incluye un nombre (L$_SQSA_, RasDialParams). |
CurrentSetUTC, OldSetUTC |
CupdTime y OupdTime: cuándo se establecieron los valores actual y anterior. |
HasCurrentValue, HasOldValue |
Si CurrVal y OldVal contienen datos. |
CurrentValueLastWrittenUTC, OldValueLastWrittenUTC, KeyLastWrittenUTC |
Últimas escrituras de las claves CurrVal, OldVal y del secreto. |
CachedLogons, CachedLogonsInUse, CachedLogonsKept |
Registro de inicios de sesión en caché: ranuras, ranuras en uso y el recuento de NL$Control. |
TransactionLogStatus, LogsApplied |
Contexto de la recuperación del Registro. |
Problems |
Horas con formato incorrecto o fuera de rango (solo se muestran los metadatos de hora), encabezados de caché dañados, tipos de valor de caché erróneos y claves que no se pueden leer. |
Estrategia de investigación¶
- Busque secretos
_SC_de servicios desconocidos o instalados recientemente y emparéjelos conparse-registry servicesy con el evento 7045 (se instaló un servicio). - Compare las horas de
DefaultPasswordcon la configuración de inicio de sesión automático deWinlogon. - En los miembros de un dominio, anote las ranuras de inicio de sesión en caché en uso y cuándo se escribió
Cachepor última vez. - Compare las horas de los secretos con la cronología: un secreto establecido durante el periodo de una intrusión puede indicar una nueva cuenta de servicio, un inicio de sesión automático o un cambio en la cuenta de equipo.