Pular para o conteúdo principal

Aplicação no Ciclo de Vida - Dependências, SBOM e SCA

🧭 Quando aplicar​

As práticas acompanham a aplicação desde o arranque até ao post‑release.
Cada evento é um trigger que deve produzir evidências objetivas.

Fase SDLC / EventoAção esperadaArtefacto/Evidência
Início de projetoPublicar política e configurar repositórios internosDocumento de política + repo-config.yaml
Nova dependênciaRever origem, licença, manutenção e CVEsTicket de aprovação + registo
Build / CIGerar SBOM e executar SCA com gatessbom.* + sca-report.* + logs
ReleaseRever findings/exceções e decidir go/no-goreleases.md + excecoes.yaml
Ciclo regularBots abrem PRs de atualização com avaliação de impactoPRs automáticos + testes/logs
CVE crítico públicoAnálise de impacto + backport/fixIssue de resposta + plano de mitigação

👥 Quem executa cada ação​

A governação é coletiva - papéis e responsabilidades consistentes com o intro.md.

PapelResponsabilidade
Developer / LeadIncluir dependências, triagem inicial, pinning, correções
AppSec EngineerPolíticas, tuning de gates, gestão de exceções e risco
DevOps / CI/CDSBOM, SCA, repositórios internos, bots de atualização e impact analysis
QAEvidências, testes de regressão, validação de PRs de bots
Product OwnerDecisão go/no-go e aceitação de risco residual
GRC / GestãoAuditoria, conformidade, retenção de evidências

📖 User Stories Reutilizáveis​

Cada US transforma a prescrição em backlog acionável, com contexto, rationale científico, BDD/checklist, artefactos, proporcionalidade L1–L3 e integração no SDLC.


US-01 - Gestão de dependências seguras​

Contexto.
Dependências externas sem validação introduzem risco invisível (componentes abandonados, origem duvidosa, licenças incompatíveis).

User Story

História.
Como Developer, quero usar apenas dependências aprovadas, para reduzir risco de vulnerabilidades herdadas e conflitos de licença.

Critérios de aceitação (BDD).

  • Dado que pretendo incluir uma dependência Quando submeto pedido de aprovação Então a dependência é validada segundo a política (origem, licença, manutenção, CVEs)

Checklist.

  • Dependência aprovada formalmente
  • Licença validada / compatível
  • Sem CVEs críticos conhecidos
  • Proveniência confirmada (repositório interno)

Artefactos & evidências.

  • dependencies-approval.md
  • Ticket de validação no backlog

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1OpcionalAprovação simplificada
L2SimValidação formal + licença
L3SimRevisão AppSec + proveniência

Integração no SDLC.

FaseTriggerResponsávelSLA
Design/DevInclusão de dependênciaDeveloper + AppSecNa aprovação da dependência

Ligações úteis.


US-02 - SBOM em cada build​

Contexto.
Sem SBOM atualizado não é possível determinar rapidamente exposição a CVEs e cumprir requisitos de auditoria.

User Story

História.
Como DevOps / SRE, quero gerar SBOM em cada build, para rastreabilidade completa de componentes.

Critérios de aceitação (BDD).

  • Dado que um build é acionado Quando o artefacto é produzido Então é gerado um SBOM em formato CycloneDX ou SPDX

  • Dado um SBOM gerado

  • Quando é associado à release

  • Então é armazenado e acessível para auditoria

Checklist.

  • SBOM no formato CycloneDX ou SPDX
  • SBOM versionado e associado à release
  • Acessível para auditoria

Artefactos & evidências.

  • sbom.json / sbom.xml

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1SimSBOM básico
L2SimSBOM completo, incluído na release
L3SimSBOM assinado + verificação de integridade

Integração no SDLC.

FaseTriggerResponsávelSLA
CIExecução de buildDevOpsConforme ciclo da US

Ligações úteis.


US-03 - SCA automático com gates​

Contexto.
SCA identifica vulnerabilidades conhecidas em dependências (diretas e transitivas) e deve bloquear risco inaceitável.

User Story

História.
Como AppSec Engineer, quero executar SCA automático nos pipelines, para detetar CVEs antes de produção.

Critérios de aceitação (BDD).

  • Dado um build Quando o SBOM é gerado Então o SCA corre e bloqueia findings que excedam o threshold por Lx

Checklist.

  • Scanner SCA integrado (ex.: Dependency‑Check/Trivy/Grype)
  • Findings documentados e triados
  • Bloqueio automático para CVEs críticos (L2) e médios+ (L3)

Artefactos & evidências.

  • sca-report.html / JSON
  • Logs de pipeline com gates

Proporcionalidade por risco.

NívelPolítica
L1Bloqueio High/Critical
L2Bloqueio High/Critical
L3Bloqueio Medium+

Integração no SDLC.

FaseTriggerResponsávelSLA
CIGeração de SBOMDevOps + AppSecDurante o build (bloqueio imediato)

Ligações úteis.


US-04 - Exceções a CVEs formais e temporárias​

Contexto.
Nem todos os findings podem ser resolvidos de imediato; exceções devem ser formais, justificadas e temporárias.

User Story

História.
Como AppSec Engineer, quero formalizar exceções a CVEs, para manter governação e justificar risco residual.

Critérios de aceitação (BDD).

  • Dado que existe um CVE não resolvido Quando é solicitada uma exceção Então a exceção é formalizada em excecoes.yaml com justificativa técnica e de negócio, aprovador e prazo

  • Dado uma exceção com prazo definido

  • Quando passa o prazo

  • Então é acionada revisão periódica com reavaliação do risco

Checklist.

  • excecoes.yaml com justificativa técnica e de negócio
  • Aprovador e prazo definidos
  • Controlo compensatório especificado
  • Revisão periódica agendada

Artefactos & evidências.

  • excecoes.yaml (versionado)
  • Aprovação registada no backlog

Referência: Este US implementa [Cap 14-US-01: Processo formal de exceções] no contexto de vulnerabilidades em dependências (CVEs). O processo de aprovação, TTL e revalidação devem seguir a política master de exceções em Cap 14.

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1SimRegisto formal com justificação, compensação, aprovador e prazo
L2SimRevalidação na expiração (TTL da Política 05 §7: 60 dias Low/Medium, 30 dias High)
L3SimValidação executiva + métricas de risco

Integração no SDLC.

FaseTriggerResponsávelSLA
ReleaseFindings pendentesAppSec + Product OwnerConforme prazo definido na exceção

Ligações úteis.


US-05 - Validação de release (go/no-go)​

Contexto.
Cada release é uma decisão de risco que deve ser explícita e rastreável.

User Story

História.
Como Product Owner, quero validar findings e exceções antes do go‑live, para tomar decisão informada de go/no-go.

Critérios de aceitação (BDD).

  • Dado uma release candidata Quando verifico critérios de segurança e risco residual Então documento a decisão e condicionantes (se existirem)

Checklist.

  • Lista de findings e estado
  • Exceções aprovadas e válidas
  • Decisão go/no-go documentada

Artefactos & evidências.

  • releases.md com histórico e justificações

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1OpcionalDecisão simples
L2SimRevisão formal
L3SimRevisão formal + AppSec envolvido

Integração no SDLC.

FaseTriggerResponsávelSLA
Pré‑releaseRC prontaProduct Owner + QA + AppSecAntes do deploy a produção

Ligações úteis.


US-06 - Repositórios internos como fonte única​

Contexto.
Sem repositórios internos, dependências podem ser resolvidas de fontes não controladas (typosquatting, confusion, malícia).

User Story

História.
Como DevOps / SRE, quero enforce repositórios internos aprovados, para garantir proveniência e consistência.

Critérios de aceitação (BDD).

  • Dado que o package manager resolve dependências Quando a build ocorre Então só aceita fontes do repositório interno aprovado

Checklist.

  • repo-config.yaml ativo (proxy/registry interno)
  • Bloqueio a fontes externas (allowlist)
  • Logs de acesso monitorizados e retidos

Artefactos & evidências.

  • repo-config.yaml
  • Logs de CI/CD com origem validada

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1OpcionalRecomendado
L2SimObrigatório
L3SimObrigatório + assinatura/verificação de pacotes

Integração no SDLC.

FaseTriggerResponsávelSLA
BuildResolução de dependênciasDevOps/CIImediato (bloqueio em tempo real)

Ligações úteis.

  • SLSA Provenance (conceitos)

US-07 - Proibir bibliotecas copiadas manualmente​

Contexto.
JS, PHP, DLLs, JARs copiados diretamente para o repo escapam ao SBOM e ao SCA, criando shadow dependencies.

User Story

História.
Como Developer, quero usar apenas package managers/repositórios internos, nunca copiar bibliotecas para o repo.

Critérios de aceitação (BDD).

  • Dado que preciso de uma biblioteca externa Quando a adiciono ao projeto Então é gerida via package manager e não por cópia manual

Checklist.

  • Zero libs copiadas manualmente
  • Todas via package manager
  • Auditoria periódica confirma ausência

Artefactos & evidências.

  • package.json / pom.xml / composer.json
  • Logs de build (resolução via repos internos)

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1SimPolítica documentada
L2SimAuditorias periódicas
L3SimEnforcement automático em CI/CD

Integração no SDLC.

FaseTriggerResponsávelSLA
DevInclusão de nova libDeveloper + AppSecNa aprovação da dependência

Ligações úteis.


US-08 - Automação da atualização com avaliação de impacto​

Contexto.
Dependências degradam com o tempo; é necessário atualizar com segurança e rapidez.
Ferramentas modernas avaliam impacto (semver, release notes, diffs, cobertura de testes) e:

  • abrem PRs automáticos com auto‑merge quando a alteração é segura (patch/minor sem impacto, testes verdes, gates OK);
  • marcam como requires‑human quando há impacto (API quebrada, major), anexando guidelines de refactor.
User Story

História.
Como DevOps/Developer, quero bots de atualização com avaliação de impacto, para receber PRs seguros automaticamente e handoff humano quando necessário.

Critérios de aceitação (BDD).

  • Dado que é publicada nova versão Quando o bot executa impact analysis
  • Então:
    • Se no‑impact ⇒ PR com auto‑merge condicionado a CI verde e gates ok
    • Se impact ⇒ PR requires‑human com diff, breaking notes, refactor hints, ou mesmo GenAI com a alteração adequada.

Checklist.

  • Bot ativo (Renovate/Dependabot/afins)
  • Impact analysis configurado (semver + testes + changelog)
  • Critérios de auto‑merge seguro por L1–L3
  • Etiquetas (no-impact, requires-human) e routing para revisores
  • Canary/rollout definido (L3)

Artefactos & evidências.

  • PRs automáticos com labels e logs
  • Relatórios de testes e gates do CI/CD

Proporcionalidade por risco.

NívelPolítica
L1Bots opcionais; auto‑PR para patch/minor
L2Bots obrigatórios; auto‑merge apenas para actualizações patch ou de segurança, com todos os gates obrigatórios verdes, registo rastreável e declarado na política; minor/major requer revisão humana
L3Bots obrigatórios; impact analysis + canary; sem auto‑merge: patch e actualizações de segurança com revisão humana (acelerada para CVE, Política 13 §4.1); minor/major requer aprovação humana e promoção por estágios

Integração no SDLC.

FaseTriggerResponsávelSLA
Dev/CINova versão publicadaDevOps + Developer + QAAutomático (PR aberto e processado por bot)

Ligações úteis.


US-09 - Auditoria Periódica de Bibliotecas Copiadas Manualmente​

Contexto.
Bibliotecas copiadas manualmente escapam ao SBOM e ao SCA. É necessário automação periódica para detetar estas dependências ocultas e enforce substituição via package manager ou bloqueio em CI/CD.

User Story

História.
Como AppSec Engineer, quero executar auditoria periódica automatizada para detetar bibliotecas copiadas manualmente (JS, PHP, DLL, JAR, etc.), para bloquear a sua utilização em CI/CD e garantir SBOM e SCA completos.

Critérios de aceitação (BDD).

  • Dado que é executada auditoria periódica (semanal/mensal conforme Lx) Quando encontradas bibliotecas copiadas não via package manager Então é criada issue no backlog com prazo de substituição via repositório/package manager

Checklist.

  • Scanner automático configurado (ex: busca de padrões de libs copiadas, extensões JS/PHP/DLL/JAR)
  • Frequência de auditoria definida por Lx (L1: mensal, L2: quinzenal, L3: semanal)
  • Resultados versionados no repositório (.audit-libs.json)
  • Bloqueio em CI/CD para L2–L3 quando detectadas libs copiadas
  • Zero libs detectadas como meta

Artefactos & evidências.

  • .audit-libs.json / .audit-libs.yaml (versionado)
  • Logs de auditoria e scanner
  • Issues de correção no backlog

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1SimPolítica documentada; auditoria manual mensal
L2SimScanner automático quinzenal; alerta em pipeline
L3SimScanner automático semanal; bloqueio em CI/CD

Integração no SDLC.

FaseTriggerResponsávelSLA
Ciclo regularAuditoria periódica (cronograma)AppSec Engineer + DevOpsL1: mensal, L2: quinzenal, L3: semanal
BuildDetecção em CI/CD (L2–L3)DevOps (bloqueio)Imediato (bloqueio em tempo real)
BacklogLibs detectadasDeveloper (remediação)

Ligações úteis.


US-10 - Inventário e SBOM por Build​

Contexto.
Cada build deve produzir uma Software Bill of Materials (SBOM) assinada e rastreável, identificando todas as dependências utilizadas (diretas e transitivas).
Esta SBOM deve poder ser correlacionada com o artefacto implantado e servir de base à deteção de desvios (“drift”) entre o que foi construído e o que está efetivamente a executar.

User Story

História.
Como DevOps / SRE, quero gerar automaticamente um SBOM assinado por build, que se mantenha associado a cada imagem, pacote ou artefacto implantado, permitindo identificar todos os componentes e as suas versões.

Critérios de aceitação (BDD).

  • Dado um pipeline de build
    Quando o artefacto é produzido
    Então é gerado um SBOM CycloneDX ou SPDX assinado e arquivado com metadados de commit, versão e hash.

  • Dado um SBOM assinado no build
    Quando o serviço é implantado em stage ou prod
    Então o orquestrador mantém etiquetas de proveniência (commit, build-id, imagem) que associam cada instância ao SBOM correto.

  • Dado telemetria de runtime
    Quando é detetado um componente carregado que não existe no SBOM
    Então é aberto incidente de drift com correção requerida.

  • Dado um pedido de auditoria ou compliance
    Quando o auditor solicita o inventário de componentes
    Então é possível exportar a SBOM e proveniência por versão.

Checklist.

  • SBOM gerado por build (standard SPDX ou CycloneDX).
  • Assinatura e armazenamento seguro do SBOM.
  • Proveniência do deploy (attestations e labels por ambiente).
  • Comparação runtime vs SBOM e deteção de drift.
  • Exportação de inventário para CMDB ou data-lake de compliance.
  • Integração com alertas de vulnerabilidade e com Cap. 12 (Monitorização & Operação Segura).

Artefactos & evidências.
sbom-<build>.json, attestation-<build>.json, proveniencia-<deploy>.json, relatórios de drift e logs de build.

Proporcionalidade.

NívelObrigatório?Cobertura
L1SimSBOM por build e associação básica por imagem.
L2SimAttestations + labels por ambiente, deteção de drift básica.
L3SimDrift contínuo + bloqueio de execuções não atestadas.

Integração no SDLC.

FaseTriggerResponsávelSLA
CIExecução de buildDevOps / SRENo build (geração automática)
DeployImplantação em ambienteDevOps / SREImediato (associação com metadados)
OperaçãoMonitorização contínuaDevOps + AppSecContínuo (deteção de drift)

Ligações úteis.


US-11 - Alertas sobre Vulnerabilidades em Componentes Usados​

Contexto.
Os sistemas devem detetar automaticamente vulnerabilidades conhecidas (CVEs) nas dependências utilizadas.
Além dos alertas durante o build, devem existir alertas em produção, correlacionando as versões efetivamente implantadas e os ambientes onde se encontram.
O sistema deve conhecer onde corre cada versão para avaliar impacto real e priorizar correção.

User Story

História.
Como Gestor de Aplicação e AppSec, quero receber alertas correlacionados por ambiente quando surgir uma CVE que afete versões em execução, para priorizar a correção e reduzir o MTTR.

Critérios de aceitação (BDD).

  • Dado um inventário por serviço/ambiente com SBOM associado
    Quando é publicada uma CVE que afeta uma versão implantada
    Então é gerado um alerta único com componente, versão, serviços/ambientes impactados, exploitability, exposição e SLA recomendado.
  • Dado um alerta com SLA L2/L3
    Quando passa o tempo de triagem sem ação
    Então é escalado automaticamente (Cap. 12) e criado incidente no sistema de ITSM.
  • Dado uma exceção de risco aceite (VEX/justificativa)
    Quando passa a existir exploit ativo
    Então a exceção é reavaliada e o alerta reativado.
  • Dado o ciclo de vida de patch management
    Quando a correção é implantada
    Então o alerta é fechado automaticamente e registado como resolved CVE.

Checklist.

  • Inventário contínuo por serviço e ambiente com SBOM associado.
  • Correlação de CVEs e advisories para versões implantadas.
  • Enriquecimento de risco (exploit disponível, exposição, dados sensíveis).
  • Integração com Cap. 12 (SIEM/SOAR/alerting) e ITSM (incidentes/tarefas).
  • Processo de exceções com VEX e reavaliação automática.
  • KPIs: MTTA/MTTR por severidade e ambiente; % cobertura inventário vs deploys.

Artefactos & evidências.
sbom-<build>.json assinado; inventario-runtime-<servico>-<ambiente>.json; feed de CVEs correlacionadas; tickets/incidentes; decisões VEX.

Proporcionalidade.

NívelObrigatório?SLA triagemSLA mitigaçãoAjustes
L1SimCrítico ≤ 24 h; Alto ≤ 48 h; Médio 5 dias úteis; Baixo 10 dias úteisCrítico 30 diasAlertar apenas high/critical implantadas sem compensações.
L2SimCrítico ≤ 24 h; Alto ≤ 48 h; Médio 5 dias úteis; Baixo 10 dias úteisCrítico 7 diasIncluir medium em serviços expostos; escalonamento automático.
L3SimCrítico ≤ 24 h; Alto ≤ 48 h; Médio 5 dias úteis; Baixo 10 dias úteisCrítico 3 diasBlockers com auto-rollback/kill-switch quando aplicável.

Estes SLAs são escolha do Manual. Uma vulnerabilidade com indício de exploração ativa num produto com elementos digitais que a organização coloca no mercado sai desta escada: triagem ≤4 h e, se confirmada, trilho do CRA art. 14.º (notificação de alerta precoce ≤24 h à CSIRT designada como coordenadora e à ENISA).

Integração no SDLC.

FaseTriggerResponsávelSLA
Publicação CVENova vulnerabilidade públicaAutomático (feed)Detecção automática (1–6h)
TriagemCVE correlacionada com versão implantadaAppSec + DevOpsL1: 5d, L2: 2d, L3: 1d
MitigaçãoPlano de correção ou exceçãoDevOps + AppSecCrítico: L1 30d, L2 7d, L3 3d (Política 19 §4.3)

Ligações úteis.


US-12 - Validação Automática de Compatibilidade de Licenças​

Contexto.
Dependências com licenças incompatíveis (GPL, AGPL, etc.) podem introduzir obrigações legais inesperadas. É necessário validar automaticamente a compatibilidade contra lista branca organizacional.

User Story

História.
Como Developer, quero validar automaticamente a compatibilidade de licenças de novas dependências, para garantir conformidade legal e evitar conflitos.

Critérios de aceitação (BDD).

  • Dado que é adicionada nova dependência Quando o build executa Então validador de licenças avalia compatibilidade contra lista branca organizacional

  • Dado que uma licença é incompatível

  • Quando o build tenta resolver a dependência

  • Então o pipeline bloqueia com mensagem clara (L2–L3) ou avisa (L1)

Checklist.

  • Lista branca de licenças aprovadas definida (ex: MIT, Apache 2.0, BSD)
  • Validador automático de licenças integrado no CI/CD
  • Bloqueio para licenças proibidas/incompatíveis (L2–L3)
  • Alerta para licenças não reconhecidas (para revisão manual)
  • Documentação do critério de aprovação por licença

Artefactos & evidências.

  • licenses-whitelist.yaml / .licenseignore (versionado)
  • Logs de CI/CD com validação de licenças
  • Issues de remediação (trocar dependência ou requerer exceção formal)

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1OpcionalValidação manual, ad hoc
L2SimAutomática com alerta; bloqueio para GPL/AGPL
L3SimAutomática com bloqueio; exceções requerem aprovação formal

Integração no SDLC.

FaseTriggerResponsávelSLA
Design/DevInclusão de dependênciaDeveloperNa aprovação da dependência
BuildResolução de dependênciasCI/CD (bloqueio/alerta)Durante o build (imediato)
ExceçãoLicença incompatível com business caseAppSec + Legal (se necessário)Antes do go-live

Ligações úteis.


US-13 - Inventário e controlo de dependências emergentes​

Contexto.
Em arquiteturas modernas, nem todas as dependências entram por declaração explícita em manifests ou lockfiles. Ferramentas de build, pipelines, code generation, plugins e carregamento em runtime podem introduzir dependências emergentes que não são imediatamente visíveis.

User Story

História.
Como Arquitetos de Software + AppSec Engineer, quero identificar e controlar dependências emergentes (não explicitamente declaradas), para garantir que a composição real do software permanece governada, rastreável e alinhada com os requisitos de segurança.

Critérios de aceitação (BDD).

  • Dado que um SBOM é gerado para a aplicação ou pipeline
    Quando comparo a composição atual com a baseline conhecida
    Então consigo identificar dependências novas, inesperadas ou fora da fronteira definida

Checklist.

  • Fronteira de inventário (SBOM boundary) definida e documentada
  • Fontes de dependência identificadas (build tools, plugins, pipelines, runtime fetch)
  • Baseline de dependências aprovada e versionada
  • Deteção de delta de dependências implementada
  • Dependências emergentes sujeitas a revisão/aprovação
  • Evidência arquivada por release

Artefactos & evidências.

  • sbom-boundary.md
  • sbom-baseline.json
  • Relatório de delta de dependências por build/release

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1OpcionalAnálise manual pontual
L2SimDeteção automática de delta
L3SimGate automático + aprovação formal

Integração no SDLC.

FaseTriggerResponsávelSLA
CI/CDBuild / ReleaseDevOps + AppSecEm cada release

Ligações úteis.

  • 🔗 Cap. 04 - Arquitetura Segura: /sbd-manual/arquitetura-segura/intro
  • 🔗 Cap. 07 - CI/CD Seguro: /sbd-manual/cicd-seguro/intro

US-14 - AI BOM e gestão de providers de modelos AI​

Contexto. A US-10 cobre SBOM clássico — pacotes via package manager, dependências directas e transitivas. Quando o sistema inclui componentes AI (modelos, datasets, MCP servers/tools, prompts embebidos), há uma classe de "dependências" que escapa ao package manager tradicional: artefactos opacos com versão própria, providers externos (Anthropic, OpenAI, HuggingFace), e mecanismos de actualização que podem mudar comportamento sem mudar versão visível. Operacionalizamos DEP-011, DEP-012, DEP-013 e DEP-014 para que essas dependências fiquem tão auditáveis como o resto do stack.

User Story

História. Como AppSec / DevOps, quero que cada release do sistema gere um AI BOM em formato standardizado (preferencialmente CycloneDX 1.6 ml-bom) com modelos, datasets, MCP servers/tools e prompts embebidos pinned a versões específicas, alinhado com a lista de providers aprovados, para garantir rastreabilidade equivalente à do SBOM clássico e detecção rápida de incidentes upstream em qualquer das classes.

Critérios de aceitação (BDD).

  • Dado um build de sistema com componentes AI Quando o pipeline gera o SBOM Então é também gerado o AI BOM em formato ml-bom (CycloneDX 1.6) ou equivalente, integrado com o SBOM principal
  • Dado um modelo AI em uso operacional Quando declarado no AI BOM Então vem com versão fixa explícita (ex.: claude-opus-4-7@sha:…) — sem latest, sem ranges, sem aliases dinâmicos
  • Dado que um provider AI muda versão maior do modelo Quando o pinning é actualizado Então corre nova eval suite (Cap. 10 §C5) e threat model é revisto (Cap. 03 US-11) antes do cutover
  • Dado que um provider AI não está na lista aprovada Quando se tenta usar em código de produção Então o gate de CI bloqueia (cross-link Cap. 07 US-19) ou exige excepção formal

Checklist.

  • AI BOM gerado por build em formato standardizado (preferência: CycloneDX 1.6 ml-bom)
  • Modelos, datasets, MCP servers/tools, prompts com versão pinned + hash + provider
  • Lista de providers AI aprovados versionada em VCS, com classificação de risco
  • Cláusulas contratuais aplicáveis registadas por provider (cross-link Cap. 14, Policy 33)
  • Gate de CI que falha se: (a) AI BOM não foi gerado, (b) componente usa latest/range, (c) provider não está na lista aprovada
  • Processo de triagem DEP-007 estendido a incidentes em modelos/datasets/MCP/prompts (AML.T0010, AML.T0019, AML.T0109, AML.T0110, LLM03-2025)
  • Eval suite + threat model corridos em cada mudança de versão maior

Artefactos & evidências.

  • ai-bom.cdx.json (CycloneDX 1.6) ou equivalente por release, arquivado e ligado ao SBOM principal
  • Lista de providers aprovados em VCS (governance/ai-providers.yaml ou equivalente)
  • Logs do gate CI a confirmar conformidade do AI BOM
  • Registo de eval/threat-review por mudança de versão (referencia eval_run_id e threat_model_ref)
  • Histórico de versões pinned por modelo, com data e SHA

Proporcionalidade por risco.

NívelObrigatório?Ajustes
L1RecomendadoAI BOM em formato simples; lista de providers conhecida
L2SimAI BOM em formato standard; providers aprovados; gate de CI
L3SimAI BOM standard + revisão GRC dos providers; cláusulas contratuais detalhadas (data retention, audit rights, localização); cross-link com cross-check AI Act

Integração no SDLC.

FaseTriggerResponsávelSLA
BuildCada buildDevOps (gera AI BOM) + AppSec (revê)Por build
Aprovação de providerAdição de novo provider AIAppSec + GRC (+ Legal se necessário)Antes do uso operacional
Mudança de versãoBump de modelo / MCP server / datasetAppSec + DevOpsAntes do cutover — com eval e threat review concluídos

Ligações úteis.


US-15 - Pinning de versões e integridade por hash​

Uma dependência sem versão fixa e sem hash verificável é uma porta aberta a substituição silenciosa na cadeia de fornecimento.

Contexto. DEP-003 exige lockfile versionado, sem referências latest/*/ranges não limitados, e integridade verificável por hash (integrity em npm, --hash em pip). Nenhuma US operacionaliza este controlo de forma direta — US-01 trata aprovação e US-13 trata delta de inventário, mas o pinning e a verificação de hash ficavam sem backlog próprio. Sem versão fixa, o mesmo manifesto resolve artefactos diferentes entre builds; sem hash, um artefacto adulterado upstream (typosquatting, registry comprometido) passa despercebido.

User Story

História.
Como Developer/Lead, quero fixar todas as dependências a versões exactas e verificar a sua integridade por hash em cada resolução, para garantir builds reprodutíveis e bloquear substituição não autorizada de artefactos.

Critérios de aceitação (BDD).

  • Dado um manifesto de dependências
    Quando o build resolve as dependências
    Então existe um lockfile versionado em VCS sem latest/*/ranges não limitados, e o build falha se o lockfile estiver ausente ou desactualizado
  • Dado um lockfile com hashes de integridade
    Quando o package manager descarrega um artefacto
    Então o hash descarregado é comparado com o hash pinned e a resolução aborta em caso de divergência

Checklist.

  • Lockfile presente e versionado, regenerado de forma determinística
  • Ausência de latest/*/ranges não limitados (verificável por linter em CI)
  • Campo de integridade por hash presente e validado na resolução
  • Gate de CI que falha perante lockfile ausente/desactualizado ou divergência de hash

Artefactos & evidências. package-lock.json/poetry.lock/Gemfile.lock/go.sum (versionado); relatório do linter de pinning; logs de CI com verificação de hash.

Proporcionalidade L1–L3.

L1L2L3
Lockfile obrigatório, sem latest/*/ranges não limitados, + verificação de hashLockfile obrigatório + verificação de hashLockfile + hash + proveniência verificada (attestation) e gate bloqueante

Integração no SDLC.

FaseTriggerResponsávelSLA
DevInclusão/alteração de dependênciaDeveloper/LeadNa alteração do manifesto
BuildResolução de dependênciasDevOps/CIDurante o build (bloqueio imediato)

Ligações úteis. DEP-003 — Versões fixas e auditáveis


US-16 - Governação documentada de política de severidade, registries e registo de aprovação​

Controlos de supply chain só são auditáveis quando a regra que distingue bloquear-de-alertar, a origem permitida e o registo de quem aprovou o quê estão escritos e versionados.

Contexto. Três prescrições do catálogo ficavam só parcialmente operacionalizadas. DEP-002 exige política de severidade documentada que distinga findings que bloqueiam dos que apenas alertam (US-03 aplica gates mas não exige a política escrita). DEP-005 exige allowlist de registries enforced com fallback para fontes externas controlado e auditado (US-06 enforça a allowlist mas não trata o fallback). DEP-006 exige registo de aprovação rastreável com versão, hash, responsável e data (US-01 aprova mas não fixa os campos do registo). Consolidam-se por serem todos artefactos de governação documentada que tornam os gates já existentes auditáveis.

User Story

História.
Como AppSec Engineer, quero manter versionada a política de severidade, a allowlist de registries com regra de fallback auditada e o registo de aprovação com campos obrigatórios, para tornar as decisões de supply chain explícitas, rastreáveis e auditáveis.

Critérios de aceitação (BDD).

  • Dado o pipeline de SCA
    Quando um finding é avaliado
    Então a decisão bloquear-vs-alertar segue uma política de severidade documentada e versionada, e não critérios ad hoc do scanner
  • Dado que o build resolve dependências de uma fonte fora da allowlist
    Quando ocorre fallback para um registry externo
    Então o evento é registado, auditado e sujeito a aprovação conforme a política, ou bloqueado
  • Dado a aprovação de uma nova dependência
    Quando é registada
    Então o registo inclui versão, hash, responsável e data, e é rastreável por dependência

Checklist.

  • Política de severidade documentada e versionada (limiares de bloqueio/alerta por Lx)
  • Allowlist de registries enforced com regra de fallback explícita e auditada
  • Registo de aprovação com versão, hash, responsável e data por dependência
  • Evidência de auditoria dos eventos de fallback (logs retidos)

Artefactos & evidências. severity-policy.yaml; repo-config.yaml com regra de fallback; dependencies-approval.md com campos versão/hash/responsável/data; logs de fallback auditados.

Proporcionalidade L1–L3.

L1L2L3
Política de severidade mínima documentada; registries recomendados; aprovação simplesPolítica versionada; allowlist enforced + fallback auditado; registo com campos obrigatóriosIdem + revisão AppSec/GRC do fallback e do registo; fallback requer aprovação formal por evento

Integração no SDLC.

FaseTriggerResponsávelSLA
Início de projetoPublicação/revisão de políticaAppSec + GRCNa adoção e em revisão periódica
BuildFallback para registry externoAppSec + DevOpsNo evento (registo/auditoria imediatos)
DevAprovação de nova dependênciaAppSec + DeveloperNa aprovação da dependência

Ligações úteis. DEP-002/005/006 — Catálogo de Requisitos · Controlo de registos de origem


🧩 Nota complementar - Inventário contínuo de componentes e alertas em produção​

A gestão de dependências não termina no build.
Deve existir um inventário contínuo de componentes de 3.ºs por projeto e ambiente (dev/test/stage/prod), com alertas automáticos quando são publicadas vulnerabilidades que afetem versões implantadas.

Isto complementa o SCA no pipeline ao:

  • Fechar o ciclo build → deploy → run;
  • Priorizar pelo risco real (exposição e exploitability);
  • Acionar resposta operacional via Cap. 12 (Monitorização & Operação Segura).

Prática recomendada.

  1. Gerar SBOM no build e assinar.
  2. Etiquetar por ambiente no registo/orquestrador.
  3. Descoberta contínua em runtime (inventário por deploy) e comparação com SBOM.
  4. Correlação de CVEs e alertas quando: versão implantada afetada / exploit ativo / caminho crítico.
  5. Abertura automática de incidente/tarefa com SLA proporcional L1–L3.
  6. Evidência: SBOM, inventário, alertas, VEX, histórico de patching.

Integração com Cap. 12 - Monitorização & Operação Segura.

Os user stories 10 e 11 estão muito relacionados com o exposto no Cap. 12 - Monitorização & Operação Segura., evidenciando o aspeto critico de monitorização além da execução de um qualquer pipeline de build. É fácil implementar medidas de segurança durante o build, mas, depois de entrar em produção uma aplicação pode estar um longo periodo de tempo sem voltar ao pipeline de desenvolvimento, é portanto essencial rever periodicamente, ou espontaneamente, o SBOM das aplicações em produção. É mais grave uma nova vulnerabilidade ser encontrada numa aplicação em produção do que durante o processo de desenvolvimento, principalmente sem medidas de alarmistica ou periodicas de deteção. Ums dos aspetos fundamentais no Cap. 12 - Monitorização & Operação Segura. é exatamente esse controlo, definindo:

  • Eventos: criação/fecho de alerta, mudança de exploitability, violação de SLA, drift.
  • Métricas: MTTA, MTTR, ativos afetados, % exceções ativas, patch latency.
  • Automação: enriquecimento, priorização, escalonamento, playbooks SOAR.
  • Relato executivo: compliance Cap. 05 + Cap. 12, visão por L1–L3.

📦 Artefactos esperados​

ArtefactoEvidência
dependencies-approval.mdLista aprovada de dependências
sbom.json / sbom.xmlInventário por build (CycloneDX/SPDX)
attestation-<build>.jsonProveniência e assinatura do build
inventario-runtime-<servico>-<ambiente>.jsonInventário de componentes efetivamente implantados
sca-report.html/jsonVulnerabilidades detetadas e gates aplicados
cve-alerts.jsonAlertas correlacionados por ambiente e severidade
vex.yamlExceções justificadas e estado de reavaliação
excecoes.yamlExceções formais aprovadas
releases.mdDecisões go/no-go e histórico de patching
repo-config.yamlRepositórios internos configurados
.audit-libs.json / .audit-libs.yamlResultados de auditoria periódica de libs copiadas
licenses-whitelist.yamlLista branca de licenças aprovadas
PRs de botsLabels de impacto, logs e testes
Relatórios de driftDiferenças entre SBOM e runtime
Tickets ITSM / IncidentesEvidência de tratamento de CVE e SLA cumprido

⚖️ Matriz de proporcionalidade L1–L3​

PráticaL1L2L3
SBOMBásico por buildCompleto por releaseAssinado + integridade + proveniência
Inventário runtimeRecomendadoObrigatórioContínuo + deteção de drift
SCABloqueio High/CriticalBloqueio High/CriticalBloqueio Medium+ + feed CVE ativo
Alertas CVE implantadasManual, com triagem dentro do SLA por severidadeAutomático por ambienteAutomático + correlação e escalonamento
Pinning de versõesObrigatório (lockfile + hash)ObrigatórioObrigatório + validação de proveniência
Exceções / VEXFormais (justificação, compensação, aprovador e prazo)Formais + revisão periódicaFormais + revalidação automática
Repositório internoRecomendadoObrigatórioObrigatório + assinatura e provenance attestation
Bibliotecas copiadasProibidas (política)Auditoria periódicaEnforcement CI/CD + bloqueio
Auditoria de libs copiadasPolítica documentada; mensalScanner automático; quinzenalScanner automático; semanal + bloqueio CI/CD
Validação de licençasManual, ad hocAutomática com alertaAutomática com bloqueio (exceto exceções formais)
Bots / automação de patchingOpcionalAtivos + auto-merge só de patch/segurança com gates verdes, registo rastreável e declarado na política; minor/major com revisão humanaAtivos + impact analysis, canary e rollback
Integração com Cap. 12OpcionalAlertas SIEM básicosTotal: SOAR, métricas MTTR/MTTA e escalonamento

🏁 Recomendações finais​

  • SBOM deve ser tratado como documento vivo, com assinatura e proveniência verificável por build e por ambiente.
  • Inventário contínuo em produção é essencial: deteta drift e vulnerabilidades em versões efetivamente implantadas.
  • SCA automatizado com gates proporcionais ao risco e integração com alertas CVE em runtime.
  • Repositórios internos e attestations são a base da confiança na supply chain.
  • Exceções formais e temporárias (VEX) devem ser reavaliadas automaticamente quando muda o risco ou surge exploit ativo.
  • Eliminar bibliotecas copiadas manualmente (US-07) com auditoria periódica automatizada (US-09) e bloqueio em CI/CD para L2–L3.
  • Validar compatibilidade de licenças (US-12) contra lista branca, bloqueando ou alertando conforme criticidade.
  • Bots com avaliação de impacto (US-08):
    • PRs de patches triviais → auto-merge;
    • PRs com impacto → revisão humana, canary e promoção por estágios (sobretudo em L3).
  • Integração com Cap. 12 deve garantir visibilidade total, alertas em tempo real e métricas operacionais de resposta (MTTA/MTTR) por severidade e ambiente.