Software · Segurança & Identidade

DevSecOps e Segurança como Código: Automação de SAST, DAST, SCA e Políticas no Pipeline

Como integrar segurança desde as primeiras linhas de código (Shift-Left): varreduras estáticas (SAST), dinâmicas (DAST), análise de dependências (SCA) e governança por Policy-as-Code em esteiras de CI/CD.

Diagrama de esteira DevSecOps integrando testes de segurança contínuos com SAST, DAST, SCA e Policy-as-Code
Neste artigo

Nos modelos tradicionais de desenvolvimento corporativo, a equipe de segurança da informação atuava como uma auditoria externa e tardia. Semanas antes do lançamento de um sistema em produção, realizavam-se testes manuais de invasão (pentests) ou auditorias de conformidade que geravam relatórios extensos com centenas de vulnerabilidades. O resultado era invariavelmente o mesmo: atrasos nos prazos de entrega, atritos constantes entre times de engenharia e operações, e correções emergenciais de última hora que inseriam regressões de software.

O movimento DevSecOps rompe com esse isolamento ao incorporar a segurança como uma responsabilidade compartilhada e automatizada ao longo de todo o ciclo de vida de desenvolvimento de software (SDLC). Em vez de delegar verificações para o final, a engenharia adota a filosofia do Shift-Left: trazer a descoberta de vulnerabilidades para o ponto mais inicial possível do fluxo de trabalho, desde o momento em que o código é digitado na IDE do desenvolvedor.

O Pipeline DevSecOps: Camadas de Defesa Automatizadas

Uma esteira de DevSecOps madura combina múltiplas modalidades complementares de análise automatizada, atuando como portões de qualidade (Quality Gates) determinísticos:

flowchart LR
    Dev["1. IDE / Commit Local<br/>(Linters de segurança, detecção de segredos git-leaks)"] --> Push["Pull Request no Git"]
    
    subgraph Pipeline["2. Pipeline de CI/CD Automatizado"]
        direction TB
        Push --> SCA["SCA: Análise de Composição de Software<br/>(Dependências de terceiros vulneráveis e licenças)"]
        SCA --> SAST["SAST: Análise Estática de Código<br/>(Varredura de vulnerabilidades lógicas no código-fonte)"]
        SAST --> Build["Build & Container Image Scan<br/>(Imagens base vulneráveis em registros OCI)"]
        Build --> PaC["Policy as Code (OPA / Rego)<br/>(Validação de conformidade de templates IaC/Terraform)"]
    end

    subgraph Runtime["3. Testes em Staging e Produção"]
        direction TB
        PaC --> DAST["DAST: Análise Dinâmica em Execução<br/>(Ataques controlados contra endpoints HTTP ativos)"]
        DAST --> RASP["RASP & Telemetria em Produção<br/>(Proteção e detecção de anomalias em runtime)"]
    end

Comparativo: SAST vs DAST vs IAST vs SCA

Compreender as diferenças fundamentais entre essas siglas evita redundâncias e lacunas na esteira de segurança:

Metodologia Sigla / Significado Momento de Execução O Que Analisa Vantagens Principais Limitações
SAST Static Application Security Testing Durante a compilação (White-box) Código-fonte, AST e fluxo de dados Aponta a linha exata do código vulnerável; não precisa da app rodando Pode gerar falso-positivos; não enxerga problemas de infraestrutura
DAST Dynamic Application Security Testing Em homologação (Black-box) Endpoints HTTP e respostas da aplicação Testa a aplicação real montada; detecta falhas de autenticação e TLS Não aponta a linha do código; execução demorada e difícil em CI
IAST Interactive Application Security Testing Durante testes funcionais (Gray-box) Código em execução instrumentado por agentes Alta precisão; menor índice de falsos-positivos que SAST e DAST Exige agente no runtime; custo de setup mais elevado
SCA Software Composition Analysis No commit e na esteira CI Dependências e pacotes externos (NuGet, npm) Identifica CVEs conhecidas e incompatibilidades de licenças open source Não analisa a regra de negócio proprietária escrita pelo time

Segurança na Cadeia de Suprimentos (Software Supply Chain)

Atualmente, em uma aplicação típica empresarial, entre 70% e 90% das linhas de código compiladas não foram escritas pelos engenheiros da própria empresa, mas originam-se de bibliotecas de terceiros distribuídas em ecossistemas de código aberto (npm, PyPI, Maven, NuGet).

Ataques modernos de Supply Chain exploram essa confiança através de técnicas sofisticadas:

  • Dependency Confusion: Registro fraudulento de pacotes públicos com nomes idênticos a bibliotecas internas de grandes empresas;
  • Typosquatting: Publicação de pacotes com nomes similares aos populares com erros de digitação sutis (ex: cross-env vs crossenv);
  • Comprometimento de Mantenedores: Invasão de contas de mantenedores de pacotes consolidados para injetar código malicioso em atualizações de rotina.

Para mitigar esses riscos, esteiras modernas geram um Software Bill of Materials (SBOM) no formato padrão SPDX ou CycloneDX em cada compilação e utilizam ferramentas de assinatura criptográfica de contêineres como o Cosign (projeto Sigstore). O cluster Kubernetes ou o ambiente em nuvem é configurado para só executar contêineres cuja assinatura digital corresponda à chave corporativa confiável da esteira de CI.

Policy-as-Code e Governança Automatizada

Assim como a infraestrutura passou a ser declarativa através do Terraform e Bicep, as políticas de segurança corporativas também migraram de documentos em PDF para arquivos executáveis de Policy-as-Code.

Com motores universais de políticas como o Open Policy Agent (OPA) e ferramentas como Trivy e Checkov, regras de conformidade são avaliadas antes que qualquer recurso seja provisionado:

# Exemplo de regra Rego no Open Policy Agent para impedir buckets públicos em Terraform:
package terraform.security

deny[msg] {
    resource := input.resource_changes[_]
    resource.type == "azurerm_storage_account"
    resource.change.after.allow_blob_public_access == true
    msg := sprintf("Violação de Segurança: Storage Account '%v' não pode ter acesso público ativado!", [resource.name])
}

Se um desenvolvedor enviar um Pull Request com um template declarativo que viole essa regra, a esteira de CI/CD bloqueia o merge automaticamente e exibe a justificativa da recusa de forma clara, eliminando a necessidade de reuniões manuais de homologação de arquitetura e garantindo conformidade contínua com padrões como LGPD, SOC 2 e ISO 27001.

Explorar este tema no Grafo de Conhecimento