01 - Segurança em Camadas (Defesa em Profundidade)
video: https://youtu.be/... no frontmatter da nota.Segurança em Camadas (Defesa em Profundidade)
Defense in depth, ou defesa em profundidade, é a estratégia de posicionar múltiplos controles de segurança independentes entre o atacante e o ativo protegido, de modo que a falha de um controle isolado não comprometa o sistema inteiro. O termo vem da estratégia militar: em vez de uma muralha única, o defensor distribui obstáculos em sequência, ganhando tempo e informação a cada linha cruzada. Em produção, isso significa combinar controles físicos, de rede, de host, de aplicação, de dados e de identidade, cada um cobrindo as falhas do anterior. Todo controle tem vulnerabilidade conhecida ou desconhecida, e a pergunta certa de arquitetura não é qual controle usar, mas quantos controles independentes o atacante precisa vencer antes de alcançar o dado. Um sistema de perímetro único é frágil porque sua perfuração é imediata e difícil de reverter; um sistema em camadas degrada o ataque, gera telemetria a cada etapa e compra tempo de resposta. Este arquivo é o modelo mental que fundamenta todos os demais temas do módulo de segurança.
Conceito e origem do modelo
O princípio central é independência entre controles: camadas que falham juntas não são camadas, são uma camada com nomes diferentes. Se o firewall e o WAF dependem da mesma regra mal escrita, ou se a senha forte e o cofre de segredos compartilham o mesmo vazamento, a profundidade é ilusória. Camadas reais usam tecnologias distintas, donos distintos e modelos de falha distintos, de modo que explorar uma exige habilidade e oportunidade diferentes das necessárias para explorar a seguinte.
O modelo também aceita uma verdade desconfortável: é impossível provar que um controle funciona para sempre, e é possível projetar para que a prova venha da tentativa frustrada de ataque. Cada camada deve responder a três perguntas: o que ela bloqueia, o que ela registra quando algo passa e quanto tempo ela compra para o time de resposta. Um controle que não gera telemetria tem metade do valor, porque o atacante atravessa sem deixar rastro utilizável.
O problema que resolve
O problema raiz é o ponto único de falha em segurança. Arquiteturas de perímetro único, o modelo castle-and-moat, concentram todo o investimento na fronteira: uma vez dentro, o atacante encontra lateralidade livre, porque nada mais o restringe. Incidentes reais de ransomware seguem esse padrão: a entrada ocorre por um único vetor, e a destruição se espalha por semanas porque não existia camada interna nenhuma.
A defesa em profundidade resolve isso reduzindo o blast radius em cada nível de acumulação de acesso. Quando uma camada cede, as seguintes limitam o dano a um escopo menor, mais localizável e mais recuperável.
- Confinamento: cada camada é uma fronteira que transforma um comprometimento total em um comprometimento parcial, com escopo definido pela camada seguinte.
- Redundância de detecção: controles distintos percebem o mesmo ataque por sinais diferentes, reduzindo a chance de um falso negativo único passar despercebido.
- Tempo de resposta: camadas adicionais compram horas ou dias, e essa margem separa um incidente contido de uma crise pública com vazamento confirmado.
- Cobertura de mudança: código, configuração e pessoas mudam o tempo todo; camadas independentes reduzem a janela em que uma alteração cria exposição sem que ninguém perceba.
As camadas do modelo
A taxonomia clássica organiza os controles em seis camadas, do concreto ao abstrato, e cada uma exige controles próprios e revisão própria:
- Física: salas cofre, controle de acesso a datacenter, câmeras e destruição de mídia; protege o hardware contra quem chega perto dele.
- Rede: VPC isolada, sub-redes privadas, security groups, NACLs, inspeção de tráfego e TLS em trânsito; limita quem pode conversar com quem.
- Host: hardening do sistema operacional, patches, EDR, IMDSv2, execução com usuário sem privilégio e criptografia do disco; protege a máquina mesmo que a rede ceda.
- Aplicação: validação de entrada, sanitização, autenticação e autorização no código, gerenciamento de dependências e WAF; protege a lógica contra quem já alcançou a porta.
- Dados: criptografia em repouso com KMS, classificação, mascaramento, backup imutável e DLP; assume que o atacante chegou e protege o valor final.
- Identidade: MFA, menor privilégio, federação, rotação de credenciais e auditoria de acessos; controla quem pode pedir qualquer coisa a qualquer camada.
A ordem importa menos que a completude: ataques reais pulam camadas, e um modelo só é profundo quando um ataque por qualquer via encontra resistência em mais de um nível. Em nuvem, as camadas física e parte da de host são delegadas ao provedor, mas as decisões de identidade, rede, aplicação e dados continuam integralmente com o time.
Travessia de camadas em um ataque real
Considere o caminho típico de um incidente contra uma aplicação web em nuvem, observando como cada camada surge como oportunidade de contenção:
- A entrada começa pela exploração de uma dependência vulnerável, um RCE em biblioteca com CVE crítica, o que escapa à camada de rede e só seria bloqueado por validação de entrada ou por WAF com regras atualizadas.
- O payload tenta coletar credenciais do metadata da instância; a camada de host responde com IMDSv2 obrigatório, que exige token por método PUT e encerra esse vetor clássico.
- Com uma credencial parcial, o atacante tenta listar buckets S3; a camada de identidade limita o dano porque a role da instância permite leitura apenas de um prefixo específico, e o CloudTrail registra o padrão incomum de chamadas.
- A tentativa de exfiltração para um IP externo esbarra na camada de rede: as sub-redes privadas só saem por NAT com egress filtering, e o fluxo para destino desconhecido é bloqueado e alertado.
- Mesmo com o objeto alcançado, a camada de dados exige acesso ao KMS para descriptografar, e a chave tem política restrita ao serviço e à role legítima.
Em cada degrau, um controle independente reduziu o ataque a uma tentativa registrada em vez de um vazamento consumado. Remova qualquer camada do exemplo e o desfecho muda; é essa sensibilidade ao removal que define profundidade real.
Controles em camadas na prática
# Terraform: a mesma aplicação protegida por camadas independentes
resource "aws_wafv2_web_acl" "borda" {
name = "camada-aplicacao"
scope = "CLOUDFRONT"
default_action { allow {} }
rule {
name = "bloqueia-padroes-injecao"
priority = 1
action { block {} }
statement {
managed_rule_group_statement {
vendor_name = "AWS"
name = "AWSManagedRulesCommonRuleSet"
}
}
visibility_config {
cloudwatch_metrics_enabled = true
metric_name = "injecao"
sampled_requests_enabled = true
}
}
}
resource "aws_security_group" "app" {
name = "camada-rede"
vpc_id = var.vpc_id
# Somente o ALB alcança a aplicação; nunca 0.0.0.0/0 na porta de serviço
ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
security_groups = [aws_security_group.alb.id]
}
egress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["10.0.0.0/16"] # saída apenas para a rede interna
}
}
resource "aws_kms_key" "dados" {
description = "camada-dados: criptografia em repouso com rotação anual"
enable_key_rotation = true
deletion_window_in_days = 30
}
O exemplo mostra três camadas em um único repositório: WAF na borda, security group restrito no nível de rede e chave KMS com rotação no nível de dados. A camada de host entra com IMDSv2 e patches automatizados; a de identidade entra com MFA e roles sem credenciais estáticas. Quando tudo isso é infraestrutura como código, cada camada passa por revisão e teste como qualquer outro artefato de produção.
Custos e priorização
Camadas custam dinheiro, latência e velocidade de entrega, e a priorização honesta parte do valor do ativo e do custo de impacto. A pergunta útil é: qual camada, se falhar hoje, custa mais? A resposta define onde investir primeiro, e não o contrário.
| Camada | Controle típico | Custo relativo | Onde costuma falhar primeiro |
|---|---|---|---|
| Identidade | MFA, roles, menor privilégio | Baixo a médio | Credencial estática vazada em repositório |
| Rede | SG restrito, sub-redes privadas | Baixo | Regra aberta adicionada no aperto de incidente |
| Host | Patches, EDR, IMDSv2 | Médio | Patch atrasado em instância esquecida |
| Aplicação | WAF, validação, SAST | Médio a alto | Dependência com CVE sem atualização |
| Dados | KMS, backup imutável, DLP | Médio | Chave com política ampla demais |
| Física | Controle de acesso, câmeras | Variável | Geralmente delegada ao provedor de nuvem |
Em nuvem, identidade e rede oferecem o melhor risco reduzido por real investido, porque são nativas, baratas e acionáveis em IaC. Física e host têm grande parte delegada ao provedor, mas a responsabilidade nunca é integral; a criptografia e o hardening que dependem de configuração seguem com o time.
Relação com menor privilégio e zero trust
O menor privilégio é a regra que governa o que cada camada permite: cada controle autoriza o mínimo necessário, e a defesa em profundidade define onde esse mínimo é checado repetidamente. Um usuário pode ter permissão de leitura em S3 e ainda ser barrado pela rede quando tenta o acesso de um contexto não autorizado; as duas regras se reforçam sem se substituir.
Zero trust é a evolução do modelo para ambientes sem perímetro confiável: nenhum chamador é confiável por estar dentro da rede, e cada requisição é autenticada e autorizada explicitamente. A defesa em profundidade tradicional ainda atribui alguma confiança ao interior da rede; o zero trust transforma cada camada de identidade e aplicação em avaliação contínua por chamada. Em produção real os dois coexistem: a rede encolhe em privilégio, a identidade cresce em granularidade, e o resultado é uma profundidade que não depende da posição geográfica do pacote.
Comparações
| Critério | Perímetro único | Defesa em profundidade | Zero trust |
|---|---|---|---|
| Hipótese de confiança | Interior da rede é confiável | Nenhuma camada é confiável sozinha | Nenhuma chamada é confiável |
| Efeito da falha de um controle | Compromete tudo | Contido pela próxima camada | Contido pela avaliação seguinte |
| Lateralidade do atacante | Alta após a entrada | Limitada por segmentos e políticas | Mínima, por identidade e contexto |
| Custo de operação | Menor no início | Distribuído entre camadas | Alto em engenharia e telemetria |
| Ajuste a nuvem multicloud | Fraco | Bom | Projetado para esse cenário |
Erros comuns
- Camadas acopladas: firewall, WAF e API gateway administrados pela mesma pessoa com a mesma revisão de mudança, criando falha comum disfarçada de profundidade.
- Telemetria ausente: controles bloqueiam sem alertar, e o time só descobre o ataque quando a camada final cede; cada camada precisa alimentar alerta e dashboard.
- Segurança de papel: controles existem no diagrama mas não no ambiente, como SGs abertos em produção divergentes do desenho aprovado; auditoria precisa comparar realidade e documento.
- Exceção permanente: o buraco aberto em um incidente para resolver rápido nunca fecha; exceções precisam de prazo de validade, dono e data de remoção.
- Prioridade invertida: investir em biometria física enquanto as roles de produção têm AdministratorAccess; ordene por risco esperado, não pelo espetáculo do controle.
- Falsa completude: marcar camada como coberta porque existe produto contratado, sem política ativa, sem revisão e sem teste de efetividade.
Boas práticas em produção
Trate a matriz de camadas como código e teste-a: políticas IAM, security groups e regras de WAF vivem em repositório, passam por revisão e ganham testes automatizados que falham quando alguém abre uma porta proibida. Meça a profundidade real com exercícios: game days que simulam o comprometimento de uma camada provam se as seguintes reagiram, e esse é o único teste que importa.
Alinhe cada camada a um alerta com runbook associado, porque camada sem resposta automatizada é obstáculo passivo e não defesa. Revise a matriz a cada arquitetura nova: um serviço serverless tem camadas diferentes de um cluster Kubernetes, e copiar a matriz antiga cria profundidade teórica. Por fim, priorize identidade e dados como fim de linha: rede e host podem ser atravessados, mas a combinação de menor privilégio com criptografia de chave restrita transforma quase todo ataque em evento registrado em vez de incidente com dano.