AWS Pentesting

Apoya a HackTricks

Información Básica

Antes de comenzar a pentesting un entorno 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 erróneas y cómo explotarlas.

Conceptos como la jerarquía de la organización, IAM y otros conceptos básicos se explican en:

AWS - Basic Information

Laboratorios para aprender

Herramientas para simular ataques:

Metodología de Pentester/Red Team en AWS

Para auditar un entorno AWS es muy importante saber: qué servicios se están utilizando, qué está 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 AWS es lograr obtener algunas credenciales. Aquí tienes algunas ideas sobre cómo hacerlo:

  • Leaks en github (o similar) - OSINT

  • Ingeniería Social

  • Reutilización de contraseñas (password leaks)

  • Vulnerabilidades en Aplicaciones alojadas en AWS

  • Server Side Request Forgery con acceso al endpoint de metadata

  • Lectura de Archivos Locales

  • /home/USERNAME/.aws/credentials

  • C:\Users\USERNAME\.aws\credentials

  • 3ras partes comprometidas

  • 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

Después de haber logrado obtener credenciales, necesitas saber a quién pertenecen esas credenciales, y a qué tienen acceso, por lo que necesitas realizar una enumeración básica:

Enumeración Básica

SSRF

Si encontraste un SSRF en una máquina dentro de AWS, revisa 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 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

Nota 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 consulta esta página.

Org Enumeration

AWS - Organizations Enum

IAM Enumeration

Si tienes suficientes permisos, verificar los privilegios de cada entidad dentro de la cuenta de AWS te ayudará a entender qué puedes hacer tú y otras identidades y cómo escalar privilegios.

Si no tienes suficientes permisos para enumerar IAM, puedes robarlos mediante fuerza bruta para descubrirlos. Consulta cómo hacer la enumeración y fuerza bruta en:

AWS - IAM, Identity Center & SSO Enum

Ahora que tienes algo de información sobre tus credenciales (y si eres un red teamer, con suerte no has sido detectado). Es hora de averiguar qué servicios se están utilizando en el entorno. En la siguiente sección puedes consultar algunas formas de enumerar algunos servicios comunes.

Services Enumeration, Post-Exploitation & Persistence

AWS tiene una cantidad asombrosa de servicios, en la siguiente página encontrarás información básica, cheatsheets de enumeración, cómo evitar la detección, obtener persistencia y otros trucos de post-explotación sobre algunos de ellos:

AWS - Services

Nota que no necesitas realizar todo el trabajo manualmente, más abajo en este post puedes encontrar una sección sobre herramientas automáticas.

Además, en esta etapa podrías haber descubierto más servicios expuestos a usuarios no autenticados, podrías ser capaz de explotarlos:

AWS - Unauthenticated Enum & Access

Privilege Escalation

Si puedes verificar al menos tus propios permisos sobre diferentes recursos, podrías verificar si puedes obtener más permisos. Deberías enfocarte al menos en los permisos indicados en:

AWS - Privilege Escalation

Publicly Exposed Services

Mientras enumeras servicios de AWS, podrías haber encontrado algunos de ellos exponiendo elementos a Internet (puertos de VM/Contenedores, bases de datos o servicios de colas, snapshots o buckets...). Como pentester/red teamer, siempre deberías verificar si puedes encontrar información sensible / vulnerabilidades en ellos, ya que podrían proporcionarte más acceso a la cuenta de AWS.

En este libro deberías 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, te recomendaría buscar el servicio específico en:

Compromising the Organization

From the root/management account

Cuando la cuenta de administración crea nuevas cuentas en la organización, se crea un nuevo rol en la nueva cuenta, por defecto llamado OrganizationAccountAccessRole y otorgando la política de AdministratorAccess a la cuenta de administración para acceder a la nueva cuenta.

Entonces, para acceder como administrador a una cuenta secundaria necesitas:

  • 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, ve a la sección de organizaciones en la consola de aws o ejecuta aws organizations list-accounts

  • No puedes encontrar el nombre de los roles directamente, así que revisa todas las políticas IAM personalizadas y busca alguna que permita sts:AssumeRole sobre las cuentas secundarias descubiertas previamente.

  • Comprometer un principal en la cuenta de administración con permiso sts:AssumeRole sobre el rol en las cuentas secundarias (incluso si la cuenta permite a cualquiera de la cuenta de administración hacerse pasar por otro, como es una cuenta externa, se necesitan permisos específicos de sts:AssumeRole).

Automated Tools

Recon

  • aws-recon: Una herramienta de recolección de inventario enfocada en la seguridad de AWS, 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-cloud para obtener Activos (Nombres de Host, Direcciones IP) de Proveedores de Cloud.

  • cloudmapper: CloudMapper te ayuda a analizar tus entornos de Amazon Web Services (AWS). Ahora contiene mucha más funcionalidad, incluyendo auditorías para 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 en Python que consolida 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

# 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 una 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 IAM Users y Roles en una cuenta como un grafo dirigido, lo que permite verificar la escalada de privilegios y los 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 archivos que terminan en _edges.py en 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 privilegio mínimo y genera un informe HTML priorizado por riesgo. Te mostrará clientes potencialmente sobreprivilegiados, 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 usar).

# 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 repos ECR -> Extraer repo ECR -> Infiltrarlo -> Subir imagen infiltrada

  • Dufflebag: Dufflebag es una herramienta que busca a través de snapshots públicos de Elastic Block Storage (EBS) 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 mejores prácticas de seguridad en 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 conocimiento 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 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 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 AWS EC2 / S3 / CloudTrail / CloudWatch / KMS mejores prácticas de endurecimiento (parece no estar mantenido). Solo verifica 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 de 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 de 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 ingestar, 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 usan 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

Apoya HackTricks

Last updated