IntermedioWiresharkPCAPtráfico de redC2análisistutorial

Wireshark para Análisis de Tráfico de Malware: Tutorial Práctico

Tutorial práctico de Wireshark aplicado al análisis de tráfico de malware. Filtros para C2, exfiltración y lateral movement. Extracción de archivos de PCAPs, análisis de DNS/HTTP/TLS, y detección de beaconing con tshark.

MalwareIntel Research··8 min lectura
Serie: Entornos de Análisis — Parte 7

El malware habla: Wireshark escucha

Todo malware que se comunica genera tráfico de red observable. Un beacon de Cobalt Strike genera requests HTTPS periódicas. Un ransomware conecta al portal de pago en Tor. Un infostealer envía credenciales robadas via SMTP o HTTP POST. Un cryptominer conecta al mining pool via stratum protocol.

Wireshark captura todo este tráfico y te permite diseccionarlo paquete a paquete. Es la herramienta que conecta el comportamiento observado en el endpoint con la infraestructura del atacante.

Captura de tráfico durante análisis dinámico

Setup en el laboratorio

Opcion 1: Capturar en la VM de analisis
  - Abrir Wireshark en FLARE VM
  - Iniciar captura en la interfaz de red
  - Ejecutar malware
  - Detener captura, guardar PCAP

Opcion 2: Capturar en REMnux (mejor)
  - REMnux corre INetSim (servicios falsos)
  - tcpdump/Wireshark captura todo el trafico del lab
  - El malware en FLARE VM genera trafico hacia REMnux
  - Captura completa sin interferencia del malware
# En REMnux: capturar todo el trafico
sudo tcpdump -i eth0 -w /tmp/malware_traffic.pcap

# O con Wireshark (GUI)
wireshark &
# Seleccionar interfaz, iniciar captura

Con FakeNet-NG (en FLARE VM)

FakeNet-NG captura el tráfico Y simula servicios. El PCAP generado contiene las requests del malware y las respuestas falsas de FakeNet:

FakeNet-NG genera: fakenet_pcap_[timestamp].pcap
Abrir con Wireshark para analizar

Filtros esenciales para análisis de malware

DNS

# Todas las queries DNS
dns

# Solo queries (no responses)
dns.flags.response == 0

# Queries a dominios especificos
dns.qry.name contains "evil"

# Queries con respuesta NXDOMAIN (dominio no existe, posible DGA)
dns.flags.rcode == 3

# Queries DNS over TCP (inusual, posible tunneling)
dns && tcp

HTTP

# Todas las requests HTTP
http.request

# Solo POST (exfiltracion, C2 beacon response)
http.request.method == "POST"

# Request a host especifico
http.host contains "example.com"

# User-Agent especifico
http.user_agent contains "Mozilla"

# Descargas de ejecutables
http.content_type contains "application/x-msdownload"
http.content_type contains "application/octet-stream"

# HTTP con URI sospechosa
http.request.uri contains ".php"
http.request.uri contains "/gate"
http.request.uri contains "/panel"

TLS/HTTPS

# Handshakes TLS (nuevas conexiones cifradas)
tls.handshake.type == 1

# Server Name Indication (dominio al que conecta)
tls.handshake.extensions_server_name

# JA3 fingerprint (identificar cliente TLS)
tls.handshake.ja3

# Certificados auto-firmados (C2 frecuentemente usa self-signed)
tls.handshake.type == 11

TCP

# Nuevas conexiones (SYN)
tcp.flags.syn == 1 && tcp.flags.ack == 0

# Conexiones a puertos especificos
tcp.dstport == 4444      # Meterpreter default
tcp.dstport == 8080      # HTTP alternativo
tcp.dstport == 443       # HTTPS (C2 comun)

# Conexiones a IPs externas
!(ip.dst == 10.0.0.0/8) && !(ip.dst == 172.16.0.0/12) && !(ip.dst == 192.168.0.0/16)

Combinaciones útiles

# C2 beacon: HTTPS periodico a misma IP
tls.handshake.type == 1 && ip.dst == [C2_IP]

# Exfiltracion: POST grandes
http.request.method == "POST" && http.content_length > 10000

# DNS tunneling: queries con subdominios largos
dns.qry.name.len > 50

# Lateral movement: SMB
smb || smb2

# Tor: conexion a nodos conocidos
tcp.dstport == 9001 || tcp.dstport == 9030

Extracción de archivos

HTTP objects

File > Export Objects > HTTP

Wireshark lista todos los archivos transferidos via HTTP: ejecutables descargados, scripts, configuraciones. Seleccionar y guardar.

TCP stream

Para archivos transferidos por otros protocolos:

1. Click derecho en un paquete de la conexion
2. Follow > TCP Stream
3. Ver los datos transferidos
4. "Show and save data as": Raw
5. Save As

tshark extraction

# Extraer todos los objetos HTTP
tshark -r traffic.pcap --export-objects http,/tmp/extracted/

# Extraer campos especificos
tshark -r traffic.pcap -Y "http.request" -T fields \
  -e frame.time -e ip.src -e ip.dst -e http.host -e http.request.uri

# Extraer DNS queries
tshark -r traffic.pcap -Y "dns.flags.response==0" -T fields \
  -e dns.qry.name | sort | uniq -c | sort -rn | head -20

# Extraer User-Agents
tshark -r traffic.pcap -Y "http.user_agent" -T fields \
  -e http.user_agent | sort | uniq -c | sort -rn

Patrones de tráfico por tipo de malware

C2 Beacon (Cobalt Strike)

Patron: HTTPS periodico a misma IP/dominio
- Intervalo regular (60s default, con jitter 0-20%)
- Paquetes pequenos (check-in: ~200 bytes)
- Paquetes grandes ocasionales (descarga de comandos/tasks)
- JA3 fingerprint conocido
- SNI puede ser dominio legitimo (domain fronting)

Filtros:
tls.handshake.type == 1 && ip.dst == [IP_sospechosa]
# Verificar periodicidad en Statistics > I/O Graphs

Ransomware

Patron: 
1. DNS queries a dominio/IP del C2 (registro de victima)
2. Conexion HTTPS para enviar clave de cifrado
3. Posible conexion a Tor (.onion via Tor relay)
4. Tráfico de exfiltración masivo ANTES del cifrado (doble extorsión)

Filtros:
# Tor
tcp.dstport == 9001
# Exfiltracion grande
tcp.len > 1000 && !(ip.dst == 10.0.0.0/8)

Infostealer

Patron:
1. DNS query al C2
2. HTTP POST o SMTP con datos robados
3. A veces usa Telegram Bot API como C2

Filtros:
# Telegram Bot API
http.host contains "api.telegram.org"
# SMTP exfiltration
smtp
tcp.dstport == 587 || tcp.dstport == 465
# HTTP POST con contenido largo (datos robados)
http.request.method == "POST" && http.content_length > 1000

Botnet / Miner

Patron:
1. Conexion a mining pool (stratum protocol)
2. Escaneo de red masivo (muchos SYN a muchas IPs)
3. Conexion a C2 para recibir comandos

Filtros:
# Stratum protocol
frame contains "stratum"
tcp.dstport == 3333 || tcp.dstport == 4444 || tcp.dstport == 5555
# Escaneo de red
tcp.flags.syn == 1 && tcp.flags.ack == 0
# Muchos SYN a puerto 23 (Mirai telnet scan)
tcp.dstport == 23 && tcp.flags.syn == 1

Análisis de beaconing

Con Wireshark: Statistics

Statistics > Conversations > TCP
- Ordenar por Packets (descendente)
- Conexiones con muchos paquetes pequenos a misma IP = beaconing

Statistics > I/O Graphs
- Filtro: ip.dst == [IP_sospechosa]
- Granularidad: 1 segundo
- Patron periodico visible en el grafico = beaconing

Con RITA (automatizado)

# RITA (Real Intelligence Threat Analytics) detecta beaconing automaticamente
# Importar PCAP a RITA
rita import --database malware_analysis traffic.pcap

# Buscar beacons
rita show-beacons malware_analysis
# Output: source, destination, score, connections, avg_bytes
# Score alto = probable beacon

Con tshark (scripting)

# Extraer timestamps de conexiones a IP sospechosa
tshark -r traffic.pcap -Y "ip.dst == 192.168.1.100 && tcp.flags.syn==1" \
  -T fields -e frame.time_epoch | \
  awk 'NR>1{print $1-prev} {prev=$1}'
# Muestra intervalos entre conexiones
# Intervalos regulares (~60s) = beaconing

JA3/JA3S fingerprinting

JA3 es un hash del TLS Client Hello que identifica el software que inicia la conexión. Cobalt Strike, Metasploit, y otros C2 tienen JA3 fingerprints conocidos.

# Extraer JA3 hashes de un PCAP
tshark -r traffic.pcap -Y "tls.handshake.type==1" -T fields \
  -e ip.src -e ip.dst -e tls.handshake.ja3

# Buscar JA3 conocidos de C2
# Cobalt Strike JA3 (ejemplo, varia con malleable profiles):
# 72a589da586844d7f0818ce684948eea

# Recursos:
# ja3er.com - base de datos de JA3 fingerprints
# sslbl.abuse.ch - JA3 de malware conocido

Workflow completo: PCAP de malware

# 1. Estadisticas generales
capinfos traffic.pcap

# 2. Conversaciones principales
tshark -r traffic.pcap -q -z conv,tcp | head -20

# 3. DNS queries (dominios contactados)
tshark -r traffic.pcap -Y "dns.flags.response==0" -T fields \
  -e dns.qry.name | sort -u

# 4. IPs contactadas
tshark -r traffic.pcap -Y "tcp.flags.syn==1 && tcp.flags.ack==0" \
  -T fields -e ip.dst | sort | uniq -c | sort -rn | head -20

# 5. HTTP requests
tshark -r traffic.pcap -Y "http.request" -T fields \
  -e ip.dst -e http.host -e http.request.uri | head -20

# 6. Extraer archivos
tshark -r traffic.pcap --export-objects http,/tmp/extracted/
ls /tmp/extracted/

# 7. Buscar strings interesantes en todo el PCAP
strings traffic.pcap | grep -iE '(password|token|key|http|\.exe)' | head -30

# 8. JA3 fingerprints
tshark -r traffic.pcap -Y "tls.handshake.type==1" -T fields \
  -e ip.dst -e tls.handshake.ja3 | sort | uniq -c | sort -rn

# 9. Abrir en Wireshark para analisis visual detallado
wireshark traffic.pcap

Mapeo MITRE ATT&CK

Tipo de tráficoTécnica ATT&CKFiltro Wireshark
HTTP/HTTPS C2T1071.001 (Web Protocols)http.request || tls.handshake
DNS C2/tunnelingT1071.004 (DNS)dns
Exfiltración HTTPT1041 (Exfiltration Over C2)http.request.method=="POST"
Exfiltración SMTPT1048.003 (Exfiltration Over Unencrypted Protocol)smtp
Lateral SMBT1021.002 (SMB/Admin Shares)smb || smb2
TorT1090.003 (Multi-hop Proxy)tcp.dstport==9001
DGAT1568.002 (Dynamic Resolution)dns.flags.rcode==3 (NXDOMAIN)
BeaconingT1071 (Application Layer Protocol)Análisis de periodicidad

Fuentes y referencias

Preguntas frecuentes

Artículos relacionados

Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.