Análisis de VPC Flow Logs en GCP: detectar la exfiltración
VPC Flow Logs de Google Cloud en una investigación: campos, muestreo, salida por IP externa y cruce de las IP del atacante con el tráfico de VM.
En resumen. VPC Flow Logs es el único registro de Google Cloud que muestra lo que una VM comprometida envió por la red. Solo existe en las subredes donde se habilitó de antemano, está muestreado y los bytes son estimaciones. Sume bytes_sent por IP de destino externa cuando quien informa es su VM, mire los principales destinos durante la ventana del incidente y, sobre todo, cruce las IP del atacante de los registros de auditoría con los interlocutores de los flujos: una IP que llamó a sus API y habló con sus VM une el plano de control con el plano de datos.
Los registros de auditoría le dicen lo que se hizo a través de las API de Google Cloud. Los datos que lee un proceso dentro de una VM (un volcado de base de datos, archivos de un disco, secretos en memoria) y que salen por HTTPS nunca aparecen ahí. Los registros de flujo cubren ese hueco, con límites que debe dejar claros en el informe.
Qué contiene un registro de flujo
Los registros de flujo se escriben en projects/PROJECT/logs/compute.googleapis.com%2Fvpc_flows con un jsonPayload. La referencia de registros de Google enumera los campos; estos son los que sostienen la investigación:
| Campo | Uso |
|---|---|
connection.src_ip, src_port, dest_ip, dest_port, protocol | La 5-tupla |
start_time, end_time | La ventana de agregación del registro |
bytes_sent, packets_sent | Volumen estimado del origen al destino |
reporter | SRC o DEST: la VM de qué lado informó del flujo |
src_instance, dest_instance | Nombre de la VM, zona y proyecto cuando el extremo es una VM |
src_location, dest_location | Para las IP públicas: ASN, país, región, ciudad |
Tres propiedades de la descripción general de VPC Flow Logs de Google condicionan todo lo demás:
- Muestreo: la frecuencia de muestreo principal es dinámica y no configurable; la secundaria es del 50 % por defecto en las configuraciones hechas mediante la API de Compute Engine. Los bytes y paquetes se estiman a partir de los paquetes muestreados.
- Agregación: cada registro cubre un intervalo (5 segundos por defecto, configurable hasta 15 minutos).
- Sin contenido: solo metadatos.
Y una más, de la práctica: los registros de flujo solo existen donde alguien los habilitó (por subred, red u organización) antes del incidente. La retención por defecto en Cloud Logging es de 30 días.
La dirección importa: lea el campo reporter
Un flujo entre dos de sus VM puede registrarse dos veces, una por cada lado. Un flujo entre su VM e Internet solo lo registra su VM. Para medir la salida:
- quédese con los registros donde
reporter = SRCysrc_instanceestá informado (su VM es la emisora), y dest_ipes una dirección pública (no RFC 1918, ni los rangos de Private Google Access que utilice).
Después sume bytes_sent por dest_ip. La parte alta de esa lista, limitada a la ventana del incidente, es su lista de candidatos a exfiltración. dest_location.asn y country ayudan a distinguir una CDN de un VPS.
Correlacionar con los registros de auditoría
El uso más potente de los registros de flujo es la correlación. Los registros de auditoría le dan las IP del atacante (requestMetadata.callerIp) desde el lado de la API. Si la misma IP aparece en los registros de flujo:
- Entrante al puerto 22 después de un
setMetadataque añadessh-keysy unresetde la VM: el atacante inició sesión con la clave que inyectó. Vea abuso de Compute Engine. - Saliente por el 443 desde la VM, muchos registros, volumen creciente: una puerta trasera de un script de inicio que llama a casa, o datos que salen. MITRE T1071 para comando y control, T1048 para exfiltración por otro protocolo.
Ese vínculo, IP del lado de la API igual a interlocutor del lado de la red, convierte dos historias parciales en una sola cronología.
Consultar los registros de flujo
Logs Explorer sirve para un primer vistazo:
logName:"compute.googleapis.com%2Fvpc_flows"
jsonPayload.connection.dest_ip="203.0.113.66"
Para el volumen por destino a lo largo de un mes, enrute los registros de flujo a BigQuery y agréguelos allí, o expórtelos en JSON (vea Tipos de Cloud Audit Logs explicados; las vías de exportación son idénticas) y cárguelos en el analizador junto con los registros de auditoría.
Qué hace el analizador con los registros de flujo
El analizador agrega los registros de flujo en el navegador y produce:
- Pestaña Flujos VPC: total de registros y de bytes, bytes enviados a direcciones de Internet y los flujos más grandes (origen, destino, puerto, bytes, registros).
- Entidades IP: para cada IP de origen de llamadas, los bytes enviados a ella y recibidos de ella según los registros de flujo.
flow_large_egress(media, exfiltración, T1048): al menos 1 GiB enviado desde sus VM a una misma IP pública.flow_ioc_match(alta, comando y control, T1071): una IP detrás de un hallazgo de auditoría de gravedad alta (o una clave usada desde una IP nueva) también intercambió tráfico con sus VM. El objetivo se lee así:203.0.113.66 ↔ etl-worker-1 (1.9 GiB out, 47.1 KiB in).
Ambos alimentan la correlación de cadena de ataque. En el caso práctico ficticio, la coincidencia de flujos es lo que demuestra que la puerta trasera del script de inicio llegó a ejecutarse.
Límites que hay que indicar en el informe
- Sin registros de flujo, no hay conclusión. Si la subred tenía los registros de flujo desactivados, «ninguna salida grande» no significa nada.
- Estimaciones. Dé los volúmenes como aproximados, con la salvedad del muestreo.
- Puntos ciegos por diseño. El tráfico que nunca sale por una interfaz registrada (por ejemplo, a través de un proxy, o copiado mediante las API de Google en lugar de la red) necesita otras pruebas: el artículo sobre exfiltración de GCS y BigQuery cubre las copias del lado de la API.
- Infraestructura compartida. Un atacante que usa un rango de IP de un proveedor cloud puede compartirlo con servicios legítimos; confírmelo con los horarios y los puertos.
Antes del próximo incidente
Habilite los registros de flujo en las subredes que alojan cargas de trabajo sensibles, mantenga una frecuencia de muestreo secundaria que pueda permitirse y envíelos a un almacenamiento a largo plazo junto con los registros de auditoría. Usar VPC Flow Logs explica la configuración.
Preguntas frecuentes
¿Muestran los VPC Flow Logs el contenido del tráfico?
No. VPC Flow Logs solo registra metadatos de los flujos: IP y puertos de origen y destino, protocolo, bytes y paquetes estimados, el lado que informa y datos de la VM y de ubicación. No hay contenido.
¿Son exactos los recuentos de bytes de VPC Flow Logs?
No. Google describe bytes_sent y packets_sent como estimaciones basadas en paquetes muestreados y recomienda agregar en periodos más largos o sobre varios recursos para ganar precisión. Úselos para clasificar destinos y dimensionar una exfiltración, no como una cifra exacta.
Lecturas recomendadas
- Descripción general de VPC Flow Logs — documentación de Google Cloud.
- Formato de los registros de flujo — documentación de Google Cloud.
- MITRE ATT&CK T1048, Exfiltration Over Alternative Protocol.