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