Salta el contingut

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.