AWS Pentesting

AWS Pentesting

1. Introduccion

El pentesting en entornos AWS requiere entender los servicios, permisos y configuraciones de seguridad de la nube de Amazon.


2. Instalacion de AWS CLI

2.1. Arch Linux

sudo pacman -S aws-cli

2.2. Ubuntu/Debian

sudo apt install awscli

2.3. Con pip

pip install awscli

# o awscliv2
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

2.4. Configuración

# Configuración básica
aws configure

# Configurar perfil
aws configure --profile nombre-perfil

# Configurar endpoint para LocalStack
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1
export AWS_ENDPOINT_URL=http://localhost:4566

3. Servicios Comunes

2.1. S3 (Simple Storage Service)

Almacenamiento de objetos con configuraciones de acceso.

# Enumerar buckets
aws s3 ls
aws s3 ls s3://bucket-name

# Descargar archivos
aws s3 cp s3://bucket-name/file.txt .

# Policy enumeration
aws s3api get-bucket-policy --bucket nombre-bucket

2.2. EC2 (Elastic Compute Cloud)

Máquinas virtuales en la nube.

# Listar instancias
aws ec2 describe-instances

# Buscar metadatos
curl http://169.254.169.254/latest/meta-data/

2.3. IAM (Identity and Access Management)

Gestión de usuarios y permisos.

# Listar usuarios
aws iam list-users

# Listar políticas
aws iam list-policies

# Obtener credenciales
aws iam create-access-key

2.4. Lambda

Funciones serverless.

# Listar funciones
aws lambda list-functions

# Invocar función
aws lambda invoke --function-name nombre output.txt

2.5. RDS (Relational Database Service)

Bases de datos gestionadas.

# Listar instancias
aws rds describe-db-instances

# Obtener snapshot público
aws rds describe-db-snapshots --snapshot-type public

3. Herramientas

3.1. awscli

# Configuración
aws configure

# Perfil específico
aws configure --profile nombre-perfil

# Roles
aws sts assume-role --role-arn arn:aws:iam::123456789:role/rol

3.2. Pacu

Framework de explotación AWS.

# Instalación
git clone https://github.com/RhinoSecurityLabs/pacu
cd pacu && pip install -r requirements.txt

# Uso
python pacu.py

3.3. ScoutSuite

auditor de seguridad AWS.

pip install scoutsuite
scout --provider aws

3.4. CloudMapper

Visualización y enumeración.

git clone https://github.com/duo-labs/cloudmapper
cd cloudmapper
pip install -r requirements.txt
python cloudmapper.py collect --profile nombre
python cloudmapper.py report --profile nombre

4. LocalStack

4.1 ¿Qué es?

LocalStack es un framework que emula servicios AWS localmente para desarrollo y testing sin costos.

4.2 Instalación

# Docker
docker run -d --name localstack -p 4566:4566 -e SERVICES=s3,lambda,ec2,iam localstack/localstack

# pip
pip install localstack

# Iniciar
localstack start

4.3 Configuración

# Endpoint local
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1
export AWS_ENDPOINT_URL=http://localhost:4566

# awscli endpoint
aws --endpoint-url=http://localhost:4566 s3 ls

4.4 Servicios Emulados

Servicio Puerto Descripción
S3 4566 Almacenamiento
Lambda 4566 Funciones serverless
EC2 4566 Computo
IAM 4566 Identidades
DynamoDB 4566 Base de datos NoSQL
SNS 4566 Notificaciones
SQS 4566 Colas de mensajes

4.5 Crear Recursos

# Crear bucket S3
aws --endpoint-url=http://localhost:4566 s3 mb s3://test-bucket

# Subir archivo
aws --endpoint-url=http://localhost:4566 s3 cp archivo.txt s3://test-bucket/

# Crear función Lambda
aws --endpoint-url=http://localhost:4566 lambda create-function \
    --function-name test-func \
    --runtime python3.9 \
    --handler lambda_function.lambda_handler \
    --zip-file fileb://function.zip

# Invocar Lambda
aws --endpoint-url=http://localhost:4566 lambda invoke \
    --function-name test-func \
    --payload '{}' response.json

4.6 Testing de Explotos

# Probar enumeración de S3
python exploit.py --target http://localhost:4566 --service s3

# Probar escalation de Lambda
python lambda_exploit.py --endpoint http://localhost:4566

5. Vulnerabilidades Comunes

5.1 S3 Buckets

  • Bucket público con datos sensibles
  • Permissions mal configuradas
  • Bucket policy con wildcards

5.2 IAM

  • Excessivos permisos (Over-privileged)
  • Credenciales hardcodeadas
  • Roles con信任关系 incorrectos

5.3 EC2

  • Metadata service accesible
  • User data con secrets
  • Security groups demasiado permisivos

5.4 Lambda

  • Variables de entorno con secrets
  • Permisos excesivos
  • Código vulnerable a injection

6. Cheat Sheet

# Enumeración básica
aws ec2 describe-vpcs
aws ec2 describe-subnets
aws ec2 describe-security-groups
aws s3 ls
aws iam list-users

# Buscar en CloudTrail
aws cloudtrail lookup-events --lookup-attributes attributeKey=EventSource,attributeValue=s3.amazonaws.com

# Buscar credenciales en Lambda
aws lambda get-function --function-name nombre | jq '.Configuration.Environment'

# Buscar en Secrets Manager
aws secretsmanager list-secrets