AWS Pentesting

Support HackTricks

Informações Básicas

Antes de começar a 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 organizacional, IAM e outros conceitos básicos são explicados em:

Laboratórios para aprender

Ferramentas para simular ataques:

Metodologia de Pentester/Red Team 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:

  • Vazamentos 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 comprometidos

  • Funcionário Interno

  • Cognito credenciais

Ou comprometendo um serviço não autenticado exposto:

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

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, confira esta página para truques:

Whoami

Uma das primeiras coisas que você precisa saber é quem você é (em qual conta você está e outras informações sobre o ambiente AWS):

# 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

Observe 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

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 o IAM, você pode roubar e forçar para descobri-los. Verifique como fazer a enumeração e a força bruta em:

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 e Persistência

A AWS tem uma quantidade impressionante de serviços, na página a seguir você encontrará informações básicas, cheatsheets de enumeração, como evitar detecção, obter persistência e outros truques de pós-exploração sobre alguns deles:

Observe 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:

Escalação de Privilégios

Se você puder verificar pelo menos suas próprias permissões sobre diferentes recursos, você poderá verificar se consegue obter mais permissões. Você deve se concentrar pelo menos nas permissões indicadas em:

Serviços Expostos Publicamente

Ao enumerar 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 consegue 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:

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 concedendo 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, multithreaded, escrita em Ruby.

# 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.

# 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.

# 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 de nuvem, aplicativos 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 quanto IPv6) associados a uma conta da AWS.

Privesc & Exploiting

# 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 escalonamento 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

# 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 super privilegiados potenciais, 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).

# 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 de nuvem, incluindo: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) e GitHub (não procura por ShadowAdmins).

./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.

# 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.

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 de nuvem.

# 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 possuem 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 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

# 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

Support HackTricks

Last updated