À medida que o desenvolvimento de software avança ao longo do ciclo de vida da cadeia de fornecimento de software, o estágio do pacote surge como um momento crucial, convertendo o código-fonte em artefatos executáveis preparados para distribuição. Esta fase crítica, no entanto, não está imune a vulnerabilidades, tornando-a um alvo principal para agentes mal-intencionados que procuram minar a integridade e a segurança do software. Esta postagem do blog investiga as ameaças predominantes que podem surgir durante esta fase e descreve estratégias eficazes para mitigá-las. Este conteúdo serve como uma continuação de nossa série de blogs explorando software supply chain security através de SDLC.
O estágio do pacote no ciclo de vida de desenvolvimento de software
O estágio de pacote do ciclo de vida da cadeia de suprimentos de software abrange o processo de empacotamento e preparação do software para distribuição aos usuários. Esta etapa envolve a criação de pacotes de instalação, gerenciamento de dependências e geração de metadados para o software.
Ameaças à integridade de compilação são vulnerabilidades que podem permitir que invasores introduzam alterações não autorizadas no software durante o processo de empacotamento. Essas ameaças podem ser introduzidas através de vários métodos, como comprometer o registro do pacote, explorar vulnerabilidades em ferramentas de empacotamento ou manipular dependências de terceiros.
A dependência total de componentes de código aberto no software moderno tornou esta etapa a mais frequenteSCA alvo. Introduzir malware furtivo em um componente popular de código aberto é um sonho para muitos cibercriminosos. É por isso que mais de 245,000 pacotes maliciosos foram encontrados em 2023.
Exemplos de Software Supply Chain Security Ameaças na fase de pacote
Usar pacote comprometido
Refere-se ao ato de implantar ou usar um pacote de software que foi adulterado ou modificado por um adversário.
Isso pode acontecer depois que o pacote sai do registro oficial de pacotes, seja por meio de acesso direto ao sistema do usuário ou por meio de táticas de engenharia social que induzem o usuário a baixar ou instalar um pacote malicioso. Um exemplo desse vetor foi o Navegar typosquatting Ataque.
Um invasor, buscando comprometer os sistemas Linux e Mac, se infiltrou no processo de desenvolvimento de uma popular biblioteca Node.js chamada Browserify. O invasor inseriu código malicioso no código-fonte do projeto, com a intenção de distribuí-lo por meio do registro do pacote NPM. Depois que o pacote contaminado do Browserify fosse carregado no NPM, desenvolvedores desavisados o baixariam e instalariam, acreditando ser a versão legítima. O código malicioso, incorporado no pacote, seria executado silenciosamente, comprometendo a integridade dos sistemas infectados. Isso pode levar ao roubo de dados, à instabilidade do sistema ou até mesmo ao acesso remoto do invasor.
Comprometer o registro do pacote
Um registro de pacote comprometido é um repositório de software que foi infiltrado por um adversário que obteve acesso não autorizado à interface ou infraestrutura administrativa do registro.
Isso permite que o adversário modifique ou substitua pacotes de software legítimos por pacotes maliciosos, que podem então ser distribuídos a usuários instalados de forma insuspeita. Um exemplo deste tipo de ameaça foi o Ataque aos espelhos de pacotes: Um pesquisador, com a intenção de promover software de código aberto, comprometeu vários registros de pacotes populares, incluindo Maven Central, NPM e RubyGems. Ao obter acesso a esses registros, o pesquisador conseguiu criar espelhos e réplicas dos repositórios originais, o que proporcionou uma alternativa conveniente para os desenvolvedores baixarem pacotes.
No entanto, esses espelhos tinham um propósito sinistro. Os espelhos comprometidos serviram como canais para o pesquisador distribuir pacotes maliciosos. Esses pacotes substituíram os legítimos, não detectados pelos registros primários, e desenvolvedores desavisados os baixaram e instalaram sem saber. Uma vez instalados, esses pacotes maliciosos liberam sua carga útil, executando códigos arbitrários, roubando dados confidenciais ou interrompendo operações.
Carregar pacote modificado
Um adversário carrega um pacote modificado em um repositório ou canal de distribuição que contém códigos maliciosos ou cargas úteis. Isso pode ser feito modificando o código-fonte, o empacotamento ou os metadados do pacote.
Uma das mais notórias deste tipo de ameaça foi a Ataque CodeCov em 2021. Um invasor, buscando comprometer projetos de software usando CodeCov, uma popular integração contínua e entrega contínua (CI/CD), utilizou credenciais vazadas para obter acesso não autorizado ao bucket do Google Cloud Storage (GCS) de um projeto. Depois que o invasor obteve acesso ao bucket do GCS, ele carregou um artefato malicioso, uma versão modificada do pacote CodeCov, que foi então distribuído aos usuários por meio do serviço CodeCov. Desenvolvedores desavisados, confiando no recurso de atualizações automáticas, baixariam e instalariam o pacote malicioso, acreditando que era o legítimo. Uma vez instalado, o código malicioso seria executado silenciosamente, comprometendo a integridade dos sistemas que infectou. Isso poderia levar ao roubo de dados, instabilidade do sistema ou até mesmo acesso remoto para o invasor.
Os ataques aos registros de pacotes são tão comuns que alguns padrões de ataque receberam um nome:
In Typosquatting, o malfeitor carrega no registro vários pacotes maliciosos com pequenos erros de digitação ou nomes semelhantes aos legítimos e populares, na esperança de que os desenvolvedores digitem incorretamente o nome do pacote pretendido com um nome malicioso. Freqüentemente, o pacote malicioso se disfarça como o pacote legítimo para passar despercebido, aumentando a probabilidade de ser atingido pela observação das estrelas.
Confusão de Dependência aproveita a maneira como alguns gerenciadores de pacotes resolvem os pacotes solicitados de vários registros. Quando uma organização utiliza componentes internos publicados em um registro interno, um invasor que conhece o fato pode publicar um componente malicioso com o mesmo nome em um registro público. Se o nome usado para o componente interno não tiver escopo, alguns gerenciadores de pacotes irão buscar o componente malicioso em vez do interno.
Com Pacotes Trojan, o cibercriminoso disfarça o malware entre códigos válidos e úteis. Isto poderia ser usado pelo verdadeiro autor, ou por um contribuidor que se oferecesse para manter o pacote. Isso também é conhecido como Sequestro de pacotes. Os invasores usaram muitas técnicas para sequestrar um pacote existente, como Aquisição de domínio onde um domínio expirado abandonado foi tomado pelo invasor que recriou o antigo e-mail do mantenedor e executou a recuperação da senha para assumir o controle da conta do mantenedor.
Considerações finais
À medida que as organizações adotam cada vez mais metodologias de desenvolvimento de software que priorizam a automação e a entrega contínua, a importância de proteger o estágio do pacote de software nunca foi tão importante. Ao implementar medidas de segurança robustas ao longo desta fase crítica, as organizações podem mitigar substancialmente o risco de sucumbir a ataques maliciosos que podem comprometer a integridade e a segurança do seu software.
As estratégias delineadas nesta postagem do blog, juntamente com os exemplos fornecidos, servem como um lembrete claro de que o estágio do pacote representa um ponto vulnerável na cadeia de fornecimento de software. As organizações devem prestar atenção a estas ameaças e implementar as medidas de segurança necessárias para proteger o seu software contra ataques. Ao fazer isso, eles podem garantir a integridade, a segurança e a confiabilidade de seu software para seus usuários e clientes.
Junte-se à nossa jornada em direção a um ecossistema de software seguro
Não perca a chance de ficar um passo à frente no reino da software supply chain security. Assine nosso blog hoje mesmo e seja um dos primeiros a receber nossos insights mais recentes, garantindo que sua organização permaneça resiliente e segura em meio a ameaças em evolução. Juntos, podemos construir um ecossistema de software mais robusto e seguro para todos.
Lembre-se, software supply chain security é uma jornada contínua, não um destino. Ao avaliar e adaptar continuamente as práticas de segurança para enfrentar ameaças emergentes, as organizações podem proteger a sua cadeia de fornecimento de software e fornecer software confiável aos seus usuários.
Assista ao nosso vídeo de demonstração




