AWS Pentesting

Reading time: 16 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

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:

AWS - Basic Information

Laboratórios para aprender

Ferramentas para simular ataques:

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 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 credenciais

Ou por comprometer um serviço não autenticado exposto:

AWS - Unauthenticated Enum & Access

Ou se você estiver fazendo uma revisão, você poderia apenas pedir credenciais com esses papéis:

AWS - Permissions for a Pentest

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:

Cloud SSRF - HackTricks

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.

Enumeração de Org

AWS - Organizations Enum

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:

AWS - IAM, Identity Center & SSO Enum

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:

AWS - Services

Note que você não precisa realizar todo o trabalho manualmente, abaixo neste post você pode encontrar uma seção sobre ferramentas automáticas.

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:

AWS - Unauthenticated Enum & Access

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:

AWS - Privilege Escalation

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:

HackTricks - HackTricks

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: 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=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose
  • cloudlist: Cloudlist é uma ferramenta multi-cloud para obter Ativos (Nomes de Host, Endereços IP) de Provedores de Nuvem.
  • 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": "<account 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: 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: 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: (Usa python2) Esta é uma ferramenta que tenta descobrir todos os recursos da AWS criados em uma conta.
  • 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

bash
# Install
## Feel free to use venvs
pip3 install pacu

# Use pacu CLI
pacu
> import_keys <profile_name> # 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: 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
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: 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: CloudJack avalia contas AWS em busca de vulnerabilidades de sequestro de subdomínio como resultado de configurações desacopladas do Route53 e CloudFront.
  • ccat: Listar repositórios ECR -> Puxar repositório ECR -> Inserir backdoor -> Enviar imagem com backdoor
  • 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: 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: 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 <provider>
prowler aws --profile custom-profile [-M csv json json-asff html]
  • 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: 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: Cloud Security Suite (usa python2.7 e parece não estar mantido)
  • 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: 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: 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: 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

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks