Da linha de comando ao pipeline blindado.
Uma trilha prática e sem enrolação que começa do zero — redes, Linux, criptografia — e sobe até engenharia de segurança avançada em DevSecOps e Cloud. Cada módulo termina onde o mercado começa: laboratório real + o que isso vale numa vaga.
Você vai encontrar comandos, exploits e técnicas ofensivas reais nesta apostila. Elas existem para você entender como o ataque funciona e construir a defesa. Rode tudo apenas em máquinas suas, em labs isolados (VMs, containers descartáveis) ou em plataformas autorizadas. Testar sistema de terceiros sem permissão por escrito é crime (no Brasil, Lei 12.737/2012 e Marco Civil).
Como esta apostila funciona
A trilha é sequencial e cumulativa. Os quatro primeiros módulos são a base que todo o resto assume — se você já domina redes e Linux, pode passar rápido, mas não pule. A partir da Parte 2 os temas de Cibersegurança e DevSecOps se alternam e se costuram: você aprende a quebrar para saber o que blindar no pipeline.
Cada módulo traz quatro elementos fixos que você vai reconhecer pela cor:
Um exercício reproduzível. É onde o aprendizado de verdade acontece.
Como esse tema aparece em vagas, entrevistas e no dia a dia da função.
O erro que derruba iniciantes — e às vezes seniores — na prática.
A fundação teórica mínima para o comando não virar decoreba.
O mapa das duas carreiras-alvo
Esta edição foi calibrada para dois papéis que hoje pagam bem e têm alta demanda:
| Papel | O que você faz no dia a dia | Módulos-chave |
|---|---|---|
| DevSecOps / AppSec Engineer | Integra segurança no ciclo de desenvolvimento: pipelines com SAST/DAST/SCA, gestão de segredos, revisão de código, threat modeling, correção com os times de dev. | 05–06, 09–15, 20 |
| Cloud Security Engineer | Protege ambientes AWS/GCP/Azure e Kubernetes: IAM, network, CSPM/CNAPP, detecção, resposta a incidentes na nuvem, IaC seguro. | 12–19, 21–22 |
A boa notícia: os dois se sobrepõem muito. Container security, IaC, supply chain e detecção servem aos dois. Você sai empregável nos dois com a mesma apostila.
A base que ninguém pode pular
Segurança é a arte de entender um sistema melhor do que quem o construiu. Antes de proteger ou atacar qualquer coisa, você precisa saber como pacotes viajam, como o Linux decide quem pode o quê, e por que a criptografia funciona. Aqui está o piso.
Redes: TCP/IP, DNS, HTTP e TLS
Objetivo: enxergar o que acontece "no fio" — porque toda vulnerabilidade de rede, todo firewall e todo mTLS partem daqui.
O modelo mental: camadas
Uma rede é uma pilha de abstrações. Cada camada só conversa com a de baixo. Você não precisa decorar o modelo OSI de 7 camadas — precisa do modelo TCP/IP prático de 4:
- Link (Ethernet/Wi-Fi)
- Move quadros entre placas de rede vizinhas usando endereços MAC. É onde vive o ARP — e o ataque de ARP spoofing.
- Internet (IP)
- Roteia pacotes entre redes usando endereços IP. Não garante entrega nem ordem. IPv4 (
192.168.0.1) e IPv6 (2001:db8::1). - Transporte (TCP/UDP)
- TCP dá conexão confiável e ordenada (handshake SYN → SYN-ACK → ACK). UDP é "atira e esquece" — rápido, sem garantia (DNS, QUIC, jogos).
- Aplicação (HTTP, DNS, TLS)
- O que o software fala: requisições HTTP, resolução de nomes, e-mail. TLS se encaixa aqui protegendo o que está acima dele.
Portas, sockets e o que "escuta" numa máquina
Um serviço abre uma porta (0–65535) e fica escutando. IP + porta = socket. Web = 80/443, SSH = 22, DNS = 53. Metade do trabalho de recon é descobrir quais portas estão abertas. Veja o que sua própria máquina expõe:
# O que está escutando, com processo dono (Linux) sudo ss -tulpn # Testar conectividade e caminho até um host ping -c 4 example.com traceroute example.com # mostra cada salto (hop) # Abrir um socket "na unha" para falar HTTP cru printf 'GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n' | nc example.com 80
DNS: a lista telefônica (e um alvo constante)
Nomes viram IPs via DNS. A resolução recursiva passa por raiz → TLD → autoritativo. Registros que importam em segurança: A/AAAA (IP), CNAME (apelido — vetor de subdomain takeover), MX (e-mail), TXT (SPF/DKIM/DMARC — antispoofing), NS (delegação).
dig +short A example.com dig +short TXT example.com # SPF/DMARC ficam aqui dig +short NS example.com dig +trace example.com # mostra a cadeia de resolução inteira
HTTP e TLS na prática
HTTP é texto: método (GET, POST), caminho, cabeçalhos, corpo. Status importam: 200 ok, 301/302 redirect, 401/403 auth, 500 erro do servidor. TLS envolve o HTTP em criptografia (HTTPS = HTTP sobre TLS). O handshake TLS negocia versão, cifra e valida o certificado do servidor contra uma CA confiável.
# Ver headers da resposta (segurança mora aqui) curl -sI https://example.com # Inspecionar o certificado e a cadeia TLS echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \ | openssl x509 -noout -subject -issuer -dates
Headers de segurança que você vai passar a exigir de toda aplicação: Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options, Referrer-Policy. A ausência deles já é um achado de auditoria.
Instale o Wireshark. Capture o tráfego enquanto acessa um site HTTP simples e depois um HTTPS. Localize o three-way handshake TCP, identifique a requisição HTTP em texto claro no primeiro caso, e confirme que no HTTPS o conteúdo aparece cifrado após o Client Hello / Server Hello. Escreva 5 linhas explicando a diferença que você viu.
Em entrevista de Cloud Security você vai desenhar uma VPC, explicar security groups vs. NACLs e por que 0.0.0.0/0 na porta 22 é um pecado. Nada disso faz sentido sem este módulo. "Explique o que acontece quando você digita uma URL e aperta Enter" é a pergunta clássica — e uma boa resposta passa por DNS, TCP, TLS e HTTP nesta ordem.
Confundir criptografia (TLS) com autenticação. TLS garante que o canal é privado e que o servidor é quem diz ser — não garante que o dado é legítimo nem que o usuário é quem afirma. Aplicação atrás de HTTPS ainda precisa de autenticação e autorização próprias.
Linux operacional & shell
Objetivo: viver no terminal. Servidores, containers e pipelines são Linux — fluência aqui é inegociável.
O sistema de arquivos e a filosofia "tudo é arquivo"
No Linux, dispositivos, processos e sockets aparecem como arquivos. Diretórios que você precisa conhecer: /etc (configuração), /var/log (logs — sua fonte forense), /home (usuários), /proc e /sys (kernel e processos em tempo real), /tmp (temporário e mundialmente gravável — vetor comum).
Navegação, busca e o poder dos pipes
A força do shell é compor ferramentas pequenas com o pipe |. Cada comando faz uma coisa; você encadeia.
find /var/www -name "*.php" -mtime -7 # arquivos php mudados nos últimos 7 dias grep -rniE "password|api_key|secret" . # caça a segredos hardcoded # pipeline: top 10 IPs que mais bateram no nginx awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head # só as linhas 401/403 (tentativas de acesso negado) grep -E ' (401|403) ' /var/log/nginx/access.log | wc -l
Processos, jobs e serviços
Você precisa ver o que roda, matar o que trava e entender serviços gerenciados pelo systemd.
ps aux --sort=-%cpu | head # quem consome CPU sudo systemctl status ssh # estado de um serviço sudo journalctl -u ssh --since "1 hour ago" # logs do serviço lsof -i :443 # que processo usa a porta 443
Scripting: automação é metade do trabalho
Um script defensável tem set -euo pipefail (falha cedo, falha alto). DevSecOps é, em grande parte, escrever automações confiáveis.
#!/usr/bin/env bash set -euo pipefail url="${1:?uso: ./verifica-headers.sh https://host}" faltando=() for h in strict-transport-security content-security-policy x-content-type-options; do if ! curl -sI "$url" | grep -qi "^$h:"; then faltando+=("$h") fi done if [ ${#faltando[@]} -eq 0 ]; then echo "OK: headers presentes"; else echo "FALTANDO: ${faltando[*]}"; exit 1; fi
Suba uma VM Ubuntu (ou um container docker run -it ubuntu bash). Crie o script acima, dê permissão de execução e rode contra 3 sites. Depois, escreva um one-liner que liste os 5 usuários com shell de login em /etc/passwd. Dica: grep por /bin/bash ou /bin/sh no final da linha.
Recrutadores testam Linux com problemas ao vivo: "tem um processo consumindo 100% de CPU, ache e explique". Fluência em grep, awk, find, journalctl e ss separa quem "sabe segurança em teoria" de quem opera. Bônus enorme: saber ler logs rápido é a base de resposta a incidentes.
rm -rf com variável não validada (rm -rf $DIR/ quando $DIR está vazio = rm -rf /). Sempre cite variáveis com aspas ("$DIR") e use set -u para que variável indefinida quebre o script antes do estrago.
Sistemas: processos, permissões & hardening
Objetivo: dominar o modelo de permissões do Linux — a espinha dorsal de privilege escalation e de todo hardening.
Usuários, grupos e o modelo de permissão
Todo arquivo tem dono, grupo e "outros", cada um com read/write/execute. rwxr-x--- = dono lê/escreve/executa, grupo lê/executa, outros nada. Em octal: 750. Isso é o coração do controle de acesso — e do que um atacante busca burlar.
chmod 640 config.env # dono rw, grupo r, outros nada chown app:app config.env umask 027 # novos arquivos nascem sem permissão p/ "outros"
SUID, sudo e escalada de privilégios
O bit SUID faz um binário rodar com o dono dele (geralmente root), não com quem o executa. É necessário para coisas como passwd, mas um SUID mal configurado é o caminho clássico de escalada. A caça a esses arquivos é rotina em pentest e em hardening.
# todos os binários SUID do sistema find / -perm -4000 -type f 2>/dev/null # o que este usuário pode rodar como root sudo -l
Quando encontrar um SUID incomum, consulte GTFOBins: um catálogo de binários Unix que podem ser abusados para escapar de restrições. É a primeira parada de todo pentester — e a checklist do defensor para saber o que remover.
Hardening de um servidor Linux
Reduzir superfície de ataque = princípio do menor privilégio aplicado ao sistema inteiro.
- Desabilitar login SSH por senha e por root; usar apenas chaves
- Firewall padrão-negar (
ufw default deny incoming) - Atualizações automáticas de segurança (
unattended-upgrades) - Remover pacotes e serviços não usados
- Habilitar auditd/journald e enviar logs para fora da máquina
- Aplicar um benchmark CIS ou usar
lynis audit systemcomo baseline
PermitRootLogin no PasswordAuthentication no KbdInteractiveAuthentication no MaxAuthTries 3 AllowUsers deploy
Numa VM, rode find / -perm -4000 -type f 2>/dev/null e liste os SUIDs. Instale o Lynis (sudo lynis audit system) e anote o "hardening index". Aplique 3 recomendações e rode de novo — o número deve subir. Documente antes/depois.
"Hardening" e "CIS Benchmark" são termos que aparecem literalmente em job descriptions de Cloud/DevSecOps. Saber transformar um benchmark CIS em configuração real (e depois em código, no módulo 14) é exatamente o que diferencia um engenheiro de segurança de um analista.
chmod 777 "para funcionar logo". Isso dá escrita a qualquer usuário/processo do sistema, incluindo o comprometido. Se algo "só funciona com 777", o problema é o dono/grupo errado — corrija a causa, não abra tudo.
Criptografia aplicada & PKI
Objetivo: usar criptografia corretamente — hashing, simétrica, assimétrica, certificados — sem virar "quem inventa o próprio algoritmo".
Os três pilares e para que servem
- Hashing (SHA-256, BLAKE2)
- Mão única: verifica integridade e "impressão digital". Não é criptografia. Para senhas, use funções lentas e com sal:
bcrypt,scryptouArgon2id— nunca SHA puro. - Simétrica (AES-GCM, ChaCha20-Poly1305)
- Uma chave cifra e decifra. Rápida, para dados em repouso e em massa. Prefira modos autenticados (AEAD) que também garantem integridade.
- Assimétrica (RSA, ECDSA, Ed25519)
- Par de chaves pública/privada. Resolve troca de chave e assinatura digital. A base de TLS, SSH, JWT assinado e assinatura de artefatos.
Confidencialidade, integridade, autenticidade
Criptografia entrega objetivos, não "segurança" genérica. Cifrar dá confidencialidade. MAC/assinatura dá integridade + autenticidade. Quase todo bug de cripto vem de confundir isso — por isso AEAD (que faz os dois de uma vez) é o default moderno.
# impressão digital de um arquivo sha256sum artefato.tar.gz # par de chaves moderno para SSH (Ed25519) ssh-keygen -t ed25519 -C "deploy@ci" # hash de senha com Argon2 (via ferramenta argon2) echo -n "minhasenha" | argon2 "$(openssl rand -hex 16)" -id -t 3 -m 16
PKI, certificados e a cadeia de confiança
Um certificado X.509 amarra uma chave pública a uma identidade (domínio), assinado por uma Autoridade Certificadora (CA) em quem seu sistema confia. Cadeia: certificado do site → CA intermediária → CA raiz (no seu truststore). Se qualquer elo falhar (expirado, hostname errado, CA desconhecida), a validação quebra. Isto é o que sustenta TLS e, mais adiante, o mTLS de Zero Trust (módulo 21).
# CA raiz de laboratório openssl req -x509 -newkey rsa:4096 -nodes -keyout ca.key -out ca.crt \ -days 365 -subj "/CN=Lab Root CA" # chave + CSR do serviço openssl req -newkey rsa:2048 -nodes -keyout svc.key -out svc.csr \ -subj "/CN=svc.local" # CA assina o cert do serviço openssl x509 -req -in svc.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ -out svc.crt -days 90
JWT: onde AppSec encontra cripto
Tokens JWT são três partes base64: header, payload, assinatura. A assinatura (HMAC ou assimétrica) garante que ninguém alterou o payload. Vulnerabilidades famosas: aceitar alg: none, confundir chave pública com segredo HMAC (algorithm confusion), ou não validar expiração. Você vai explorar e corrigir isso no módulo 06.
Gere a CA e o certificado do serviço acima. Depois rode openssl verify -CAfile ca.crt svc.crt e confirme o "OK". Em seguida, edite 1 byte do svc.crt e rode de novo — observe a falha de validação. Isso é integridade criptográfica na prática.
Ninguém vai te pedir para implementar AES do zero — pelo contrário, "não role sua própria cripto" é a regra. O que se espera é usar bibliotecas maduras corretamente: escolher Argon2 para senhas, AEAD para dados, gerenciar rotação de certificados, e reconhecer más práticas em code review. Em Cloud, isso vira KMS, envelope encryption e gestão de chaves — tudo assentado neste módulo.
Guardar senha com md5 ou sha256 "porque é hash". Hashes rápidos são feitos para velocidade — ótimo para atacante que testa bilhões por segundo. Senha exige função lenta e com sal (Argon2id). Confundir isso é um dos achados mais comuns em AppSec.
Aprender a quebrar para saber blindar
Você não protege o que não entende. Esta parte te dá o olhar do atacante — modelagem de ameaças, as vulnerabilidades web que mais causam vazamentos, e o fluxo de um pentest — e o olhar do defensor: logs, detecção e resposta. Tudo isso alimenta diretamente as decisões que você vai automatizar no pipeline na Parte 3.
Modelagem de ameaças & AppSec (OWASP Top 10)
Objetivo: pensar como atacante de forma estruturada e conhecer as 10 classes de falha que dominam aplicações web.
Threat modeling: STRIDE em 4 perguntas
Modelagem de ameaças é responder cedo, no design: o que estamos construindo? o que pode dar errado? o que faremos a respeito? fizemos um bom trabalho? O mnemônico STRIDE te dá as categorias de "o que pode dar errado":
| Letra | Ameaça | Viola | Contramedida típica |
|---|---|---|---|
| S | Spoofing (fingir ser outro) | Autenticidade | Autenticação forte, MFA |
| T | Tampering (adulterar dados) | Integridade | Assinaturas, validação, hashing |
| R | Repudiation (negar ação) | Não-repúdio | Logs assinados, auditoria |
| I | Information disclosure | Confidencialidade | Criptografia, controle de acesso |
| D | Denial of Service | Disponibilidade | Rate limiting, autoscaling, WAF |
| E | Elevation of privilege | Autorização | Menor privilégio, checagens server-side |
Na prática você desenha um data flow diagram (usuário → API → banco → serviços externos), marca as fronteiras de confiança (trust boundaries) e aplica STRIDE em cada travessia. É barato fazer no whiteboard e caro descobrir em produção.
OWASP Top 10 — o vocabulário obrigatório
É a lista de referência das categorias de risco mais críticas em aplicações web. Você precisa reconhecer cada uma de cor:
- A01 Broken Access Control
- Usuário acessa o que não deveria (IDOR, falta de checagem server-side). O nº1 hoje.
- A02 Cryptographic Failures
- Dado sensível sem cripto, hash fraco de senha, TLS mal configurado (módulo 04).
- A03 Injection
- SQLi, comando, LDAP — entrada não confiável interpretada como código.
- A04 Insecure Design
- Falha na arquitetura, não no código. É onde threat modeling atua.
- A05 Security Misconfiguration
- Defaults inseguros, buckets públicos, headers ausentes, debug ligado.
- A06 Vulnerable Components
- Dependência com CVE conhecido. Resolvido por SCA (módulo 11).
- A07 Identification & Auth Failures
- Sessão fraca, brute force sem limite, JWT mal validado.
- A08 Software & Data Integrity
- Update/deploy sem verificação de integridade — supply chain (módulo 15).
- A09 Logging & Monitoring Failures
- Ataque sem deixar rastro visível. Blue team (módulo 08).
- A10 SSRF
- Servidor forçado a fazer requisições internas — crítico em nuvem (metadata endpoint).
Escolha um app que você já usou (um e-commerce simples serve). Desenhe o data flow em papel: cliente, servidor web, API, banco, gateway de pagamento. Marque as trust boundaries e liste uma ameaça STRIDE por travessia com sua contramedida. Esse artefato é literalmente o que um AppSec Engineer entrega.
"Faça o threat model deste sistema" é um exercício comum em entrevistas de AppSec/DevSecOps sênior. Saber conduzir uma sessão de threat modeling (com devs, não contra eles) é uma habilidade de engenheiro e a ponte natural para "shift-left". Cite STRIDE, DFDs e OWASP e você fala a língua da vaga.
Tratar o OWASP Top 10 como checklist de conformidade. Ele é um ponto de partida de conscientização, não uma auditoria completa. Passar "os 10" não significa estar seguro — muitos incidentes reais moram em lógica de negócio, fora da lista.
Vulnerabilidades web na prática
Objetivo: explorar e corrigir as falhas web mais frequentes — injeção, XSS, SSRF, IDOR e falhas de autenticação — em lab.
Injeção SQL — a mãe dos exemplos
Acontece quando entrada do usuário é concatenada numa query. Se o código faz "SELECT * FROM users WHERE nome='" + input + "'", o input ' OR '1'='1 transforma a condição em sempre-verdadeira. A correção não é "filtrar aspas" — é separar código de dados com queries parametrizadas.
# ❌ VULNERÁVEL — concatenação cur.execute(f"SELECT * FROM users WHERE email='{email}'") # ✅ SEGURO — query parametrizada (o driver escapa) cur.execute("SELECT * FROM users WHERE email=%s", (email,))
XSS — quando o navegador executa o que não devia
Cross-Site Scripting injeta JavaScript que roda no navegador da vítima (roubo de sessão, keylogging). Tipos: refletido (na resposta imediata), armazenado (salvo no banco, atinge todos) e DOM-based (no client). Defesa em camadas: escape de saída conforme o contexto (HTML, atributo, JS), Content-Security-Policy, e cookies HttpOnly.
# payload de teste clássico (refletido) <script>alert(document.cookie)</script> # defesa: CSP restritiva no header de resposta Content-Security-Policy: default-src 'self'; script-src 'self'
SSRF — o servidor como seu proxy
Server-Side Request Forgery faz a aplicação buscar uma URL que o atacante controla. Em nuvem, o alvo é o endpoint de metadados (169.254.169.254), que pode vazar credenciais temporárias da instância. É por isso que SSRF é catastrófico em AWS/GCP e entrou no Top 10. Defesa: allowlist de destinos, bloquear IPs internos/link-local, e usar IMDSv2 (módulo 17).
IDOR & Broken Access Control
Se /api/pedido/1001 mostra o pedido de outro usuário só trocando o número, é IDOR. A causa: o servidor confia no ID sem checar se aquele usuário pode ver aquele recurso. A correção é sempre server-side: valide a posse do objeto em toda requisição, nunca esconda o botão e ache que basta.
Falhas de autenticação e JWT
Retomando o módulo 04: um JWT que aceita {"alg":"none"} ignora a assinatura — qualquer um forja um admin. Outra: servidor que valida token HMAC usando a chave pública como segredo. Sempre fixe o algoritmo esperado no servidor e valide exp, iss e aud.
Suba o OWASP Juice Shop (docker run -d -p 3000:3000 bkimminich/juice-shop) — um app deliberadamente vulnerável. Complete os desafios de SQLi (login bypass), XSS refletido e Broken Access Control. Depois, para cada um, escreva a correção que você recomendaria em code review. Guarde isso: vira material de portfólio.
Instale o Burp Suite Community ou o OWASP ZAP como proxy interceptador. Ver e modificar cada requisição entre navegador e servidor é a habilidade central de web AppSec — e o ZAP ainda automatiza DAST no pipeline (módulo 11).
Vagas de AppSec pedem "capacidade de identificar e explicar vulnerabilidades OWASP e orientar a remediação". Ter um Juice Shop resolvido, um relatório de findings e a explicação da correção é um portfólio que fala mais que qualquer certificado. Bug bounty (HackerOne, plataformas éticas) é outra vitrine valiosa.
Validar entrada só no front-end. JavaScript no cliente é sugestão, não segurança — o atacante fala direto com a API. Toda validação de segurança e autorização precisa ser refeita no servidor.
Pentest: recon → exploração → pós-exploração
Objetivo: entender o fluxo completo de um teste de intrusão para depois defender cada fase — em ambiente autorizado.
Tudo aqui roda em labs seus (TryHackMe, HackTheBox, VulnHub, Juice Shop) ou com contrato de pentest assinado. Scan não autorizado já é ilícito em muitos casos.
As fases de um engajamento
Um pentest segue etapas bem definidas — o mesmo mapa que o defensor usa para saber onde plantar detecção:
| Fase | Objetivo | Exemplo de técnica |
|---|---|---|
| 1. Recon | Coletar info sem/pouco tocar o alvo | OSINT, subdomínios, DNS |
| 2. Scanning | Mapear portas, serviços, versões | nmap |
| 3. Enumeração | Detalhar serviços e achar brechas | Fuzzing de diretórios, banners |
| 4. Exploração | Obter acesso inicial | SQLi, RCE, credencial fraca |
| 5. Pós-exploração | Escalar privilégio, persistir, pivotar | SUID, tokens, movimento lateral |
| 6. Relatório | Documentar, priorizar, recomendar | CVSS, PoC, remediação |
Recon e scanning na prática
# descoberta de hosts na sua rede de lab nmap -sn 10.10.10.0/24 # portas + versões + scripts default nmap -sV -sC -p- 10.10.10.5 # fuzzing de diretórios web ffuf -u http://10.10.10.5/FUZZ -w /usr/share/wordlists/dirb/common.txt
O MITRE ATT&CK é o dicionário que conecta cada técnica ofensiva a táticas (Initial Access, Persistence, Lateral Movement…). Domine-o: é a linguagem comum de red e blue team, e você vai usá-lo para escrever detecções no módulo 22.
Pós-exploração e movimento lateral
Acesso inicial raramente é o objetivo — é o começo. O atacante escala privilégio (módulo 03), busca credenciais em memória e arquivos, e pivota para outras máquinas. Entender isso te ensina onde o defensor deve segmentar rede, rotacionar credenciais e monitorar.
Crie conta gratuita no TryHackMe e complete a trilha "Pre Security" + a sala "Nmap". Depois, resolva uma máquina "Easy" ponta a ponta e escreva um mini-relatório com as 6 fases acima. Esse relatório é ouro para o portfólio e treina a habilidade mais subvalorizada: documentar.
Mesmo em vaga de DevSecOps/Cloud (não de pentest), pensar como atacante te faz um revisor de pipeline muito melhor: você prioriza os controles que realmente barram um kill chain. Certificações como eJPT (entrada) e OSCP (referência de mercado ofensivo) validam esse fluxo — mas o hands-on em THM/HTB é o que constrói a habilidade.
Rodar nmap ou ferramentas ofensivas fora do seu lab "só para testar". Além de ilegal sem autorização, gera alertas e pode derrubar serviços. Escopo e autorização por escrito são a primeira regra da profissão.
Blue team: logging, detecção & resposta
Objetivo: enxergar o ataque acontecendo e reagir — a outra metade da segurança, e cada vez mais parte do DevSecOps.
Sem log, sem defesa
A9 do OWASP existe por um motivo: você não responde ao que não vê. Um bom pipeline de observabilidade de segurança coleta, centraliza e correlaciona: logs de aplicação, sistema (auditd), rede (flow logs) e nuvem (CloudTrail). O agregador é o SIEM (Splunk, Elastic, Wazuh, Sentinel).
Do log ao alerta: detecção
Detecção é transformar sinal em alerta acionável. Regras respondem a padrões: 5 falhas de login seguidas de um sucesso (possível brute-force bem-sucedido), execução de whoami logo após acesso a um serviço web (possível RCE), criação de usuário IAM fora do horário. O padrão aberto para escrever isso é Sigma, que você converte para a query do seu SIEM.
title: Possível brute force SSH bem-sucedido
logsource:
product: linux
service: auth
detection:
falhas:
message|contains: 'Failed password'
sucesso:
message|contains: 'Accepted password'
condition: falhas | count() > 5 near sucesso
level: highResposta a incidentes: o ciclo
Quando o alerta dispara, entra o processo de IR (referência: NIST SP 800-61). Memorize as fases:
| Fase | O que acontece |
|---|---|
| Preparação | Playbooks, ferramentas, contatos, treinos prontos antes do incidente |
| Detecção & Análise | Confirmar o incidente, escopo, severidade, linha do tempo |
| Contenção | Isolar o afetado (tirar da rede, revogar credencial) sem destruir evidência |
| Erradicação | Remover a causa: malware, conta comprometida, brecha |
| Recuperação | Restaurar operação com monitoramento reforçado |
| Lições aprendidas | Post-mortem sem culpa: o que muda no processo/pipeline |
Instale o Wazuh (SIEM open-source, via Docker) e conecte um agente numa VM. Gere eventos: várias tentativas de SSH falhas e um sudo. Encontre os alertas no dashboard e escreva um mini-playbook de resposta para "brute force SSH detectado" com as 6 fases acima.
Detecção e IR estão migrando para o mundo cloud/DevSecOps: alertas viram código, playbooks viram automação (SOAR). Cloud Security Engineers frequentemente respondem a incidentes em CloudTrail/GuardDuty (módulo 19). Saber ler logs, escrever uma regra de detecção e conduzir um post-mortem sem culpa é diferencial forte.
Na contenção, apagar a máquina comprometida "para resolver logo". Isso destrói evidência forense e impede entender o alcance real. Contenha isolando (snapshot + network off), preserve, só então erradique.
Segurança que anda na velocidade da entrega
DevSecOps é embutir segurança em cada etapa do ciclo de software — do commit ao deploy — de forma automatizada, para que "seguro" seja o caminho de menor esforço, não um portão no fim. Aqui você constrói o pipeline: cultura, segredos, os scanners (SAST/DAST/SCA), containers, Kubernetes, infraestrutura como código e a cadeia de suprimentos. É a espinha dorsal da vaga de AppSec/DevSecOps Engineer.
Cultura DevSecOps, SDLC seguro & shift-left
Objetivo: entender o modelo mental que sustenta tudo — por que segurança precisa ser de todos e antecipada.
De "gate no final" para "segurança contínua"
No modelo antigo, o time de segurança auditava no fim e barrava o release — gerando atrito, atraso e conflito. Shift-left move os controles para o começo do ciclo, onde corrigir é ordens de magnitude mais barato. DevSecOps é a cultura + automação que torna isso viável: a segurança vira código que roda no pipeline, e o dev recebe feedback em minutos, não semanas.
O SDLC seguro, etapa por etapa
| Etapa | Atividade de segurança | Onde nesta apostila |
|---|---|---|
| Design | Threat modeling, requisitos de segurança | M05 |
| Código | Secure coding, pre-commit hooks, secret scanning | M10 |
| Build/CI | SAST, SCA, gates de qualidade | M11 |
| Test | DAST, testes de segurança automatizados | M11 |
| Deploy | IaC scanning, imagem assinada, config segura | M12–15 |
| Operação | Detecção, resposta, gestão de vulnerabilidades | M08, M19 |
Medindo maturidade e escalando com "guardrails"
Modelos como OWASP SAMM e BSIMM medem a maturidade do programa. Mas o conceito operacional mais importante é guardrails, não gates: em vez de bloquear, você dá caminhos pavimentados seguros (templates de pipeline, módulos de IaC aprovados, imagens base endurecidas) para que o time de dev faça a coisa certa por padrão. Segurança que escala é segurança que se torna a opção fácil.
Pegue um projeto simples seu (ou fork um repo pequeno). Mapeie o SDLC dele hoje e preencha a tabela acima: em que etapas não há nenhum controle de segurança? Escreva um "plano de shift-left" de 1 página priorizando os 3 controles de maior impacto/menor esforço. Esse documento é exatamente um entregável inicial de DevSecOps.
Empresas contratam DevSecOps não só por ferramentas, mas por quem consegue reduzir atrito entre dev e segurança. Falar em shift-left, guardrails, SAMM e "paved road" mostra que você pensa em programa, não só em scanner. Isso te posiciona acima do júnior que só sabe rodar uma ferramenta.
Ligar todos os scanners no modo "bloqueia tudo" no dia 1. O resultado é uma enxurrada de falsos positivos, pipeline vermelho e devs desligando a segurança. Comece em modo relatório, calibre, e só então promova achados a bloqueantes de forma incremental.
Git seguro & gestão de segredos
Objetivo: proteger a origem de tudo — o código — e nunca mais vazar uma credencial em repositório.
O vazamento nº1: segredos no repositório
Chaves de API, tokens e senhas commitados são uma das causas mais comuns de invasão. E o Git nunca esquece: apagar num commit novo não remove do histórico. A defesa é prevenir na origem com pre-commit hooks e escanear o histórico.
# escanear o repo inteiro (histórico incluso) gitleaks detect --source . --verbose # instalar pre-commit hooks que barram o segredo antes do commit pip install pre-commit # .pre-commit-config.yaml aponta para gitleaks / detect-secrets pre-commit install
Se um segredo já foi commitado, "removê-lo do histórico" não basta — assuma-o comprometido e rotacione a credencial imediatamente. Reescrever histórico (git filter-repo) é para limpeza; a resposta de segurança é revogar e trocar.
Onde segredos realmente devem morar
A regra: segredo nunca no código, nunca em imagem, nunca em log. Ele vive num cofre e é injetado em runtime. Escala de maturidade:
- Variáveis de ambiente + .env fora do git — mínimo viável, ainda frágil.
- Secret manager gerenciado — AWS Secrets Manager, GCP Secret Manager, Azure Key Vault. Rotação, auditoria, IAM.
- HashiCorp Vault — cofre dedicado com segredos dinâmicos (credencial de banco criada sob demanda, válida por minutos) e leasing.
# app pede um segredo em runtime, autenticado por sua identidade vault kv get -field=password secret/prod/db # segredo dinâmico: credencial de banco efêmera, revogada sozinha vault read database/creds/app-readonly
Proteção do repositório e da colaboração
- Branch protection na main: exigir PR, review e checks verdes
- Commits assinados (GPG/SSH/Sigstore) para autenticidade
- 2FA obrigatório na organização e menor privilégio nos tokens de CI
- Dependabot/Renovate para atualizar dependências (conecta ao M11)
- CODEOWNERS para exigir review de segurança em paths sensíveis
Num repo de teste, commite propositalmente uma "chave" falsa (ex.: AKIA...). Rode gitleaks detect e confirme o achado. Depois configure o pre-commit com gitleaks e tente commitar outro segredo — o commit deve ser bloqueado. Documente o antes/depois.
"Gestão de segredos" aparece em praticamente toda vaga de DevSecOps/Cloud. Conhecer Vault e os secret managers das nuvens, além de secret scanning no pipeline, é esperado. Bônus: entender segredos dinâmicos e OIDC (CI autenticando na nuvem sem chave estática, módulo 16) te coloca em nível sênior.
Pipeline security: SAST · DAST · SCA
Objetivo: construir um pipeline CI/CD que testa segurança automaticamente a cada commit — o entregável central da função.
O trio de scanners e o que cada um vê
- SAST — Static Application Security Testing
- Analisa o código-fonte sem executar. Acha injeção, segredos, padrões inseguros. Rápido, cedo, mas gera falsos positivos. Ferramentas: Semgrep, CodeQL, SonarQube.
- SCA — Software Composition Analysis
- Examina suas dependências em busca de CVEs conhecidos (A06 do OWASP). Onde mora a maior parte do seu código-risco. Ferramentas: Trivy, Grype, Snyk, Dependabot.
- DAST — Dynamic Application Security Testing
- Testa a aplicação rodando, como um atacante externo. Acha problemas de runtime/config que o SAST não vê. Ferramentas: OWASP ZAP, Nuclei.
Nenhum sozinho é suficiente — eles têm ângulos complementares. Some IaC scanning (M14) e container scanning (M12) e você tem cobertura de ponta a ponta.
Um pipeline real (GitHub Actions)
Veja como isso vira YAML. Este é o tipo de artefato que você vai escrever e defender numa entrevista técnica:
name: security-scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# secret scanning
- name: Gitleaks
uses: gitleaks/gitleaks-action@v2
# SAST — regras da comunidade + próprias
- name: Semgrep
run: |
pip install semgrep
semgrep --config=auto --error .
# SCA — dependências e imagem
- name: Trivy (deps + fs)
uses: aquasecurity/trivy-action@master
with:
scan-type: fs
severity: HIGH,CRITICAL
exit-code: '1' # falha o build se achar HIGH/CRITICALGates: quando quebrar o build?
Retomando o M09: nem todo achado bloqueia. Uma política sensata: bloquear segredo vazado e vuln CRITICAL com exploit conhecido sempre; para o resto, criar issue e dar prazo (SLA de remediação por severidade). A chave é triagem: reduzir ruído para que os alertas bloqueantes sejam confiáveis.
DAST no pipeline
# sobe a app efêmera, roda scan passivo/baseline, gera relatório
docker run --rm -t ghcr.io/zaproxy/zaproxy zap-baseline.py \
-t http://staging.app.local -r zap-report.htmlFork um projeto com dependências (Node ou Python). Crie o workflow acima no GitHub Actions. Provoque falhas: adicione uma dependência antiga com CVE e veja o Trivy quebrar o build; escreva uma regra Semgrep simples que pegue eval(. Ajuste a severidade até o pipeline ficar "verde por mérito". Publique o repo — é portfólio direto.
Este é o módulo que a vaga de DevSecOps quer ver. Um repositório público com pipeline de segurança funcional (SAST+SCA+secret+DAST), README explicando as decisões de gate, vale mais que dez linhas de currículo. Saber nomear Semgrep, Trivy, ZAP e explicar a diferença entre eles é pergunta de entrevista garantida.
"Alert fatigue": ligar tudo em bloqueante gera centenas de findings, o time ignora todos e a segurança perde credibilidade. Priorize por severidade + explorabilidade + exposição real. Um alerta que sempre importa vale mais que mil que ninguém lê.
Containers & Docker security
Objetivo: construir e rodar imagens de container seguras — a unidade de deploy padrão do mundo cloud-native.
O que é (e o que não é) um container
Um container é um processo isolado por recursos do kernel — namespaces (o que ele vê) e cgroups (quanto ele usa) — compartilhando o kernel do host. Isso é fundamental: container não é VM. O isolamento é mais fino, então um escape de container atinge o host. Entender namespaces/cgroups é o que separa quem "usa Docker" de quem "protege Docker".
Anatomia de um Dockerfile seguro
# estágio de build FROM golang:1.22 AS build WORKDIR /src COPY . . RUN CGO_ENABLED=0 go build -o /app ./cmd # imagem final mínima — sem shell, sem package manager FROM gcr.io/distroless/static:nonroot COPY --from=build /app /app USER nonroot:nonroot # nunca rode como root ENTRYPOINT ["/app"]
Princípios embutidos aí: multi-stage (ferramentas de build ficam fora da imagem final), base mínima (distroless/alpine — menos pacotes, menos CVEs, sem shell para o atacante usar), usuário não-root, e imagem imutável (nada instalado em runtime).
Escaneando e endurecendo
# CVEs na imagem (integra ao pipeline do M11) trivy image minhaapp:latest --severity HIGH,CRITICAL # rodar com privilégios reduzidos docker run --read-only --cap-drop ALL \ --security-opt no-new-privileges \ --user 10001 minhaapp:latest
- Nunca
--privileged; drope todas as capabilities e adicione só as necessárias - Sistema de arquivos read-only; monte volumes específicos como writable
- Nunca monte o
docker.sockdentro de um container (= root no host) - Fixe a base por digest (
@sha256:...), não por tag mutável - Escaneie na build E no registry; bloqueie push de imagem vulnerável
Pegue uma imagem "gorda" (ex.: node:latest) e escaneie com Trivy — anote a contagem de CVEs. Reescreva o Dockerfile em multi-stage com base slim/distroless e usuário não-root. Escaneie de novo e compare a redução de vulnerabilidades e de tamanho. Esse "antes/depois" é uma história perfeita para entrevista.
Container security é interseção pura das duas carreiras-alvo. Vagas pedem "hardening de imagens, scanning e políticas de admissão". Saber explicar por que distroless reduz superfície, o perigo do docker.sock e como quebrar um container mal configurado (escape) te destaca imediatamente.
latest em produção. A tag muda sob seus pés — build reproduzível vira impossível e você não sabe o que está rodando. Fixe por digest. E: root dentro do container + volume do host montado = comprometimento do host trivial.
Kubernetes security
Objetivo: proteger o orquestrador que roda a maioria das cargas cloud-native — RBAC, network policy, admission control.
A superfície de ataque do cluster
Kubernetes tem muitas fronteiras: API server (o cérebro), etcd (o banco com todos os segredos), kubelet (agente em cada nó), e as cargas em si. A referência mental são os 4 C's: Cloud, Cluster, Container, Code — segurança é em camadas, de fora para dentro. Um pod comprometido não pode virar cluster comprometido.
RBAC: menor privilégio no cluster
RBAC controla quem faz o quê. O erro clássico é dar cluster-admin "para funcionar". Comece negando e conceda o mínimo por namespace.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata: { namespace: app, name: pod-reader }
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"] # nada de create/delete/execIsolar cargas: Pod Security & Network Policy
Por padrão, todo pod fala com todo pod — péssimo. NetworkPolicy aplica micro-segmentação (base do Zero Trust, M21). Pod Security Standards (restricted) impedem pods privilegiados, root e escalada.
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata: { name: default-deny, namespace: app }
spec:
podSelector: {}
policyTypes: [Ingress, Egress] # sem regras = nega tudo; libere explicitamenteAdmission control: a política que barra na porta
Admission controllers avaliam cada objeto antes de criá-lo. Com OPA/Gatekeeper ou Kyverno você impõe regras como "nenhuma imagem sem tag fixa", "nenhum container privilegiado", "todo pod tem limites de recurso". É o guardrail do M09 aplicado ao cluster — Policy as Code no runtime.
kubectl auth can-i --list # o que ESTA identidade pode fazer kube-bench # auditoria CIS do cluster trivy k8s --report summary cluster # CVEs e misconfigs
Suba um cluster local (kind ou minikube). Rode kube-bench e anote os fails. Aplique: um namespace com Pod Security "restricted", uma NetworkPolicy default-deny, e um Role de leitura. Instale o Kyverno e crie uma política que rejeite imagens com tag latest. Tente subir um pod violando cada regra e confirme o bloqueio.
Kubernetes security é dos temas mais bem pagos e demandados em Cloud Security. A certificação CKS (Certified Kubernetes Security Specialist) é referência forte. Vagas citam RBAC, network policies, Pod Security, OPA/Kyverno e runtime security (Falco, M22) explicitamente. Domínio aqui abre portas sênior.
ServiceAccount token montado em todo pod + RBAC frouxo = um pod comprometido lê segredos e cria cargas no cluster inteiro. Desabilite automount onde não precisa (automountServiceAccountToken: false) e trate o token do pod como credencial sensível.
IaC security & Policy as Code
Objetivo: escanear e governar infraestrutura declarada em Terraform/CloudFormation antes que ela vire risco em produção.
Infra como código = risco como código (e correção como código)
Quando a infraestrutura é declarada em texto (Terraform, CloudFormation, Bicep), uma configuração insegura — bucket público, security group aberto, banco sem criptografia — vira um bug detectável antes do deploy. Esse é o shift-left mais poderoso da nuvem: você corrige no PR, não em produção.
# ❌ security group escancarado ingress { from_port=22 to_port=22 protocol="tcp" cidr_blocks=["0.0.0.0/0"] } # ✅ acesso restrito a uma rede conhecida ingress { from_port=22 to_port=22 protocol="tcp" cidr_blocks=[var.bastion_cidr] }
Scanners de IaC
trivy config . # misconfigs em TF/K8s/Docker checkov -d . # centenas de checks prontos + custom tfsec . # foco em Terraform
Todos plugam no pipeline (M11) e falham o PR quando encontram uma política violada. A saída em formato SARIF integra ao GitHub Security, centralizando findings.
Policy as Code com OPA/Rego
Além de checks prontos, você escreve suas políticas organizacionais em Rego (linguagem do Open Policy Agent). Ex.: "todo bucket S3 desta org deve ter criptografia e bloqueio de acesso público". A mesma engine (OPA) governa Terraform no CI, admission no Kubernetes (M13) e autorização de API — um só vocabulário de política.
package terraform.s3
deny[msg] {
bucket := input.resource.aws_s3_bucket[name]
bucket.acl == "public-read"
msg := sprintf("bucket %v não pode ser público", [name])
}Escreva um Terraform pequeno que cria um bucket S3 público e um security group com SSH aberto ao mundo (não aplique!). Rode checkov -d . e tfsec . — leia cada finding e corrija até passar. Depois adicione o scan ao workflow do M11 para que quebre o PR. Guarde como projeto de portfólio "IaC security gate".
IaC scanning é praticamente pré-requisito em Cloud/DevSecOps hoje. Terraform + Checkov/Trivy + OPA/Rego é uma combinação citada nominalmente em vagas. Saber escrever uma política custom em Rego (não só rodar checks prontos) é o que marca o nível sênior — porque toda empresa tem regras próprias.
Escanear só o código IaC e esquecer o drift: alguém muda algo no console da nuvem à mão e a realidade diverge do código. IaC seguro no repo não garante nuvem segura — por isso você precisa de CSPM em runtime (M18) além do scan de pipeline.
Supply chain security: SBOM · SLSA · Sigstore
Objetivo: garantir integridade e proveniência de tudo que entra no seu software — o front de segurança que mais cresceu.
Por que isso virou prioridade
Ataques como SolarWinds, Log4Shell e pacotes maliciosos em npm/PyPI mostraram que o elo mais fraco pode ser uma dependência ou o próprio build. Supply chain security (A08 do OWASP) responde a três perguntas: o que tem no meu software? de onde veio? posso provar que não foi adulterado?
SBOM: a lista de ingredientes
Um SBOM (Software Bill of Materials) é o inventário completo de componentes e versões, em formato padrão (CycloneDX, SPDX). Com ele, quando sai um novo CVE (tipo Log4Shell), você responde em minutos "estou afetado?" em vez de dias.
syft minhaapp:latest -o cyclonedx-json > sbom.json # gera o SBOM grype sbom:sbom.json # cruza com CVEs conhecidos
Assinatura e proveniência: Sigstore & SLSA
Sigstore/cosign assina artefatos (imagens, SBOMs) usando identidade — sem gerenciar chaves de longo prazo (keyless, via OIDC). O consumidor verifica antes de rodar. SLSA é um framework de níveis que atesta como o artefato foi construído (proveniência do build), dificultando adulteração no pipeline.
cosign sign minhaapp@sha256:abc... # assina (keyless via OIDC do CI) cosign verify minhaapp@sha256:abc... \ --certificate-identity-regexp=".*" \ --certificate-oidc-issuer=https://token.actions.githubusercontent.com
No Kubernetes, uma policy de admission (M13) pode exigir assinatura válida — nenhuma imagem não assinada roda. É o fechamento do círculo: build → assina → verifica → executa.
Gere o SBOM de uma imagem sua com syft e rode grype em cima. Depois, num repo com GitHub Actions, use cosign para assinar a imagem no build (keyless) e verifique-a localmente. Documente a cadeia "gerou SBOM → escaneou → assinou → verificou". Poucos candidatos júnior/pleno têm isso no portfólio.
Regulação (ex.: exigências de SBOM em contratos, ordens executivas) e incidentes fizeram supply chain security explodir em demanda. Nomear CycloneDX, SLSA, Sigstore/cosign e explicar "keyless signing" te coloca à frente — é um tema recente que muitos seniores ainda estão aprendendo.
Gerar SBOM uma vez e arquivar. SBOM só tem valor se for gerado a cada build, versionado junto ao artefato e consultável quando um CVE novo surge. SBOM parado é documentação morta.
Segurança onde a infraestrutura virou API
Na nuvem, tudo é uma chamada de API e uma configuração — o que torna o erro humano o principal vetor. Identidade é o novo perímetro. Esta parte cobre IAM, os controles nucleares das três grandes nuvens, as plataformas que verificam sua postura (CSPM/CNAPP) e como detectar e responder a incidentes cloud-native. É o núcleo da carreira de Cloud Security Engineer.
Fundamentos cloud & IAM
Objetivo: dominar o modelo de responsabilidade compartilhada e IAM — o controle mais importante e mais errado da nuvem.
Responsabilidade compartilhada
A nuvem protege "a infraestrutura da nuvem"; você protege "o que roda nela": suas configurações, dados, IAM e código. A maioria dos vazamentos famosos (buckets abertos) é falha do cliente, não do provedor. Saber onde termina a responsabilidade deles e começa a sua é a primeira pergunta de qualquer arquitetura.
IAM: identidade é o novo perímetro
Não existe mais "dentro da rede confiável". O que um ator pode fazer depende inteiramente da identidade e das políticas dela. Conceitos que você precisa dominar:
- Principal
- Quem age: usuário, grupo, role, service account, workload.
- Policy
- Documento (geralmente JSON) que concede/nega ações sobre recursos, com condições.
- Role & assumption
- Identidade temporária que um principal "assume" para obter permissões — base de acesso sem chave estática.
- Menor privilégio
- Conceder só o necessário. Ferramentas de "access analyzer" reduzem permissões com base no uso real.
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::relatorios/*",
"Condition": { "IpAddress": { "aws:SourceIp": "203.0.113.0/24" } }
}Fim das chaves estáticas: OIDC & workload identity
O padrão moderno elimina credenciais de longa duração. Seu pipeline (GitHub Actions) autentica na nuvem via OIDC, recebendo credenciais temporárias — nada de AKIA... guardado em secret. Isso conecta diretamente ao M10 (segredos) e é hoje a resposta certa em entrevista para "como o CI acessa a AWS?".
Crie uma conta free-tier (AWS ou GCP). Crie um usuário/role com política de menor privilégio para ler um bucket específico. Tente acessar outro recurso e confirme o "Access Denied". Depois, use o simulador de políticas (IAM Policy Simulator) para validar. Ative MFA e billing alerts antes de qualquer coisa.
IAM é o tema de Cloud Security. Vagas pedem desenho de políticas de menor privilégio, entendimento de assumption de roles e federação OIDC. A certificação de entrada mais valorizada é a AWS Security Specialty (ou a Solutions Architect Associate como base). Saber depurar "por que essa role não tem acesso?" é habilidade diária.
Action: "*" / Resource: "*" "temporário" que vira permanente. Wildcards em IAM são a origem de escalada de privilégio na nuvem. E chave de acesso estática commitada (M10) numa conta com permissões amplas é a receita do vazamento clássico.
Núcleo de segurança AWS · GCP · Azure
Objetivo: conhecer os controles equivalentes nas três nuvens — rede, dados, logs, KMS — para não ficar preso a um provedor.
Os mesmos conceitos, nomes diferentes
Aprenda os conceitos e a tradução entre nuvens vem fácil. Este é o mapa que te deixa "multi-cloud":
| Conceito | AWS | GCP | Azure |
|---|---|---|---|
| Rede isolada | VPC | VPC | VNet |
| Firewall de instância | Security Group | Firewall Rules | NSG |
| Log de API/auditoria | CloudTrail | Cloud Audit Logs | Activity Log |
| Gestão de chaves | KMS | Cloud KMS | Key Vault |
| Cofre de segredos | Secrets Manager | Secret Manager | Key Vault |
| Detecção de ameaças | GuardDuty | Security Command Center | Defender for Cloud |
| Postura/compliance | Security Hub / Config | SCC | Defender for Cloud |
Os quatro controles que você sempre configura
- Rede: segmentar com sub-redes privadas, security groups padrão-negar, sem SSH/RDP aberto ao mundo, endpoints privados para serviços gerenciados.
- Dados: criptografia em repouso (KMS) e em trânsito (TLS) por padrão; bloqueio de acesso público em storage; versionamento.
- Logs: CloudTrail/Audit Logs habilitados em todas as regiões, imutáveis, centralizados em conta separada.
- Chaves: envelope encryption via KMS, rotação automática, políticas de chave restritas.
O clássico: SSRF + metadata (fechando o M06)
Instâncias expõem um endpoint de metadados com credenciais. Um SSRF que alcança 169.254.169.254 rouba essas credenciais. A defesa na AWS é IMDSv2 (exige token, bloqueia o ataque). Saber essa cadeia ataque→defesa é sinal de maturidade em cloud.
Na sua conta free-tier: crie um bucket, confirme que o "block public access" está ligado e a criptografia habilitada. Habilite o CloudTrail (ou equivalente) e gere uma ação, depois encontre o evento no log. Force IMDSv2 numa instância. Anote o passo a passo — vira documentação de baseline seguro.
Foque em uma nuvem a fundo (AWS é a mais pedida no Brasil) e conheça o mapa das outras. Vagas listam serviços por nome: GuardDuty, KMS, Security Hub, Config. Ter um ambiente de baseline seguro montado (com IaC do M14) demonstra prática real, não só teoria de certificado.
Deixar recursos rodando na free-tier e tomar uma fatura surpresa — ou pior, ter a conta comprometida e virar minerador. Sempre: MFA na conta root, billing alerts, e destruir o lab (terraform destroy) quando terminar.
Cloud-native security: CSPM · CWPP · CNAPP
Objetivo: entender as plataformas que verificam continuamente postura e cargas na nuvem em escala.
A sopa de siglas, decodificada
- CSPM — Cloud Security Posture Management
- Verifica configurações continuamente contra benchmarks (CIS) e acha o bucket público, o SG aberto, o log desligado — o drift que o M14 não pega. Ex.: Prowler, ScoutSuite, Wiz, Defender.
- CWPP — Cloud Workload Protection Platform
- Protege as cargas (VMs, containers, serverless): vulnerabilidades, runtime, comportamento anômalo.
- CIEM — Cloud Infrastructure Entitlement Management
- Foca em permissões: quem tem acesso excessivo, caminhos de escalada de privilégio no IAM.
- CNAPP — Cloud-Native Application Protection Platform
- A convergência de tudo acima numa plataforma, do código ao runtime. É a direção do mercado.
Na prática, com ferramentas abertas
Você não precisa de produto pago para aprender o conceito. O Prowler faz CSPM open-source direto contra sua conta:
prowler aws --severity critical high # auditoria de postura AWS prowler aws --compliance cis_2.0_aws # contra o benchmark CIS # mapa de permissões e riscos IAM (ScoutSuite) scout aws
O valor de uma CNAPP é correlação: unir "esse container tem CVE crítico" + "está exposto à internet" + "roda com role admin" = um caminho de ataque priorizado. Postura isolada gera milhares de alertas; correlação gera os 5 que importam.
Rode o Prowler contra sua conta free-tier. Leia o relatório: quantos checks passam, quantos falham? Escolha 3 findings de severidade alta e corrija-os (idealmente via Terraform do M14, fechando o loop IaC→postura). Rode de novo e mostre a redução. Esse relatório é um entregável real de Cloud Security.
"CSPM", "CNAPP" e nomes como Wiz, Prisma Cloud, Prowler aparecem cada vez mais em job descriptions de Cloud Security. Entender por que correlação (não só volume de alertas) é o diferencial — e saber operar uma ferramenta open-source como Prowler — mostra que você entrega postura, não só liga um produto.
Confundir CSPM com pentest. CSPM olha configuração, não explora a aplicação. Os dois se complementam: config perfeita não impede um SQLi no app, e app perfeito não salva um bucket público. Você precisa das duas visões.
Detecção & resposta na nuvem
Objetivo: aplicar o blue team (M08) ao ambiente cloud — logs, detecção gerenciada e resposta automatizada.
O log que conta tudo: CloudTrail & amigos
Na nuvem, cada ação é uma chamada de API registrada. CloudTrail (AWS), Audit Logs (GCP) e Activity Log (Azure) são sua fonte forense primária. Habilitados em todas as regiões, imutáveis e centralizados, respondem "quem fez o quê, quando, de onde" — a base de toda investigação.
Detecção gerenciada + regras próprias
Serviços como GuardDuty analisam logs e fluxos com ML e threat intel, alertando sobre credencial usada de local incomum, chamada de reconhecimento, comunicação com IP malicioso. Você complementa com detecções sob medida (Sigma/EventBridge) para o que é específico do seu ambiente — retomando o M08.
{
"source": ["aws.iam"],
"detail": {
"eventName": ["CreateAccessKey", "AttachUserPolicy"],
"userIdentity": { "type": ["IAMUser"] }
}
}
# dispara p/ SNS/Lambda quando alguém cria chave ou eleva permissãoResposta automatizada (SOAR cloud-native)
O poder da nuvem é responder com código. Um alerta pode disparar uma função que isola a instância (muda o security group), revoga a credencial suspeita ou tira um snapshot forense — em segundos, sem humano no loop para a contenção inicial. É o ciclo de IR do M08 executado por automação.
Na free-tier, habilite o GuardDuty e gere findings de teste (o serviço tem amostras). Crie uma regra do EventBridge que dispare uma notificação (SNS/e-mail) quando uma nova access key IAM for criada. Simule criando uma chave e confirme o alerta. Escreva o playbook de resposta de 1 página. Isso é um projeto de Cloud Detection & Response completo.
"Cloud detection & response" e "SOAR" são áreas quentes. Cloud Security Engineers cada vez mais escrevem automações de resposta, não só configuram alertas. Saber correlacionar CloudTrail, escrever uma detecção custom e automatizar a contenção com Lambda/Functions é exatamente o perfil que empresas cloud-first buscam.
Automação de resposta agressiva demais sem testes: uma regra que "isola qualquer instância suspeita" pode derrubar produção num falso positivo. Comece com resposta em modo "notificar/sugerir", valide, e só promova a "agir automaticamente" o que tiver alta confiança.
Onde a engenharia de segurança sênior mora
Você já sabe construir o pipeline e proteger a nuvem. Agora entram os temas que separam pleno de sênior/staff: arquitetar sistemas seguros por design, aplicar Zero Trust com mTLS de verdade, escrever detecções em nível de kernel com eBPF, e proteger a nova fronteira — sistemas de IA e LLMs. É denso. Vá com calma e com laboratório.
Arquitetura segura & threat modeling avançado
Objetivo: desenhar sistemas onde a segurança é propriedade estrutural, não remendo — a habilidade de um security architect.
Princípios que viram decisões de arquitetura
Segurança madura não é uma lista de controles, e sim princípios aplicados no design. Os que você vai justificar em revisões de arquitetura:
- Defesa em profundidade
- Múltiplas camadas independentes; nenhuma falha isolada compromete tudo.
- Menor privilégio & separação de deveres
- Cada componente com o mínimo; nenhuma identidade sozinha completa uma ação crítica.
- Falha segura (fail closed)
- Em erro, negar por padrão. Um serviço de autorização fora do ar bloqueia, não libera.
- Raio de explosão mínimo
- Segmentar contas/redes/namespaces para que um comprometimento não se espalhe.
- Simplicidade & superfície mínima
- Menos código, menos serviços expostos, menos a defender. Complexidade é inimiga da segurança.
Threat modeling em escala
Além do STRIDE do M05, arquitetos usam attack trees (decompor um objetivo do atacante em caminhos) e mapeiam controles ao MITRE ATT&CK para medir cobertura. Em sistemas grandes, threat modeling vira contínuo: cada mudança de arquitetura relevante passa por uma revisão leve, e decisões ficam registradas em ADRs de segurança (Architecture Decision Records).
Padrões de arquitetura segura na nuvem
- Isolamento por conta/projeto: prod, dev e dados sensíveis em contas separadas, com organização e SCPs (guardrails no topo).
- Perímetro de dados: políticas que garantem que dados só saem por caminhos aprovados (VPC endpoints, resource policies).
- Identidade federada e efêmera: zero chave de longa duração; tudo via roles assumidas e OIDC (M16).
- Criptografia com chaves gerenciadas por você (BYOK/envelope): controle e revogação centralizados via KMS.
Escolha uma arquitetura de referência (ex.: uma app web multi-tier em AWS). Produza: (1) um DFD com trust boundaries, (2) uma attack tree para o objetivo "exfiltrar dados de clientes", (3) a lista de controles mapeados a cada ramo da árvore, e (4) 2 ADRs de segurança. Esse conjunto é um portfólio de arquiteto — raríssimo em candidatos.
Cargos "Security Architect" e "Staff Security Engineer" são avaliados pela capacidade de raciocinar sobre trade-offs, não de rodar ferramentas. Saber conduzir uma revisão de arquitetura, articular princípios e registrar decisões é o que sustenta as faixas salariais mais altas da área.
"Segurança perfeita" que trava o negócio. Arquitetura é trade-off: um controle que ninguém consegue usar será contornado. O bom arquiteto encontra o ponto onde o caminho seguro também é o caminho prático — senão vira "shadow IT".
Zero Trust, mTLS & service mesh
Objetivo: implementar "nunca confie, sempre verifique" na prática — identidade de workload, mTLS e autorização por política.
O que Zero Trust realmente significa
Zero Trust abandona a ideia de "rede interna confiável". Cada requisição é autenticada, autorizada e cifrada, independentemente de onde vem. Os pilares: identidade forte para usuários E workloads, menor privilégio por requisição, micro-segmentação (M13) e verificação contínua (não só no login). Não é um produto — é uma arquitetura que você monta com peças.
mTLS: identidade mútua entre serviços
No TLS comum (M04), só o servidor prova identidade. No mTLS, cliente e servidor apresentam certificados — cada serviço prova quem é. Isso dá autenticação de workload e cifra o tráfego leste-oeste (serviço-a-serviço). O desafio é operacional: emitir, rotacionar e revogar certificados em escala. Padrões como SPIFFE/SPIRE dão a cada workload uma identidade criptográfica verificável (SVID).
Service mesh: mTLS e política sem tocar no código
Um service mesh (Istio, Linkerd) injeta um sidecar proxy ao lado de cada serviço, que faz mTLS, roteamento e aplica política de autorização automaticamente — o dev não muda a aplicação. É Zero Trust aplicado à camada de rede do cluster.
# exige mTLS para todo tráfego no namespace kind: PeerAuthentication spec: { mtls: { mode: STRICT } } --- # só o serviço "frontend" pode chamar "payments" kind: AuthorizationPolicy metadata: { name: payments-allow } spec: selector: { matchLabels: { app: payments } } rules: - from: [{ source: { principals: ["cluster.local/ns/app/sa/frontend"] } }]
No seu cluster kind/minikube (M13), instale o Linkerd ou Istio. Suba dois serviços e habilite mTLS estrito — verifique com a ferramenta do mesh que o tráfego está cifrado e autenticado. Depois escreva uma AuthorizationPolicy que permita apenas um serviço chamar o outro e teste que um terceiro é bloqueado.
"Zero Trust" está em quase todo edital de segurança corporativa, e "service mesh / mTLS / SPIFFE" aparece nas vagas de Cloud/Platform Security mais avançadas. Saber distinguir o hype ("compre nosso produto Zero Trust") da engenharia real (identidade de workload, mTLS, autorização por política) te posiciona como quem entende de verdade.
Achar que mesh = segurança automática. Um mesh mal configurado (mTLS em modo "permissive" que nunca vira "strict", políticas de autorização ausentes) dá falsa sensação de segurança. Verifique o modo real e teste o bloqueio — configuração não aplicada é decoração.
Detection engineering & eBPF / purple team
Objetivo: escrever detecções de qualidade e observar o runtime em nível de kernel — a fronteira da defesa moderna.
Detection engineering: detecção como software
Detecção madura é tratada como código: cada regra tem hipótese, testes, versionamento e métricas de qualidade (taxa de falso positivo, cobertura de ATT&CK). O ciclo do purple team fecha o loop: o red team executa uma técnica (ex.: via Atomic Red Team), o blue team verifica se a detecção disparou, e a regra é refinada. Detecção que nunca foi testada contra o ataque real é fé, não engenharia.
eBPF: visibilidade no kernel
eBPF permite rodar programas seguros dentro do kernel Linux, observando syscalls, rede e processos com overhead mínimo — sem módulos de kernel arriscados. É a tecnologia por trás da observabilidade e segurança runtime modernas. O Falco usa isso para detectar comportamento suspeito em containers em tempo real.
- rule: Shell interativo em container
condition: >
spawned_process and container
and shell_procs and proc.tty != 0
output: "Shell aberto em container (user=%user.name container=%container.id)"
priority: WARNINGFerramentas como Tetragon e Cilium (também eBPF) levam isso a política de rede e de execução em nível de kernel — enforcement, não só observação. É o estado da arte em runtime security cloud-native.
Threat hunting
Nem toda ameaça dispara um alerta. Hunting é a busca proativa por comprometimento com base em hipóteses ("se um atacante tivesse persistência aqui, veríamos X"). Combina conhecimento de ATT&CK (M07), dados ricos (M08) e curiosidade estruturada. É onde blue team vira arte.
Instale o Falco num host com Docker. Rode um container e abra um shell interativo dentro dele (docker exec -it ... sh) — confirme que o Falco alerta. Depois, use o Atomic Red Team para executar uma técnica ATT&CK simples e verifique se sua stack de detecção a captura. Documente a lacuna e escreva uma regra que a preencha.
"Detection Engineer" é um cargo próprio e crescente. eBPF, Falco, Cilium/Tetragon e "runtime security" aparecem nas vagas mais técnicas de cloud security. Purple teaming demonstra maturidade rara: você prova que suas defesas funcionam contra ataques reais, com métricas. Isso é conversa de sênior/staff.
Colecionar regras sem medir qualidade. Mil regras barulhentas são piores que cinquenta afiadas: enterram o analista em ruído e a ameaça real passa. Meça falso-positivo e cobertura, aposente regras ruins, e teste cada detecção contra a técnica que ela promete pegar.
Segurança de IA/LLM (LLMSecOps)
Objetivo: proteger aplicações que usam LLMs — a fronteira mais nova e mais valorizada de AppSec em 2026.
Por que LLMs quebram suposições de AppSec
Aplicações com LLM misturam instruções e dados no mesmo canal de texto — exatamente o que a injeção (M06) explora, agora em linguagem natural. Se o modelo tem acesso a ferramentas (buscar na web, chamar APIs, ler arquivos), uma instrução maliciosa escondida em conteúdo pode virar ação real. É AppSec com uma superfície nova e não-determinística.
OWASP Top 10 for LLM Applications
Existe um Top 10 dedicado. Os riscos centrais:
- Prompt Injection
- Direta ("ignore as instruções anteriores") ou indireta — instrução escondida numa página, e-mail ou documento que o modelo processa. O risco nº1.
- Insecure Output Handling
- Confiar cegamente na saída do modelo e passá-la a um shell, SQL ou HTML — vira RCE/XSS clássico.
- Sensitive Information Disclosure
- Modelo vaza dados de treino, do system prompt ou de contexto de outro usuário.
- Excessive Agency
- Dar ao modelo permissões/ferramentas amplas demais; uma injeção bem-sucedida herda esse poder.
- Supply chain & data poisoning
- Modelo ou dados de treino/RAG adulterados — o M15 aplicado a pesos e datasets.
Defesas em camadas
- Trate a saída do LLM como entrada não confiável — valide e escape antes de qualquer ação (retomando M06).
- Menor privilégio para agentes — cada ferramenta com escopo mínimo; ações sensíveis exigem confirmação humana (human-in-the-loop).
- Isole instruções de dados — delimitadores, e nunca confie que conteúdo externo é "só dados".
- Guardrails de entrada/saída — classificadores para detectar injeção e filtrar dados sensíveis.
- Red teaming de LLM — teste sistemático de jailbreaks e injeções (ferramentas como Garak).
A regra de ouro: a IA não é uma fronteira de confiança. Nunca dê a um agente de LLM um poder que você não daria a um usuário anônimo da internet — porque, via injeção indireta, é efetivamente isso que ele pode virar.
Suba uma app de LLM deliberadamente vulnerável (ex.: Gandalf da Lakera, ou o lab de prompt injection do PortSwigger). Consiga extrair o "segredo" via prompt injection. Depois desenhe as defesas: onde você poria validação de saída, limite de agência e guardrails? Escreva um mini threat model (M05/M20) de uma app com LLM + ferramentas.
"AI Security" / "LLMSecOps" é a habilidade que mais se valoriza agora — toda empresa está colocando LLM em produção e poucos sabem protegê-los. Combinar sua base de AppSec (M05/M06) com o OWASP Top 10 for LLM te coloca num nicho escasso e muito bem pago. É o tema para se destacar em 2026.
Confiar num "filtro de prompt" como defesa única. Guardrails ajudam, mas prompt injection não é totalmente solucionável por filtro — é um problema de arquitetura. A defesa real é limitar o que o sistema pode fazer quando comprometido (menor privilégio + human-in-the-loop), não só tentar detectar o ataque.
Transformar conhecimento em vaga
Saber segurança e ser contratado são habilidades diferentes. Este módulo final é o mapa para converter tudo o que você construiu — labs, repositórios, relatórios — em ofertas de emprego: certificações que valem o investimento, portfólio que fala por você, preparação de entrevista e um roadmap realista.
Carreira: certs, portfólio & entrevistas
Objetivo: montar uma trajetória de entrada e crescimento em DevSecOps/AppSec e Cloud Security com decisões de alto retorno.
O portfólio importa mais que o currículo
Em segurança, prova de habilidade vence linhas de currículo. Se você fez os laboratórios desta apostila, já tem os alicerces de um portfólio forte. Organize-os:
- Repositório público com um pipeline DevSecOps completo (M11) — SAST, SCA, secret scanning, DAST, com README explicando cada decisão de gate
- Projeto "hardening de container" com antes/depois de CVEs (M12)
- Baseline de IaC seguro com políticas OPA/Rego próprias (M14)
- Relatório de findings do Juice Shop com remediações (M06)
- Write-ups de máquinas do TryHackMe/HackTheBox (M07)
- Relatório de CSPM (Prowler) com correções aplicadas (M18)
- Um blog técnico: escrever sobre o que você aprendeu prova comunicação — habilidade sênior subvalorizada
Certificações que valem o investimento
Certificação abre portas em triagem de RH, mas não substitui prática. Escolha por objetivo, não por colecionismo:
| Trilha | Entrada | Referência de mercado |
|---|---|---|
| Fundamentos | CompTIA Security+ | — |
| Cloud (AWS) | AWS Cloud Practitioner / SAA | AWS Security Specialty |
| Kubernetes | CKA | CKS (Security Specialist) |
| Ofensiva/AppSec | eJPT | OSCP, Burp Suite Certified |
| DevSecOps | Práticas + portfólio | Certs de fornecedores (a prática pesa mais) |
Para os alvos desta apostila, a dupla de maior retorno costuma ser AWS Security Specialty + CKS (Cloud/DevSecOps) e, se quiser peso ofensivo/AppSec, OSCP. Mas priorize sempre: 1 cert relevante + portfólio real > 5 certs sem prática.
Preparação para entrevista
Entrevistas de segurança misturam três frentes. Prepare-se para cada uma:
"Explique uma URL da digitação ao render", TLS handshake, permissões Linux, TCP vs UDP. (Partes 1–2.)
"Faça o threat model disto", "como proteger este pipeline/cluster/conta AWS?". Pensar em voz alta vale mais que a resposta perfeita.
Ler um Dockerfile e apontar falhas, revisar uma policy IAM, achar o bug num trecho de código. (Partes 3–4.)
"Conte de um conflito dev × segurança que você resolveu." Mostre que você reduz atrito (M09), não que policia.
Um roadmap realista
| Fase | Foco | Meta demonstrável |
|---|---|---|
| Meses 1–3 | Fundamentos (P1–P2) | Linux fluente, Juice Shop resolvido, 1 máquina THM documentada |
| Meses 4–6 | DevSecOps (P3) | Pipeline de segurança público + projeto de container hardening |
| Meses 7–9 | Cloud (P4) | Baseline AWS seguro em IaC + relatório CSPM; começar AWS Security Specialty |
| Meses 10–12 | Avançado (P5) + candidaturas | 1 tema avançado a fundo (ex.: K8s/CKS ou LLMSec) + aplicar para vagas júnior/pleno |
Esse ritmo assume estudo consistente ao lado de outras responsabilidades. Ajuste ao seu contexto — o que não muda é a sequência: fundamentos sólidos, prática documentada, especialização, exposição ao mercado.
DevSecOps/AppSec e Cloud Security estão entre as áreas de tech com maior demanda e menor oferta de gente qualificada — o que sustenta bons salários e trabalho remoto. Faixas variam muito por país, senioridade e empresa, então pesquise dados atuais para sua região (levantamentos salariais de segurança, faixas em plataformas de vaga) em vez de confiar num número fixo. O diferencial que mais move oferta é conseguir mostrar que você já faz o trabalho — e é para isso que serve todo o portfólio desta apostila.
Crie hoje o repositório do seu portfólio no GitHub. Adicione um README que se apresenta e lista os projetos que você vai construir ao longo da apostila. A cada módulo concluído, publique o laboratório correspondente. Ao terminar, você não terá "estudado segurança" — você terá um corpo de trabalho que prova segurança. É isso que gera a oferta.