Herramienta Profesional de Enumeración de Permisos AWS IAM
enumerate-iam PRO es una herramienta avanzada de pentesting y auditoría de seguridad diseñada para enumerar y descubrir permisos IAM en AWS sin necesidad de acceso administrativo.
-
Pentesting y Red Team
- Descubrir permisos de credenciales comprometidas
- Identificar vectores de escalación de privilegios
- Mapear superficie de ataque en entornos AWS
-
Auditoría de Seguridad
- Validar permisos reales vs. permisos documentados
- Detectar permisos excesivos en usuarios/roles
- Compliance y revisiones de seguridad
-
Análisis de Credenciales
- Determinar alcance de credenciales filtradas
- Evaluar impacto de exposición de access keys
- Investigación de incidentes de seguridad
La herramienta realiza pruebas de fuerza bruta inteligente ejecutando 2,387 operaciones seguras de AWS para determinar qué permisos tiene un conjunto de credenciales. Solo prueba operaciones de solo lectura (list, describe, get) que no modifican recursos ni generan costos.
Esta es una versión mejorada y actualizada del proyecto original iam-vulnerable de BishopFox, con las siguientes mejoras profesionales:
| Característica | Original | enumerate-iam PRO |
|---|---|---|
| Detección de Región | Manual | ✅ Automática desde perfil AWS |
| Generación de Tests | SDK JavaScript | ✅ Directo desde boto3 instalado |
| Soporte SSO-Admin | ❌ No incluido | ✅ 81 operaciones SSO-Admin |
| Mapeo de Servicios | A veces incorrecto | ✅ Siempre correcto |
| Manejo de Errores | Nivel ERROR | ✅ Nivel DEBUG (salida limpia) |
| Flag de Actualización | ❌ No disponible | ✅ --update para regenerar tests |
| Imports Optimizados | Estáticos | ✅ Lazy loading para mejor rendimiento |
| Logging | DEBUG por defecto | ✅ INFO por defecto (más limpio) |
- 🌍 Detección Automática de Región: Lee la región directamente de tu perfil AWS configurado
- 🔄 Generación desde boto3: Genera tests de bruteforce directamente desde tu versión instalada de boto3
- 📊 Logging Limpio: Salida clara con nivel INFO, DEBUG disponible para troubleshooting
- 🛡️ Solo Operaciones Seguras: Prueba únicamente operaciones de lectura (list_, describe_, get_*)
- ⚡ Auto-actualización: Regenera definiciones de tests con el flag
--update - 🔧 Mapeo Correcto de Servicios: Corrige problemas de mapeo como SSO/SSO-Admin
- 🎨 Salida Colorizada: Resumen visual organizado por servicios
- 📦 2,387+ Operaciones: Cobertura exhaustiva de APIs de AWS
- 🚀 Multi-threading: Ejecución paralela para mayor velocidad
- 💾 Exportación JSON: Guarda resultados en formato JSON
Antes de instalar y usar la herramienta, asegúrate de tener:
- Sistema Operativo: Linux, macOS, o Windows (WSL)
- Python: Versión 3.6 o superior
- pip: Gestor de paquetes de Python
- Credenciales AWS: Access Key + Secret Key o perfil AWS configurado
- Permisos Mínimos: Las credenciales que vas a probar (no necesitas admin)
- Región AWS: Configurada en tu perfil o especificada manualmente
# Verificar versión de Python
python --version
# Debe mostrar: Python 3.6.x o superior
# Verificar pip
pip --version
# Verificar AWS CLI (opcional pero recomendado)
aws --version
# Verificar configuración de AWS
aws configure list --profile tu-perfil# Clonar el repositorio
git clone https://github.com/LorDCristhian/enumerate-iam-pro.git
# Entrar al directorio
cd enumerate-iam-pro# Instalar dependencias de Python
pip install -r requirements.txt
# O si prefieres usar pip3
pip3 install -r requirements.txtDependencias instaladas:
boto3: SDK de AWS para Pythonbotocore: Librería core de boto3
# Generar tests desde tu versión de boto3
python enumerate-iam.py --profile tu-perfil --updateEste paso:
- ✅ Lee todos los servicios disponibles en tu boto3
- ✅ Extrae operaciones seguras (list_, describe_, get_)
- ✅ Filtra operaciones sin parámetros requeridos
- ✅ Genera el archivo
bruteforce_tests.py
# Ver ayuda del comando
python enumerate-iam.py --help¡Instalación completa! 🎉
# Enumerar permisos usando perfil AWS
python enumerate-iam.py --profile nombre-del-perfilVentajas:
- ✅ Lee credenciales de
~/.aws/credentials - ✅ Detecta región automáticamente
- ✅ Más seguro (no expones credenciales en terminal)
Ejemplo:
python enumerate-iam.py --profile production# Enumerar usando credenciales explícitas
python enumerate-iam.py \
--access-key AKIAIOSFODNN7EXAMPLE \
--secret-key wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYCuándo usar:
- Credenciales temporales
- Credenciales obtenidas en pentesting
- Testing rápido sin configurar perfil
# Regenerar tests desde boto3 y ejecutar enumeración
python enumerate-iam.py --profile mi-perfil --updateCuándo usar --update:
- 🔄 Actualizaste boto3 a una versión más reciente
- 🆕 AWS lanzó nuevos servicios
- 🔧 Quieres máxima cobertura de APIs
- 🐛 El archivo
bruteforce_tests.pyestá corrupto
# Usar región específica (sobrescribe región del perfil)
python enumerate-iam.py --profile mi-perfil --region us-west-2Regiones comunes:
us-east-1- Virginia del Norteus-west-2- Oregóneu-west-1- Irlandaeu-north-1- Estocolmoap-southeast-1- Singapur
# Usar credenciales con session token
python enumerate-iam.py \
--access-key AKIAIOSFODNN7EXAMPLE \
--secret-key wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \
--session-token IQoJb3JpZ2luX2VjEH8aCXVzLWVhc3QtMSJHMEUCIQDN...Cuándo usar:
- Credenciales de roles asumidos (AssumeRole)
- Credenciales de instancias EC2
- Credenciales de AWS SSO
Using region from profile: eu-north-1
2026-02-13 19:13:58 - [INFO] Starting permission enumeration for access-key-id "AKIA..."
2026-02-13 19:13:58 - [INFO] -- Account ARN : arn:aws:iam::123456789012:user/analytics-usr
2026-02-13 19:13:58 - [INFO] -- Account Id : 123456789012
2026-02-13 19:13:58 - [INFO] -- Account Path: user/analytics-usr
2026-02-13 19:13:58 - [INFO] Total API calls to test: 2387
Testing permissions: 100%|████████████████████████████| 2387/2387 [01:23<00:00, 28.6 ops/s]
═══════════════════════════════════════════════════════════════════════════════
RESUMEN DE PERMISOS
═══════════════════════════════════════════════════════════════════════════════
Total de permisos encontrados: 18
Total de servicios: 6
▸ DYNAMODB (1)
✓ describe_endpoints
▸ LAMBDA (3)
✓ list_functions
✓ list_layers
✓ get_account_settings
▸ S3 (5)
✓ list_buckets
✓ get_bucket_location
✓ get_bucket_versioning
✓ get_bucket_encryption
✓ list_directory_buckets
▸ SQS (3)
✓ list_queues
✓ get_queue_attributes
✓ list_dead_letter_source_queues
▸ SSO-ADMIN (4)
✓ list_instances
✓ list_application_providers
✓ describe_instance
✓ list_applications
▸ STS (2)
✓ get_caller_identity
✓ get_session_token
═══════════════════════════════════════════════════════════════════════════════
Total: 18 permisos en 6 servicios AWS
═══════════════════════════════════════════════════════════════════════════════
python enumerate-iam.py [OPCIONES]| Opción | Descripción | Ejemplo |
|---|---|---|
--profile PERFIL |
Nombre del perfil AWS en ~/.aws/credentials | --profile production |
--access-key KEY |
AWS Access Key ID | --access-key AKIA... |
--secret-key KEY |
AWS Secret Access Key | --secret-key wJalr... |
| Opción | Descripción | Ejemplo |
|---|---|---|
--session-token TOKEN |
Token de sesión STS (credenciales temporales) | --session-token IQoJ... |
--region REGION |
Región AWS (sobrescribe región del perfil) | --region us-east-1 |
--update |
Regenerar bruteforce_tests.py desde boto3 | --update |
# 1. Uso básico con perfil
python enumerate-iam.py --profile mi-perfil
# 2. Con región específica
python enumerate-iam.py --profile mi-perfil --region us-east-1
# 3. Actualizar tests y enumerar
python enumerate-iam.py --profile mi-perfil --update
# 4. Con access keys
python enumerate-iam.py \
--access-key AKIAIOSFODNN7EXAMPLE \
--secret-key wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# 5. Con credenciales temporales
python enumerate-iam.py \
--access-key AKIAIOSFODNN7EXAMPLE \
--secret-key wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY \
--session-token IQoJb3JpZ2luX2VjEH... \
--region us-west-2Esta herramienta SOLO prueba operaciones de solo lectura:
✅ Operaciones Permitidas:
list_*- Listar recursos (ej: list_buckets, list_users)describe_*- Describir recursos (ej: describe_instances)get_*- Obtener información (ej: get_caller_identity)
❌ Operaciones NUNCA Probadas:
create_*- Crear recursosdelete_*- Eliminar recursosupdate_*- Modificar recursosput_*- Escribir datosattach_*- Adjuntar políticasdetach_*- Remover políticasterminate_*- Terminar instancias
Consideraciones:
- 🔍 Alto volumen de llamadas puede disparar alertas de seguridad
- 📊 Todos los intentos quedan registrados en CloudTrail
⚠️ Usa solo en cuentas donde tengas autorización- 💰 CloudTrail puede generar costos si excedes el tier gratuito
- Autorización: Usa solo en cuentas AWS donde tengas permiso explícito
- Notificación: Informa al equipo de seguridad antes de ejecutar en producción
- Rate Limiting: La herramienta respeta límites de AWS pero genera alto volumen
- Credenciales: Nunca commitees credenciales AWS a repositorios
- Logs: Revisa CloudTrail después de la ejecución para validar actividad
1. Autenticación
├─ Valida credenciales AWS
└─ Obtiene información de cuenta (ARN, Account ID)
2. Detección de Región
├─ Lee región del perfil AWS (si existe)
└─ Usa región especificada con --region (si se proporciona)
3. Carga de Tests
├─ Importa bruteforce_tests.py
└─ Carga 2,387+ operaciones seguras de AWS
4. Enumeración (Multi-threading)
├─ Ejecuta operaciones en paralelo
├─ Captura respuestas exitosas
└─ Registra errores en nivel DEBUG
5. Recolección de Resultados
├─ Agrupa permisos por servicio
└─ Cuenta total de permisos
6. Presentación
├─ Muestra resumen colorizado
└─ Organiza por servicio AWS
La herramienta incluye dos generadores:
Ventajas:
- ✅ Lee directamente de tu boto3 instalado
- ✅ Siempre sincronizado con tu versión
- ✅ Mapeo correcto de nombres de servicios
- ✅ Filtra operaciones que requieren parámetros
Proceso:
- Obtiene lista de servicios de
boto3.Session() - Para cada servicio, extrae operaciones del modelo
- Filtra por prefijos seguros (list_, describe_, get_)
- Valida que no requieran parámetros obligatorios
- Genera archivo
bruteforce_tests.py
Características:
- Lee desde AWS SDK for JavaScript
- Puede tener desajustes de nombres de servicios
- Requiere clonar repositorio aws-sdk-js
enumerate-iam-pro/
│
├── enumerate-iam.py # Script principal de entrada
├── requirements.txt # Dependencias de Python
├── README.md # Este archivo
├── LICENSE # Licencia GPLv2
├── CHANGELOG.md # Historial de versiones
│
└── enumerate_iam/ # Paquete principal
├── __init__.py # Inicializador del módulo
├── main.py # Lógica core de enumeración
├── bruteforce_tests.py # Definiciones de operaciones AWS
├── generate_from_boto3.py # Generador desde boto3 (NUEVO)
├── generate_bruteforce_tests.py # Generador original (JS SDK)
├── progress_tracker.py # Barra de progreso
│
└── utils/ # Utilidades
├── __init__.py
├── json_utils.py # Manejo de JSON
└── remove_metadata.py # Limpieza de metadata
Causa: El archivo bruteforce_tests.py no existe.
Solución:
python enumerate-iam.py --profile tu-perfil --updateCausa: El perfil AWS no tiene región configurada.
Soluciones:
Opción 1: Configurar región en el perfil
aws configure set region us-east-1 --profile tu-perfilOpción 2: Especificar región manualmente
python enumerate-iam.py --profile tu-perfil --region us-east-1Causa: Normal. Algunas operaciones en el archivo de tests pueden no existir en tu versión de boto3.
Solución: No requiere acción. Estos errores se registran en nivel DEBUG y se omiten automáticamente.
Causa: La herramienta prueba 2,387 operaciones.
Factores que afectan velocidad:
- Latencia de red a AWS
- Número de permisos que tienes
- Rate limits de AWS API
Tiempo típico: 30-90 segundos
Optimización: No hay forma de acelerar sin reducir cobertura.
Mejoras Principales:
✅ Detección automática de región desde perfiles AWS
✅ Generación de tests desde boto3 para mapeo preciso
✅ Soporte completo de SSO-Admin (81 operaciones)
✅ Manejo mejorado de errores con logging DEBUG
✅ Imports lazy para soportar flag --update
✅ Salida limpia con logging INFO por defecto
✅ Corrección de mapeo de servicios (SSO vs SSO-Admin)
Comparativa con Original:
| Característica | iam-vulnerable (Original) | enumerate-iam PRO |
|---|---|---|
| Detección de Región | ❌ Manual | ✅ Automática |
| Generación de Tests | AWS SDK JS | ✅ boto3 nativo |
| SSO-Admin | ❌ No incluido | ✅ 81 operaciones |
| Mensajes de Error | ERROR (ruidoso) | ✅ DEBUG (limpio) |
| Flag --update | ❌ No disponible | ✅ Disponible |
| Mapeo de Servicios | ✅ Siempre correcto | |
| Imports | Estáticos | ✅ Lazy loading |
| Logging Default | DEBUG | ✅ INFO |
¡Las contribuciones son bienvenidas! Si quieres mejorar esta herramienta:
- Fork el repositorio
- Crea una rama de feature (
git checkout -b feature/mejora-increible) - Commit tus cambios (
git commit -m 'Agrega mejora increíble') - Push a la rama (
git push origin feature/mejora-increible) - Abre un Pull Request
- 🎨 Mejorar visualización de resultados
- 📊 Agregar exportación a diferentes formatos
- 🔍 Implementar filtros por servicio
- ⚡ Optimizar velocidad de enumeración
- 📝 Agregar más documentación
Este proyecto está licenciado bajo GNU General Public License v2.0.
Ver archivo LICENSE para más detalles.
- Autor: BishopFox
- Repositorio: iam-vulnerable
- Basado en: enumerate-iam por Andrés Riancho
Esta versión incluye mejoras significativas en:
- Usabilidad y experiencia de usuario
- Precisión en mapeo de servicios AWS
- Mantenibilidad del código
- Documentación en español
Desarrollado por: LorDCristhian
Esta herramienta es para pruebas de seguridad autorizadas y propósitos educativos únicamente.
Los usuarios son responsables de:
- Obtener autorización adecuada antes de realizar pruebas
- Cumplir con los Términos de Servicio de AWS
- Seguir leyes y regulaciones aplicables
- Cualquier consecuencia del mal uso
Los autores NO asumen responsabilidad por mal uso o daños causados por esta herramienta.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentación: Este README
Gracias a la comunidad de seguridad por:
- Reportar bugs y sugerir mejoras
- Contribuir con código y documentación
- Compartir casos de uso y feedback
Hecho con ❤️ para la comunidad de seguridad hispana
🔒 Hackea responsablemente