Skip to content

Esta herramienta no está afiliada a Amazon Web Services, Inc. ni a Amazon.com, Inc., ni cuenta con su respaldo o patrocinio. AWS, Amazon Web Services, CloudTrail y GuardDuty son marcas comerciales de Amazon.com, Inc. o de sus filiales. Los demás nombres son marcas comerciales de sus respectivos propietarios.

Respuesta a incidentes en AWS: de clave filtrada a minería

Incidente ficticio en AWS investigado con sus registros: clave filtrada, reconocimiento, administrador oculto, GuardDuty borrado, 320 objetos de S3 y minería.

Publicado el 7 min de lectura

Escenario ficticio. Todo lo que aparece en este artículo (la empresa, las personas, la cuenta 111122223333, las claves, el bucket) es inventado. Las direcciones IP proceden de los rangos reservados para documentación del RFC 5737. Son los datos que hay detrás del botón Probar con un ejemplo del analizador, así que puede reproducir cada paso.

En resumen. El 14 de septiembre de 2026 (ficticio), la clave de acceso del desarrollador dev-marco se utiliza desde un VPS con Kali Linux. En 48 minutos, el atacante valida la clave, enumera la cuenta, crea un usuario administrador backup-admin con su propia clave y contraseña de consola, elimina GuardDuty en dos regiones, descarga 320 objetos de acme-customer-exports y lanza ocho instancias GPU en ap-southeast-1 que minan para un pool. Los registros lo muestran todo. El veredicto es Indicios de compromiso, y la lista de remediación debe cubrir dos claves, un usuario, una política, dos detectores, ocho instancias y una evaluación de las obligaciones de notificación.

Las evidencias

El ZIP de ejemplo reproduce exportaciones reales:

FuenteContenido
Trail de CloudTrail (estructura de S3, json.gz, más un archivo de resumen)449 eventos del 10 al 14 de septiembre, incluidos 325 eventos de datos de S3
VPC Flow Logs (entrega en S3, con línea de cabecera)2335 registros, eu-west-1 y ap-southeast-1
Registros de acceso al servidor de S3324 líneas para acme-customer-exports
Salida de get-findings de GuardDuty2 hallazgos, exportados antes de que se eliminaran los detectores
Informe de credenciales de IAM4 entradas, generado después del incidente

Cuatro días tranquilos (del 10 al 13 de septiembre) sirven de línea base: ops-julia inicia sesión en la consola con MFA desde la dirección de la oficina 198.51.100.24; dev-marco usa la CLI con su clave de larga duración desde esa misma dirección; un rol de tarea de ECS se asume a diario.

Cronología (UTC, 14 de septiembre de 2026)

HoraEventoPrincipalHallazgo
09:02:11sts:GetCallerIdentity desde 203.0.113.77, el agente de usuario contiene kalidev-marco (AKIA3EXAMPLEMARCO123)Clave de acceso de larga duración usada desde una IP nueva (alta), herramientas ofensivas en el agente de usuario (alta), comprobación de validez con GetCallerIdentity (baja)
09:03–09:0748 llamadas List/Describe/Get en IAM, S3, EC2, Lambda, RDS, KMS, Organizations…, 14 de ellas con AccessDenieddev-marcoRáfaga de enumeración de API (media), ráfaga de errores AccessDenied (media)
09:07GuardDuty: Discovery:IAMUser/AnomalousBehavior, PenTest:IAMUser/KaliLinux—Hallazgo de GuardDuty ×2 (media)
09:08:40iam:CreateUser backup-admindev-marcoUsuario de IAM creado (baja)
09:08:52AttachUserPolicy AdministratorAccess → backup-admindev-marcoPolítica de administrador asociada (alta)
09:09:05CreateAccessKey para backup-admin → AKIA3EXAMPLEBKUP4567dev-marcoClave de acceso creada para otro usuario (alta)
09:09:20CreateLoginProfile para backup-admin, sin restablecimiento obligatoriodev-marcoContraseña de consola establecida (media)
09:12:12 / 09:12:43guardduty:DeleteDetector en us-east-1 y eu-west-1 (Boto3)backup-adminGuardDuty desactivado ×2 (alta)
09:15:00–09:36:02ListObjects y después 320 GetObject en acme-customer-exportsbackup-adminDescarga masiva de S3: eventos de datos (alta) y registros de acceso (alta)
09:41:10CreateKeyPair ops-maint en ap-southeast-1backup-adminPar de claves SSH creado (baja)
09:42:05Grupo de seguridad abierto a 0.0.0.0/0 en el puerto 22backup-adminGrupo de seguridad abierto a internet (media)
09:43:10Aumento de cuota de "Running On-Demand P instances"backup-adminSolicitud de aumento de cuota de servicio (media)
09:44:10 / 09:46:10RunInstances 4× p3.8xlarge, 4× g4dn.12xlargebackup-adminInstancias GPU lanzadas (alta), región no utilizada antes (media)
09:50:31ConsoleLogin de backup-admin, MFAUsed: No, Firefox en Linuxbackup-adminInicio de sesión en la consola sin MFA (media)
09:52 → 12:018 interfaces mantienen conexiones con 192.0.2.150 en los puertos 3333 y 14444—Conexiones a puertos de pools de criptominería (alta), 1040 registros

El informe de credenciales añade un hallazgo de configuración: backup-admin tiene contraseña de consola y no tiene MFA.

Cómo avanza la investigación

1. El veredicto. Veintitrés hallazgos, varios de ellos de gravedad alta y con señales propias de un atacante (anomalía de acceso, evasión de defensas, exfiltración, impacto): el veredicto es Indicios de compromiso. Los motivos principales que se enumeran son el agente de usuario ofensivo, la clave usada desde una IP nueva, la política de administrador, la clave creada para otro usuario y las dos eliminaciones de GuardDuty.

2. El punto de entrada. Pivote sobre AKIA3EXAMPLEMARCO123 en la pestaña Entidades: cuatro días desde 198.51.100.24 con una CLI de macOS y, a partir de las 09:02, 203.0.113.77 con una cadena de compilación de Kali. La primera llamada desde la nueva dirección es GetCallerIdentity: la apertura de manual de una clave de acceso filtrada. Cómo se filtró la clave (el escenario habla de un repositorio público) queda fuera de los registros de AWS.

3. La segunda clave. Pivote sobre 203.0.113.77: además de la clave de dev-marco, esa dirección utilizó AKIA3EXAMPLEBKUP4567, la clave generada a las 09:09:05 para backup-admin. A partir de las 09:12, el atacante no vuelve a usar la clave filtrada. Desactivar solo la clave de dev-marco no habría cambiado nada. Es el patrón de persistencia en IAM en su forma más simple.

4. Evasión de defensas. Ambos detectores se eliminan en menos de un minuto, tres minutos después de que exista la puerta trasera. CloudTrail sigue funcionando (no hay StopLogging), y por eso el resto de la historia es visible. Los hallazgos de GuardDuty solo sobreviven porque se habían exportado; consulte el artículo sobre evasión de defensas.

5. Los datos. 320 GetObject en 21 minutos por un único principal sobre un único bucket, vistos dos veces: en los eventos de datos de CloudTrail y en los registros de acceso al servidor. Las claves de los objetos (de exports/2026/customers/customers-0001.csv.gz a -0320) constituyen el inventario de divulgación. Observe que los VPC Flow Logs no muestran nada aquí: la descarga fue de S3 al host del atacante a través de internet, sin pasar nunca por la VPC, exactamente el límite que se describe en evidencias de exfiltración de datos en S3.

6. El coste. Una región sin actividad durante la línea base, un aumento de cuota, un par de claves, SSH abierto a todo el mundo y ocho instancias GPU; desde las 09:52, sus interfaces se comunican cada minuto con una misma dirección en puertos de pools. El artículo sobre minería de criptomonedas cubre esta fase.

7. La sesión de consola. A las 09:50, el atacante inicia sesión como backup-admin sin MFA. Todo lo que hiciera en la consola a partir de ese momento aparecería con sessionCredentialFromConsole; en este conjunto de datos, la sesión cierra la historia.

La lista de remediación resultante

Primero la contención, con los valores extraídos de los registros:

  1. Desactive AKIA3EXAMPLEMARCO123 y AKIA3EXAMPLEBKUP4567; sustituya la clave de dev-marco y elimínela del repositorio.
  2. Guarde y después elimine backup-admin (política, clave, perfil de inicio de sesión).
  3. Desasocie AdministratorAccess de backup-admin y revise quién más la tiene.
  4. Deniegue las llamadas a la API desde 203.0.113.77 mientras investiga.
  5. Cree una instantánea de una instancia, termine las ocho de ap-southeast-1 y revise todas las demás regiones; elimine el par de claves ops-maint y el grupo de seguridad abierto; retire la solicitud de cuota L-417A185B.
  6. Vuelva a activar GuardDuty en us-east-1 y eu-west-1 (idealmente, en todas las regiones).
  7. Trate acme-customer-exports como exfiltrado: enumere los 320 objetos y evalúe las obligaciones de notificación.
  8. Abra un caso en AWS Support sobre el uso no autorizado.

Lo que este ejemplo no muestra

Los incidentes reales son más desordenados: roles de CI ruidosos, varias IP del atacante, encadenamiento de roles, actividad repartida a lo largo de semanas, registros que faltan justo donde los necesita. El ejemplo es deliberadamente limpio para que el método se vea con claridad. Lea los límites de una investigación basada solo en registros antes de aplicar la misma confianza a datos reales, y siga la guía paso a paso de análisis de logs de CloudTrail para el flujo de trabajo.

Artículos relacionados

Instancias GPU, una factura disparada, una región sin uso: confirme la criptominería en AWS con CloudTrail y Flow Logs, contenga y averigüe cómo entraron.
Pruebe o descarte el robo de datos en S3: eventos de datos de CloudTrail, registros de acceso de S3, buckets públicos, instantáneas compartidas y sus límites.
Clave de acceso de AWS filtrada: desactívela y use CloudTrail para ver dónde se usó, qué enumeró, qué creó y a qué datos pudo acceder el atacante con ella.

Esta herramienta no está afiliada a Amazon Web Services, Inc. ni a Amazon.com, Inc., ni cuenta con su respaldo o patrocinio. AWS, Amazon Web Services, CloudTrail y GuardDuty son marcas comerciales de Amazon.com, Inc. o de sus filiales. Los demás nombres son marcas comerciales de sus respectivos propietarios.