pagefile.sys es célebre por ser un sitio donde acaban credenciales en
claro que nunca debieron acabar ahí. El software trabaja con secretos
en memoria todo el día: los clientes HTTP construyen cabeceras
Authorization, los navegadores descifran contraseñas guardadas a
demanda, las librerías de base de datos arman cadenas de conexión, los
agentes SSH tienen material de clave, los flujos OAuth mueven bearer
tokens. El kernel no tiene ni idea de cuáles de esos rangos de memoria
son sensibles — así que cuando la presión de memoria elige una página
fría, esa página puede caer en disco en claro.
Este post recorre las formas de credenciales que más merece la pena buscar en un pagefile capturado, y cómo las muestra esta herramienta.
Por qué pasa
El Memory Manager / gestor de memoria de Windows no sabe qué hay en una página — solo lo fría que está. La memoria de un proceso moderno contiene:
- Buffers de petición/respuesta HTTP con cabeceras
Authorizationen texto plano. - Pestañas de WebView / Chrome / Edge que descifran contraseñas guardadas en RAM al autocompletar un formulario.
- Librerías cliente de base de datos que construyen cadenas de conexión
del tipo
Server=…;Password=…. - JWTs cacheados en heaps de JS (pestañas de navegador, apps Electron, Teams, Slack).
- El working set de
lsass.exe— cuando las páginas de LSASS se enfrían, puedes encontrar fragmentos con hashes NTLM, tickets Kerberos, secretos de LSA. - Herramientas CLI: AWS CLI, gcloud, az, kubectl mantienen en memoria las credenciales recién emitidas.
La mayoría nunca escribe el secreto en un archivo a propósito — pero
no tienen ninguna protección contra que el SO pagine la página en la que
casualmente viven. pagefile.sys es entonces una copia persistente en
disco de "lo que estuvo caliente en RAM, pero ya no lo está tanto".
Qué buscar
Los barridos regex de artefactos de este parser incluyen una categoría de credenciales, pero estas son las formas de búsqueda más productivas si estás haciendo grep a mano sobre una exportación de cadenas.
Campos de contraseña en claro
password=
pwd=
passwd=
PASSWORD=
Pwd=
A menudo dentro de cadenas de conexión:
Server=db01;Database=app;User Id=app_rw;Password=hunter2;
…o cuerpos de formulario HTTP:
username=admin&password=hunter2&csrf=…
Cabeceras HTTP Authorization
Authorization: Basic dXNlcjpwYXNzd29yZA==
Authorization: Bearer eyJ…
Authorization: Negotiate YIIE…
La forma Basic decodifica (base64) a user:password. La Bearer suele ser
un token opaco o un JWT.
JWTs
Tres segmentos base64url separados por puntos, empezando por eyJ:
eyJhbGciOiJSUzI1NiIsImtpZCI6Ii4uLiJ9.eyJzdWIiOiI...".dHJ1c3RtZQ
El primer segmento decodifica a la cabecera (alg, kid), el segundo a
los claims (sub, iss, aud, exp, …). Cualquier cosa que esté
todavía dentro de su ventana exp es potencialmente usable.
NTLM y Kerberos
- Mensajes NTLMSSP: busca el mágico
NTLMSSP\0(4E 54 4C 4D 53 53 50 00). - Challenges Type-2 contienen el nonce de challenge del servidor;
respuestas Type-3 contienen material de hash Net-NTLMv1/v2
crackeable offline con hashcat (
-m 5500/-m 5600). - Tickets Kerberos: blobs binarios grandes cerca de las cadenas
krbtgt,LSA Kerberos, o nombres de servicio principal (HTTP/host,MSSQLSvc/host, …). Extraer tickets completos de un pagefile es más difícil que de la RAM, pero a veces sobrevive material de TGT/TGS de Kerberos.
Secretos de LSA y Domain Cached Credentials
lsass.exe mantiene material secreto en memoria. Cuando las páginas de
LSASS están lo bastante frías para ser desalojadas, aparecen fragmentos
— incluidos:
- DCC2 (MS-Cache v2): hashes de 16 bytes cerca de las cadenas
NL$KM/_SC_. - Contraseñas de cuentas de servicio en claro si
LsaCfgFlagsno está puesto.
Estos requieren una herramienta especializada para decodificarlos por completo (mimikatz / pypykatz contra una imagen de memoria), pero los fragmentos en bruto son localizables aquí.
Material de clave SSH y PGP
Las claves privadas de OpenSSH en memoria empiezan por
-----BEGIN OPENSSH PRIVATE KEY----- o -----BEGIN RSA PRIVATE KEY-----.
Igual con las claves secretas de PGP
(-----BEGIN PGP PRIVATE KEY BLOCK-----). Mientras el agente tenga la
clave desbloqueada, vive en memoria hasta ser limpiada — lo que significa
que puede paginarse.
Tokens de CLI de la nube
- AWS:
aws_access_key_id,aws_secret_access_key,aws_session_token, tokens STS (a menudo con forma de JWT). - GCP: tokens cacheados de
gcloud auth(access_token, refresh tokens), a menudo en JSON. - Azure: tokens cacheados de
Az.Accounts; formasMSAL.Token. - Kubernetes: JWTs de service-account (
eyJhbGciOiJSUzI1NiIsImtpZCI…).
Artefactos de cliente de base de datos
- Cadenas de conexión ODBC / OLEDB:
Provider=…;Data Source=…;User ID=…;Password=…;. - Argumentos
sqlcmd -P,mysql -psobreviven en la línea de comandos — mira la sección de líneas de comando de malware para patrones relacionados.
Contraseñas guardadas en el navegador
Chrome / Edge / Brave guardan las contraseñas cifradas vía DPAPI, pero descifran al autocompletar y el texto plano vive brevemente en el heap del renderer. Un pagefile capturado poco después de una sesión de navegación puede contener esos formularios descifrados.
Cómo los expone esta herramienta
La pestaña Artifacts → Credential indicators del parser hace match con:
password=/pwd=/passwd=en cualquier cadena.- Cabeceras
Authorization: Bearer …yAuthorization: Basic …. - Tokens con forma de JWT (tres segmentos base64url separados por puntos,
empezando por
eyJ).
La pestaña Strings es el cajón de sastre — usa el input de filtro
para buscar Authorization, NTLMSSP, BEGIN OPENSSH, aws_secret,
Bearer, etc.
Cualquier cosa que claramente sea un blob binario (bytes de challenge NTLM, tickets Kerberos) no aparecerá como cadena, pero sí será marcada por el bucket de alta entropía en el page map — ahí es donde mirar después.
Notas operativas
- El tiempo importa. Cuanto más rato corre un sistema tras cargarse una credencial, más probable es que la página haya sido sobrescrita por contenido paginado más reciente. Adquiere el pagefile en cuanto sospeches del compromiso.
- Un dump de RAM emparejado es multiplicativamente más útil para la caza de credenciales — te da el LSASS vivo, la caché Kerberos completa y secretos atribuibles a procesos. El post de limitaciones cubre por qué.
- No reinicies el host sospechoso antes de capturar pagefile.sys — Windows puede sobrescribir slots paginados en el siguiente arranque. Si no te queda más remedio, captura antes.
hiberfil.syses aún mejor para la recuperación de credenciales cuando está presente — es un snapshot completo de RAM. Ver el post de comparación.
Recordatorio legal / ético
Analiza únicamente pagefiles de sistemas que estás autorizado a investigar. Las credenciales en claro extraídas de la máquina de otra persona siguen siendo credenciales, y usarlas fuera del alcance del encargo es un delito aparte.