4 melhores práticas para evitar vulnerabilidades em código aberto

Texto traduzido e adaptado de “4 best practices to avoid vulnerabilities in open-source code“, escrito por Ax Sharma

Este ano apresentou ainda mais desafios para garantir a integridade e a segurança dos ecossistemas de código aberto. O código aberto tem sido o maior benefício para os desenvolvedores, pois praticamente qualquer pessoa pode usá-lo e personalizá-lo, normalmente sem nenhum custo, e contribuir com a comunidade. O que tem sido um meio de garantir maior transparência, segurança e promover a colaboração do desenvolvedor entre os projetos também abriu caminhos para que os adversários lucrem com a causa.

É indiscutível que existem diversos incidentes envolvendo código aberto, inclusive aos pacotes legítimos de código aberto. Um pacote vulnerável ou malicioso que entra em repositórios populares e, eventualmente, em sua cadeia de suprimentos de software, pode causar estragos para seus clientes. Componentes vulneráveis ​​e maliciosos foram detectados em repositórios populares de código aberto, como npm, PyPI, NuGet e até mesmo no sistema operacional Fedora.

No entanto, a fim de minimizar os riscos, aqui estão algumas práticas recomendadas para gerenciar código-fonte aberto com segurança.

1. Conheça o seu software

Uma pesquisa separada da Sonatype com mais de 5.000 desenvolvedores mostrou que apenas 45% das organizações com maturidade nas práticas de DevOps mantêm uma lista completa de materiais de software (SBOM) para seus aplicativos. “As descobertas revelam que até 74% das organizações com ‘práticas imaturas’ não teriam meios de saber se uma vulnerabilidade recentemente divulgada em um componente de código aberto é aplicável ao seu software”, disse o relatório. Isso significa que as organizações com práticas imaturas que mantêm um SBOM completo não saberiam se haviam usado código-fonte aberto vulnerável ou onde encontrar vulnerabilidades recém-anunciadas em seus ambientes.

Implementar a segurança desde o início, adotando uma abordagem de “shift left” quando se trata de seu ciclo de vida de desenvolvimento de software pode ter retornos dez vezes maiores e aumentar a consciência geral de seus desenvolvedores.

2. Resolva problemas de dependência

O relatório 2020 State of Software Security da Veracode destaca um problema comum de segurança de software. Em vez dos próprios desenvolvedores, as “dependências interconectadas” indiretamente introduzem riscos latentes em seus aplicativos que podem escapar do radar da maioria dos desenvolvedores. O relatório mostra ainda que os desenvolvedores estão introduzindo muito mais código, e muitas vezes código com falhas, do que poderiam estar prevendo ”.

No entanto, corrigir esse problema não parece ser uma tarefa importante de acordo com Veracode: “Resolver as falhas de segurança nessas bibliotecas geralmente não é um trabalho significativo. A maioria das falhas introduzidas pela biblioteca (quase 75%) nos aplicativos podem ser resolvidas com apenas uma pequena atualização da versão. Geralmente, não são necessárias grandes atualizações de biblioteca! Este ponto de dados sugere que este problema é de descoberta e rastreamento, não grande refatoração de código. ”

3. Automatize a varredura de código para encontrar desconhecidos desconhecidos

Além de identificar vulnerabilidades e bugs ocultos, a varredura regularmente varre projetos de código aberto em busca de sinais de vazamento de dados, como chaves privadas e credenciais inadvertidamente tornadas públicas pelo contribuidor. Desde o ano passado, alguns fornecedores integraram esforços de varredura automatizada em seus produtos para identificar malware publicado em repositórios legítimos de código aberto. Essas técnicas incorporam análise comportamental com aprendizado de máquina para caçar proativamente por “componentes falsificados”.

A utilização de ferramentas de automação é importante e pode ajudar a aumentar os problemas de confiança e integridade dentro do ecossistema de código aberto, antes que os componentes cheguem à sua cadeia de suprimentos.

4. Cuidado com os riscos de licenciamento

A vantagem principal de usar software de código-fonte aberto é a liberdade oferecida por suas licenças permissivas. Se você descobrir um bug em um pacote de código aberto que não foi corrigido, poderá corrigi-lo sozinho, em vez de esperar pelo fornecedor. Você pode personalizar um aplicativo de código aberto em seu projeto como achar adequado e enviar uma versão personalizada para seus clientes.

No entanto, é necessário um pouco mais de habilidade para estar ciente de quaisquer conflitos de licenciamento em potencial que podem surgir do uso de componentes de código aberto. Um relatório da Black Duck descobriu que 67% das bases de código auditadas de 2019 continham componentes com conflitos de licença. Essa porcentagem era muito maior para alguns setores, como internet e aplicativos móveis (93%).

Leia mais conteúdos relacionados: