AWS Pentesting
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.
Información Básica
Antes de comenzar el pentesting en un entorno de AWS, hay algunas cosas básicas que necesitas saber sobre cómo funciona AWS para ayudarte a entender qué necesitas hacer, cómo encontrar configuraciones incorrectas y cómo explotarlas.
Conceptos como la jerarquía de organización, IAM y otros conceptos básicos se explican en:
Laboratorios para aprender
- https://github.com/RhinoSecurityLabs/cloudgoat
- https://github.com/BishopFox/iam-vulnerable
- https://github.com/nccgroup/sadcloud
- https://github.com/bridgecrewio/terragoat
- https://github.com/ine-labs/AWSGoat
- http://flaws.cloud/
- http://flaws2.cloud/
Herramientas para simular ataques:
- https://github.com/Datadog/stratus-red-team/
- https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main
Metodología de Pentester/Red Team de AWS
Para auditar un entorno de AWS, es muy importante saber: qué servicios se están utilizando, qué está siendo expuesto, quién tiene acceso a qué, y cómo están conectados los servicios internos de AWS y los servicios externos.
Desde el punto de vista de un Red Team, el primer paso para comprometer un entorno de AWS es conseguir obtener algunas credenciales. Aquí tienes algunas ideas sobre cómo hacerlo:
- Filtraciones en github (o similar) - OSINT
- Ingeniería Social
- Reutilización de contraseñas (filtraciones de contraseñas)
- Vulnerabilidades en Aplicaciones Alojadas en AWS
- Server Side Request Forgery con acceso al endpoint de metadatos
- Lectura de Archivos Locales
/home/USERNAME/.aws/credentialsC:\Users\USERNAME\.aws\credentials- terceros comprometidos
- Empleado Interno
- Cognito credenciales
O comprometiendo un servicio no autenticado expuesto:
AWS - Unauthenticated Enum & Access
O si estás haciendo una revisión, podrías simplemente pedir credenciales con estos roles:
AWS - Permissions for a Pentest
Note
Después de haber conseguido obtener credenciales, necesitas saber a quién pertenecen esas credenciales, y a qué tienen acceso, por lo que necesitas realizar alguna enumeración básica:
Enumeración Básica
SSRF
Si encontraste un SSRF en una máquina dentro de AWS, consulta esta página para trucos:
Whoami
Una de las primeras cosas que necesitas saber es quién eres (en qué cuenta estás y otra información sobre el entorno de AWS):
# Easiest way, but might be monitored?
aws sts get-caller-identity
aws iam get-user # This will get your own user
# If you have a Key ID
aws sts get-access-key-info --access-key-id=ASIA1234567890123456
# Get inside error message
aws sns publish --topic-arn arn:aws:sns:us-east-1:*account id*:aaa --message aaa
# From metadata
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/dynamic/instance-identity/document
Caution
Tenga en cuenta que las empresas pueden usar canary tokens para identificar cuándo se están robando y utilizando tokens. Se recomienda verificar si un token es un canary token o no antes de usarlo.
Para más información ver esta página.
Enumeración de Organizaciones
Enumeración de IAM
Si tiene suficientes permisos, verificar los privilegios de cada entidad dentro de la cuenta de AWS le ayudará a entender qué puede hacer usted y otras identidades y cómo escalar privilegios.
Si no tiene suficientes permisos para enumerar IAM, puede robarlos mediante fuerza bruta para averiguarlos.
Verifique cómo realizar la enumeración y la fuerza bruta en:
AWS - IAM, Identity Center & SSO Enum
Note
Ahora que tiene algo de información sobre sus credenciales (y si es un red team, espero que no haya sido detectado). Es hora de averiguar qué servicios se están utilizando en el entorno.
En la siguiente sección puede verificar algunas formas de enumerar algunos servicios comunes.
Enumeración de Servicios, Post-Explotación y Persistencia
AWS tiene una asombrosa cantidad de servicios, en la siguiente página encontrará información básica, enumeración cheatsheets**,** cómo evitar la detección, obtener persistencia y otros trucos de post-explotación sobre algunos de ellos:
Tenga en cuenta que no necesita realizar todo el trabajo manualmente, a continuación en esta publicación puede encontrar una sección sobre herramientas automáticas.
Además, en esta etapa puede haber descubierto más servicios expuestos a usuarios no autenticados, podría ser capaz de explotarlos:
AWS - Unauthenticated Enum & Access
Escalación de Privilegios
Si puede ver al menos sus propios permisos sobre diferentes recursos, podría ver si puede obtener más permisos. Debería centrarse al menos en los permisos indicados en:
Servicios Expuestos Públicamente
Mientras enumeraba los servicios de AWS, puede haber encontrado algunos de ellos exponiendo elementos a Internet (puertos de VM/Contenedores, bases de datos o servicios de cola, instantáneas o buckets…).
Como pentester/red teamer, siempre debe verificar si puede encontrar información sensible / vulnerabilidades en ellos, ya que podrían proporcionarle más acceso a la cuenta de AWS.
En este libro debería encontrar información sobre cómo encontrar servicios de AWS expuestos y cómo verificarlos. Sobre cómo encontrar vulnerabilidades en servicios de red expuestos, le recomendaría buscar el servicio específico en:
Comprometiendo la Organización
Desde la cuenta raíz/administrativa
Cuando la cuenta de administración crea nuevas cuentas en la organización, se crea un nuevo rol en la nueva cuenta, llamado por defecto OrganizationAccountAccessRole y otorgando la política de AdministratorAccess a la cuenta de administración para acceder a la nueva cuenta.
.png)
Por lo tanto, para acceder como administrador a una cuenta secundaria, necesita:
- Comprometer la cuenta de administración y encontrar el ID de las cuentas secundarias y los nombres del rol (OrganizationAccountAccessRole por defecto) que permite a la cuenta de administración acceder como administrador.
- Para encontrar cuentas secundarias, vaya a la sección de organizaciones en la consola de aws o ejecute
aws organizations list-accounts - No puede encontrar el nombre de los roles directamente, así que verifique todas las políticas IAM personalizadas y busque cualquier que permita
sts:AssumeRolesobre las cuentas secundarias descubiertas previamente. - Comprometer un principal en la cuenta de administración con permiso
sts:AssumeRolesobre el rol en las cuentas secundarias (incluso si la cuenta permite que cualquiera de la cuenta de administración se impersonifique, como es una cuenta externa, son necesarios permisos específicos dests:AssumeRole).
Herramientas Automáticas
Recon
- aws-recon: Una herramienta de colección de inventario enfocada en la seguridad de AWS, multihilo, escrita en Ruby.
# Install
gem install aws_recon
# Recon and get json
AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose
- cloudlist: Cloudlist es una herramienta multi-nube para obtener Activos (Nombres de host, Direcciones IP) de Proveedores de Nube.
- cloudmapper: CloudMapper te ayuda a analizar tus entornos de Amazon Web Services (AWS). Ahora contiene mucha más funcionalidad, incluyendo auditoría de problemas de seguridad.
# Installation steps in github
# Create a config.json file with the aws info, like:
{
"accounts": [
{
"default": true,
"id": "<account id>",
"name": "dev"
}
],
"cidrs":
{
"2.2.2.2/28": {"name": "NY Office"}
}
}
# Enumerate
python3 cloudmapper.py collect --profile dev
## Number of resources discovered
python3 cloudmapper.py stats --accounts dev
# Create HTML report
## In the report you will find all the info already
python3 cloudmapper.py report --accounts dev
# Identify potential issues
python3 cloudmapper.py audit --accounts dev --json > audit.json
python3 cloudmapper.py audit --accounts dev --markdow > audit.md
python3 cloudmapper.py iam_report --accounts dev
# Identify admins
## The permissions search for are in https://github.com/duo-labs/cloudmapper/blob/4df9fd7303e0337ff16a08f5e58f1d46047c4a87/shared/iam_audit.py#L163-L175
python3 cloudmapper.py find_admins --accounts dev
# Identify unused elements
python3 cloudmapper.py find_unused --accounts dev
# Identify publivly exposed resources
python3 cloudmapper.py public --accounts dev
python cloudmapper.py prepare #Prepare webserver
python cloudmapper.py webserver #Show webserver
- cartography: Cartography es una herramienta de Python que consolida los activos de infraestructura y las relaciones entre ellos en una vista gráfica intuitiva impulsada por una base de datos Neo4j.
# Install
pip install cartography
## At the time of this writting you need neo4j version 3.5.*
# Get AWS info
AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt --neo4j-user neo4j
- starbase: Starbase recopila activos y relaciones de servicios y sistemas, incluyendo infraestructura en la nube, aplicaciones SaaS, controles de seguridad y más en una vista gráfica intuitiva respaldada por la base de datos Neo4j.
- aws-inventory: (Usa python2) Esta es una herramienta que intenta descubrir todos los recursos de AWS creados en una cuenta.
- aws_public_ips: Es una herramienta para obtener todas las direcciones IP públicas (tanto IPv4/IPv6) asociadas con una cuenta de AWS.
Privesc & Exploiting
- SkyArk: Descubre los usuarios más privilegiados en el entorno de AWS escaneado, incluyendo a los AWS Shadow Admins. Utiliza powershell. Puedes encontrar la definición de políticas privilegiadas en la función
Check-PrivilegedPolicyen https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1. - pacu: Pacu es un framework de explotación de AWS de código abierto, diseñado para pruebas de seguridad ofensivas contra entornos en la nube. Puede enumerar, encontrar configuraciones incorrectas y explotarlas. Puedes encontrar la definición de permisos privilegiados en https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134 dentro del diccionario
user_escalation_methods. - Ten en cuenta que pacu solo verifica tus propios caminos de privesc (no a nivel de cuenta).
# Install
## Feel free to use venvs
pip3 install pacu
# Use pacu CLI
pacu
> import_keys <profile_name> # import 1 profile from .aws/credentials
> import_keys --all # import all profiles
> list # list modules
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
- PMapper: Principal Mapper (PMapper) es un script y biblioteca para identificar riesgos en la configuración de AWS Identity and Access Management (IAM) para una cuenta de AWS o una organización de AWS. Modela los diferentes Usuarios y Roles de IAM en una cuenta como un grafo dirigido, lo que permite verificar escaladas de privilegios y caminos alternativos que un atacante podría tomar para obtener acceso a un recurso o acción en AWS. Puedes verificar los permisos utilizados para encontrar caminos de privesc en los nombres de archivo que terminan en
_edges.pyen https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing
# Install
pip install principalmapper
# Get data
pmapper --profile dev graph create
pmapper --profile dev graph display # Show basic info
# Generate graph
pmapper --profile dev visualize # Generate svg graph file (can also be png, dot and graphml)
pmapper --profile dev visualize --only-privesc # Only privesc permissions
# Generate analysis
pmapper --profile dev analysis
## Run queries
pmapper --profile dev query 'who can do iam:CreateUser'
pmapper --profile dev query 'preset privesc *' # Get privescs with admins
# Get organization hierarchy data
pmapper --profile dev orgs create
pmapper --profile dev orgs display
- cloudsplaining: Cloudsplaining es una herramienta de evaluación de seguridad de AWS IAM que identifica violaciones del principio de menor privilegio y genera un informe HTML priorizado por riesgo.
Mostrará los clientes sobre privilegiados potencialmente, las políticas en línea y de aws, y qué principales tienen acceso a ellas. (No solo verifica privesc, sino también otros tipos de permisos interesantes, se recomienda su uso).
# Install
pip install cloudsplaining
# Download IAM policies to check
## Only the ones attached with the versions used
cloudsplaining download --profile dev
# Analyze the IAM policies
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
- cloudjack: CloudJack evalúa cuentas de AWS en busca de vulnerabilidades de secuestro de subdominios como resultado de configuraciones desacopladas de Route53 y CloudFront.
- ccat: Listar repositorios ECR -> Extraer repositorio ECR -> Insertar puerta trasera -> Subir imagen con puerta trasera
- Dufflebag: Dufflebag es una herramienta que busca a través de instantáneas públicas de Elastic Block Storage (EBS) en busca de secretos que pueden haber sido dejados accidentalmente.
Auditoría
- cloudsploit: CloudSploit de Aqua es un proyecto de código abierto diseñado para permitir la detección de riesgos de seguridad en cuentas de infraestructura en la nube, incluyendo: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) y GitHub (no busca ShadowAdmins).
./index.js --csv=file.csv --console=table --config ./config.js
# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
## use "cis" for cis level 1 and 2
- Prowler: Prowler es una herramienta de seguridad de código abierto para realizar evaluaciones de las mejores prácticas de seguridad de AWS, auditorías, respuesta a incidentes, monitoreo continuo, endurecimiento y preparación forense.
# Install python3, jq and git
# Install
pip install prowler
prowler -v
# Run
prowler <provider>
prowler aws --profile custom-profile [-M csv json json-asff html]
- CloudFox: CloudFox te ayuda a obtener conciencia situacional en entornos de nube desconocidos. Es una herramienta de línea de comandos de código abierto creada para ayudar a los pentesters y otros profesionales de la seguridad ofensiva a encontrar rutas de ataque explotables en la infraestructura de la nube.
cloudfox aws --profile [profile-name] all-checks
- ScoutSuite: Scout Suite es una herramienta de auditoría de seguridad multi-nube de código abierto, que permite la evaluación de la postura de seguridad de los entornos en la nube.
# Install
virtualenv -p python3 venv
source venv/bin/activate
pip install scoutsuite
scout --help
# Get info
scout aws -p dev
- cs-suite: Cloud Security Suite (usa python2.7 y parece no estar mantenido)
- Zeus: Zeus es una herramienta poderosa para las mejores prácticas de endurecimiento de AWS EC2 / S3 / CloudTrail / CloudWatch / KMS (parece no estar mantenida). Solo verifica las credenciales configuradas por defecto dentro del sistema.
Auditoría Constante
- cloud-custodian: Cloud Custodian es un motor de reglas para gestionar cuentas y recursos de nube pública. Permite a los usuarios definir políticas para habilitar una infraestructura en la nube bien gestionada, que sea segura y optimizada en costos. Consolida muchos de los scripts ad-hoc que las organizaciones tienen en una herramienta ligera y flexible, con métricas y reportes unificados.
- pacbot: Policy as Code Bot (PacBot) es una plataforma para monitoreo continuo de cumplimiento, reporte de cumplimiento y automatización de seguridad para la nube. En PacBot, las políticas de seguridad y cumplimiento se implementan como código. Todos los recursos descubiertos por PacBot se evalúan contra estas políticas para medir la conformidad con las políticas. El marco auto-fix de PacBot proporciona la capacidad de responder automáticamente a las violaciones de políticas tomando acciones predefinidas.
- streamalert: StreamAlert es un marco de análisis de datos en tiempo real sin servidor que te permite ingresar, analizar y alertar sobre datos de cualquier entorno, usando fuentes de datos y lógica de alertas que defines. Los equipos de seguridad informática utilizan StreamAlert para escanear terabytes de datos de registro todos los días para la detección y respuesta a incidentes.
DEBUG: Capturar solicitudes de AWS cli
# Set proxy
export HTTP_PROXY=http://localhost:8080
export HTTPS_PROXY=http://localhost:8080
# Capture with burp nor verifying ssl
aws --no-verify-ssl ...
# Dowload brup cert and transform it to pem
curl http://127.0.0.1:8080/cert --output Downloads/certificate.cer
openssl x509 -inform der -in Downloads/certificate.cer -out Downloads/certificate.pem
# Indicate the ca cert to trust
export AWS_CA_BUNDLE=~/Downloads/certificate.pem
# Run aws cli normally trusting burp cert
aws ...
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

