Contexte
On doit faire une analyse d’une empreinte mémoire pour retrouver un malware qui tente d’exfiltrer des documents.
Il faut trouver :
- Le nom du processus qui exécute le malware.
- Le numéro du PID.
- L’adresse contrôlé par l’attaquant.
- Le port contrôlé par l’attaquant.
- Le protocole utilisé.
Solution
$ python3 vol.py -f analyse-memoire.dmp windows.pslist.PsList > out.txt
$ cat out.txt | grep .exe | awk '{print $3}' | sort | uniq
conhost.exe
csrss.exe
ctfmon.exe
dllhost.exe
DumpIt.exe
dwm.exe
explorer.exe
LockApp.exe
LogonUI.exe
lsass.exe
msedge.exe
MsMpEng.exe
NisSrv.exe
OneDrive.exe
powershell.exe
rundll32.exe
SearchApp.exe
SearchIndexer.
services.exe
sihost.exe
SkypeApp.exe
smss.exe
soffice.exe
spoolsv.exe
svchost.exe
taskhostw.exe
userinit.exe
VBoxTray.exe
wininit.exe
winlogon.exe
WmiPrvSE.exe
On sauvegarde les informations de processus dans un fichier out.txt.
On veut que les fichiers .exe.
On remarque qu’il en a pas beaucoup.
$ python3 vol.py -f analyse-memoire.dmp windows.malfind.Malfind --pid $(cat out.txt | grep .exe | awk '{print $1}' | sort | uniq) > malfind.txt
$ cat malfind.txt | grep Disabled
1800 rundll32.exe 0x2244dde0000 0x2244dde0fff VadS PAGE_EXECUTE_READWRITE 1 1 Disabled N/A
1800 rundll32.exe 0x2244e9a0000 0x2244ed9ffff VadS PAGE_EXECUTE_READWRITE 1024 1 Disabled MZ header
2040 MsMpEng.exe 0x1eabf450000 0x1eabf450fff VadS PAGE_EXECUTE_READWRITE 1 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac4900000 0x1eac4900fff VadS PAGE_EXECUTE_READWRITE 1 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac4910000 0x1eac4910fff VadS PAGE_EXECUTE_READWRITE 1 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac4940000 0x1eac4941fff VadS PAGE_EXECUTE_READWRITE 2 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac4ac0000 0x1eac4ac1fff VadS PAGE_EXECUTE_READWRITE 2 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac49f0000 0x1eac49f0fff VadS PAGE_EXECUTE_READWRITE 1 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac49e0000 0x1eac49e2fff VadS PAGE_EXECUTE_READWRITE 3 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac4b60000 0x1eac4b60fff VadS PAGE_EXECUTE_READWRITE 1 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac4ba0000 0x1eac4baafff VadS PAGE_EXECUTE_READWRITE 11 1 Disabled Function prologue
2040 MsMpEng.exe 0x1eac68e0000 0x1eac69ecfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1eac6b00000 0x1eac6c0cfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1eac69f0000 0x1eac6afcfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1eac7330000 0x1eac743cfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1eac7440000 0x1eac754cfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1eacece0000 0x1eaceddffff VadS PAGE_EXECUTE_READWRITE 256 1 Disabled N/A
2040 MsMpEng.exe 0x1eacede0000 0x1eaceeecfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1ead4f70000 0x1ead507cfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1ead4110000 0x1ead430ffff VadS PAGE_EXECUTE_READWRITE 512 1 Disabled N/A
2040 MsMpEng.exe 0x1ead4c90000 0x1ead4d9cfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1ead49b0000 0x1ead4abcfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1ead48a0000 0x1ead49acfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1ead64f0000 0x1ead65fcfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
2040 MsMpEng.exe 0x1ead6210000 0x1ead631cfff VadS PAGE_EXECUTE_READWRITE 269 1 Disabled N/A
6720 SearchApp.exe 0x253f9090000 0x253f90affff VadS PAGE_EXECUTE_READWRITE 8 1 Disabled N/A
6720 SearchApp.exe 0x253f9460000 0x253f94c3fff VadS PAGE_EXECUTE_READWRITE 2 1 Disabled N/A
8492 OneDrive.exe 0x8dd0000 0x8ddffff VadS PAGE_EXECUTE_READWRITE 16 1 Disabled N/A
3132 powershell.exe 0x23ae56f0000 0x23ae56fffff VadS PAGE_EXECUTE_READWRITE 2 1 Disabled N/A
3132 powershell.exe 0x23afddf0000 0x23afde21fff VadS PAGE_EXECUTE_READWRITE 1 1 Disabled N/A
3132 powershell.exe 0x23afdf10000 0x23afdf1ffff VadS PAGE_EXECUTE_READWRITE 8 1 Disabled N/A
3132 powershell.exe 0x7df4cf470000 0x7df4cf47ffff VadS PAGE_EXECUTE_READWRITE 1 1 Disabled N/A
3132 powershell.exe 0x7df4cf480000 0x7df4cf51ffff VadS PAGE_EXECUTE_READWRITE 2 1 Disabled N/A
On récupère les numéros PID des exécutables .exe et on les scanne avec Malfind pour voir si, il y a des comportements bizarres.
On regarde si des choses on été désactivés et on remarque quelque chose qui est intéressent :
1800 rundll32.exe 0x2244e9a0000 0x2244ed9ffff VadS PAGE_EXECUTE_READWRITE 1024 1 Disabled MZ header
On voit que pour le processus 1800 rundll32.exe, les pages mémoires sont exécutables, en lecture et écriture, ceci permet d’écrite et exécuté du code légitime ou non.
De plus MZ header est désactivé, ça veut dire qu’une partie du code est exécutable mais qu’on a désactivée sa signature pour le caché.
On a une forte chance d’avoir à faire à un malware.
$ python3 vol.py -f analyse-memoire.dmp windows.malfind.Malfind --pid 1800 --dump
$ ls
pid.1800.vad.0x2244dde0000-0x2244dde0fff.dmp pid.1800.vad.0x2244e9a0000-0x2244ed9ffff.dmp
$ clamscan
Loading: 12s, ETA: 0s [========================>] 3.63M/3.63M sigs
Compiling: 3s, ETA: 0s [========================>] 41/41 tasks
pid.1800.vad.0x2244e9a0000-0x2244ed9ffff.dmp: Win.Exploit.D388a-9756522-0 FOUND
pid.1800.vad.0x2244dde0000-0x2244dde0fff.dmp: OK
----------- SCAN SUMMARY -----------
Known viruses: 3627731
Engine version: 1.5.2
Scanned directories: 1
Scanned files: 2
Infected files: 1
Data scanned: 4.27 MiB
Data read: 4.00 MiB (ratio 1.07:1)
Time: 19.814 sec (0 m 19 s)
Start Date: 2026:03:30 11:29:55
End Date: 2026:03:30 11:30:15
manalyse pid.1800.vad.0x2244e9a0000-0x2244ed9ffff.dmp
-- Analyse de pid.1800.vad.0x2244e9a0000-0x2244ed9ffff.dmp ---
[*] Warning: Please edit the configuration file (/manalyze/bin/manalyze.conf) with your VirusTotal API key.
[!] Error: ClamAV rules haven't been generated yet!
[!] Error: Please run /manalyze/bin/yara_rules/update_clamav_signatures.py to create them, and refer to the documentation for additional information.
[*] Warning: Yara callback received an unhandled message (6).
* Manalyze 0.9 *
-------------------------------------------------------------------------------
pid.1800.vad.0x2244e9a0000-0x2244ed9ffff.dmp
-------------------------------------------------------------------------------
Summary:
--------
Architecture: IMAGE_FILE_MACHINE_AMD64
Subsystem: IMAGE_SUBSYSTEM_WINDOWS_GUI
Compilation Date: 2024-Dec-06 15:29:38
Interesting strings found in the binary:
Contains domain names:
https://100.68.20.103
Libraries used to perform cryptographic operations:
Microsoft's Cryptography API
[ MALICIOUS ] The file headers were tampered with.
The RICH header checksum is invalid.
[ MALICIOUS ] The PE contains functions mostly used by malware.
[!] The program may be hiding some of its imports:
GetProcAddress
LoadLibraryA
LoadLibraryW
LoadLibraryExW
Functions which can be used for anti-debugging purposes:
CreateToolhelp32Snapshot
Code injection capabilities:
VirtualAllocEx
OpenProcess
WriteProcessMemory
VirtualAlloc
CreateRemoteThread
Uses Microsoft's cryptographic API:
CryptDecodeObjectEx
CryptImportPublicKeyInfo
CryptDuplicateKey
CryptDecrypt
CryptEncrypt
CryptImportKey
CryptGenRandom
CryptSetKeyParam
CryptDestroyKey
CryptReleaseContext
CryptAcquireContextW
Memory manipulation functions often used by packers:
VirtualAllocEx
VirtualAlloc
VirtualProtect
VirtualProtectEx
Has Internet access capabilities:
InternetOpenW
InternetConnectW
InternetSetOptionW
InternetReadFile
InternetCloseHandle
InternetCrackUrlW
WinHttpOpen
WinHttpReadData
WinHttpGetIEProxyConfigForCurrentUser
WinHttpGetProxyForUrl
WinHttpQueryHeaders
WinHttpReceiveResponse
WinHttpSendRequest
WinHttpOpenRequest
WinHttpSetOption
WinHttpQueryOption
WinHttpCloseHandle
WinHttpConnect
WinHttpCrackUrl
Leverages the raw socket API to access the Internet:
WS2_32.dll
Functions related to the privilege level:
AdjustTokenPrivileges
OpenProcessToken
Enumerates local disk drives:
GetVolumeInformationW
Manipulates other processes:
OpenProcess
WriteProcessMemory
The following exploit mitigation techniques have been detected
Stack Canary: enabled
SafeSEH: enabled (0 registered handlers)
ASLR: disabled
DEP: enabled
CFG: disabled
[ SUSPICIOUS ] The file contains overlay data.
3991552 bytes of data starting at offset 0x31800.
Overlay data amounts for 95.166% of the executable.
On extrait les zones mémoires qui contiennent les données du fichier rundll32.exe.
On scanne les zones mémoires avec un antivirus, ici c’est clamav, il détecte qu’un fichier est un malware (Win.Exploit.D388a-9756522-0), c’est une signature qui indique un malware de meterpreter.
On fait une analyse plus précise du malware avec manalyse et on trouve des choses intéressantes comme :
- Une chaîne qui indique une adresse codée en dure en https (port 443) : https://100.68.20.103.
- Des méthodes de chiffrements.
- Il utilise des entêtes falsifiés avec une somme de contrôle non valide.
- Beaucoup de fonctions sont utilisées par des malware.
$ python3 vol.py -f analyse-memoire.dmp windows.netscan.NetScan | grep rundll32.exe
0xa50a29eaea60.0TCPv4 10.0.2.15DB scan49709fin100.68.20.103 443 ESTABLISHED 1800 rundll32.exe 2025-04-01 22:11:15.000000 UTC
On vérifie les informations sur la connexion.
On peut confirmer qu’on a bien les informations suivantes :
- Nom : rundll32.exe.
- Port distant : 443.
- IP distant : 100.68.20.103.
- PID : 1800.
- Protocole connexion : TCP.