Supply chain: SBOM, sigstore e dependency confusion
- ⬜🗝️ Secrets management: Vault, SOPS e AWS Secrets Manager(Security Engineering)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Por que supply chain virou o front principal
SolarWinds (2020, Rússia injetou backdoor em update), Log4Shell (2021, lib ubíqua), XZ backdoor (2024, maintainer malicioso por anos), eslint-scope (2018, token roubado de maintainer) — todos ataques via dependência, não via código seu. Atacante moderno prefere subir na árvore: comprometer 1 lib popular vale milhares de alvos.
Defesas em camadas
- Lockfiles commitados: package-lock.json/pnpm-lock.yaml fixam hash. em CI (não install) — falha se lockfile divergir.
- Audit regular: , Dependabot/Renovate automatizado com security updates auto-merge.
- SBOM no build: gerar com syft, publicar junto com release, scanear com grype.
- Signature verification: npm provenance (2023) mostra badge verificado pras libs de CI público.
- Scope protegido: em registro privado; .npmrc com mapeamento.
- Scanning continuous: Snyk, Socket.dev (catches malicious behavior, não só CVE), Trivy pra container.
- Freezing em produção: postinstall scripts podem executar código. em CI, whitelist dos scripts que podem rodar.
- Fora da AWS
- Rede e entrega
- Gestão e governança
- Conceito de arquitetura
- Segurança e identidade
- Compute
Repare que as três setas de ataque apontam para a construção, e não para o código que você escreve. É por isso que a defesa é sobre PROCEDÊNCIA — saber o que entrou e provar de onde veio — e não sobre revisar mais o próprio código.
- 1 · O ataque entra pelo que você não escreveu. A maior parte do código publicado veio de dependências. Comprometer uma dependência popular alcança milhares de projetos sem tocar em nenhum deles.
- 2 · Travar versão barata o suficiente para não ter desculpa. Instalar reproduzível — com arquivo de trava e resolução verificada — elimina a maior parte da confusão de nome e do pacote de nome parecido.
- 3 · O inventário responde "eu uso isso?". Quando sai um aviso de vulnerabilidade, a diferença entre responder em minutos e em dias é ter a lista do que entrou em cada artefato.
- 4 · Assinar prova origem, não qualidade. A assinatura garante que o artefato saiu da sua esteira e não foi alterado. Ela não diz que o código é bom — são perguntas diferentes.
- 5 · Verificar na admissão é o que dá sentido a assinar. Assinar sem verificar é cerimônia. A verificação no momento de implantar é o ponto em que a assinatura vira controle.
- 6 · Para time pequeno, três medidas cobrem muito. Arquivo de trava respeitado no CI, atualização automatizada com testes, e inventário gerado a cada construção. Nada disso exige plataforma nova.
SBOM hands-on
# Gerar SBOM do projeto Node
syft packages dir:. -o cyclonedx-json > sbom.json
# Scan de vulnerabilidades conhecidas
grype sbom:./sbom.json
# Para container:
syft packages docker:my-image:latest -o cyclonedx-json
grype docker:my-image:latest
# CI step (.github/workflows/sec.yml):
- uses: anchore/sbom-action@v0
- uses: anchore/scan-action@v3
with:
sbom: sbom.json
fail-build: true
severity-cutoff: highPor que a cadeia de suprimentos virou o vetor principal de ataque?
sigstore + cosign
# CI assina imagem com OIDC do GitHub Actions
- name: Sign container
run: cosign sign --yes ghcr.io/org/app@$DIGEST
# Identidade fica em rekor (transparency log) automaticamente:
# cert subject: https://github.com/org/app/.github/workflows/ci.yml@refs/heads/main
# Deploy verifica antes de subir
cosign verify \
--certificate-identity-regexp='https://github.com/org/app/.github/workflows/ci.yml@.*' \
--certificate-oidc-issuer=https://token.actions.githubusercontent.com \
ghcr.io/org/app@$DIGESTZero chave pra gerenciar. Identidade vem do OIDC da pipeline. Se atacante rouba token de GitHub Actions, ainda assim o rekor tem registro imutável do que foi assinado legitimamente.
Checklist realista pra time pequeno
- ☐ Lockfile commitado + em CI.
- ☐ Dependabot/Renovate ativo com auto-merge de patches.
- ☐ como gate de PR.
- ☐ gitleaks/trufflehog em pre-commit.
- ☐ SBOM gerado por build (syft action).
- ☐ grype em CI como gate de deploy.
- ☐ Scope privado protegido (se relevante).
- ☐ em install de CI + whitelist manual.
Perguntas frequentes
❓ Como reduzir risco de dependência?
❓ Para que serve inventário de componentes?
❓ O que é confusão de dependência?
Fixando
Para que serve um inventário de componentes de software?
O que a assinatura de artefatos acrescenta à verificação por resumo criptográfico?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…