Gozi: O Malware com Mil Faces

Views: 517
0 0
Read Time:28 Minute, 49 Second

1. Introdução

Na maioria das vezes, a relação entre campanhas de crimes cibernéticos e cepas de malware é simples. Algumas cepas de malware, como o GandCrab não esquecido, estão intimamente ligadas a um único ator, que está usando o malware diretamente ou distribuindo-o através de um programa de afiliados. Outras cepas, como o Quasar RAT de código aberto, são o malware de “domínio público”; eles permaneceram os mesmos por tanto tempo e foram usados como uma peça de Lego tão repetidamente que seria um erro fundamental tentar atribuí-los a um ator, uma campanha, uma vítima ou um período de tempo.

É reconfortante pensar em malware apenas nos termos acima. As cepas de malware são então perfeitamente mapeadas para atores (ou, na pior das hipóteses, pirâmides de ator-afiliado), sobre os quais nos sentimos confortáveis em raciocínio; e qualquer malware não perfeitamente mapeado para um ator é apenas uma ferramenta despersonalizada, que não carrega nenhuma bagagem dramática própria que os pesquisadores precisam acompanhar.

Infelizmente, a realidade é mais complicada do que isso. Algumas cepas de malware caem em uma área cinzenta. Não há um único ator no controle da base de código maliciosa ou dos binários, mas também não há proliferação universal do malware como uma ferramenta padrão. Ninguém está lá para dar todas as fotos, mas há muitas pessoas não relacionadas cada uma dando alguns dos tiros, colocando cada ramo do malware em um estado de constante evolução divergente. Este é o estranho e indutor de dor de cabeça do malware que teve seu código fonte vazado, e não é apenas a preocupação de pesquisadores e analistas; a confusão e fragmentação que resultam têm sérios efeitos a jusante para os usuários finais. Um pesquisador batendo as mãos em confusão em algum lugar da China pode resultar, algumas semanas depois, em um furacão de infecções por ransomware no Caribe, e um gerente muito irritado sendo dito “Sim, nós tínhamos a família MalBot coberta, mas você vê, este Malbot não é exatamente que Malbot … Olha, é complicado”.

Neste artigo, faremos sentido com um dos piores infratores na categoria de malware de evolução divergente: Gozi.

2. Uma Breve Genealogia de Gozi

Hoje, as pessoas sabem que Gozi é um peso pesado de malware que possui uma série de recursos complicados, nos quais vamos elaborar abaixo, e um alcance muito amplo. Um sabor Gozi sozinho, Dreambot, em um ponto tinha 450.000 vítimas sob sua influência; ao monitorar outro sabor, que atualmente está ativo, podemos ver milhares de novas vítimas infelizes por semana registradas nos painéis maliciosos de C&C. Considere que uma única vítima pode ser monetizada ao montante de centenas de dólares, e você rapidamente chegará à conclusão de que no total Gozi tem sido assustadoramente lucrativo, mesmo comparado com o já lucrativo mercado de crimes cibernéticos.

Naturalmente, Gozi nem sempre foi tão juggernaut. Originalmente, era um simples Trojan bancário — ainda mais primitivo em alguns aspectos do que a primeira versão do ZeuS, devido à sua notável falta de funcionalidade de injeção web. Uma fascinante peça de 2014 da PhishLabs fornece uma perspectiva íntima sobre os primeiros dias de Gozi:

Nikita Kuzmin, uma russa de 25 anos [..] trabalhou na codificação de spyware e Trojans de Acesso Remoto (RATs). Ele pegou emprestado o código fonte das famílias existentes populares na época [..] UrSnif (desenvolvido por Alexey Ivanov, “subbsta”), e botnet C2/management functions e backend code from Nuclear Grabber [..] Kuzmin trabalhou em estreita colaboração com as superestrelas [autora de malware] daqueles dias: Corpse, Vladislav Horohorin (BadB), a equipe de Vasiliy Gorshkov e Alexey Ivanov (Suidroot, Eliga, XTZ, Skylack, Kotenok). Ele conhecia alguns deles desde os tempos de ShadowCrew. Ele era mais jovem do que a maioria de seus colegas, na época postando que ele estava ansioso para obter sua [licença de motocicleta] e esperando em breve estar ganhando dinheiro suficiente para uma moto nova, “real” [..] Apesar de sua pouca idade, ele era confiável, respeitado por suas habilidades técnicas práticas e talento de codificação, e também conhecido por seu entusiasmo pela ideia de que a fraude na Internet, especialmente contra alvos ocidentais, era uma profissão legítima com melhores salários e vantagens do que trabalhar para lojas locais de varejo de computadores e software, laboratórios universitários e ISPs. [..] Kuzmin teve acesso ao código-fonte de vários kits de crimeware com capacidades de última geração, cada kit fazendo algo excepcionalmente inteligente em uma área chave em comparação com os outros. [Ele e a equipe do HangUP] criaram um repositório sob controle de versão para uma base de código de kit de crimeware incorporando todos esses melhores recursos – isso é o que ficou conhecido como Gozi. A equipe do HangUP era um grupo nacionalista com um número comum de “ciberfacismo”, imagens russas e nazistas compartilhadas e um tema abrangente para travar uma guerra financeira sobre os interesses ocidentais através do uso da Internet para cometer fraudes.

Em seu primeiro ano, Gozi operou sem ser detectado; Foi uma exposição de 2007 da SecureWorks que trouxe essa variedade de malware à atenção do público, completa com um resumo de sua composição interna e da forma da operação financeira subjacente. Desde seus humildes primórdios, Gozi — Similarmente à Emotet — cresceu em uma plataforma maliciosa multi-módulo, multiuso, e muitos dos derivados modernos do trabalho original de Kuzmin ainda estão sendo usados ativamente em campanhas maliciosas a partir de 2020. São 14 anos de atividade — várias vezes a expectativa de vida média de uma marca de malware.

Isso não é coincidência. Com toda a probabilidade, a longevidade de Gozi pode ser rastreada até um único incidente infeliz.

Por mais três anos após sua estreia pública em 2007, Gozi foi uma campanha maliciosa clássica — uma única base de código mantida para um grupo bem fechado de cibercriminosos. Então, em 2010, as fontes para esta primeira versão de Gozi vazaram (esta versão se chamava Gozi CRM — que significa “Customer Relationship Management”, ou seja, a gestão de suas credenciais bancárias em um estado onde os cibercriminosos as possuem). Outros atores pegaram o código e correram com ele, criando duas novas versões: Gozi Prinimalka (que passou a se fundir com Pony e se tornar Neverquest) e Gozi “ISFB” (o significado do qual aparentemente foi perdido no tempo). Essas mutações iniciais por si só já interromperam a capacidade da indústria de acompanhar Gozi. Um fornecedor apelidado de ISFB como “Gozi2”; outros o chamavam de “Ursnif” ou “Snifula”, depois daquele pedaço de spyware do início dos anos 2000 do que o Gozi CRM original pegou emprestado código. Vários outros fornecedores começaram a se referir ao malware como “Rovnix”, depois de um empacotador que era comumente usado para ofuscar seus binários.

Sabemos que “ISFB” é o nome adequado para este derivado de Gozi, pois as cordas binárias internas contêm referências ao “projeto ISFB”. O ato original de dublar o malware “Ursnif” está ligado a uma longa e orgulhosa tradição de nomeação arbitrária de malware que remonta, pelo menos, ao Vírus Michelangelo de 1991, assim nomeado pelos espectadores porque desencadearia em uma data específica que era coincidentemente o aniversário daquele artista. Não há nada inerentemente errado com isso, mas os muitos apelidos e equívocos em torno da nova árvore genealógica gozi semearam confusão e criaram fraturas na esfera do conhecimento em torno do malware. “Rovnix” e “Snifula” felizmente saíram de moda na nomenclatura, mas “Ursnif” ficou preso. Na verdade, ficou tão bem que, mesmo em 2020, duas décadas depois da publicação da ferramenta original de Ivanov, o nome “Ursnif” — artefato de uma era há muito passada — ainda é frequentemente usado como sinônimo coletivo para encarnações modernas de Gozi.

Vários anos depois, o código fonte do ISFB vazou. As fontes estão em conflito com o momento exato aqui; a maioria das evidências coloca este segundo vazamento em 2015, mas algumas fontes afirmam que isso aconteceu já em 2013 (essa confusão pode ser devido à existência de vários vazamentos que aconteceram algum tempo separados um do outro). Uma das filiais resultantes passou a se fundir com Nymaim, onde foi usado como o código central para a criança híbrida das duas famílias de malware, GozNym. No entanto, outra filial tornou-se a Dreambot, que dependia fortemente do código do vazamento original do CRM de 2010, alterou o formato de check-in da ISFB e adicionou suporte para comunicação de C&C pela rede TOR. Outro ramo gerou muitas campanhas de sucesso, mas não alcançou um nome comum, não nos deixando escolha a não ser nomeá-lo nós mesmos – “Goziat”, após a afinidade de seus operadores com o austríaco .em domínio de alto nível (o nome bateu “Schnitzel Gozi”, mas apenas por pouco).

Quando Gozi, de segunda onda, já estava por aí há muito tempo, alguns atores sentiram que o mercado estava maduro para uma nova versão principal — levando ao nascimento de Goziv3 (carregador RM3), ISFB3 e Gozi2RM3(IAP 2.0). Cada um deles introduziu seus próprios ajustes no mecanismo de ofuscação do malware, fluxo de controle e esquema de comunicação de C&C. Em particular, essas campanhas “Gozi de terceira onda” ostentavam novos recursos, como binários assinados, comunicação HTTPS e um processo de registro de clientes hierárquico de 2 estágios (que vamos elaborar abaixo).

A essa altura, deve-se tornar evidente para você que essas pessoas nunca se preocuparam em criar um órgão regulador adequado para lidar com a nomeação para os vários ramos de Gozi. Dada a enxaqueca considerável que experimentamos internalizando tudo isso, talvez isso seja menos um bug e mais uma característica.

Figura 0: Linha do tempo e influências das variantes de Gozi.

2. A experiência do núcleo Gozi

Enfatizamos tanto a evolução divergente de Gozi que você pode ter esperado que cada variante fizesse sua própria coisa, e que o comportamento do malware fosse tão diferente de uma variante para outra que sua origem comum é quase imperceptível. Na verdade, o oposto é verdade: se você não está familiarizado com o jardim de cepas de gozi, é muito fácil confundir uma variante com a outra, especialmente quando se faz análise comportamental de caixa preta.

Abaixo listamos alguns comportamentos que são comuns à maioria, se não todos, as cepas de Gozi.

  • As cordas estão contidas, na forma criptografada, na seção .bss do binário. O processo de descriptografia faz uso de uma string “key” que é um datamp de compilação formatado por string (por exemplo, abril 20 2019).
Figura 1: Processo de descriptografia de cordas
  • Um ataque de homem no navegador rouba as credenciais da vítima para uma lista de sites pré-configurados (normalmente bancos, mas isso é definido no nível da campanha e não é uma característica do malware em si). No ISFB e seus derivados, foram introduzidas injeções na Web — estes modificam sites para incluir campos de entrada que não estavam lá antes, como o número pin do banco, a fim de seduzir a vítima a fornecer essas informações.
  • Um formato específico de check-in de C&C, que aparece no cabeçalho da solicitação ou no corpo. Um exemplo típico é soft=%u&version=%u&user=%08x%08x%08x%08x&server=%u&id=%u&crc=%x, embora haja uma pequena variação nos parâmetros utilizados e em seu pedido.
  • Um esquema elaborado usado para ofuscar o check-in da C&C. Isso, em particular, é efetivamente uma constante entre as variantes – não vimos nenhum ajuste introduzido a ele em qualquer lugar. A ofuscação funciona da seguinte forma:
    • Criptografe o check-in usando uma chave simétrica incorporada (variantes anteriores usadas RC6, variantes mais novas usam Serpent; ambas são esquemas de criptografia de nicho)
    • Codificação usando codificação base64
    • Fuja de caracteres não alfanuméricos com o personagem homebrew escape “_”. Por exemplo, “+” se torna _2B.
    • Intercalar aleatoriamente o resultado com caracteres de corte (“/”) .
Figura 2: Esquema de ofuscação
  • Uma separação no nível de processo entre o módulo de malware que executa o ataque man-in-the-browser e o módulo que toma as decisões reais sobre o que injetar e onde, onde este último é injetado no explorer.exe. Os dois processos se comunicam usando um tubo nomeado, embora algumas das informações de tempo de execução do malware sejam mantidas globalmente acessíveis no registro (por exemplo, o valor CRC da última lista de tarefas recebida do servidor C&C).
  • Uma gama de recursos padrão de roubo de informações, como registro de chaves, e-mail, contas ftp, dados IM e captura de certificados, bem como captura de vídeo de tela. Estes são aumentados com suporte para plugins opcionais em formato DLL, que o servidor C&C pode instruir a máquina infectada a baixar e executar em tempo de execução.
  • Uso de um formato bastante complicado, chamado “recursos unidos”, para vários tipos de informações codificadas. O tipo de informação codificada não é escrito em inglês simples, também, e é denotado por uma tag CRC32. Sabe-se que isso varia.
Figura 3: Mapa amostral de CRC para nome do recurso (crédito: Maciej Kotowicz)
  • As variantes usam os mesmos elementos e o mesmo formato para armazenar injeções da Web
    • @ID@ -> bot id (identidade do hospedeiro da vítima)
    • @GROUP@ -> id de grupo (id de grupo do bot)
    • @RANDSTR@ -> string aleatória
    • @URL=@ -> instituições financeiras direcionadas
    • @CONFIG=@ -> configuração
    • @VIDEO=@ -> vídeo para gravar uma vez que a vítima visite a página de interesse
    • @SOCKS=@ -> conecte o servidor SOCKS
    • @VNC=@ -> conecte O VNC

3. Holofotes sobre a escolha gozi tensões

3.1 Goziat

Este sabor de Gozi parece ter estreado vários anos após o vazamento da ISFB. Sua característica mais distintiva em comparação com outras variantes é uma peculiaridade em seu check-in de C&C; a maioria das outras versões gozi emulam um pedido http para uma imagem e, portanto, terminam com alguma variação de /images/ seguido por um blob BASE64 longo e desorganizado que é coberto por uma extensão de arquivo .gif ou .jpeg. Essa ofuscação é um pouco complicada para soluções de segurança para lidar, mas não impossível — e é provavelmente por isso que goziat usa um diretório de recursos diferente em vez de “imagens”, que pode ser configurado durante o processo de construção do malware. Uma vez que goziat não se incomoda com o ardil de seu check-in ser um pedido legítimo para uma imagem, ele também abandona o truque “extensões de arquivo de imagem como solicitações codificadas”, popularizada pelo Dreambot e replicada por muitas outras variantes. Em vez disso, ele usa um formato de ação simples=<action> request.

Um pequeno número de pesquisadores apelidaram essa variante de LOLSnif, após seu “Living Off the Land” (fazendo uso de utilitários Windows pré-instalados, como mshta.exe e powershell.exe). Em vez do geofencing mais de última geração no lado do servidor, essa variante tem uma verificação incorporada do lado do cliente para o idioma de interface do usuário padrão do sistema.

Figura 4: Verificação de idioma de interface do usuário do sistema usada para geofencing

Embora pareça haver várias campanhas diferentes fazendo uso do Goziat, elas tendem a usar domínios com um domínio .em alto nível (daí o nome que escolhemos para esta variante). Isso, juntamente com alguma sobreposição em endereços IP e até mesmo os subdomínios que estão sendo usados, sugerem coletivamente alguma semelhança no nível de operação da campanha. Essas campanhas tendem a se agarrar aos mesmos domínios e endereços IP por um tempo relativamente longo, o que pode não ser a melhor escolha opsec-wise. A tabela a seguir lista algumas das campanhas que nós e outros fornecedores conseguimos acompanhar que fizeram uso desta versão específica do Gozi.

ID do grupoSerpente Key(s)Diretório de RecursosAlvoExemplos/notas de domínioNotas Gerais
100020003000 W7fx3j0lFvOxT2kFU7yKaYwFde7YtppY api1 Itáliapipen.at Laurela.atcalag.atCampanha de spam que disseminou arquivos protegidos por senha hospedados na unidade do Google e no firefox enviar. Os arquivos (geralmente com a senha 7777) continham um arquivo JavaScript fortemente ofuscado chamado presentation_????. js, que por sua vez derrubou um DLL lançado através de um comando regsvr32.exe-s.

Os domínios do primeiro estágio vivem por muito tempo, mas ultimamente a chave da serpente muda com frequência.
1000F1cl1tAcbPsStUtM RpcEUAEpé

Índia Rússia
dicin.at
kartop.at
Aparentemente extinto desde 2018, possivelmente antes. Distribuído pelo Malspam,bem como o kit de exploração GrandSoft. Um certo domínio comum sugere que o ator por trás desta campanha também pode ter experimentado a implantação do DreamBot para atacar alvos no Japão.
1000K2u7G0lE4u1VoS0V
Nf6lU8d5X0i1Wr7V 
wpapiEUA

Canadá Itália
evama.at
mobipot.at
Parece ter decolado por volta de março de 2018. Spam fabricado aparentemente enviado pela DHL,usado para atrair vítimas para a página de aterrissagem do Grandsoft Exploit Kit.
20001500Gwe9HMygngWe8kPKTEJopj7WLDojJKx4 Webstore sorna.at
Rivier.atexplik.at
Começou no final de 2018. Descartado pela Hancitor, que mudou para distribuição também via e-mails temáticos COVID-19 no início de 2020. Baseado em domínios compartilhados, este ator parece ter também executado algumas campanhas usando o carregador Hancitor, EvilPony e CobaltStrike.
40005000Ni8wR0zp1Ak5FoOW
Xio4U7r3MlO7FwcQ 
wpxItáliadeepmoler.cn
eromov.at
Parece ter começado em 2018; distribuído via QuantLoader, Kit de exploração GrandSoft e Hancitor malspam.
Figura 5: arquivo malicioso hospedado no Firefox Send

Além dos domínios listados acima, cada campanha também suportava domínios TOR.

  • Api1: 6buzj3jmnvrak4lh.cebola, g4xp7aanksu6qgci.cebola, l35sr5h5jl7xrh2q.onion
  • Rpc: v6ekxns6ldq5uai3.cebola, uaoyiluezum43ect.onion, tjiqtwzewnkbqxmh.onion
  • Wpapi: 4fsq3wnmms6xqybt.onion, em2eddryi6ptkcnh.onion, nap7zb4gtnzwmxsv.onion, t7yz3cihrrzalznq.onion
  • Webstore: vo5vuw5tdkqetax4.onion , zq4aggr2i6hmklgd.cebola
  • Wpx: pzgxy5elkuywloqc.onion, q7nxkpgras35dwxk.onion, rbhqdxwdwrlp67g6.cebola, jesteoq7glp3cpkf.onion

3.2 Gozi2RM3 / Gozi IAP2.0

Esta versão de Gozi não introduz nenhum ajuste de comunicação de C&C (em oposição a outros Gozi de terceira onda, que discutiremos mais tarde); com base na comunicação e nos metadados binários, pode-se facilmente confundi-lo com outras variantes da versão 2. A diferença mais importante entre Gozi2RM3 e Gozi de geração anterior está no nível de infraestrutura da campanha, que implementa um processo de verificação minucioso.

A infraestrutura de C&C de uma campanha gozi2RM3 é subdividida em 2 estágios, onde o endereço de um C&C estágio 1 é codificado no binário inicial que infecta a vítima. O C&C estágio 1 é pré-configurado com uma lista de negação isp/geolocalização que é usada para pré-filtrar conexões suspeitas de serem pesquisadores curiosos em vez de vítimas verdadeiras. Em alguns casos, mesmo quando essas verificações são passadas, a vítima deve provar-se uma boa vítima enviando dados continuamente; só então o servidor de segunda etapa considerará empurrar a carga principal da campanha e enviar a configuração verdadeira.

Esta escolha de design tortuosa é uma entrada merecida em nossa Lista de Razões Agradecemos ao Senhor Todos os Dias que os autores de malware nunca aprendem com as conquistas uns dos outros. Felizmente, há pelo menos uma chave padrão de criptografia de serpente para comunicações C2 (10291029JSJUYNHG) que muitas campanhas nunca se preocuparam em modificar.

Embora essas diferenças na infraestrutura sejam as principais, há também algumas diferenças na funcionalidade. Há o painel de C&C, o que nos faz acreditar que esta variante provavelmente está à venda em algum lugar.

Figura 6: Painel web Gozi2RM3 C&C

Há também uma string de formato URI mais terse (sem os, tamanho, hash). O protocolo para especificar qual recurso é solicitado da C&C é o protocolo “fingir solicitação de imagem”, retirado diretamente do dreambot.

Figura 7: Falsos pedidos de imagem e seu significado; usado no Dreambot e algumas outras variantes (crédito: Maciej Kotowicz)

Parece haver uma conexão entre atores goziat e atores gozi2RM3. Ambas as variantes mudaram a maneira como descriptografam cargas adicionando mais uma etapa de criptografia — a chave RSA pública do servidor malicioso é ainda mais criptografada com uma chave de serpente, que em si só é montada no tempo de execução. O fato de ambas as variantes terem mudado seu fluxo da mesma forma, e em um período de tempo tão curto, parece implicar que eles compartilham voluntariamente o código ou um dos grupos é realmente vigilante sobre imitar o outro.

A tabela a seguir lista algumas das campanhas que conseguimos acompanhar que fizeram uso desta versão específica de Gozi. Esta é apenas uma lista de campanhas recém-vivas entre uma longa lista de mortos há muito tempo. Algumas semelhanças entre as campanhas sugerem que o número de atores ativos usando Gozi2RM3 pode ser menor do que aparece à primeira vista.

ID do grupoSerpente Key(s)AlvoExemplos/notas de domínioNotas Gerais
3xxx (varia)10291029JSJUYNHG EUA

Canadá Alemanha, Austrália, Itália
TLD do local de queda é .cabA campanha usou consistentemente os entregadores de primeiro estágio chamados info_date.doc, distribuídos usando sequestro de cadeia de resposta. Conexão tênue com o malware Valak através do uso do mesmo caixa.
44444343
205x
10291029JSJUYUON
21291029JSJUXMPP
Itáliabizzznez.com
Consaltin.orgredflash.org
Distribuído via malspam padrão (também visto por Cutwail), em alguns momentos covid-19 temático ou fingindo ser de DHL. Focado especificamente em roubar credenciais de clientes de bancos italianos.
8989797998989393818210291029JSJUYNHGItáliaSub domínios gstat[.] e linha[.]Distribuídos através de arquivos Excel com folhas ocultas. conectado à campanha 3xxx. Provavelmente o mesmo ator.
555540004010560078347829JSDUKLHG EUA
Japão
O TLD é .hoje, .site e .spaceDistribuídos através de kits de exploração (RIGEK, GrandSoftEK, FallOutEK) Parece ter decolados por volta de novembro de 2019
416x10291029JSJUYNHGTcheco, EUA, Itálialokoloppo4.com, 38.132.124.193 Visto distribuído através de spam e docs com macros. Por exemplo, doc personificando ser Hubata Cernoska (grande loja em tcheco). A configuração de injeção web é muito semelhante à 21291029JSJUXMPP.

Figura 8: Sortimento de documentos maliciosos usados para espalhar Gozi2RM3

Para fins educativos, incluímos a configuração para URLs interceptados e ocultos usados por uma das campanhas (grupo id 4444, chave serpente 21291029JSJUXMPP) no Apêndice B .

3.3 Goziv3 RM3 

Esta variante está na natureza desde pelo menos o verão de 2017. Muito do código da ISFB ainda está lá, mas muito também é diferente. O grupo por trás desta variante é bastante sofisticado e faz um esforço decente para ficar sob o radar enquanto ataca principalmente Austrália, Itália e EUA.

Existem algumas diferenças técnicas importantes entre esta variante e Gozi de segunda onda:

  1. O carregador RM3 usa um formato de arquivo exclusivo chamado “formato PX”. Cada dll é carregado usando um carregador homebrew para este formato. Uma ferramenta para processar arquivos em formato PX pode ser encontrada aqui.
  2. A estrutura de Recursos Aderidos (“JJ”) foi descartada em favor de uma estrutura “WD” que tem um formato diferente. Além disso, a estrutura não é mantida logo após os cabeçalhos pe como anteriormente, mas sim no diretório de segurança.

Figura 9: Goziv3 RM3 WD

  1. Esta variante faz uso de uma lista de palavras que é mantida em uma das estruturas WD para a geração pseudorandom de nomes-chave de registro. Isso torna a detecção desta variante por IOCs de chave de registro mais difícil do que a das variantes anteriores.
Figura 10: Dados Goziv3 RM3 mantidos em entradas de registro nomeadas aleatoriamente
  1. Esta variante usa forfiles.exe para executar um script powershell que carrega shellcode na memória e, em seguida, executa esse shellcode usando injeção APC. Adicionando os forfiles executáveis durante a cadeia de infecção, essa variante pode evitar mecanismos de detecção que buscam persistência de motores de script mais conhecidos, como PowerShell e mshta.
  2. Provavelmente a diferença que vai saltar para fora em um analista primeiro é o ajuste para o método de comunicação. Embora o esquema de ofuscação para o check-in de C&C continue sendo o mesmo usado globalmente nas variantes de Gozi, nesta variante é colocado no corpo de solicitação em vez do URI (que se torna apenas “index.htm”). Além disso, o check-in simples tem um formato ligeiramente diferente:
{rand1}={rand2}&type={type}&soft={soft}&version={version}&user={user}&group={group}&id={id}&arc={arc}&crc={crc}&uptime={uptime}

Embora essas diferenças técnicas existam, como acontece com o Gozi2 RM3, o grupo por trás dessa variante parece ter focado sua inovação em maneiras de impedir que os pesquisadores interajam com o C2 e obtenham cargas. Eles fazem isso restringindo a entrega de carga no lado do servidor – quando os clientes tentam se conectar a um servidor C2, eles são geolocalizados e rejeitados se o local não corresponder à região alvo da campanha atual. Mais importante, o C2 de primeira fase permanece on-line por um período muito curto de tempo — apenas o tempo suficiente para atender um grande número de vítimas e desaparecer antes de ser submetido a análises indesejáveis. Gozi3 RM3 geralmente é distribuído por e-mails de spam que carregam um arquivo VGS ofuscado, ou uma macro xls4.0, como um anexo. Pelo menos desde 2017, essa variante de Gozi é conhecida por ser empacotada com um carregador popular também usado por algumas campanhas da Emotet e Dridex.

Figura 11: Goziv3 RM3 malspam e maldoc anexado

O domínio de alto nível dos servidores C&C é tipicamente .xyz, e as amostras são tipicamente assinadas com o Verisign (na prática, isso significa que quando uma vítima executa essas amostras eles têm que clicar em ‘OK’ em uma caixa de diálogo a menos que os avisa que talvez eles não devem executar arquivos aleatórios entregues a eles por estranhos na internet).

As pessoas por trás dessa operação parecem valorizar seu equilíbrio entre vida profissional e trabalho — as campanhas são um pouco distantes e estão inativas nos fins de semana. Você pode ler aqui sobre uma possível conexão com o grupo “Evil Corp”. A falta de variância em todas as características acima parecem sugerir que esta variante Gozi está principalmente em uso por um único ator.

4. Legado Gozi

Estas são variantes gozi que parecem ter caído fora de uso. Os grupos que os pressionam passaram para malwares mais modernos ou seguiram em frente totalmente do negócio de malware.

4.1 Dreambot

Este ramo das fontes do ISFB vazado foi visto pela primeira vez logo após o vazamento do ISFB (muitas fontes dizem que 2014, alguns dizem 2015). Permaneceu em desenvolvimento ativo por um bom tempo e adicionou muitas novidades; entre eles estavam servidores de comando e controle hospedados pelo Tor, um recurso de keylogging, a capacidade de roubar cookies e dados do navegador de clientes de e-mail, um recurso de captura de tela, a capacidade de gravar a tela da vítima e um recurso de acesso remoto VNC. Dreambot tinha um modelo monetário cybercrime-as-a-service (CaaS), e estava disponível para qualquer aspirante a cibercriminoso pelo preço certo.

Muitas dessas características eram únicas mesmo entre as variantes mais novas, mas, em última análise, dreambot foi um produto da segunda onda da era Gozi. Para fugir dos olhos curiosos, ele se baseou em check-ins C2 imitando um pedido GET para uma imagem — um truque que perdeu drasticamente seu valor uma vez que se tornou conhecimento comum, e não pôde competir com as sofisticadas práticas de operação furtiva da Gozi de terceira onda, como os binários assinados e o modelo C2 hierárquico. Depois de uma longa e frutífera corrida, em março de 2020, o Dreambot parece ter finalmente ficado em silêncio.

Figura 12: Painel web dreambot C&C

4.2 Saigon

Este garfo de Goziv3 RM3 foi identificado pelo FireEye em setembro de 2019. Introduziu várias mudanças na base goziv3 RM3, entre elas:

  • Novos argumentos para o check-in do C2. Perceptível entre eles foi a batida, que codificava alguns segundos que o cliente esperaria entre fazer solicitações subsequentes.
  • A criptografia SERPENT é usada no modo de operação do BCE, em vez de CBC. Na criptografia real isso seria considerado um downgrade, mas a regra geral é que ninguém realmente executa criptoanálise em comunicações de malware de qualquer maneira, e este é apenas um esquema de ofuscação glorificado substituído por outro.
  • Sem barras aleatórias intercaladas ao ofuscar o check-in C2 criptografado.
  • Não adianta o formato PX.

Como pode ser visto, a maioria das mudanças parecem estar focadas na remoção de recursos, tornando o malware mais simples e revertendo para algo mais parecido com Gozi de segunda onda.

4.3 ISFB3 / Ursnif-A

Esta variante viu um uso muito limitado e preciso, atacando vítimas japonesas durante 2018-2019. Devido a uma semelhança em seu método de distribuição, especula-se estar ligado ao ator de ameaça TA544. Como típico de Gozi em geral, foi distribuído por malspam (especificamente através da Cutwail) carregando documentos de escritório anexados, e usou geolocalização para manter fora quaisquer solicitações fora de seus alvos (tipicamente clientes de bancos japoneses domésticos). O spam muitas vezes carregava o downloader Bebloh, que só então buscaria o Gozi real.

Figura 13: ISFB3 maldoc, direcionado a clientes de bancos japoneses

O nome “ISFB3” é derivado de um caminho pdb explícito nos binários maliciosos — c:\isfb3\x64\Release\client.pdb — mas enquanto o dígito “3” está no título, este não é gozi de terceira onda. O pedido GET de recuperação de imagens simulada ainda está lá, e nenhum recursos inovadores que impeçam a pesquisa da campanha estão presentes. Uma série de pequenas diferenças técnicas diferenciam essa variante de outras cepas: “J1” usado como prefixo mágico nos recursos aderidos (este é um retrocesso às primeiras versões do Dreambot), algumas mudanças no funcionamento de seus módulos de roubo de informações, bem como alguns ajustes em seus métodos de persistência e evasão (veja aqui e aqui).

5. Conclusão

Quando lidamos com malware, muitas vezes estamos sobre os ombros de gigantes. O consenso do fornecedor nos dirá rapidamente o nome do malware com o qual estamos lidando, e se isso não acontecer, alguns indicadores de aparência única do Google nos mostrarão rapidamente os insights difícil de pesquisadores que passaram por nós e tiveram que lidar exatamente com o mesmo malware. Uma vez que sabemos o nome verdadeiro do malware, temos poder sobre ele. Podemos escrever assinaturas, caçar mais amostras e usar nossos conhecimentos exigentes para proteger potenciais vítimas.

Malware com um ecossistema muito fragmentado, como Gozi, joga uma chave inglesa em tudo isso. Conceda que você conseguiu uma amostra maliciosa ou uma campanha, e depois de alguma rápida pesquisa você determinou que você está lidando com “Gozi”, ou “ISFB” ou “Ursnif”, que são todos iguais, mas de alguma forma também diferentes. Em seguida, você tem que lidar com uma lista de variantes, todas referidas intercambiavelmente por esses nomes, todas com métodos de comunicação sutilmente diferentes, padrões comportamentais e infraestruturas de campanha. O que você vai fazer agora? Para o trabalho básico de triagem, é bom dizer “este é o Gozi, um banqueiro que evoluiu para uma plataforma de entrega de conteúdo malicioso”. Mas para qualquer coisa que fique mais técnica, essas diferenças sutis são uma receita para uma dor de cabeça. Se o seu escopo é *tudo* as versões gozi, você vai ter um tempo muito ruim.

Parece não haver solução fácil para este problema. O sol nasce no leste, o mar corre para a costa, os cibercriminosos criam novos malwares e os pesquisadores confabulam novos nomes para ele. Tudo o que podemos fazer é produzir revisões muito atrasadas, como esta, que tentam injetar alguma ordem no caos abrangente. Fora isso, podemos nos consolar com o fato de que esses incidentes de malware de vários ramos são poucos e distantes entre si, já que os cibercriminosos não têm motivo financeiro para compartilhar códigos maliciosos, e eles geralmente sabem melhor do que torná-lo público. Quando ocorre fragmentação ao estilo gozi, geralmente é por causa de um vazamento. Então gostaríamos de concluir com um apelo aos cibercriminosos: proteja suas bases de código, para o bem de todos nós!

6. Agradecimentos Especiais

Gostaríamos de agradecer profundamente a Benoît Ancel, do CSIS Security Group. Este artigo não teria sido possível sem sua detalhada contribuição técnica sobre o tema da longa, ramificada e confusa história de Gozi.

COI

Goziat

Primeiro carregador:

cb4f92bf9fef3708e7aeba5d8994a0502952d06374c8a83ff2c1ee0b7e603d35

Carregador principal:

21a03d9c845e446cb96eba7c93aa6403b8a9aaa744801e77468bf73c0507d028

Principal trabalhador:

c486d857930899b7d9f8cbb6de33b7a3976b9db5b98c06b774adf5d5d11caf

Gozi2RM3

Primeiro carregador:

644482a0851ff6f801e9afea1eee19e4f4de72b28895de9e3a4e43dd48ff1e

C8456d507da3484d2151f051f439b2de13174be9f72f4f1f03abf528885adca1a

b1ce263fb1945a153e4c11fdfe0bd3d26cd09381ee21cf82ff5b115ad8ca77

Carregador principal:

c2ee9cf24f0bddb07914503dbae35c4497d66f9ca01ea65108ef40ff13cbec02

6fa7978607c16fbf5f86d5978ad60d32e055946dc6d6d6d78310b1f7cc918

Principal trabalhador:

8173469042c24cf104fba0db8bacabdf3dc347bba3415a92de587df6d82

b78390654db57946d551f9a34a488a726a0e7890746019b7313eddb74a9372

Gozi v3/ RM3

Primeiro carregador:

41e52cec2091e4451beadad93c5f693d5d5a08cf56eaf160f9fa4d577b1d707f6

5548507963e58e7c89e406452a4c00823db72b26c96cfcf7ed82799dacaf48d7

Carregador principal(como PE):

a353dfb1b5eb6980824356cf9a78418181c53eea2cb3f254749fa19c307c30cfc

Dlls de segunda etapa (como PEs):

8a2dace2a6fbd650b3e079f20f3886dd595044dbd4cb6bbab16023182f8d17af

495351fb739029a95a2bad9e80da3e6207b9bbd218c5c1d35f7e8eb0a090c04f

979048ab6e71c9589bb204e3017e72dfb8fe8d0b088fbccfa7e0b5791be89c68

87058836bd1c2c7a428ae4a3b4729035dab25795fe4da55b3f5793cc15c611a

Dreambot

52cb2bd9724270b3efe575894112d0a866734856a3257ddcfb24308e42861f6a

ee8a404264b4d3144bc37ef7118da24c77dd15b20d38250badbf53140f7c1d2a

2d5c9af9419bfb08e1066b41f2d2daba93024fb6201ac079e0ec474c424d21ff

0ed9d5dcdc2ea4b90f056071feaec0463c3563eb89b6753741f079a22c7a1e7

f255609982b2b1ebea743c863b8b205b6683112624f46393454e430e69aed5

Saigon

8ded07a6779b3d67f362a9591cce225a7198d2b86ec28bbc3e4ee9249da8a5

431f83b1af8ab754615adaef11d1d10201edfef4fc525811c2fcda7605b5f2e

628cad1433ba2573f5d9fdc6d6ac2c7bd49a8def34e077dbbbffe31fb6b81dc9

Isfb3

Primeiro carregador:

cacc1c3af8ad58b92c707bdf36ec1bd5f039dd80780ad2978cb142ccfe714d6

8d7ffebb0774e0dfe9d85f175cd5e1800dfd757bb5fbc4565a8f8a173e739ea5

DLL cliente:

f3182febadb7a9cc0d43621bd9909688f9b0f7720d87673970be1c81249e208a

8e707c3afeaff2602615307988668ff8d2a3be20e5e41f34c6eb33c8deb6ceea

Appendix A

Yara rules

rule goziv3: trojan {
    meta:
        module = "goziv3"
    strings:
        $dec_bss = {D3 C0 83 F3 01 89 02 83 C2 04 FF 4C 24 0C}
        $gen_serpent = {33 44 24 04 33 44 24 08 C2 08 00}
    condition:
        ($dec_bss and $gen_serpent) and (uint16(0) == 0x5A4D  or uint16(0) == 0x5850  )
}
rule Gozi_JJ_struct: trojan {
    meta:
        module = "Gozi_JJ_struct"
    strings:
        $jj = "JJ" ascii
        $pe_file = "This program cannot be run in DOS mode" ascii
        $bss = ".bss" ascii
    condition:
         #s >= 2 and (for all i in (1,2) : (@s[i] < 0x400 and @s[i] > 0x200)) and (@s[2] - @s[1] == 0x14) and ($pe_file in (0..1000)) and ($bss in (0..1000))
}

Appendix B

Targeted (intercepted) websites

*amazon.*

*paypal.*

*sella.it*

*clienti.chebanca.it*

*ibk.nexi.it/ibk/web*

*nowbanking.credit-agricole.it*

*banklinknet2.cariparma.it*

*banklinknet2.carispezia.it*

*corporate.friuladria.it*

*nowbankingcorporate.cariparma.it*

*nowbankingcorporate.friuladria.it*

*banking4you.it*

*fideuramonline.it/script/ServiceLogin/ib/login*

*paco.cabel.it*

*icbp.seceti.it/contrattobpercbi*

*cbi.bpergroup.net/ibk/*

*scrigno.popso.it/*

*idp-bpiol.poste.it*

*banking.bnl.it*

*unicredit.it/it/privati.html*

*unicredit.it/wps/myportal/retail*

*online-smallbusiness.unicredit.it*

*digital.mps.it/pri/login/*

*digital.mps.it/pri/pr/*

*icb.mps.it*

*icb.mps.it*

*aziendaonline.mps.it*

*intesasanpaolo.com*

*homebanking.bpergroup.net*

*inbiz.intesasanpaolo.com*

*carigeonline.gruppocarige.it/wps*

*gruppocarige.it/wps*

*ibbweb.tecmarket.it/*

*ib.mps.it*

*ib.cbibanking.it*

*bancagenerali.it/pib*

*qweb.quercia.com/deutschebank*

*dbonline.italy.db.com/portalserver/dbiPortal/*

*poste.it*

*ubibanca.com*

*finecobank.com*

*ihb*.cedacri.it*

*bancopostaimpresaonline.poste.it*

*business.bnl.it*

*creval.it/bancaperta*

*csebo.it/webcontoc*

*inbank.it*

*core*.cedacri.it*

*banking-imprese.credem.it*

*mybanking.credem.it*

*credem.it*

*relaxbanking.it*

Blocked websites

*sucmetrics.unicredit.it/*

*dc.services.visualstudio.com/*

*.gdatasecurity.de/*

*.kaspersky.*

*lo.v.liveperson.net/api/js/*IwZTMyMDUwZGJkNzk3NThl*

*lo.v.liveperson.net/api/js/*VhMjk2MGQxMjlhM2FjYjc4*

*nowbanking.credit-agricole.it/API/Core/erro*

*.banking4you.it/mobile*

*.bancagenerali.it/mobile*

My.unipolbanca.it/hb/RUEI/

Cdn.chebanca.net/js/afp_obf.j

Webchat.credem.it/

Secure.credem.it/

*.credem.it/*supporto-e-sicurezz*

*.credem.it/*contatti*

M.credem.it/

*cache.inbank.it/*

*cdn.inbank.it/*

Col.eum-appdynamics.com/eumcollector/beacons/browser/

*m.intesasanpaolo.com/*

*.relaxbanking.it/relaxbanking/sso. LoginMobil*

M.unicredit.it/

*m.mail.tim.it/*

*fideuramonline.it/script/ServiceLogin/ib/login*

FONTE: CHECKPOINT

POSTS RELACIONADOS