Explore a validação de segurança contínua
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:
- Verificação de pacotes de terceiros em busca de vulnerabilidades de segurança conhecidas.
- 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:
- Mesclagem de código: A solicitação pull é aprovada e o código é mesclado na ramificação principal.
- Gatilhos de construção de CI: A mesclagem aciona automaticamente a compilação completa de CI.
- A análise estática é executada: As ferramentas SAST analisam o código-fonte em busca de vulnerabilidades.
- Verificação de dependência: As ferramentas SCA verificam todas as dependências em busca de vulnerabilidades e problemas de licença.
- Critérios de qualidade: A compilação falha se os problemas de segurança excederem os limites aceitáveis.
- Resultados disponíveis: As descobertas de segurança estão disponíveis para desenvolvedores e equipes de segurança.
- 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.