Stantinko Botnet adiciona às suas atividades um módulo para minerar criptomoedas | WeLiveSecurity

Stantinko Botnet adiciona às suas atividades um módulo para minerar criptomoedas

Pesquisadores da ESET descobriram que os operadores por trás do Stantinko Botnet estão distribuindo um módulo de criptomineração para os computadores controlados pelos crimininosos.

Pesquisadores da ESET descobriram que os operadores por trás do Stantinko Botnet estão distribuindo um módulo de criptomineração para os computadores controlados pelos crimininosos.

Os operadores do Stantinko Botnet expandiram seu kit de ferramentas com um novo elemento para lucrar com os computadores sob seu controle. A rede de bots composta por aproximadamente meio milhão de unidades, conhecida por estar ativa desde pelo menos 2012 e apontar a usuários na Rússia, Ucrânia, Bielorrússia e Cazaquistão, agora distribui um módulo de criptomineração. Mining Monero, uma criptomoeda cuja taxa de câmbio flutuou em 2019 entre US$ 50 e US$ 110, é a funcionalidade de monetização da botnet desde pelo menos agosto de 2018. Antes disso, a botnet realizou fraudes por clique e injeção de anúncios, golpes nas redes sociais e ataques de roubo de senhas.

Neste artigo, descrevemos o módulo de criptomineração do Stantinko Botnet e apresentamos uma análise de sua funcionalidade.

A característica mais notável deste módulo é a forma em que se ofuscado para frustrar a análise e evitar a detecção. Devido ao uso de ofuscações a nível fonte com uma pitada de aleatoriedade e ao fato dos operadores do Stantinko Botnet compilarem este módulo para cada nova vítima, cada amostra do módulo é única.

Descreveremos as técnicas de ofuscação do módulo e apresentaremos, em um artigo separado e destinado a analistas de malware, uma possível abordagem para lidar com algumas delas. Como o Stantinko está constantemente desenvolvendo novos ofuscadores e melhorando os ofuscadores e os módulos personalizados já existentes, os quais estão bastante ofuscados, o trabalho de rastrear todas as pequenas melhorias e mudanças introduzidas seria enorme. Portanto, decidimos mencionar e descrever apenas o que acreditamos serem ajustes significativos. Afinal, pretendemos descrever neste artigo a forma como o módulo está atualmente.

Minerador de código aberto modificado

O módulo de criptomineração do Stantinko, que consome a maioria dos recursos da máquina comprometida para minerar criptomoedas, é uma versão altamente modificada do minerador de código aberto xmr-stak. Todas as sequências desnecessárias e até mesmo todas as funcionalidades foram eliminadas na tentativa de evitar a detecção. As strings e funções restantes são muito ofuscadas. Os produtos de segurança da ESET detectam esse malware como Win{32,64}/CoinMiner.Stantinko.

Uso de proxies de mineração

O CoinMiner.Stantinko não se comunica diretamente com seu pool de mineração, mas através de proxies cujos endereços de IP são obtidos a partir do texto que aparece na descrição dos vídeos do YouTube. O malware bancário Casbaneiro usa uma técnica semelhante para esconder dados na descrição dos vídeos do YouTube, embora o Casbaneiro use descrições e canais aparentemente mais legítimos, mas com o mesmo objetivo: armazenar C&C criptografados.

A descrição deste vídeo consiste em uma string composta por endereços de IP de proxy de mineração em formato hexadecimal. Por exemplo, o vídeo do YouTube que pode ser visto na Imagem 1 na descrição “03101f1712dec626”, que corresponde a dois endereços de IP no formato hexadecimal: 03101f17 corresponde a 3.16.31 [.] 23 no formato decimal de quatro pontos e 12dec626 é 18.222.198 [.] 38. Quando produzimos este artigo, o formato foi ligeiramente ajustado. Atualmente, os endereços de IP estão contidos em “!!!!”, o que simplifica o processo de análise e evita possíveis alterações na estrutura HTML do vídeo do YouTube, o que faria com que o analisador não funcionasse.

Imagem 1. Exemplo de vídeo do YouTube cuja descrição apresenta um endereço IP para a comunicação dos módulos com o pool de mineração.

Nas versões anteriores, a URL do YouTube era hardcodeada no binário CoinMiner.Stantinko. Atualmente, o módulo recebe um identificador de vídeo como parâmetro de linha de comando. Este parâmetro é usado para criar a URL do YouTube, no formato https://www.youtube.com/watch?v=%PARAM%. O módulo de criptomineração é executado pelo componente BEDS do Stantinko Botnet ou pelo rundll32.exe através de um arquivo em lotes que não capturamos, com o módulo carregado de um lugar do sistema de arquivos local no formato %TEMP%\%RANDOM%\%RANDOM_GUID%.dll.

Informamos o YouTube sobre esse problema e todos os canais que contêm esses vídeos foram removidos.

Recursos de criptomineração

Dividimos o módulo de criptomineração em quatro partes lógicas que representam diferentes conjuntos de recursos. A parte principal executa a criptomineração real, enquanto as outras partes do módulo são responsáveis ​​pelas seguintes funções adicionais:

  • suspender outros aplicativos de criptomineração (ou seja, a concorrência)
  • detectar software de segurança
  • suspender a função de criptomineração caso o PC funcione com bateria ou se um gerenciador de tarefas for detectado, para impedir que o usuário o detecte

Criptomineração

No centro da função de criptomineração está o processo de hash e a comunicação com o proxy. O método para obter a lista de proxies de mineração foi descrito acima; o CoinMiner.Stantinko estabelece comunicação com o primeiro proxy de mineração encontrado vivo.

Sua comunicação é feita através do TCP e é criptografada pelo RC4 com uma chave que consiste nos primeiros 26 caracteres do número pi (incluindo o separador decimal, hardcodeado na string “3.141592653589793238462643”) e depois codificado na base64. A mesma chave é usada em todas as amostras que vimos.

O código do algoritmo de hash é baixado do proxy de mineração no início da comunicação e é carregado na memória, diretamente ou, em versões anteriores, da biblioteca libcr64.dll que é “droppeada” no disco.

O download do código de hash a cada execução permite que o grupo Stantinko altere esse código rapidamente. Essa mudança possibilita, por exemplo, adaptar-se às configurações dos algoritmos nas moedas existentes e mudar para mineração de outras criptomoedas para, talvez, minerar a criptomoeda mais rentável no momento da execução. O principal benefício de baixar a parte central do módulo de um servidor remoto e carregá-lo diretamente na memória é que essa parte do código nunca é armazenada no disco. Esse ajuste adicional, que não está presente na versão anterior, visa complicar a detecção considerando que os padrões nesses algoritmos são triviais para que os produtos de segurança os detectem.

Todas as instâncias do módulo de criptomineração do Stantinko que analisamos mineram Monero. Deduzimos isso dos trabalhos fornecidos pelo proxy de mineração e pelo algoritmo de hash. Por exemplo, a Imagem 2 é um trabalho enviado por um dos servidores proxy.

{“error”:null,”result”:{“status”:”OK”}}
{“method”:”job”,”params”:”blob”:”0b0bbfdee1e50567042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664000000a1c8ee5c185ed2661daab9d0c454fd40e9f53f0267fe391bdb4eb4690395deb36018″,”job_id”:”281980000000000a10″,”target”:”67d81500″,”height”:1815711}}

Imagem 2. Exemplo de trabalho de mineração recebido pelo proxy de um pool de mineração.

O algoritmo de hash usado foi analisado e descobrimos que era o CryptoNight R. Como existem várias criptomoedas que fazem uso desse algoritmo, seu reconhecimento por si só não é suficiente; simplesmente reduz a lista. Foi possível ver no trabalho apresentado que a altura da blockchain era 1815711, então tivemos que encontrar moedas usando o CryptoNight R com essa altura em exploradores de blocos dedicados, o que nos levou a Monero. Na verdade, a dissecação da string 0b0bbfdee1e50567042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664000000a1c8ee5c185ed2661daab9d0c454fd40e9f53f0267fe391bdb4eb4690395deb36018 revela que o hash do bloco anterior (67042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664) e o timestamp (1555590859) se encaixam na blockchain Monero na altura 1815711. É possível encontrar a estrutura do blob examinando sua função geradora no código fonte do Monero. A função geradora expõe outra estrutura chamada cabeçalho de bloco que contém o hash do bloco anterior e o timestamp.

Por outro lado, o algoritmo de hash não está ofuscado, já que a ofuscação afetaria significativamente a velocidade de cálculo do hash e, por exemplo, o desempenho geral e a rentabilidade.

Suspensão de outros criptomineradores

O malware lista os processos em execução em busca de outras criptomoedas. Se um concorrente for encontrado, o Stantinko suspende todos os seus threads.

O CoinMiner.Stantinko considera que um processo corresponde a uma criptomoeda se sua linha de comando contém uma string específica ou uma combinação que varia de uma amostra para outra. Por exemplo:

  • minerd
  • minergate
  • xmr
  • cpservice
  • vidservice and stratum+tcp://
  • stratum://
  • -u and pool
  • “-u and pool
  • “-u and xmr
  • -u and xmr
  • -u and mining
  • “-u and mining
  • -encodedcommand and exe
  • –donate-level
  • windows and -c and cfgi
  • regsvr32 and /n and /s and /q
  • application data and exe
  • appdata and exe

Essas strings referem-se aos seguintes criptomineradores legítimos: https://github.com/pooler/cpuminer, https://minergate.com/, https://github.com/xmrig, e até mesmo https://github.com/fireice-uk/xmr-stak, que, curiosamente, é o minerador no qual este módulo do Stantinko se baseia. As strings também levam a várias amostras de malware que contém recursos de criptominerador.

É interessante notar que os operadores do Stantinko tentaram se livrar do código da concorrência no passado. No entanto, eles se apoiaram no kit de ferramentas legítimo conhecido como AVZ Antiviral Toolkit, alimentado com um script escrito na linguagem de scripting incorporado a esta tarefa.

Impedir a detecção

O CoinMiner.Stantinko suspende temporariamente a mineração se detectar que a máquina não está conectada à energia. Esta medida, obviamente destinada aos laptops, impede que a bateria se esgote rapidamente, o que pode levar o usuário a suspeitar que algo estranho está acontecendo.

Além disso, ele suspende temporariamente a extração se um aplicativo do gerenciador de tarefas for detectado (um processo chamado procexp64.exe, procexp.exe ou taskmgr.exe).

O malware também analisa os processos em execução em busca de software de segurança e gerenciadores de tarefas. Calcula o CRC-32 do nome do processo e o compara com uma lista hardcodeada de somas de verificação CRC-32, incluída no apêndice. Em geral, essa técnica pode ajudar a evitar a detecção, uma vez que os nomes dos processos desses produtos de segurança não são incluídos no binário, o que ajuda a passar despercebido por não conter os nomes dos processos diretamente. Também torna mais difícil para os analistas descobrir o que os autores de malware estão procurando, porque é necessário decifrar esses hashes, que tecnicamente representam o mesmo problema que a quebra de senha. No entanto, o uso de uma lista de nomes de processos conhecidos geralmente é suficiente para determinar os nomes exatos.

Se uma correspondência CRC-32 for encontrada, o CRC será gravado em um arquivo de log (api-ms-win-crt-io-l1-1-0.dll). O arquivo de log é posteriormente filtrado por algum componente do Stantinko que não vimos, pois não há outra funcionalidade relacionada a ele neste módulo.

Ofuscação

Além de suas características de criptomineração, o CoinMiner.Stantinko também é notável por suas técnicas de ofuscação destinadas a impedir a detecção e análise. Algumas dessas técnicas são únicas e as descreveremos em detalhes em um artigo separado.

Conclusão

Nossa descoberta mostra que os criminosos por trás do Stantinko continuam expandindo a maneira como tiram vantagem da botnet que controlam. Suas inovações anteriores foram ataques distribuídos com base em dicionário nos sites Joomla e WordPress, que buscavam obter credenciais de servidor, provavelmente com o objetivo de vendê-las a outros criminosos.

Este módulo de criptomineração configurado remotamente, distribuído desde pelo menos agosto de 2018 e ainda ativo no momento de escrever este artigo, mostra que esse grupo continua inovando e expandindo seus recursos para ganhar dinheiro. Além de sua funcionalidade padrão de criptomineração, o módulo emprega algumas técnicas interessantes de ofuscação que iremos revelar, juntamente com algumas possíveis contramedidas, em um próximo artigo.

Indicadores de Comprometimento (IoCs)

Nomes de detecção da ESET

Win32/CoinMiner.Stantinko
Win64/CoinMiner.Stantinko

SHA-1

Uma lista completa de mais de 1.000 hashes está disponível em nosso repositório GitHub.

00F0AED42011C9DB7807383868AF82EF5454FDD8
01504C2CE8180D3F136DC3C8D6DDDDBD2662A4BF
0177DDD5C60E9A808DB4626AB3161794E08DEF74
01A53BAC150E5727F12E96BE5AAB782CDEF36713
01BFAD430CFA034B039AC9ACC98098EB53A1A703
01FE45376349628ED402D8D74868E463F9047C30

Nomes de arquivos

api-ms-win-crt-io-l1-1-0.dll
libcr64.dll
C:\Windows\TEMP\%RANDOM%\%RANDOM_GUID%.dll

Nome de Mutex e chave RC4

3,141592653589793238462643

URLs do YouTube URLs com dados de configuração de proxy de mineração

Endereços de IP de proxy de mineração

• 3.16.150[.]123
• 3.16.152[.]201
• 3.16.152[.]64
• 3.16.167[.]92
• 3.16.30[.]155
• 3.16.31[.]23
• 3.17.167[.]43
• 3.17.23[.]144
• 3.17.25[.]11
• 3.17.59[.]6
• 3.17.61[.]161
• 3.18.108[.]152
• 3.18.223[.]195
• 13.58.182[.]92
• 13.58.22[.]81
• 13.58.77[.]225
• 13.59.31[.]61
• 18.188.122[.]218
• 18.188.126[.]190
• 18.188.249[.]210
• 18.188.47[.]132
• 18.188.93[.]252
• 18.191.104[.]117
• 18.191.173[.]48
• 18.191.216[.]242
• 18.191.230[.]253
• 18.191.241[.]159
• 18.191.47[.]76
• 18.216.127[.]143
• 18.216.37[.]78
• 18.216.55[.]205
• 18.216.71[.]102
• 18.217.146[.]44
• 18.217.177[.]214
• 18.218.20[.]166
• 18.220.29[.]72
• 18.221.25[.]98
• 18.221.46[.]136
• 18.222.10[.]104
• 18.222.187[.]174
• 18.222.198[.]38
• 18.222.213[.]203
• 18.222.253[.]209
• 18.222.56[.]98
• 18.223.111[.]224
• 18.223.112[.]155
• 18.223.131[.]52
• 18.223.136[.]87
• 18.225.31[.]210
• 18.225.32[.]44
• 18.225.7[.]128
• 18.225.8[.]249
• 52.14.103[.]72
• 52.14.221[.]47
• 52.15.184[.]25
• 52.15.222[.]174

Técnicas de MITRE ATT&CK

TacticIDNameDescription
ExecutionT1085Rundll32The module can be executed by rundll32.exe.
T1035Service ExecutionThe malware can be executed as a service.
Defense EvasionT1140Deobfuscate/Decode Files or InformationThe module deobfuscates strings in its code during the execution process.
T1027Obfuscated Files or InformationThe module obfuscates its code and strings in an apparent attempt to make analysis and detection difficult.
T1102Web ServiceThe malware acquires configuration data from description of YouTube videos.
DiscoveryT1063Security Software DiscoveryThe malware acquires a list of running security products.
Command and ControlT1090Connection ProxyThe module uses proxies between itself and the mining pool.
T1008Fallback ChannelsThe module connects to another mining proxy if the initial one is inaccessible.
T1095Standard Non-Application Layer ProtocolThe malware uses TCP for its communications.
T1043Commonly Used PortThe malware communicates over port 443.
T1132Data EncodingThe module encrypts then base64 encodes some network traffic.
T1032Standard Cryptographic ProtocolThe module encrypts traffic with RC4.
T1071Standard Application Layer ProtocolAcquires configuration data from description of YouTube videos via HTTPS.
ImpactT1496Resource HijackingThe module mines cryptocurrency.

Apêndice

As somas de verificação CRC-32 verificadas pelo CoinMiner.Stantinko e os nomes de arquivo a que eles equivalem estão listados abaixo.

0xB18362C7afwserv.exe
0x05838A63ashdisp.exe
0x36C5019Cashwebsv.exe
0xB3C17664aswidsagent.exe
0x648E8307avastsvc.exe
0x281AC78Favastui.exe
0xAA0D8BF4avgcsrva.exe
0x71B621D6avgcsrvx.exe
0x7D6D668Aavgfws.exe
0x1EF12475avgidsagent.exe
0x010B6C80avgmfapx.exe
0x6E691216avgnsa.exe
0xB5D2B834avgnsx.exe
0x36602D00avgnt.exe
0x222EBF57avgrsa.exe
0xF9951575avgrsx.exe
0x2377F90Cavgsvc.exe
0x37FAB74Favgsvca.exe
0xEC411D6Davgsvcx.exe
0x0BED9FA2avgtray.exe
0x168022D0avguard.exe
0x99BA6EAAavgui.exe
0x7A77BA28avguix.exe
0x0D22F74Aavgwdsvc.exe
0x98313E09avira.servicehost.exe
0x507E7C15avira.systray.exe
0xFF934F08avp.exe
0x9AC5F806avpui.exe
0xBD07F203avshadow.exe
0x64FDC22Aavwebg7.exe
0x0BC69161avwebgrd.exe
0xBACF2EACcureit.exe
0x8FDEA9A9drwagntd.exe
0xE1856E76drwagnui.exe
0xF9BF908Edrwcsd.exe
0xC84AB1DAdrwebcom.exe
0x183AA5ACdrwebupw.exe
0xAC255C5Edrwupsrv.exe
0x23B9BE14dwantispam.exe
0xDAC9F2B7dwarkdaemon.exe
0x7400E3CBdwengine.exe
0x73982213dwnetfilter.exe
0x1C6830BCdwscanner.exe
0x86D81873dwservice.exe
0xB1D6E120dwwatcher.exe
0xD56C1E6Fegui.exe
0x69DD7DB4ekrn.exe
0xFB1C0526guardgui.exe
0x5BC1D859ipmgui.exe
0x07711AAEksde.exe
0x479CB9C4ksdeui.exe
0x6B026A91nod32cc.exe 
0xCFFC2DBBnod32krn.exe
0x59B8DF4Dnod32kui.exe
0x998B5896procexp.exe
0xF3EEEFA8procexp64.exe
0x81C16803sched.exe
0x31F6B864spideragent.exe
0x822C2BA2taskmgr.exe
0x092E6ADAupdrgui.exe
0x09375DFFwsctool.exe

Discussão