AWS pwn
Resumen
Esta es una colección de guiones horriblemente escritos para realizar varias tareas relacionadas con pruebas de penetración en AWS. No te entristezcas si no funciona para ti. Puede que AWS haya cambiado desde que se escribió una herramienta en particular o que el código sea una porquería. De cualquier manera, siéntete libre de contribuir.
La mayor parte de esta basura fue escrita por Daniel Grzelak, pero ha habido muchas contribuciones, sobre todo de Mike Fuller.
Requisitos
pip install -r requirements.txt
Asegúrate también de configurar tus credenciales de AWS en ~/.aws/credentials.
Reconocimiento
Cosas que hacer con la recopilación de información previa al compromiso.
- validate_iam_access_keys.py - Dado un archivo TSV de combinaciones de access key + secret [+ session], comprueba la validez del acceso y devuelve información de identidad del principal.
./validate_iam_access_keys.py -i /tmp/keys.txt -o /tmp/out.json
- validate_s3_buckets.py - Dado un archivo de texto con una palabra por línea, comprueba si los buckets existen y devuelve información básica de identificación.
./validate_s3_buckets.py -i /tmp/words.txt -o /tmp/out.json
- validate_iam_principals.py - Dado un archivo de texto de principales (ej. user/admin, role/deploy), comprueba si los principales existen en una cuenta determinada.
./validate_iam_principals.py -a 123456789012 -i /tmp/words.txt -o /tmp/out.json
- validate_accounts.py - Dado un archivo de texto de IDs de cuenta y alias de cuenta, comprueba si las cuentas existen.
./validate_accounts.py -i /tmp/accounts.txt -o /tmp/out.json
Explotación
Cosas que te ayudarán a ganar un punto de apoyo en una cuenta.
Sigilo
Cosas que pueden ayudarte a permanecer oculto después de comprometer una cuenta.
- disrupt_cloudtrail.py - Intenta interrumpir/incapacitar el registro de cloudtrail de la manera especificada.
./disrupt_cloudtrail.py -s
Exploración
Cosas para ayudarte a entender lo que has comprometido.
- dump_account_data.sh - Llama a un montón de funciones genéricas de lectura/listado/obtención/descripción basadas en la cuenta y guarda los datos en una ubicación determinada. Muy ruidoso pero excelente para una instantánea puntual.
./dump_account_data.sh /tmp/
Elevación
Cosas para ayudarte a moverte dentro de una cuenta y reunir diferentes niveles de acceso.
- dump_instance_attributes.py - Recorre cada instancia EC2 en la cuenta y recupera los atributos de instancia especificados. Se usa comúnmente para recuperar userData, que tiende a contener secretos.
./dump_instance_attributes.py -u -o /tmp/
- dump_cloudformation_stack_descriptions.py - Recupera las descripciones de las pilas para cada pila existente y cada pila eliminada en los últimos 90 días. Los parámetros en las descripciones de las pilas a menudo contienen contraseñas y otros secretos.
./dump_cloudformation_stack_descriptions.py -o /tmp/data
- assume_roles.py - Intenta asumir todos los roles (ARNs) en un archivo o proporcionados por la API list-roles.
./assume_roles.py -o /tmp/out.json
- add_iam_policy - Agrega la política de administrador y todas las acciones a un usuario, rol o grupo determinado. Requiere privilegios de putPolicy o attachPolicy de IAM.
./add_iam_policy.py -u myuser -r myrole -g mygroup
- bouncy_bouncy_cloudy_cloud - Reinicia una instancia EC2 dada y reescribe su userData para que puedas ejecutar código arbitrario o robar credenciales temporales del perfil de la instancia.
./bouncy_bouncy_cloudy_cloud.py -i instance-id -e exfiltration-endpoint
Persistencia
Cosas para ayudarte a mantener tu acceso a una cuenta.
- rabbit_lambda - Una función Lambda de ejemplo que responde a eventos de eliminación de usuario creando más copias del usuario eliminado.
- cli_lambda - Una función lambda que actúa como un proxy de AWS CLI y no requiere credenciales.
- backdoor_created_users_lambda - Una función lambda que agrega una clave de acceso a cada usuario recién creado.
- backdoor_created_roles_lambda - Una función lambda que agrega una relación de confianza a cada rol recién creado.
- backdoor_created_security_groups_lambda - Una función lambda que agrega una regla de acceso entrante determinada a cada grupo de seguridad recién creado.
- backdoor_all_users.py - Agrega una clave de acceso a cada usuario en la cuenta.
- backdoor_all_roles.py - Agrega una relación de confianza a cada rol en la cuenta. Requiere editar el archivo para establecer el ARN del rol.
- backdoor_all_security_groups.py - Agrega una regla de acceso entrante determinada a cada grupo de seguridad en la cuenta. Requiere editar el archivo para establecer la regla.
Exfiltración
Cosas para ayudarte a extraer y mover datos de formas propias de AWS.
Miscelánea
Otras cosas que fui demasiado estúpido o demasiado vago para clasificar.
- reserved_words.txt - Una lista de palabras/tokens que tienen algún significado especial en AWS o es probable que pronto tengan algún significado especial.
- endpoints.txt - Una lista algo actualizada de endpoints de API expuestos por AWS.
- integrations.txt - Un TSV de servicios que se integran con AWS a través de roles o claves de acceso y sus IDs de cuenta, nombres de usuario predeterminados, etc.
- download_docs.sh - La línea de comandos para wget toda la documentación de AWS porque soy estúpido y pierdo tiempo rehaciéndolo cada vez.
Por hacer
- Agregar contraseñas a los usuarios para persistencia
- Volcar recursos de pila
- Validar MFA
- Agregar más llamadas a dump_account_data
- Agregar más métodos de interrupción de registros
- Crear un script de análisis de cloudtrail para extraer cosas interesantes de cloudtrail
- Crear un enumerador de permisos de buckets S3
- Crear herramienta para obtener credenciales de AWS de lugares comunes en el disco
- Crear herramienta de clonación
- Crear una herramienta tonta de escalada de privilegios que use passrole
- Validar colas
- Validar temas de notificación
- Arreglar los scripts de persistencia para que usen argumentos en lugar de constantes dentro de los scripts