AWS Pentesting

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Información Básica

Antes de comenzar a pentestar un entorno de AWS, hay algunas cosas básicas que necesitas saber sobre cómo funciona AWS para ayudarte a comprender 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:

pageAWS - Basic Information

Laboratorios para aprender

Herramientas para simular ataques:

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á expuesto, quién tiene acceso a qué, y cómo están conectados los servicios internos de AWS con los servicios externos.

Desde el punto de vista de un Red Team, el primer paso para comprometer un entorno de AWS es lograr obtener algunas credenciales. Aquí tienes algunas ideas sobre cómo hacerlo:

  • Fugas en github (o similar) - OSINT

  • Ingeniería Social

  • Reutilización de contraseñas (fugas de contraseñas)

  • Vulnerabilidades en Aplicaciones Alojadas en AWS

  • Server Side Request Forgery con acceso al punto final de metadatos

  • Lectura de Archivos Locales

  • /home/USERNAME/.aws/credentials

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

  • 3ros comprometidos

  • Empleado interno

  • Credenciales de Cognito

O comprometiendo un servicio no autenticado expuesto:

pageAWS - Unauthenticated Enum & Access

O si estás realizando una revisión, podrías simplemente solicitar credenciales con estos roles:

pageAWS - 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 obtener 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

Ten en cuenta que las empresas pueden usar tokens señuelo para identificar cuándo se están robando y utilizando tokens. Se recomienda verificar si un token es un token señuelo antes de usarlo. Para más información consulta esta página.

Enumeración de la Organización

pageAWS - Organizations Enum

Enumeración de IAM

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

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

pageAWS - IAM, Identity Center & SSO Enum

Ahora que tienes información sobre tus credenciales (y si eres un equipo rojo, esperemos que no hayas sido detectado), es hora de averiguar qué servicios se están utilizando en el entorno. En la siguiente sección puedes ver algunas formas de enumerar algunos servicios comunes.

Enumeración de Servicios, Post-Explotación y Persistencia

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

pageAWS - Services

Ten en cuenta que no necesitas realizar todo el trabajo manualmente, más abajo en esta publicación puedes encontrar una sección sobre herramientas automáticas.

Además, en esta etapa es posible que hayas descubierto más servicios expuestos a usuarios no autenticados, es posible que puedas explotarlos:

pageAWS - Unauthenticated Enum & Access

Escalada de Privilegios

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

pageAWS - Privilege Escalation

Servicios Expuestos Públicamente

Mientras enumeras los servicios de AWS, es posible que hayas encontrado algunos de ellos exponiendo elementos a Internet (puertos de VM/contenedores, bases de datos o servicios de colas, instantáneas o buckets...). Como pentester/equipo rojo, siempre debes verificar si puedes encontrar información sensible/vulnerabilidades en ellos, ya que podrían proporcionarte acceso adicional 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:

Comprometiendo la Organización

Desde la cuenta raíz/de gestión

Cuando la cuenta de gestió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 AdministratorAccess a la cuenta de gestión para acceder a la nueva cuenta.

Por lo tanto, para acceder como administrador a una cuenta secundaria necesitas:

  • Comprometer la cuenta de gestión y encontrar el ID de las cuentas secundarias y los nombres del rol (por defecto OrganizationAccountAccessRole) que permiten a la cuenta de gestión acceder como administrador.

  • Para encontrar las cuentas secundarias ve a la sección de organizaciones en la consola de AWS o ejecuta aws organizations list-accounts

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

  • Compromete un principal en la cuenta de gestión con permiso de sts:AssumeRole sobre el rol en las cuentas secundarias (incluso si la cuenta permite a cualquiera de la cuenta de gestión suplantar, se necesitan permisos específicos de sts:AssumeRole).

Herramientas Automatizadas

Reconocimiento

  • aws-recon: Una herramienta de recopilación de inventario centrada en la seguridad de AWS multi-hilo 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, incluida la 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 de 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, incluida la 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: (Utiliza 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 como IPv6) asociadas con una cuenta de AWS.

Elevación de privilegios y Explotación

# 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 u organización de AWS. Modela los diferentes Usuarios y Roles de IAM 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 escalada de privilegios en los nombres de archivo 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 IAM de AWS que identifica violaciones de privilegios mínimos y genera un informe HTML priorizado por riesgos. Mostrará posibles clientes con privilegios excesivos, políticas inline y de aws y qué principales tienen acceso a ellas. (No solo verifica la escalada de privilegios, 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 de ECR -> Descargar repositorio de ECR -> Introducir una puerta trasera -> Subir imagen con puerta trasera

  • Dufflebag: Dufflebag es una herramienta que busca en instantáneas públicas de Almacenamiento de Bloques Elásticos (EBS) en busca de secretos que puedan 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 para forenses.

# 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 probadores de penetración 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 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 (utiliza 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 mantenido). 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 en la 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 de auto-corrección de PacBot proporciona la capacidad de responder automáticamente a 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, utilizando fuentes de datos y lógica de alerta que definas. 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 de incidentes.

DEBUG: Captura de 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

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Última actualización