Em meados de 2020, os pesquisadores da ESET começaram a analisar várias campanhas, que depois de um tempo foram atribuídas ao grupo Gelsemium, e rastrearam a primeira versão do malware usado pelo grupo, que remonta a 2014. As vítimas dessas campanhas estão no Leste Asiático, bem como no Oriente Médio, e incluem governos, organizações religiosas, fabricantes de eletrônicos e universidades.

Principais pontos neste relatório:

  • Os pesquisadores da ESET acreditam que o Gelsemium está por trás do ataque à cadeia de suprimentos contra o BigNox que relatamos anteriormente e chamamos de Operación NightScout.
  • Os pesquisadores da ESET encontraram uma nova versão do Gelsemium, um malware complexo e modular posteriormente chamado de Gelsemine, Gelsenicine e Gelsevirine.
  • Novos alvos de ataque foram descobertos, incluindo governos, universidades, fabricantes de eletrônicos e organizações religiosas no Leste Asiático e no Oriente Médio.
  • Gelsemium é um grupo de espionagem cibernética ativo desde 2014

A distribuição geográfica dos alvos de ataque do Gelsemium pode ser vista na Figura 1.

Figura 1. Localização dos alvos.

Componentes do Gelsemium

Toda a cadeia do Gelsemium pode parecer simples à primeira vista, mas as extensas configurações, implementadas em cada estágio, modificam as configurações para o payload final, tornando-o mais difícil de entender. Os comportamentos analisados a seguir estão vinculados às configurações. Portanto, os nomes dos arquivos e as rotas podem ser diferentes em outros exemplos. A maioria das campanhas que observamos segue o que descrevemos aqui.

Figura 2. Visão geral do fluxo de trabalho dos três componentes do Gelsemium.

Gelsemine: o dropper

O primeiro estágio do Gelsemium é composto por um dropper escrito em C ++ que utiliza a biblioteca Microsoft Foundation Class (MFC). Este estágio contém vários binários de estágios adicionais. O tamanho do dropper varia de 400 kB a 700 kB, o que é incomum e poderia ser ainda maior se os oito executáveis ​​incorporados não estivessem compactados. Os desenvolvedores usam a biblioteca zlib vinculada estaticamente para reduzir de forma significativa o tamanho geral. Por trás desse grande executável está um mecanismo complexo, mas flexível, que é capaz de descartar diferentes estágios de acordo com as características do computador da vítima, seja ele de 32 ou 64 bits ou de acordo com os privilégios (usuário padrão x administrador). Quase todos os estágios são compactados, localizados na seção de recursos do PE e mapeados no espaço de endereço de memória do mesmo componente. A Figura 3 ilustra todos os estágios do componente Gelsemine.

Figura 3. Visão geral do espaço de endereços do Gelsemine.

Gelsenicine: o loader

Gelsenicine é um loader que recupera Gelsevirine e o executa. Existem duas versões diferentes do loader: ambas são DLLs; no entanto, elas diferem no contexto no qual o Gelsemine é executado.

No caso das vítimas com privilégios de administrador, o Gelsemine droppea o Gelsenicine em C:\Windows\System32\spool\prtprocs\x64\winprint.dll (DLL em modo usuário para o processador de impressão) que é então carregado automaticamente pelo serviço spoolsv do Windows. Para gravar um arquivo no diretório %WINDIR%/system32, são necessários privilégios de administrador - daí o requisito mencionado acima.

No caso de usuários com privilégios padrão que são comprometidos pelo Gelsemine, o Gelsenicine é colocado em um diretório diferente que não requer privilégios de administrador. A DLL chrome_elf.dll se droppea em CommonAppData/Google/Chrome/Application/Library/.

Gelsevirine: o "plugin principal"

Gelsevirine é o último estágio da cadeia e seus desenvolvedores o chamam de MainPlugin (plugin principal), de acordo com o nome da DLL e também o caminho do PDB encontrado nas amostras antigas (Z:\z_code\Q1\Client\Win32\Release\MainPlugin.pdb). Vale destacar que se os defensores conseguirem chegar sozinhos neste último estágio, não funcionará perfeitamente, pois exige que seus argumentos tenham sido configurados pelo Gelsenicina.

A configuração usada pelo Gelsenicine contém um campo chamado controller_version que acreditamos que seja o controle de versões usado pelos operadores para este MainPlugin. A Figura 4 fornece uma linha do tempo das diferentes versões que observamos em atividade. As datas são aproximadas.

Figura 4. Cronologia das diferentes versões do Gelsevirine.

Links/ferramentas adicionais

Durante nossa pesquisa, encontramos alguns programas maliciosos interessantes que são descritos nos pontos a seguir.

  • Operação NightScout (BigNox): em janeiro de 2021, outro pesquisador da ESET analisou e escreveu um artigo sobre a Operação NightScout; um ataque à cadeia de suprimentos que comprometeu o mecanismo de atualização do NoxPlayer, um emulador Android para PC e Mac, e parte da gama de produtos BigNox com mais de 150 milhões de usuários em todo o mundo. A pesquisa revelou uma ligação entre este ataque à cadeia de suprimentos e o grupo Gelsemium. As vítimas originalmente comprometidas por aquele ataque foram posteriormente atacadas pelo Gelsemine. Entre as diferentes variantes examinadas, a “variante 2” deste artigo mostra semelhanças com o malware Gelsemium.
  • OwlProxy: este módulo também vem em duas variantes - versões de 32 bits e 64 bits - e como resultado contém uma função para testar a versão do Windows assim como nos componentes do Gelsemium.
  • Chrommme: Chrommme é um backdoor que encontramos durante nossas aventuras pelo ecossistema Gelsemium. As semelhanças de código com os componentes do Gelsemium são quase inexistentes, mas foram encontrados pequenos indicadores durante a análise que nos levam a crer que está de alguma forma relacionado ao grupo. O mesmo servidor C&C foi encontrado no Gelsevirine e no Chrommme, ambos usam dois servidores C&C. Chrommme foi visto na máquina de uma organização também comprometida pelo grupo Gelsemium.

Conclusão

O bioma Gelsemium é muito interessante: mostra poucas vítimas (de acordo com nossa telemetria) com um grande número de componentes adaptáveis. O sistema de plugins mostra que seus desenvolvedores têm um enorme conhecimento sobre C++. Pequenas semelhanças com ferramentas de malware conhecidas lançam luz sobre possíveis relacionamentos com outros grupos e atividades anteriores. Esperamos que esta pesquisa estimule outros pesquisadores a postar sobre o grupo e revelar mais raízes relacionadas a esta biosfera do malware.

Uma lista completa de Indicadores de Comprometimento (IoC) e amostras podem ser encontrados no white paper e em nosso repositório GitHub.

Em caso de dúvidas ou para enviar amostras relacionadas ao assunto, escreva para threatintel@eset.com.