PR5042 - Anàlisi de Memòria amb Volatility3
Objectius
- Analitzar un dump de memòria RAM amb Volatility3
- Identificar processos maliciosos en execució
- Detectar connexions de xarxa sospitoses
- Extreure malware de la memòria per a anàlisi
- Identificar indicadors de compromís (IoC)
Prerequisits
| Element | Detall |
|---|---|
| Temps estimat | 4 hores |
| Eines necessàries | Docker Desktop |
| Fitxers de la pràctica | memory-malware.mem - disponible al Moodle |
| Coneixements previs | Processos de Windows, conceptes bàsics de malware |
Introducció
L'anàlisi de memòria és essencial per a la detecció de malware que utilitza tècniques d'evasió avançades com process hollowing, DLL injection, o malware fileless que mai escriu res al disc.
En aquesta pràctica, analitzem un dump de memòria RAM d'un sistema Windows infectat. El malware s'ha injectat en un procés legítim per evadir les solucions antivirus.
sequenceDiagram
participant ATTACK as Atacant
participant MALWARE as Malware
participant LEGIT as Procés legítim\n(explorer.exe)
participant RAM as Memòria RAM
ATTACK->>MALWARE: Executa payload
MALWARE->>LEGIT: Process hollowing
Note over LEGIT: El procés legítim\nés buidat i substituït
LEGIT->>RAM: Execució en memòria
Note over RAM: Sense fitxers al disc\n= evasió d'AV
LEGIT->>ATTACK: Shell inversa (C2)
Part 1: Configuració de l'entorn
1.1 Desplegar Volatility3 en Docker
# docker-compose.yml
version: '3'
services:
volatility:
image: sk4la/volatility3:latest
container_name: vol3-NOMCOGNOM
hostname: volatility-NOMCOGNOM
volumes:
- ./evidence:/evidence
- ./output:/output
command: sleep infinity
# Cuckoo Sandbox per a anàlisi dinàmica (opcional)
# cuckoo:
# image: remnux/cuckoo
# container_name: cuckoo-NOMCOGNOM
# ports:
# - "8080:80"
# Iniciar l'entorn
docker compose up -d
# Verificar que Volatility funciona
docker exec vol3-NOMCOGNOM python3 /volatility3/vol.py --version
# Posar el fitxer de memòria al directori evidence/
cp ~/Downloads/memory-malware.mem evidence/
# Verificar el hash del fitxer
sha256sum evidence/memory-malware.mem > evidence/memory-malware.sha256
Part 2: Reconeixement de la Imatge de Memòria
2.1 Identificar el sistema operatiu
# Volatility3 identifica automàticament el perfil de Windows
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.info.Info
# Sortida esperada:
# Variable: Value
# Kernel Base: 0xf80002a52000
# DTB: 0x187000
# Symbols: windows.ntos.win10x64.19041.0.zip
# Is64Bit: True
# NtSystemRoot: C:\Windows
# ...
2.2 Llistar tots els processos
# Llistar processos en execució
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.pslist.PsList \
| tee /output/pslist-NOMCOGNOM.txt
# Llistar processos amb arbre de jerarquia (parent-child)
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.pstree.PsTree \
| tee /output/pstree-NOMCOGNOM.txt
Reflexió 1
Observant l'arbre de processos (pstree), hi ha algun procés que sembli anormal per la seva posició en l'arbre? Per exemple: un procés que normalment hauria de tenir un pare específic però en té un de diferent?
2.3 Detectar processos sospitosos
Buscar processos típicament usats per malware:
# Processos amb noms similars als legítims (typosquatting)
# Malware sovint usa noms com: svchost32.exe, lsaas.exe, services.exe (plural)
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.pslist.PsList | \
grep -iE "svchost|lsass|csrss|winlogon|smss|services|explorer"
# Buscar processos que s'haurien d'executar únicament una vegada
# (lsass, csrss, winlogon, smss → han d'existir exactament una vegada)
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.pslist.PsList | \
awk '{print $5}' | sort | uniq -c | sort -rn | head -20
Part 3: Anàlisi de Connexions de Xarxa
# Connexions actives i recents (sockens tancats)
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.netstat.NetStat \
| tee /output/netstat-NOMCOGNOM.txt
# Buscar connexions a ports no estàndard (C2)
docker exec vol3-NOMCOGNOM bash -c "
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.netstat.NetStat | \
grep -v ':80 \|:443 \|:53 \|:445 \|:0 ' | \
grep 'ESTABLISHED\|LISTEN'
"
# Buscar connexions a IPs públiques (no LAN)
docker exec vol3-NOMCOGNOM bash -c "
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.netstat.NetStat | \
grep -v '127\.\|192\.168\.\|10\.\|172\.\|0\.0\.0\.0' | \
grep ESTABLISHED
"
Reflexió 2
Quines connexions has trobat a IPs no locals? Busca les IPs en bases de dades de reputació (VirusTotal, AbuseIPDB, Shodan). Quina informació trobes sobre cada IP?
Part 4: Anàlisi de DLL Injection i Process Hollowing
# Llistar DLLs carregades per cada procés
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.dlllist.DllList \
--pid 1234 \ # Substituir pel PID sospitós
| tee /output/dlllist-1234-NOMCOGNOM.txt
# Detectar DLLs amb paths sospitoses
# Les DLLs legítimes de Windows estan a C:\Windows\System32
docker exec vol3-NOMCOGNOM bash -c "
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.dlllist.DllList | \
grep -v 'C:\\\\Windows\\\\System32\\|C:\\\\Windows\\\\SysWOW64' | \
grep '\.dll'
"
# Detectar injection comparant VAD (Virtual Address Descriptor) amb mòduls
# Un procés injectat tindrà seccions de memòria executables sense DLL associada
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.malfind.Malfind \
| tee /output/malfind-NOMCOGNOM.txt
# Malfind: detecta regions de memòria injectades
# Busca regions:
# - Amb permisos PAGE_EXECUTE_READWRITE (sospitós)
# - Que semblen contenir codi PE (MZ header)
# Interpretar la sortida de Malfind:
# PID: ID del procés
# Start VPN: adreça virtual d'inici
# End VPN: adreça virtual de fi
# Protection: permisos de memòria
# CommitCharge: pàgines de memòria usades
# PrivateMemory: si és memòria privada (sospitós si és codi)
Part 5: Extracció del Malware
# Extreure el procés complet de la memòria
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.dumpfiles.DumpFiles \
--pid 1234 \
-o /output/
# Extreure la regió de memòria sospitosa identificada per Malfind
docker exec vol3-NOMCOGNOM \
python3 /volatility3/vol.py \
-f /evidence/memory-malware.mem \
windows.memmap.Memmap \
--pid 1234 \
--dump \
-o /output/
# Identificar el tipus de fitxer extret
file output/*.dmp
file output/*.dat
# Calcular hash per a buscar a VirusTotal
sha256sum output/*.exe 2>/dev/null | head -5
md5sum output/*.exe 2>/dev/null | head -5
5.1 Anàlisi estàtica del malware extret
# Analitzar l'executable extret SENSE executar-lo
# Buscar strings interessants
strings -a output/malware.exe | grep -E "http|ftp|cmd|powershell|reg|exec|shell"
# Buscar IoCs: IPs, dominis, claus de registre
strings -a output/malware.exe | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
strings -a output/malware.exe | grep -oE '[a-zA-Z0-9.-]+\.(com|net|org|io|onion)'
# Analitzar les imports (quines funcions del SO usa)
docker exec vol3-NOMCOGNOM bash -c "
python3 -c \"
import pefile
pe = pefile.PE('/output/malware.exe')
for entry in pe.DIRECTORY_ENTRY_IMPORT:
print(f'Libreria: {entry.dll.decode()}')
for imp in entry.imports:
if imp.name:
print(f' - {imp.name.decode()}')
\"
"
# Funcions sospitoses a buscar:
# CreateRemoteThread → DLL injection
# VirtualAllocEx → Alloació de memòria en un procés extern
# WriteProcessMemory → Escriptura en la memòria d'un altre procés
# OpenProcess → Accés a un procés extern (típic de injection)
# RegSetValueEx → Persistència via registre de Windows
Reflexió 3
Quines funcions importades has trobat que indiquen injection de codi? Quin tipus de malware (trojan, ransomware, RAT, etc.) creus que és, basant-te en les seves funcions importades i les connexions de xarxa?
Part 6: Informe d'Indicadors de Compromís (IoC)
Documenta tots els IoCs trobats per compartir amb altres equips:
## Indicadors de Compromís (IoC) - NOMCOGNOM
**Data**: ____________________
**Origen**: Anàlisi de memòria memory-malware.mem
### Hashes
| Tipus | Hash | Descripció |
|-------|------|-----------|
| SHA-256 | abc123... | Fitxer de malware extret |
| MD5 | def456... | DLL injectada |
### IPs malicioses
| IP | Port | Protocolo | Ús |
|----|------|-----------|-----|
| 185.220.101.50 | 4444 | TCP | C2 (Command and Control) |
### Dominis maliciosos
| Domini | Resolució | Ús |
|--------|-----------|-----|
| evil-c2.xyz | 185.220.101.50 | C2 |
### Claus de registre de persistència
| Clau | Valor | Descripció |
|------|-------|-----------|
| HKCU\Software\Microsoft\Windows\CurrentVersion\Run | malware.exe | Persistència |
### Noms de processos/fitxers
| Nom | Path | Notes |
|-----|------|-------|
| svchost32.exe | C:\Users\Public\ | Fals svchost (typosquatting) |
Informe de la pràctica
Crea el document informe_pr5042_NOMCOGNOM.md:
# Informe PR5042 - Anàlisi de Memòria amb Volatility3
**Alumne**: NOMCOGNOM
**Data**: ____________________
## 1. Sistema analitzat
- OS: [windows.info output]
- Data/hora captura RAM: ___
## 2. Processos sospitosos identificats
| PID | Nom | PPID | Motiu de sospita |
|-----|-----|------|-----------------|
| | | | |
## 3. Connexions de xarxa sospitoses
| PID | Procés | IP remota | Port | Protocol |
|-----|--------|-----------|------|----------|
| | | | | |
## 4. Injecció de codi
- Procés afectat: [nom + PID]
- Tècnica detectada: Process Hollowing / DLL Injection
- Evidència de Malfind: [captures]
## 5. Malware extret
- Hash SHA-256: ___
- Strings rellevants trobats: ___
- Funcions sospitoses: ___
## 6. IoCs
[Taula completa d'indicadors de compromís]
## 7. Reflexions
[Respostes a les 3 reflexions]
Rúbrica
Vegeu Rúbrica PR5042.