Saltar al contenido
← Volver al blog

Encontrar credenciales en pagefile.sys

20/5/2026 · 5 min de lectura

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 Authorization en 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 LsaCfgFlags no 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; formas MSAL.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 -p sobreviven 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 … y Authorization: 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 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.sys es 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.