As bibliotecas de terceiros são essenciais para acelerar o ciclo de vida do desenvolvimento de software. Em vez de codificar a partir do zero, os programadores integram frequentemente bibliotecas de código aberto para vários fins - seja por motivos de rentabilidade, falta de recursos ou melhor flexibilidade. Repositórios como o Maven Central e o PyPI, juntamente com ferramentas de gestão de dependências, simplificam este processo e aumentam a produtividade. No entanto, essa dependência também traz potenciais riscos de segurança.
Gerir as dependências de código aberto de um projeto pode colocar desafios, incluindo dependências aninhadas (uma ou mais dependências dentro de uma dependência) e conhecimentos limitados na gestão de dependências. A integração de bibliotecas externas expande a superfície de ataque e aumenta os riscos de segurança. A descoberta de uma vulnerabilidade numa biblioteca pode comprometer todo o software que depende desse componente. Por conseguinte, é essencial utilizar ferramentas de análise de dependências para identificar e resolver vulnerabilidades conhecidas com origem em dependências de terceiros.
Adoção da reutilização e da dependência de Software
À medida que os ecossistemas de distribuição se tornam mais acessíveis, os programadores optam por reutilizar o software existente para acelerar o desenvolvimento de software complexo. No entanto, esta conveniência pode introduzir problemas de segurança inesperados se não for cuidadosamente gerida. Estes programas de software existentes são principalmente distribuídos através da Internet sob a forma de pacotes - arquivos que contêm versões de lançamento conhecidas como bibliotecas, juntamente com metadados que especificam a versão, o autor, a licença, as referências e outras informações relevantes. O software de empacotamento simplifica os processos de distribuição e controlo de versões.
Os programadores partilham frequentemente o seu código publicamente ao abrigo de licenças de código aberto, permitindo a revisão do código, a colaboração da comunidade e uma integração fácil. Qualquer programador pode reutilizar, modificar ou contribuir para a base de código. Os projectos variam muito em termos de qualidade, manutenção e suporte. Os autores lançam estes pacotes para os tornar mais facilmente acessíveis, mas o suporte e a responsabilidade dependem da licença.
Uma vez que um pacote é referenciado em outro projeto, ele se torna uma dependência de projeto, representando uma referência de pacote externo. As dependências criam relações unidireccionais entre pacotes de software, em que um depende do outro para funcionar corretamente. Os programadores incluem dependências nas suas aplicações, resolvendo-as em tempo de compilação e obtendo as necessárias.
A cadeia de fornecimento refere-se a todos os fornecedores externos envolvidos no processo, particularmente aqueles que fornecem dependências de software. A gestão da cadeia de fornecimento ganhou proeminência no desenvolvimento de software nos últimos anos, com as empresas a estabelecerem políticas que englobam os requisitos dos fornecedores, documentos legais e contratos para garantir a conformidade antes de aceitarem um fornecedor.
Gestão de dependências
A gestão de dependências pode rapidamente tornar-se avassaladora, levando ao que é conhecido como "inferno das dependências". As aplicações modernas podem ter centenas ou mesmo milhares de dependências directas, o que dificulta o rastreio de vulnerabilidades. Aqui estão alguns cenários em que a gestão de grandes volumes de dependências se torna um desafio.
- Falta de revisão do código: Apesar da transparência do código aberto, por vezes as equipas podem não rever o código, o que leva a uma falsa sensação de segurança.
- Confiança implícita: Os programadores incluem muitas vezes dependências sem verificar minuciosamente os autores, confiando apenas na inclusão no repositório.
- Uso extensivo de dependências: Os programadores dependem muitas vezes de pacotes, mesmo que apenas uma fração da sua funcionalidade seja necessária, o que leva a dependências excessivas.
- Alterações de rutura: A atualização de pacotes pode ser complexa e pode introduzir alterações de rutura, levando a hesitações e pacotes desactualizados.
- Questões de responsabilidade: As normas de manutenção e apoio de código aberto ficam aquém das exigidas para o software comercial, levando a litígios e expectativas irrealistas por parte dos criadores de projectos, resultando potencialmente em pacotes inseguros.
O aumento dos ataques que visam dependências de terceiros suscitou preocupações sobre a segurança do software. Incidentes de grande visibilidade, como a vulnerabilidade Log4Shell em 2021 ou o backdoor XZ Utils recentemente, em março de 2024, que afectou milhares de pacotes Maven, sublinharam o impacto generalizado de tais vulnerabilidades. No mesmo ano, a descoberta de malware num popular pacote NPM ua-parser-jswas realçou os riscos associados à utilização de bibliotecas de terceiros em pilhas de aplicações.
Outro ataque digno de nota em janeiro de 2024 é o MavenGate, um novo método de ataque à cadeia de fornecimento de software, dependências desviadas através de bibliotecas abandonadas. A exploração bem sucedida destas deficiências pode permitir que agentes nefastos encontrem artefactos vulneráveis em dependências e injectem código malicioso na aplicação, ou pior, comprometam o processo de construção através de um plugin malicioso.
medida que a utilização de bibliotecas de código aberto aumenta, torna-se fundamental compreender e atenuar estes riscos. Isto leva a uma investigação mais aprofundada sobre a prevalência, os tipos e a persistência de vulnerabilidades em bibliotecas de código aberto, bem como sobre a sua relação com os atributos e as submissões do projeto.
Protegendo dependências com OPSWAT SBOM
Em reação aos ataques à cadeia de abastecimento, os Estados Unidos da América aprovaram, em maio de 2021, o "Executive Order on Improving the Nation's Cybersecurity", que define medidas para melhorar as políticas da cadeia de abastecimento. Um dos principais requisitos é fornecer um SBOM para cada produto.
OPSWAT Software Bill of Materials (SBOM) está em constante evolução para responder às necessidades crescentes de desenvolvimento de software num ambiente seguro. Uma das principais caraterísticas do SBOM OPSWAT é a análise de dependências. Esta funcionalidade foi concebida para aumentar a visibilidade da sua base de código, identificando vulnerabilidades nas dependências em que os seus projectos assentam.
Verificação de dependência de pacotes
OPSWAT O SBOM detecta automaticamente vulnerabilidades de segurança em dependências de software durante o desenvolvimento e o teste. Por exemplo, o SBOM permite que as equipas saibam se a aplicação utiliza uma biblioteca de código aberto que é conhecida por ser vulnerável. As equipas podem então tomar medidas para proteger a aplicação.
Verificar a dependência com Python
Container Digitalização de imagens
OPSWAT O SBOM examina todas as camadas de uma imagem de contentor para identificar vulnerabilidades ou ameaças, abrangendo pacotes do sistema operativo (SO) e bibliotecas de software dependentes utilizadas pela aplicação. Esta abordagem proactiva permite a deteção e resolução de potenciais problemas antes que estes se transformem em problemas graves.
Verificar a dependência com o Alpine
Os programadores e as equipas de segurança beneficiam da compreensão dos tipos comuns, da prevalência e da persistência das vulnerabilidades de dependência, o que lhes permite avaliar a gravidade e explorar estratégias de correção.
O SBOM examina as dependências do seu projeto em busca de vulnerabilidades conhecidas. Após a deteção, o SBOM fornece informações detalhadas, incluindo níveis de gravidade, descrições de vulnerabilidades e correções disponíveis.
Pode ser exportado um relatório detalhado para as equipas acompanharem:
- Número total de dependências verificadas
- Número total de vulnerabilidades encontradas em todas as dependências
- Uma gama de versões digitalizadas
- CVEs conhecidos
- Número total de vulnerabilidades de gravidade crítica, alta, média e baixa
OPSWAT A SBOM recomenda que as equipas de segurança actualizem todos os pacotes vulneráveis para as versões mais recentes com correcções de vulnerabilidades. Isto permite às equipas abordar a vulnerabilidade dos mantenedores de pacotes ou remover pacotes da árvore de dependências. Esta abordagem proactiva permite que as equipas abordem potenciais riscos de segurança antes de se tornarem um problema, melhorando significativamente a segurança e a integridade dos seus projectos de software. Além disso, o OPSWAT SBOM ajuda as organizações a manterem-se em conformidade e seguras na cadeia de fornecimento de software. É altamente recomendável que as equipas devem:

Mapear dependências
Utilize ferramentas para identificar as dependências existentes no ambiente e as suas relações.

Eliminar dependências desnecessárias
Remova dependências desnecessárias ou não essenciais para reduzir a superfície de ataque.

Utilizar repositórios estabelecidos
Assegurar que as dependências são obtidas a partir de fontes fiáveis.

Analise todas as dependências
Antes de utilizar dependências em qualquer software, analise-as para ter conhecimento de problemas de segurança ou de qualidade.
Reflexões finais
Ao utilizar ferramentas de verificação de dependências como o OPSWAT SBOM, pode identificar e resolver proactivamente as vulnerabilidades nas dependências do seu projeto, mitigando potenciais riscos de segurança antes que estes possam ser explorados. Aproveite o poder da verificação de dependências e dos SBOMs para criar aplicações de software seguras, compatíveis e resilientes.