Explore o pipeline seguro de DevOps
O objetivo de um pipeline do Secure DevOps é permitir que as equipes de desenvolvimento trabalhem rapidamente sem introduzir vulnerabilidades de segurança indesejadas em seus projetos. Esse equilíbrio entre velocidade e segurança requer a inserção de práticas de segurança em todo o pipeline, em vez de tratar a segurança como uma fase separada.
Fluxo de trabalho seguro da pipeline de DevOps
Um pipeline abrangente do Secure DevOps integra verificações de segurança em vários estágios do processo de entrega de software:
O fluxo de trabalho garante que a validação de segurança ocorra continuamente desde o commit de código até a implantação em produção. Cada estágio inclui controles de segurança apropriados que são executados automaticamente sem a necessidade de intervenção manual para verificações de rotina.
Recursos de segurança essenciais além dos pipelines padrão
Pipelines de DevOps seguros incorporam recursos de segurança adicionais que normalmente não são encontrados em pipelines de CI/CD padrão. Esses recursos abordam vulnerabilidades comuns de segurança que os pipelines tradicionais perdem:
Gerenciamento de pacotes com aprovação de segurança
O desafio: Os aplicativos modernos dependem de vários pacotes, bibliotecas e componentes de terceiros. Essas dependências introduzem riscos de segurança:
- Vulnerabilidades conhecidas: Pacotes de terceiros podem conter vulnerabilidades de segurança conhecidas que os invasores podem explorar.
- Pacotes mal-intencionados: Os invasores às vezes publicam pacotes mal-intencionados com nomes semelhantes a pacotes populares, esperando que os desenvolvedores os instalem por engano (tiposquatação).
- Ataques na cadeia de suprimentos: Repositórios de pacote comprometidos ou contas de mantenedor podem resultar na distribuição de código mal-intencionado por meio de canais de atualização legítimos.
- Conformidade de licença: Algumas licenças de pacote podem não ser compatíveis com o uso pretendido, criando riscos legais.
- Pacotes não contidos: Os pacotes que não são mais mantidos não receberão atualizações de segurança, criando vulnerabilidades de longo prazo.
A solução: O gerenciamento de pacotes com processos de aprovação adiciona portões de segurança para dependências:
Etapas do fluxo de trabalho de aprovação:
- Solicitação de pacote: Os desenvolvedores solicitam aprovação para adicionar novos pacotes ou atualizar os existentes.
- Verificação de segurança: As ferramentas automatizadas verificam pacotes de vulnerabilidades conhecidas usando bancos de dados de vulnerabilidade, como CVE (Vulnerabilidades e Exposições Comuns) e NVD (Banco de Dados Nacional de Vulnerabilidades).
- Revisão de licença: Ferramentas automatizadas verificam licenças de pacote em relação a políticas organizacionais.
- Análise de dependência: As ferramentas analisam dependências transitivas (dependências de dependências) para problemas de segurança.
- Revisão manual: A equipe de segurança analisa pacotes de alto risco ou pacotes que solicitam permissões elevadas.
- Aprovação ou rejeição: Os pacotes são aprovados para uso, rejeitados ou sinalizados para correção antes da aprovação.
- Monitoramento contínuo: Os pacotes aprovados são monitorados continuamente para vulnerabilidades recém-descobertas.
Benefícios de identificação antecipada: Essas etapas devem ser implementadas no início do pipeline para identificar problemas mais cedo no ciclo de desenvolvimento:
- Os problemas encontrados antecipadamente são mais baratos de corrigir do que os encontrados na produção.
- Os desenvolvedores podem escolher pacotes alternativos antes de criar funcionalidades significativas em relação a dependências vulneráveis.
- As revisões de segurança não se tornam gargalos quando ocorrem incrementalmente, em vez de todas de uma vez antes do lançamento.
Ferramentas de exemplo:
- Artefatos do Azure: Fornece gerenciamento de pacotes com fontes upstream e verificação de vulnerabilidades.
- GitHub Dependabot: Detecta automaticamente dependências vulneráveis e cria solicitações de pull para atualizá-las.
- Snyk: Verifica as dependências em busca de vulnerabilidades e problemas de licença.
- WhiteSource: Fornece análise de composição de software para componentes de software livre.
Verificação de segurança do código-fonte
O desafio: O código-fonte do aplicativo pode conter vulnerabilidades de segurança que não são imediatamente óbvias durante o desenvolvimento:
- Falhas de injeção: Injeção SQL, injeção de comandos e outras vulnerabilidades de injeção.
- Problemas de autenticação: Mecanismos de autenticação fracos, credenciais codificadas em código ou gerenciamento de sessão inadequado.
- Exposição de dados confidenciais: Inclusão acidental de segredos, chaves de API ou informações pessoais no código.
- Configuração incorreta de segurança: Configurações padrão inseguras, recursos desnecessários habilitados ou patches de segurança ausentes.
- Usando componentes com vulnerabilidades conhecidas: Bibliotecas ou estruturas desatualizadas com problemas de segurança.
- Registro em log e monitoramento insuficientes: Falta de registro em log de eventos de segurança adequado para detecção e resposta de incidentes.
A solução: A verificação do código-fonte adiciona a análise de segurança automatizada ao processo de build:
SAST (Teste de Segurança de Aplicativo Estático):
- Analisa o código-fonte sem executá-lo.
- Identifica possíveis vulnerabilidades de segurança no código.
- Detecta padrões de vulnerabilidade comuns, como injeção de SQL, XSS (script entre sites) e estouros de buffer.
- Fornece localizações de código específicas e diretrizes de correção.
- É executado rapidamente o suficiente para fornecer comentários durante o processo de build.
Verificação secreta:
- Detecta segredos acidentalmente cometidos, como chaves de API, senhas e certificados.
- Evita que credenciais sejam implantadas em produção.
- Alerta os desenvolvedores imediatamente quando os segredos são detectados.
- Pode revogar automaticamente as credenciais detectadas quando integradas aos sistemas de gerenciamento de segredos.
Análise de qualidade do código:
- Identifica problemas de qualidade de código que podem levar a vulnerabilidades de segurança.
- Detecta caminhos de código complexos que são difíceis de proteger corretamente.
- Destaca as áreas que precisam de revisão de segurança adicional.
Tempo de verificação: A verificação do código-fonte ocorre após a compilação do aplicativo, mas antes do teste de versão e pré-lançamento:
- Após o build: O código completo do aplicativo está disponível para análise, incluindo o código gerado.
- Antes do teste: As vulnerabilidades são identificadas antes que os recursos de teste de segurança sejam investidos.
- Antes da implantação: Os problemas são flagrados antes de atingir ambientes de preparo ou produção.
Benefícios da detecção precoce:
- A verificação de origem identifica vulnerabilidades de segurança anteriores no ciclo de desenvolvimento.
- Os desenvolvedores recebem comentários imediatos sobre problemas de segurança em seu código.
- Problemas de segurança são resolvidos enquanto o código está fresco na mente dos desenvolvedores.
- O custo de corrigir vulnerabilidades é significativamente menor do que corrigi-las na produção.
Ferramentas de exemplo:
- CodeQL do GitHub: Mecanismo de análise de código semântico que descobre vulnerabilidades em uma base de código.
- SonarQube: Ferramenta de inspeção contínua que detecta bugs, cheiros de código e vulnerabilidades de segurança.
- Checkmarx: Plataforma de teste de segurança de aplicativo estático.
- Veracode: Plataforma de análise de segurança com recursos SAST.
- Análise de código de segurança da Microsoft: Extensão do Azure DevOps que executa ferramentas de análise de segurança.
Integração com entrega contínua
A aprovação do gerenciamento de pacotes e a verificação de código-fonte se integram perfeitamente aos pipelines de entrega contínua:
Portões automatizados: As verificações de segurança se tornam portões automatizados do pipeline pelos quais este deve passar antes de continuar. As verificações de segurança com falha impedem o avanço do código inseguro.
Comentários rápidos: Os desenvolvedores recebem comentários de segurança em minutos, em vez de dias ou semanas. Esse feedback rápido permite correções rápidas antes que o contexto seja perdido.
Visibilidade de segurança: As equipes de segurança ganham visibilidade de todos os códigos e dependências implantados sem a necessidade de revisar manualmente cada alteração.
Documentação de conformidade: As verificações de segurança automatizadas criam trilhas de auditoria documentando a validação de segurança em cada estágio de pipeline.
Abordando o ciclo de vida completo
Nas seções a seguir deste módulo, exploraremos esses recursos de segurança essenciais em detalhes:
- Principais pontos de validação em que as verificações de segurança devem ocorrer.
- Estratégias de validação de segurança contínua.
- Abordagens de implementação para diferentes tipos de pipeline.
- Ferramentas e técnicas para automação de segurança eficaz.
- Como equilibrar a minuciosidade de segurança com a velocidade de entrega.