Capítulo 39 — Segurança ofensiva autorizada e red team: manutenibilidade
Mapa da aula
Aula 39 publicada. Mapa, exemplo, EX115.
flowchart TD
N0["39.1 Rotatividade"]
N1["39.2 Adaptadores finos"]
N2["39.3 Propriedade"]
N3["39.2b Risco das dependências"]
N4["39.3b Plano de exclusão"]
N5["39.1b Janelas de descontinuação de API"]
N6["Nota de prática"]
N7["39.4b Documentação como manutenção"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX115"]
Desenho lógico
flowchart LR
N0["39.1 Rotatividade"]
N1["39.2 Adaptadores finos"]
N2["39.3 Propriedade"]
N3["39.2b Risco das dependências"]
N4["39.3b Plano de exclusão"]
N5["39.1b Janelas de descontinuação de API"]
N6["Nota de prática"]
N7["39.4b Documentação como manutenção"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX115"]
[39.1 Rotatividade]
|
v
[39.2 Adaptadores finos]
|
v
[39.3 Propriedade]
|
v
[39.2b Risco das dependências]
|
v
[39.3b Plano de exclusão]
|
v
[39.1b Janelas de descontinuação de API]
|
v
[Nota de prática]
|
v
[39.4b Documentação como manutenção]
|
v
[Exemplo resolvido] --> [Exercício EX115]
Objetivos de aprendizagem
Você vai (1) reservar orçamento para atualizações de políticas e dependências; (2) manter os adaptadores finos; (3) documentar a propriedade.
39.1 Rotatividade
Técnicas do ATT&CK, APIs de provedores de identidade e modelos de ROE mudam. Reserve tempo no calendário para as atualizações; fixe versões e acompanhe os avisos de segurança. Dependências que mudam toda semana jogam o TrackScope num combate permanente a incêndios. Fixar versões e revisar atualizações como mudanças, não como ruído de fundo, mantém testável o comportamento de falha fechada. As regras do dependabot de Sam exigem um verde do Laboratório I nas linhas de segurança antes que uma fixação mude. Fixações que ficam atrás das linhas de segurança não podem usar o trem comum de dependências sem esse verde. Atualizações comuns de bibliotecas que não tocam as linhas de segurança ainda podem usar o trem semanal.
39.2 Adaptadores finos
Isole os SDKs de terceiros atrás de interfaces, para que as atualizações não reescrevam o núcleo do FindingsDesk. Um invólucro grosso em volta de um scanner convida a comportamentos não revisados quando o scanner se atualiza. Adaptadores finos, que só traduzem resultados para o esquema do FindingsDesk, mantêm a lógica perigosa fora da fronteira de confiança que você mantém. O adaptador de Sam para a verificação de similaridade de nomes tem menos de duzentas linhas e nenhuma chamada ao shell. Quando o scanner de origem acrescentou uma flag de "exploração automática", o adaptador fino a ignorou e nunca expôs uma chave no TrackScope. Os testes do adaptador incluem um fixture em que a flag de origem é verdadeira e afirmam que o FindingsDesk nunca a vê.
39.3 Propriedade
Todo serviço tem um esquadrão dono nomeado e um reserva. O CODEOWNERS impõe a revisão. CODEOWNERS nos caminhos de segurança significa que um merge não entra sem alguém que entenda a semântica das negações. Módulos órfãos são como a falha aberta volta depois de uma refatoração. A revisão de Sam de um PR de "limpeza" que mexia em allowed() exigiu dois donos de segurança, não uma aprovação casual. O autor da limpeza teve de trabalhar em par com um dono de segurança antes que o botão de merge fosse liberado.
Caso sintético — Riverstone Transit. O mapeador ATT&CK do PulseMap é um adaptador; atualizar a lista de técnicas é um PR de dados, não uma reescrita.
39.4 Erros e limites
Ferramentas órfãs apodrecem e viram museus de falha aberta. Ferramentas abandonadas ainda aparecem no texto da ROE e enganam o próximo líder. Uma poda anual do catálogo, com os modelos de ROE atualizados na mesma mudança, é manutenção, não faxina. Sam removeu no ano passado três cartões de método cujos binários já não estavam na imagem do jump host. Os modelos de ROE que ainda os citavam reprovaram num lint até que as strings fossem removidas na mesma mudança. A poda do catálogo e o lint da ROE compartilham um único pull request, para que não possam se afastar uma semana um do outro.
39.2b Risco das dependências
Acompanhe as bibliotecas que interpretam CIDRs, políticas em YAML ou criptografia. Uma execução remota de código num interpretador de políticas é um incidente de falha aberta esperando para acontecer — fixe as versões, monitore os CVEs e prefira interpretadores pequenos, sob os seus testes. Uma biblioteca que interpreta strings de host fica no caminho da falha fechada; seus CVEs são bloqueadores de engajamento, não trivialidades do backlog. Sam acompanha essas bibliotecas numa lista curta ao lado do predicado e aciona alertas no mesmo dia para novos avisos. Um aviso sobre a biblioteca de interpretação de hosts no último trimestre bloqueou dois engajamentos até que a fixação mudasse e o Laboratório I fosse executado de novo.
39.3b Plano de exclusão
A manutenibilidade inclui saber aposentar uma ferramenta: exportar os dossiês, revogar credenciais, arquivar o código, marcar as fontes do PulseMap como obsoletas. Serviços órfãos atraem risco sem dono. Apagar um serviço sem data deixa tipos de evento fantasmas no barramento. O plano de exclusão cita os consumidores, o último engajamento que pode usá-lo e o expurgo dos seus segredos. A data de aposentadoria do PulseMap-v1 ficou no calendário ao lado da ROE que ainda o citava, até que os dois mudassem juntos. Os segredos do serviço aposentado passaram por rotação na data do expurgo, não ficaram guardados "caso a gente faça rollback".
39.1b Janelas de descontinuação de API
Anuncie as descontinuações com datas; mantenha períodos de execução dupla para os consumidores do PulseMap. Remoções súbitas de códigos de motivo quebram as linhas do tempo no meio do engajamento. Os clientes precisam de tempo de calendário antes que a /v1/ apague. Uma janela de descontinuação com execução dupla e uma data final nomeada vence um 404 surpresa durante um engajamento de cliente. Sam anunciou a aposentadoria de campos do FindingsDesk com noventa dias de antecedência e fez a CI reprovar novos chamadores dos nomes antigos a partir do trigésimo dia. Clientes móveis que ainda chamavam o campo antigo receberam um código de erro dedicado apontando para o guia de migração.
Nota de prática
Escreva uma nota de fator ônibus para cada serviço: quem pode lançar, quem entende o predicado, quem consegue restaurar o repositório selado. Se a resposta for uma só pessoa, agende treinamento cruzado antes da próxima temporada de engajamentos. A manutenibilidade é, sobretudo, sobre pessoas que podem tirar férias.
Reserve no calendário um mês de atualização de dependências por ano, para que as fixações por CVE não esperem uma emergência.
As páginas de propriedade listam a cobertura de férias por nome, não pelo alias do esquadrão.
Trate a falta de cobertura de férias como um bloqueador de release igual a um teste reprovado.
As sessões de treinamento cruzado usam os mesmos fixtures sintéticos do Laboratório I, para que o tempo de ensino também renove a prática de verificação.
39.4b Documentação como manutenção
Cada módulo da plataforma tem um README curto declarando propósito, dono, entradas, saídas e os testes que o protegem. Sam os atualiza no mesmo pull request das mudanças de código; os revisores rejeitam mudanças que deixam o README descrevendo um comportamento que já não existe. Um runbook que descreve botões que a interface já não tem é pior que nenhum. Mudanças na documentação vão no mesmo pull request da mudança de interface, revisadas por um operador que não foi o autor. A última renomeação na interface feita por Sam ficou bloqueada até que a página do fichário offline fosse atualizada e recebesse um novo hash.
Exercícios
- EX115 — Fixação. Como fixar o TrackScope para um engajamento e ainda permitir correções de segurança? Rubrica: 3 = faixa de versões/política + reverificação; 2 = parcial; 1 = sempre a mais recente; 0 = nada.
- EX116 — Adaptador. Dê um método de uma interface StoragePort. Rubrica: 3 = por exemplo, put_evidence(hash,bytes); 2 = vago; 1 = chamada concreta de SDK; 0 = nada.
- EX117 — Dono. Escreva a linha de propriedade do FindingsDesk. Rubrica: 3 = esquadrão + reserva + contato; 2 = esquadrão; 1 = "equipe"; 0 = nada.
Síntese
Fixações, adaptadores e donos nomeados mantêm as ferramentas vivas com segurança.
Continue estudando — capítulo 39 de 50
← Capítulo 38 (rascunho) · Índice de capítulos do curso · Capítulo 40 (rascunho) →