Explore a validação de segurança contínua

Concluído

Os desenvolvedores modernos usam rotineiramente componentes disponíveis em fontes de pacotes públicos como npm, NuGet, PyPI, Maven Central e RubyGems. Essa prática tornou-se padrão em toda a indústria de software à medida que as organizações adotam componentes de software de código aberto (OSS) para uma entrega mais rápida e melhor produtividade.

A espada de dois gumes dos componentes de terceiros

Benefícios dos componentes de terceiros:

  • Desenvolvimento mais rápido: Os desenvolvedores não precisam criar funcionalidades comuns do zero.
  • Soluções comprovadas: Pacotes populares foram testados por milhares de usuários.
  • Apoio comunitário: As comunidades ativas fornecem documentação, atualizações e assistência.
  • Redução de custos: Os componentes OSS gratuitos reduzem significativamente os custos de desenvolvimento.
  • Aceleração da inovação: As equipes podem se concentrar em uma lógica de negócios exclusiva em vez de reinventar a funcionalidade padrão.

Riscos crescentes de segurança e conformidade: No entanto, à medida que a dependência de componentes OSS de terceiros aumenta, aumentam também os riscos:

Vulnerabilidades de segurança:

  • Os pacotes de terceiros podem conter vulnerabilidades de segurança conhecidas que os atacantes podem explorar.
  • As vulnerabilidades são descobertas continuamente nos pacotes existentes.
  • As dependências transitivas (dependências de suas dependências) introduzem vulnerabilidades das quais você pode não estar ciente.
  • Os ataques à cadeia de suprimentos têm como alvo pacotes populares para comprometer muitos aplicativos downstream.

Problemas de conformidade com a licença:

  • Requisitos de licença ocultos podem criar obrigações legais.
  • Algumas licenças OSS exigem que você mesmo torne seu código de código aberto se utilizar os seus componentes.
  • Violações de licença podem resultar em ações judiciais, penalidades financeiras e liberações forçadas de código.
  • Licenças diferentes podem ser incompatíveis entre si, criando conflitos de conformidade.

Criticidade do negócio: Para uma empresa, essas questões são críticas. Problemas relacionados à conformidade, responsabilidades e dados pessoais do cliente podem causar graves preocupações de privacidade e segurança:

  • Responsabilidade legal: As violações de licenças expõem as organizações a ações legais.
  • Violações de dados: Componentes vulneráveis podem levar a violações de dados que afetam os dados pessoais dos clientes.
  • Conformidade regulamentar: Violações de regulamentos como GDPR, CCPA ou HIPAA podem resultar em multas significativas.
  • Danos à reputação: Incidentes de segurança e violações de licença prejudicam a confiança do cliente e a reputação da marca.
  • Contratos com clientes: Os clientes corporativos geralmente exigem garantias de segurança e conformidade que os componentes vulneráveis violam.

O valor da deteção precoce

Aviso prévio: A identificação de problemas de segurança e conformidade no início do ciclo de lançamento fornece aviso avançado e tempo suficiente para corrigir problemas antes que eles cheguem à produção.

Custo da reparação: O custo de corrigir problemas é drasticamente menor quanto mais cedo no projeto o problema é descoberto:

  • Durante o desenvolvimento: Alterar uma dependência custa horas de tempo do desenvolvedor.
  • Durante os testes: A correção de problemas requer um novo teste de todo o aplicativo.
  • Em produção: A remediação requer patches de emergência, resposta a incidentes de segurança, notificações de clientes e possíveis relatórios regulatórios.

Impacto económico: Estudos mostram que os problemas de segurança encontrados na produção custam de 10 a 100 vezes mais para corrigir do que aqueles encontrados durante o desenvolvimento.

Validação de segurança de integração contínua

Depois que o código se funde na ramificação principal, a validação de segurança abrangente deve ser executada como parte do processo de compilação de integração contínua (CI).

Compilação de CI vs. compilação de PR-CI

Pull request CI (PR-CI): É executado durante a validação de solicitação pull antes que o código seja mesclado. Fornece feedback rápido para evitar que código vulnerável entre na base de código.

Compilação completa de CI: Executa-se depois que o código é integrado no branch principal. Inclui verificações mais abrangentes e prepara artefatos para implantação.

Diferenças típicas: A principal diferença entre PR-CI e compilações de CI completas é que PR-CI não precisa de empacotamento ou artefatos de preparo que a compilação de CI completa produz. Isso mantém o sistema PR-CI rápido, garantindo a validação de segurança.

Ambos devem incluir controlos de segurança: Ambos os tipos de compilação devem executar validações de segurança principais, mas compilações completas de CI podem incluir verificações adicionais demoradas.

Análise de código estático em compilações de CI

Finalidade: As compilações de CI devem executar testes de análise de código estático para garantir que o código siga todas as regras de manutenção e segurança.

Ferramentas comuns de análise estática:

SonarQube:

  • Plataforma abrangente de qualidade e segurança de código.
  • Deteta bugs, cheiros de código e vulnerabilidades de segurança.
  • Rastreia métricas de qualidade de código ao longo do tempo.
  • Integra portas de qualidade que verificam e interrompem as compilações quando os limites de qualidade não são atingidos.
  • Suporta várias linguagens de programação.

Análise de código do Visual Studio e analisadores de segurança Roslyn:

  • Análise integrada para aplicações .NET.
  • Os analisadores de segurança Roslyn detetam vulnerabilidades de segurança no código C#.
  • É executado durante a compilação, fornecendo feedback imediato.
  • Nenhuma infraestrutura adicional necessária para projetos .NET.

Checkmarx:

  • Ferramenta SAST (Static Application Security Testing).
  • Análise profunda de segurança do código-fonte.
  • Identifica vulnerabilidades como injeção de SQL, XSS e problemas de autenticação.
  • Fornece orientações detalhadas sobre remediação.
  • Suporta muitas linguagens de programação e frameworks.

BinSkim:

  • Ferramenta de análise estática binária da Microsoft.
  • Fornece resultados de segurança e correção para executáveis portáteis do Windows (arquivos PE).
  • Analisa binários compilados em vez de código-fonte.
  • Identifica problemas de segurança nas configurações de compilação e na estrutura binária.
  • Útil para analisar componentes compilados por terceiros.

Ferramentas adicionais:

  • ESLint com plugins de segurança: Análise de segurança JavaScript/TypeScript.
  • Bandido: Análise de segurança em Python.
  • Brakeman: Scanner de segurança Ruby on Rails.
  • gosec: Verificador de segurança do Go.

Integração do Azure Pipelines: Muitas ferramentas de segurança integram-se perfeitamente no Azure Pipelines e noutras plataformas de CI/CD. O Visual Studio Marketplace fornece extensões para várias ferramentas de segurança, tornando a integração simples:

  • As ferramentas aparecem como tarefas de pipeline que você pode adicionar à sua definição de pipeline.
  • Os resultados são exibidos em logs de pipeline e podem falhar em compilações quando problemas são detetados.
  • As descobertas de segurança integram-se ao acompanhamento de itens de trabalho do Azure DevOps.

Análise de vulnerabilidades de pacotes de terceiros

Crítica, mas muitas vezes negligenciada: Além de verificar a qualidade do código, duas outras validações críticas são frequentemente ignoradas ou executadas de forma inadequada:

  1. Verificação de pacotes de terceiros em busca de vulnerabilidades de segurança conhecidas.
  2. Verificando a conformidade da licença OSS.

Resposta organizacional comum: Quando questionadas sobre vulnerabilidades e licenças de pacotes de terceiros, muitas organizações respondem com medo ou incerteza. Eles não têm processos claros para gerenciar esses riscos.

Problemas do processo manual: As organizações que tentam gerenciar vulnerabilidades de pacotes de terceiros ou licenças OSS geralmente explicam que seu processo é tedioso e manual:

  • Os desenvolvedores pesquisam manualmente bancos de dados de vulnerabilidade.
  • As equipes de segurança mantêm planilhas de pacotes aprovados.
  • As revisões de licenças exigem o envolvimento da equipe jurídica para cada pacote.
  • As atualizações são rastreadas manualmente, levando a informações de dependência desatualizadas.
  • O processo leva semanas, retardando significativamente o desenvolvimento.

Soluções automatizadas: As modernas ferramentas de análise de composição de software (SCA) automatizam esse processo de identificação, tornando-o quase instantâneo:

Mend (anteriormente WhiteSource):

  • Deteta automaticamente todos os componentes OSS em seus aplicativos.
  • Identifica vulnerabilidades de segurança conhecidas em dependências.
  • Verifica a conformidade da licença em relação às políticas organizacionais.
  • Fornece orientação de correção, incluindo versões fixas disponíveis.
  • Monitora continuamente novas vulnerabilidades em pacotes usados.

GitHub Dependabot:

  • Verifica automaticamente as dependências em busca de vulnerabilidades conhecidas.
  • Cria solicitações pull para atualizar dependências vulneráveis.
  • Suporta muitos ecossistemas de pacotes (npm, Maven, pip, etc.).
  • Gratuito para repositórios GitHub públicos e privados.

Snyk:

  • Ferramenta de segurança pioneira para desenvolvedores para encontrar e corrigir vulnerabilidades.
  • Analisa dependências, imagens de container e infraestrutura como código.
  • Fornece conselhos de remediação e solicitações de pull automatizadas.
  • Integra-se em IDEs, controlo de versão e pipelines de CI/CD.

Fontes de origem dos Artefatos do Azure:

  • Pode ser configurado para analisar pacotes de fontes de origem ascendente.
  • Bloqueia pacotes com vulnerabilidades conhecidas.
  • Fornece visibilidade de todos os pacotes usados em toda a organização.

Benefícios da análise de composição de software

Visibilidade abrangente: As ferramentas SCA fornecem visibilidade completa da sua cadeia de suprimentos de software:

  • Inventariar todas as dependências diretas e transitivas.
  • Acompanhe as versões e o status da atualização.
  • Identifique os componentes que não são mais mantidos.
  • Mapeie dependências para aplicativos e equipes específicos.

Priorização de riscos: Nem todas as vulnerabilidades são igualmente críticas. As ferramentas SCA ajudam a priorizar:

  • Escores de gravidade (classificações CVSS) indicando gravidade da vulnerabilidade.
  • Classificações de explotabilidade que mostram se já existem ataques conhecidos.
  • Análise de acessibilidade determinando se o código vulnerável é realmente usado em seu aplicativo.
  • Contexto de negócios sobre quais aplicativos são mais críticos.

Monitorização contínua: As vulnerabilidades de segurança são descobertas constantemente. As ferramentas SCA fornecem monitoramento contínuo:

  • Alerta quando novas vulnerabilidades são descobertas em pacotes que você usa.
  • Relatórios periódicos sobre tendências de postura de segurança.
  • Integração com sistemas de rastreamento de problemas para gerenciar o trabalho de remediação.

Documentação de conformidade: As ferramentas SCA geram relatórios de conformidade:

  • Obrigações de licença para todos os componentes usados.
  • Requisitos de atribuição que devem ser cumpridos.
  • Evidência de que foram realizadas revisões de segurança.
  • Registos de auditoria para conformidade regulamentar.

Integração na calha

A validação contínua de segurança integra-se ao seu pipeline de CI/CD como tarefas automatizadas:

  1. Mesclagem de código: A solicitação pull é aprovada e o código é mesclado na ramificação principal.
  2. Gatilhos de construção de CI: A mesclagem aciona automaticamente a compilação completa de CI.
  3. A análise estática é executada: As ferramentas SAST analisam o código-fonte em busca de vulnerabilidades.
  4. Verificação de dependência: As ferramentas SCA verificam todas as dependências em busca de vulnerabilidades e problemas de licença.
  5. Critérios de qualidade: A compilação falha se os problemas de segurança excederem os limites aceitáveis.
  6. Resultados disponíveis: As descobertas de segurança estão disponíveis para desenvolvedores e equipes de segurança.
  7. Criação de artefactos: Se as verificações de segurança forem aprovadas, os artefactos de compilação são criados para implantação.

Em módulos posteriores, discutiremos a integração de várias ferramentas de segurança e conformidade úteis e comumente usadas em sua configuração de pipeline específica.