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.
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":"0b0
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 0b0bbf
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
- https://www.youtube[.]com/watch?v=kS1jXg99WiM
- https://www.youtube[.]com/watch?v=70g4kw2iRGo
- https://www.youtube[.]com/watch?v=cAW1xEpyr7Y
- https://www.youtube[.]com/watch?v=6SSKQdE5Vjo
- https://www.youtube[.]com/watch?v=fACKZewW22M
- https://www.youtube[.]com/watch?v=FDQOa5zCv3s
- https://www.youtube[.]com/watch?v=TpyOURRvFmE
- https://www.youtube[.]com/watch?v=2fpiR4NIpsU
- https://www.youtube[.]com/watch?v=TwnD0Kp_Ohc
- https://www.youtube[.]com/watch?v=wJsbj8zPPNs
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
Tactic | ID | Name | Description |
---|---|---|---|
Execution | T1085 | Rundll32 | The module can be executed by rundll32.exe. |
T1035 | Service Execution | The malware can be executed as a service. | |
Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | The module deobfuscates strings in its code during the execution process. |
T1027 | Obfuscated Files or Information | The module obfuscates its code and strings in an apparent attempt to make analysis and detection difficult. | |
T1102 | Web Service | The malware acquires configuration data from description of YouTube videos. | |
Discovery | T1063 | Security Software Discovery | The malware acquires a list of running security products. |
Command and Control | T1090 | Connection Proxy | The module uses proxies between itself and the mining pool. |
T1008 | Fallback Channels | The module connects to another mining proxy if the initial one is inaccessible. | |
T1095 | Standard Non-Application Layer Protocol | The malware uses TCP for its communications. | |
T1043 | Commonly Used Port | The malware communicates over port 443. | |
T1132 | Data Encoding | The module encrypts then base64 encodes some network traffic. | |
T1032 | Standard Cryptographic Protocol | The module encrypts traffic with RC4. | |
T1071 | Standard Application Layer Protocol | Acquires configuration data from description of YouTube videos via HTTPS. | |
Impact | T1496 | Resource Hijacking | The 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.
0xB18362C7 | afwserv.exe |
---|---|
0x05838A63 | ashdisp.exe |
0x36C5019C | ashwebsv.exe |
0xB3C17664 | aswidsagent.exe |
0x648E8307 | avastsvc.exe |
0x281AC78F | avastui.exe |
0xAA0D8BF4 | avgcsrva.exe |
0x71B621D6 | avgcsrvx.exe |
0x7D6D668A | avgfws.exe |
0x1EF12475 | avgidsagent.exe |
0x010B6C80 | avgmfapx.exe |
0x6E691216 | avgnsa.exe |
0xB5D2B834 | avgnsx.exe |
0x36602D00 | avgnt.exe |
0x222EBF57 | avgrsa.exe |
0xF9951575 | avgrsx.exe |
0x2377F90C | avgsvc.exe |
0x37FAB74F | avgsvca.exe |
0xEC411D6D | avgsvcx.exe |
0x0BED9FA2 | avgtray.exe |
0x168022D0 | avguard.exe |
0x99BA6EAA | avgui.exe |
0x7A77BA28 | avguix.exe |
0x0D22F74A | avgwdsvc.exe |
0x98313E09 | avira.servicehost.exe |
0x507E7C15 | avira.systray.exe |
0xFF934F08 | avp.exe |
0x9AC5F806 | avpui.exe |
0xBD07F203 | avshadow.exe |
0x64FDC22A | avwebg7.exe |
0x0BC69161 | avwebgrd.exe |
0xBACF2EAC | cureit.exe |
0x8FDEA9A9 | drwagntd.exe |
0xE1856E76 | drwagnui.exe |
0xF9BF908E | drwcsd.exe |
0xC84AB1DA | drwebcom.exe |
0x183AA5AC | drwebupw.exe |
0xAC255C5E | drwupsrv.exe |
0x23B9BE14 | dwantispam.exe |
0xDAC9F2B7 | dwarkdaemon.exe |
0x7400E3CB | dwengine.exe |
0x73982213 | dwnetfilter.exe |
0x1C6830BC | dwscanner.exe |
0x86D81873 | dwservice.exe |
0xB1D6E120 | dwwatcher.exe |
0xD56C1E6F | egui.exe |
0x69DD7DB4 | ekrn.exe |
0xFB1C0526 | guardgui.exe |
0x5BC1D859 | ipmgui.exe |
0x07711AAE | ksde.exe |
0x479CB9C4 | ksdeui.exe |
0x6B026A91 | nod32cc.exe |
0xCFFC2DBB | nod32krn.exe |
0x59B8DF4D | nod32kui.exe |
0x998B5896 | procexp.exe |
0xF3EEEFA8 | procexp64.exe |
0x81C16803 | sched.exe |
0x31F6B864 | spideragent.exe |
0x822C2BA2 | taskmgr.exe |
0x092E6ADA | updrgui.exe |
0x09375DFF | wsctool.exe |