# AWS Pentesting {{#include ../../banners/hacktricks-training.md}} ## Informações Básicas **Antes de começar o pentesting** em um **ambiente AWS**, há algumas **coisas básicas que você precisa saber** sobre como a AWS funciona para ajudá-lo a entender o que você precisa fazer, como encontrar configurações incorretas e como explorá-las. Conceitos como hierarquia de organização, IAM e outros conceitos básicos são explicados em: {{#ref}} aws-basic-information/ {{#endref}} ## Laboratórios para aprender - [https://github.com/RhinoSecurityLabs/cloudgoat](https://github.com/RhinoSecurityLabs/cloudgoat) - [https://github.com/BishopFox/iam-vulnerable](https://github.com/BishopFox/iam-vulnerable) - [https://github.com/nccgroup/sadcloud](https://github.com/nccgroup/sadcloud) - [https://github.com/bridgecrewio/terragoat](https://github.com/bridgecrewio/terragoat) - [https://github.com/ine-labs/AWSGoat](https://github.com/ine-labs/AWSGoat) - [http://flaws.cloud/](http://flaws.cloud/) - [http://flaws2.cloud/](http://flaws2.cloud/) Ferramentas para simular ataques: - [https://github.com/Datadog/stratus-red-team/](https://github.com/Datadog/stratus-red-team/) - [https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main](https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main) ## Metodologia de Pentester/Red Team da AWS Para auditar um ambiente AWS, é muito importante saber: quais **serviços estão sendo usados**, o que está **sendo exposto**, quem tem **acesso** a quê e como os serviços internos da AWS e os **serviços externos** estão conectados. Do ponto de vista de um Red Team, o **primeiro passo para comprometer um ambiente AWS** é conseguir obter algumas **credenciais**. Aqui estão algumas ideias sobre como fazer isso: - **Leaks** no github (ou similar) - OSINT - **Engenharia** Social - Reutilização de **Senhas** (vazamentos de senhas) - Vulnerabilidades em Aplicações Hospedadas na AWS - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) com acesso ao endpoint de metadados - **Leitura de Arquivo Local** - `/home/USERNAME/.aws/credentials` - `C:\Users\USERNAME\.aws\credentials` - **terceiros** **vazados** - Funcionário **Interno** - [**Cognito** ](aws-services/aws-cognito-enum/index.html#cognito)credenciais Ou por **comprometer um serviço não autenticado** exposto: {{#ref}} aws-unauthenticated-enum-access/ {{#endref}} Ou se você estiver fazendo uma **revisão**, você poderia apenas **pedir credenciais** com esses papéis: {{#ref}} aws-permissions-for-a-pentest.md {{#endref}} > [!NOTE] > Depois de conseguir obter credenciais, você precisa saber **de quem são essas credenciais** e **a que elas têm acesso**, então você precisa realizar alguma enumeração básica: ## Enumeração Básica ### SSRF Se você encontrou um SSRF em uma máquina dentro da AWS, verifique esta página para truques: {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ### Whoami Uma das primeiras coisas que você precisa saber é quem você é (em qual conta você está e outras informações sobre o ambiente AWS): ```bash # Easiest way, but might be monitored? aws sts get-caller-identity aws iam get-user # This will get your own user # If you have a Key ID aws sts get-access-key-info --access-key-id=ASIA1234567890123456 # Get inside error message aws sns publish --topic-arn arn:aws:sns:us-east-1:*account id*:aaa --message aaa # From metadata TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document ``` > [!CAUTION] > Note que as empresas podem usar **canary tokens** para identificar quando **tokens estão sendo roubados e usados**. É recomendável verificar se um token é um canary token ou não antes de usá-lo.\ > Para mais informações [**verifique esta página**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass). ### Enumeração de Org {{#ref}} aws-services/aws-organizations-enum.md {{#endref}} ### Enumeração de IAM Se você tiver permissões suficientes, **verificar os privilégios de cada entidade dentro da conta AWS** ajudará você a entender o que você e outras identidades podem fazer e como **escalar privilégios**. Se você não tiver permissões suficientes para enumerar IAM, você pode **roubar e forçar** para descobri-los.\ Verifique **como fazer a numeração e o brute-forcing** em: {{#ref}} aws-services/aws-iam-enum.md {{#endref}} > [!NOTE] > Agora que você **tem algumas informações sobre suas credenciais** (e se você é um red team, espero que você **não tenha sido detectado**). É hora de descobrir quais serviços estão sendo usados no ambiente.\ > Na seção a seguir, você pode verificar algumas maneiras de **enumerar alguns serviços comuns.** ## Enumeração de Serviços, Pós-Exploração & Persistência A AWS tem uma quantidade impressionante de serviços, na página a seguir você encontrará **informações básicas, enumeração** cheatsheets\*\*,\*\* como **evitar detecção**, obter **persistência** e outros truques de **pós-exploração** sobre alguns deles: {{#ref}} aws-services/ {{#endref}} Note que você **não** precisa realizar todo o trabalho **manualmente**, abaixo neste post você pode encontrar uma **seção sobre** [**ferramentas automáticas**](#automated-tools). Além disso, nesta fase você pode ter descoberto **mais serviços expostos a usuários não autenticados**, você pode ser capaz de explorá-los: {{#ref}} aws-unauthenticated-enum-access/ {{#endref}} ## Escalação de Privilégios Se você pode **verificar pelo menos suas próprias permissões** sobre diferentes recursos, você poderia **verificar se é capaz de obter mais permissões**. Você deve se concentrar pelo menos nas permissões indicadas em: {{#ref}} aws-privilege-escalation/ {{#endref}} ## Serviços Expostos Publicamente Enquanto enumerava os serviços da AWS, você pode ter encontrado alguns deles **expondo elementos à Internet** (portas de VM/Containers, bancos de dados ou serviços de fila, snapshots ou buckets...).\ Como pentester/red teamer, você deve sempre verificar se pode encontrar **informações sensíveis / vulnerabilidades** neles, pois podem fornecer a você **mais acesso à conta AWS**. Neste livro, você deve encontrar **informações** sobre como encontrar **serviços AWS expostos e como verificá-los**. Sobre como encontrar **vulnerabilidades em serviços de rede expostos**, eu recomendaria que você **pesquisasse** pelo **serviço** específico em: {{#ref}} https://book.hacktricks.wiki/ {{#endref}} ## Comprometendo a Organização ### Da conta root/gestão Quando a conta de gestão cria novas contas na organização, um **novo papel** é criado na nova conta, por padrão nomeado **`OrganizationAccountAccessRole`** e dando a política **AdministratorAccess** à **conta de gestão** para acessar a nova conta.
Portanto, para acessar como administrador uma conta filha, você precisa: - **Comprometer** a conta de **gestão** e encontrar o **ID** das **contas filhas** e os **nomes** do **papel** (OrganizationAccountAccessRole por padrão) permitindo que a conta de gestão acesse como admin. - Para encontrar contas filhas, vá para a seção de organizações no console da aws ou execute `aws organizations list-accounts` - Você não pode encontrar o nome dos papéis diretamente, então verifique todas as políticas IAM personalizadas e procure qualquer uma que permita **`sts:AssumeRole` sobre as contas filhas previamente descobertas**. - **Comprometer** um **principal** na conta de gestão com **permissão `sts:AssumeRole` sobre o papel nas contas filhas** (mesmo que a conta permita que qualquer um da conta de gestão se impersonifique, como é uma conta externa, permissões específicas de `sts:AssumeRole` são necessárias). ## Ferramentas Automatizadas ### Recon - [**aws-recon**](https://github.com/darkbitio/aws-recon): Uma ferramenta de **coleta de inventário** focada em segurança da AWS, escrita em Ruby. ```bash # Install gem install aws_recon # Recon and get json AWS_PROFILE= aws_recon \ --services S3,EC2 \ --regions global,us-east-1,us-east-2 \ --verbose ``` - [**cloudlist**](https://github.com/projectdiscovery/cloudlist): Cloudlist é uma **ferramenta multi-cloud para obter Ativos** (Nomes de Host, Endereços IP) de Provedores de Nuvem. - [**cloudmapper**](https://github.com/duo-labs/cloudmapper): CloudMapper ajuda você a analisar seus ambientes da Amazon Web Services (AWS). Agora contém muito mais funcionalidades, incluindo auditoria para problemas de segurança. ```bash # Installation steps in github # Create a config.json file with the aws info, like: { "accounts": [ { "default": true, "id": "", "name": "dev" } ], "cidrs": { "2.2.2.2/28": {"name": "NY Office"} } } # Enumerate python3 cloudmapper.py collect --profile dev ## Number of resources discovered python3 cloudmapper.py stats --accounts dev # Create HTML report ## In the report you will find all the info already python3 cloudmapper.py report --accounts dev # Identify potential issues python3 cloudmapper.py audit --accounts dev --json > audit.json python3 cloudmapper.py audit --accounts dev --markdow > audit.md python3 cloudmapper.py iam_report --accounts dev # Identify admins ## The permissions search for are in https://github.com/duo-labs/cloudmapper/blob/4df9fd7303e0337ff16a08f5e58f1d46047c4a87/shared/iam_audit.py#L163-L175 python3 cloudmapper.py find_admins --accounts dev # Identify unused elements python3 cloudmapper.py find_unused --accounts dev # Identify publivly exposed resources python3 cloudmapper.py public --accounts dev python cloudmapper.py prepare #Prepare webserver python cloudmapper.py webserver #Show webserver ``` - [**cartography**](https://github.com/lyft/cartography): Cartography é uma ferramenta Python que consolida ativos de infraestrutura e os relacionamentos entre eles em uma visualização gráfica intuitiva alimentada por um banco de dados Neo4j. ```bash # Install pip install cartography ## At the time of this writting you need neo4j version 3.5.* # Get AWS info AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt --neo4j-user neo4j ``` - [**starbase**](https://github.com/JupiterOne/starbase): Starbase coleta ativos e relacionamentos de serviços e sistemas, incluindo infraestrutura em nuvem, aplicações SaaS, controles de segurança e mais, em uma visualização gráfica intuitiva suportada pelo banco de dados Neo4j. - [**aws-inventory**](https://github.com/nccgroup/aws-inventory): (Usa python2) Esta é uma ferramenta que tenta **descobrir todos os** [**recursos da AWS**](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#resource) criados em uma conta. - [**aws_public_ips**](https://github.com/arkadiyt/aws_public_ips): É uma ferramenta para **buscar todos os endereços IP públicos** (tanto IPv4/IPv6) associados a uma conta da AWS. ### Privesc & Exploiting - [**SkyArk**](https://github.com/cyberark/SkyArk)**:** Descubra os usuários mais privilegiados no ambiente AWS escaneado, incluindo os AWS Shadow Admins. Ele usa powershell. Você pode encontrar a **definição de políticas privilegiadas** na função **`Check-PrivilegedPolicy`** em [https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1](https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1). - [**pacu**](https://github.com/RhinoSecurityLabs/pacu): Pacu é um **framework de exploração da AWS** de código aberto, projetado para testes de segurança ofensiva contra ambientes em nuvem. Ele pode **enumerar**, encontrar **configurações incorretas** e **explorá-las**. Você pode encontrar a **definição de permissões privilegiadas** em [https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam\_\_privesc_scan/main.py#L134](https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134) dentro do dicionário **`user_escalation_methods`**. - Observe que o pacu **verifica apenas seus próprios caminhos de privesc** (não em toda a conta). ```bash # Install ## Feel free to use venvs pip3 install pacu # Use pacu CLI pacu > import_keys # import 1 profile from .aws/credentials > import_keys --all # import all profiles > list # list modules > exec iam__enum_permissions # Get permissions > exec iam__privesc_scan # List privileged permissions ``` - [**PMapper**](https://github.com/nccgroup/PMapper): O Principal Mapper (PMapper) é um script e biblioteca para identificar riscos na configuração do AWS Identity and Access Management (IAM) para uma conta AWS ou uma organização AWS. Ele modela os diferentes Usuários e Funções IAM em uma conta como um grafo direcionado, o que permite verificações para **elevação de privilégios** e para caminhos alternativos que um atacante poderia seguir para obter acesso a um recurso ou ação na AWS. Você pode verificar as **permissões usadas para encontrar caminhos de privesc** nos arquivos que terminam em `_edges.py` em [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) ```bash # Install pip install principalmapper # Get data pmapper --profile dev graph create pmapper --profile dev graph display # Show basic info # Generate graph pmapper --profile dev visualize # Generate svg graph file (can also be png, dot and graphml) pmapper --profile dev visualize --only-privesc # Only privesc permissions # Generate analysis pmapper --profile dev analysis ## Run queries pmapper --profile dev query 'who can do iam:CreateUser' pmapper --profile dev query 'preset privesc *' # Get privescs with admins # Get organization hierarchy data pmapper --profile dev orgs create pmapper --profile dev orgs display ``` - [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining é uma ferramenta de Avaliação de Segurança do AWS IAM que identifica violações do princípio do menor privilégio e gera um relatório HTML priorizado por risco.\ Ele mostrará clientes **sobreprivilegiados** potencialmente, políticas **inline** e do aws e quais **principais têm acesso a elas**. (Ele não verifica apenas privesc, mas também outros tipos de permissões interessantes, recomendado para uso). ```bash # Install pip install cloudsplaining # Download IAM policies to check ## Only the ones attached with the versions used cloudsplaining download --profile dev # Analyze the IAM policies cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/ ``` - [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack avalia contas AWS em busca de **vulnerabilidades de sequestro de subdomínio** como resultado de configurações desacopladas do Route53 e CloudFront. - [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Listar repositórios ECR -> Puxar repositório ECR -> Inserir backdoor -> Enviar imagem com backdoor - [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag é uma ferramenta que **busca** através de snapshots públicos do Elastic Block Storage (**EBS**) por segredos que podem ter sido acidentalmente deixados. ### Auditoria - [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit da Aqua é um projeto de código aberto projetado para permitir a detecção de **riscos de segurança em contas de infraestrutura em nuvem**, incluindo: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) e GitHub (não procura por ShadowAdmins). ```bash ./index.js --csv=file.csv --console=table --config ./config.js # Compiance options: --compliance {hipaa,cis,cis1,cis2,pci} ## use "cis" for cis level 1 and 2 ``` - [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler é uma ferramenta de segurança de código aberto para realizar avaliações de melhores práticas de segurança da AWS, auditorias, resposta a incidentes, monitoramento contínuo, endurecimento e prontidão forense. ```bash # Install python3, jq and git # Install pip install prowler prowler -v # Run prowler prowler aws --profile custom-profile [-M csv json json-asff html] ``` - [**CloudFox**](https://github.com/BishopFox/cloudfox): O CloudFox ajuda você a obter consciência situacional em ambientes de nuvem desconhecidos. É uma ferramenta de linha de comando de código aberto criada para ajudar testadores de penetração e outros profissionais de segurança ofensiva a encontrar caminhos de ataque exploráveis na infraestrutura de nuvem. ```bash cloudfox aws --profile [profile-name] all-checks ``` - [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite é uma ferramenta de auditoria de segurança multi-nuvem de código aberto, que permite a avaliação da postura de segurança de ambientes em nuvem. ```bash # Install virtualenv -p python3 venv source venv/bin/activate pip install scoutsuite scout --help # Get info scout aws -p dev ``` - [**cs-suite**](https://github.com/SecurityFTW/cs-suite): Cloud Security Suite (usa python2.7 e parece não estar mantido) - [**Zeus**](https://github.com/DenizParlak/Zeus): Zeus é uma ferramenta poderosa para as melhores práticas de hardening do AWS EC2 / S3 / CloudTrail / CloudWatch / KMS (parece não estar mantido). Ele verifica apenas as credenciais configuradas por padrão dentro do sistema. ### Auditoria Contínua - [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian é um mecanismo de regras para gerenciar contas e recursos de nuvem pública. Ele permite que os usuários **definam políticas para habilitar uma infraestrutura de nuvem bem gerenciada**, que seja segura e otimizada em custos. Ele consolida muitos dos scripts ad hoc que as organizações têm em uma ferramenta leve e flexível, com métricas e relatórios unificados. - [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** é uma plataforma para **monitoramento contínuo de conformidade, relatórios de conformidade e automação de segurança para a nuvem**. No PacBot, políticas de segurança e conformidade são implementadas como código. Todos os recursos descobertos pelo PacBot são avaliados em relação a essas políticas para medir a conformidade com as políticas. A estrutura de **auto-fix** do PacBot fornece a capacidade de responder automaticamente a violações de políticas, tomando ações predefinidas. - [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert é uma estrutura de análise de dados **em tempo real** sem servidor que permite que você **ingeste, analise e envie alertas** sobre dados de qualquer ambiente, **usando fontes de dados e lógica de alerta que você define**. Equipes de segurança da informação usam o StreamAlert para escanear terabytes de dados de log todos os dias para detecção e resposta a incidentes. ## DEBUG: Capturar solicitações do AWS cli ```bash # Set proxy export HTTP_PROXY=http://localhost:8080 export HTTPS_PROXY=http://localhost:8080 # Capture with burp nor verifying ssl aws --no-verify-ssl ... # Dowload brup cert and transform it to pem curl http://127.0.0.1:8080/cert --output Downloads/certificate.cer openssl x509 -inform der -in Downloads/certificate.cer -out Downloads/certificate.pem # Indicate the ca cert to trust export AWS_CA_BUNDLE=~/Downloads/certificate.pem # Run aws cli normally trusting burp cert aws ... ``` ## Referências - [https://www.youtube.com/watch?v=8ZXRw4Ry3mQ](https://www.youtube.com/watch?v=8ZXRw4Ry3mQ) - [https://cloudsecdocs.com/aws/defensive/tooling/audit/](https://cloudsecdocs.com/aws/defensive/tooling/audit/) {{#include ../../banners/hacktricks-training.md}}