Getty Images
Melhorando a estatura de governança de software de código aberto
A governança de código aberto é uma parte vital da maturidade de um projeto de software. Adote essas ferramentas e dicas para monitorar a segurança de código aberto, permissões de uso e qualidade do código.
À medida em que os projetos de código aberto se multiplicam, os riscos em usar essas ferramentas sem precauções aumentam ao mesmo tempo.
A governança de código aberto é a prática de definir uma política e um processo detalhados em torno do uso de ferramentas de código aberto por uma organização. Ela ajuda a organização a entender as ferramentas e seus riscos.
A governança de software de código aberto ajuda os desenvolvedores a gerenciar como eles usam ferramentas de código aberto para otimizar o software de código aberto, reduzindo riscos. Vamos explorar algumas dicas para ajudar a reduzir os riscos de segurança e aumentar a responsabilidade ao usar software de código aberto.
Varrer bibliotecas de código aberto em busca de vulnerabilidades
Bibliotecas de código aberto em projetos de desenvolvimento de software são incrivelmente populares. Aproveitar projetos de código aberto possibilitou o sucesso de inúmeros projetos de software. É impossível usar a internet sem depender da colaboração de muitos projetos de código aberto. Quando os desenvolvedores usam bibliotecas de código aberto, eles podem focar em recursos específicos para um aplicativo, enquanto puxam softwares bem testados e maduros para lidar com protocolos padronizados, como camadas de soquetes seguros e HTTP.
No entanto, há casos raros em que bibliotecas de código aberto têm bugs e vulnerabilidades de segurança que podem causar um efeito enorme e catastrófico. Por exemplo, a vulnerabilidade Log4Shell na biblioteca de registro de código aberto Log4j do Apache colocou milhões de sistemas em risco. A popularidade gigantesca do Log4j significou que, da noite para o dia, as organizações precisaram se esforçar para corrigir seu software para prevenir o controle não autorizado de sistemas seguros.
A primeira linha de defesa contra bibliotecas de código aberto vulneráveis é varrer as dependências de um projeto em busca de bibliotecas reconhecidas por terem vulnerabilidades de segurança. A OWASP Dependency-Check é uma ferramenta que retorna um relatório que identifica dependências vulneráveis, juntamente com suas vulnerabilidades e exposições mais comuns (CVEs). Existem diferentes maneiras de executar o OWASP Dependency-Check, como através de uma interface de linha de comando, um plugin Apache Maven, uma tarefa Ant ou um plugin Jenkins, que permite uma integração fácil em qualquer pipeline CI/CD.
O uso de uma ferramenta que cria relatórios acionáveis é tão útil quanto o processo aplicado ao redor da ferramenta. Execute a OWASP Dependency-Check dentro de um cronograma consistente para varrer a base de códigos em busca das últimas atualizações de CVEs recém-descobertos. Dedique tempo e se planeje para lidar com CVEs identificados.
Aderir às licenças
Ao usar dependências de código aberto, considere as licenças que regem seu uso. Licenças para projetos de código aberto definem como usar, copiar e distribuir o software.
Dependendo dos tipos de software e distribuição do aplicativo, o código-fonte do aplicativo pode não permitir certas ferramentas de código aberto. Por exemplo, uma licença como a versão 3 da Licença Pública Geral GNU especifica que qualquer projeto que se baseie no trabalho de outro criador licenciado sob GPLv3 deve estar disponível publicamente, assim como o projeto original.
Quebrar os termos dessas licenças pode trazer para uma organização consequências legais bem caras. O ScanCode Toolkit é uma ferramenta de linha de comando autônoma, que varre um projeto e cria um relatório das várias licenças que regem os componentes de código aberto no código-fonte de um projeto. O ScanCode Toolkit é completamente de código aberto e está disponível no GitHub. O ScanCode Toolkit simplifica o demorado processo de entender as dependências de código aberto de um projeto.
Entenda que um projeto não tem apenas dependências diretas, onde o código fonte do aplicativo faz referência explícita a certos projetos de software de terceiros, mas também dependências indiretas. Dependências indiretas são projetos de software de terceiros que as dependências diretas usam.
Os desenvolvedores devem obedecer às licenças de dependências diretas, pois seu código fonte é construído sobre esses projetos de software de terceiros. E como as dependências indiretas também fazem parte do código fonte de um software, os desenvolvedores também devem obedecê-las. O ScanCode Toolkit é escrito em Python e projetado para ser extensível, com um sistema de plugin para adicionar funcionalidade às varreduras.
Configurar proprietários de códigos no GitHub
Use o recurso "proprietários de códigos" no GitHub para responsabilizar os desenvolvedores contribuintes por novas mudanças introduzidas em projetos de código aberto. Com esse recurso em um repositório do GitHub, os desenvolvedores podem designar usuários específicos como revisores para alterações introduzidas em determinadas partes de sua base de código. Os revisores recebem uma notificação quando uma solicitação de pull é aberta nas partes correspondentes do repositório atribuídas a eles.
Esse recurso, somado às proteções das branchs, garante que os desenvolvedores possam rever todas as solicitações de pull antes de alocar as mudanças no branch principal. Essa combinação produz um maior nível de garantia de qualidade, pois os contribuintes que estão mais familiarizados com os arquivos modificados conseguem verificar as alterações.