Nos últimos meses, nos deparamos com alguns arquivos JavaScript aparentemente usados ​​para criptografar criptomoedas diretamente no navegador. Há muito tempo, os cibercriminosos se aproveitam da mineração destas moedas para obter lucro, embora geralmente usem malware ou aplicativos potencialmente indesejáveis ​​que são instalados na máquina da vítima para tal finalidade.

No entanto, neste caso particular, a mineração é realizada diretamente no navegador quando o usuário navega em determinados sites. Portanto, não é necessário infectar a máquina da vítima ou explorar vulnerabilidades. Para isso, basta um navegador com JavaScript ativado, que é o estado padrão na maioria dos casos. Este post descreve a pesquisa que realizamos para entender melhor esta ameaça.

Começamos explorando a nossa telemetria e descobrimos que a ameaça foi parcialmente distribuída por meio de malvertising. Esse tipo de tarefa de uso intensivo da CPU geralmente está proibida pela maioria das redes publicitárias, pois degrada substancialmente a experiência do usuário. Minar criptomoedas no navegador pode parecer improdutivo (sabemos que os bitcoins de mineração requerem muita energia da CPU), mas os cibercriminosos, como veremos mais adiante, optaram por moedas que não requerem hardware personalizado para serem criadas. Por outro lado, é mais fácil alcançar um número significativo de máquinas "infectando" sites do que infectando máquinas de usuário.

Embora esta técnica possa ser usada em qualquer país, percebemos que essa campanha em particular impactou principalmente a Rússia e a Ucrânia. É importante notar que isso se deve provavelmente ao idioma dos sites, nos quais os scripts são injetados, já que conseguimos acessá-los a partir de um endereço IP nos Estados Unidos.

A Figura 1 mostra os cinco principais países mais afetados:

Figura 1: Países afetados pelo web mineiro, segundo a telemetria do ESET LiveGrid®.

A Figura 2 mostra o ranking histórico do Cisco Umbrella Top 1M de um dos domínios (reasedoper [.]pw) – que hospeda estes scripts. Observamos um aumento significativo nas pesquisas de DNS para o domínio durante o período de março a abril de 2017. Em 28 de junho de 2017, reasedoper [.]pw ficou no posto 26.300 da lista, quase o mesmo lugar que o popular site de compartilhamento de texto do GitHub GitHub Gist (gist.github.com), que estava em 26.293° na mesma data.

Figura 2: reasedoper[.]pw no ranking Cisco Umbrella Top 1M. Quando menor, mais popular.

História

A idéia de mineração de criptomoedas em navegadores não é exatamente algo novo. Em 2013, um grupo de estudantes do MIT fundou uma empresa chamada Tidbit, que ofereceu um serviço web para minar Bitcoins. Em vez de exibir anúncios, os webmasters podem incluir os scripts da Tidbit em seus sites para ganhar dinheiro desta forma.

No entanto, os fundadores do serviço receberam uma intimação do escritório do Procurador-Geral de Nova Jersey porque usaram o poder de computação dos usuários sem consentimento. Eles finalmente chegaram a um acordo, mas tiveram que abandonar o projeto.

Anteriormente, muitos outros serviços, como bitp[.]it, forneceram mineração de bitcoins em navegadores. No entanto, devido à crescente ineficiência do uso de uma CPU ou GPU regulares, esses serviços foram encerrados. Por exemplo, o projeto bitp[.]it foi fechado em julho de 2011.

Como ocorre a distribuição?

O método de distribuição deste tipo de script é um ponto chave para determinar se é legítimo ou indesejado. Neste caso em particular, conseguimos encontrar duas formas distintas pelas quais os usuários podem ser obrigados a executar esses scripts: malvertising e un snippet do código JavaScript hardcodeado.

A Figura 3 mostra o esquema de distribuição global dos scripts de mineração.

Figura 3: Esquema de distribuição dos scripts de mineração.

Malversing

Como já destacamos, o principal método de distribuição dos scripts de mineração é o malvertising. Geralmente, consiste em comprar o tráfego de uma rede de anúncios e distribuir JavaScript malicioso em vez de um anúncio publicitário tradicional. Nesta campanha, não temos certeza se a injeção do script foi intencional ou se o listat[.]biz foi comprometido.

De qualquer forma, listat[.]biz é realmente suspeito, pois parece imitar ao LiveInternet counter (LI stat), que é um contador web legítimo. Além disso, muitos domínios suspeitos foram registrados com o mesmo endereço de -mail, incluindo lmodr[.]biz, que também está presente na cadeia de malvertising.

Os principais sites que forneceram tráfego aos scripts de mineração durante julho de 2017 são mostrados na Figura 4. Alertamos que a maioria são sites de streaming de vídeo ou de jogos que são utilizados no navegador. Isso faz sentido, já que seus usuários costumam gastar mais tempo na mesma página enquanto assistem a um filme ou jogam.

Além disso, essas páginas costumam ter uma carga de CPU maior do que a normal, o que tenderia a mascarar a carga adicional do script de mineração. Assim, permite que os scripts de mineração sejam executados por mais tempo e usem uma maior capacidade de computação.

Figura 4: Sites que fornecem tráfego para os scripts de mineração, segundo a telemetria do ESET LiveGrid®.

O site no qual observamos maior quantidade de impressões de anúncios maliciosos, okino[.]tv, parece ser particularmente popular. No momento de escrever este post, Alexa Rank o posicionava em 907 lugar na Rússia e no 233 lugar na Ucrânia. Alguns dos outros sites também parecem ser populares, já que aparece no Alexa Top 1000 para a Rússia.

 

Figure 5 - Okino[.]tv Alexa Rank.

A Figura 6 mostra o consumo da CPU ao visitar o site wotsite[.]net:

Figura 6: Consumo de CPU cuando se visita wotsite[.]net.

Um exemplo específico da cadeia de redirecionamento descrito na Figura 3, acima, é fornecido na Figura 7. Os primeiros três saltos apenas injetaram o script fornecido pelo seguinte salto, como é apresentado nas Figuras 8, 9 e 10. O primeiro domínio usado no redirecionamento (skyadsvideo1[.]ru no nosso exemplo) nem sempre é o mesmo: também temos visto o code.moviead55[.]ru.

Ambos determinam os mesmos endereços IP, 167.114.238.246 e 167.114.249.120. De acordo com dados do Whois para o domínio skyad[.]video, cujo subdomínio code.skyad[.]video também determinam os mesmos dois endereços IP, os domínios parecem estar relacionados ao SkyAdVideo, proprietário da rede de anúncios.

Figura 7: Cadeia de redirecionamento no okino[.]tv ao script de mineração.

 

Figura 8: Página inicial do Okino[.]tv

 

Figura 9: Script no Skyadsvideo1[.]ru/code.php (após a desofuscação).

 

Figura 10: lmodr[.]biz/mdstat2.php.

Uma pesquisa no PassiveTotal mostra que o listat[.]biz apenas redirecionava os scripts, exceto em 1 de junho e 5 de julho, quando também estava redirecionando para contadores web reais e para anstatalsl[.]biz. Portanto, parece que o lmodr[.]biz e o listat[.]biz apenas são usados para injetar os scripts de mineração.

Figura 11: listat[.]biz/3.html.

Surpreendentemente, também percebemos que o moviead55[.]ru, no primeiro salto, também conseguiu injetar um mineiro, que estava hospedado diretamente neste site e pode minar a criptomoeda ZCash. Ele usa um pool, localizado em ws.zstat[.]net:8889, e se comunica através de sockets. No entanto, não fomos capazes de demonstrar semelhanças no código com os scripts hospedados em reasedoper[.]pw. Portanto, parece que diferentes grupos estão tentando obter lucro usando o poder de computação de seus visitantes.

Código JavaScript hardcodeado

Também encontramos no Google Cache cerca de 60 sites injetados com o mesmo snippet de JavaScript mostrado na Figura 10. A página inicial desses sites injeta um script a partir de uma URL script.php.

Figura 12: Injeção de script na página inicial.

Este script chama URLs de vários domínios, incluindo static.reasedoper[.]pw, que hospeda os scripts JS usados ​​para a mineração, cuja análise é abordada na próxima seção. Também observamos que um dos outros domínios injetados, listat[.]org, compartilha endereços IP com o usado para a campanha de malvertising (listat[.]biz). Outra semelhança é o nome de uma função, show_260, que também é usada nessa campanha.

Uma lista não abrangente de domínios afetados é fornecida na seção IOCs. No entanto, nenhum deles parecem ser sites muito conhecidos.

Como minar cryptomoedas?

Vários scripts são hospedados em static.reasedoper[.]pw e mataharirama[.]xyz. Os scripts com “multi” no nome são multiprocessos, enquanto aqueles com “single” usam um só processo. Estes são os principais arquivos de JavaScript que irão lançar os trabalhadores para explorar diferentes criptomoedas. Estes scripts são levemente ofuscados: os literais de cadeia são gravados apenas com a sequência de escape hexadecimal ("\x42\x43...").

A Figura 13 mostra que Feathercoin, Litecoin e Monero podem ser minados usando este script. No entanto, parece que atualmente não estão minando o Litecoin.

Figura 13: Podem minar três moedas.

Feathercoin e Litecoin são inspirados em Bitcoin, embora a principal diferença seja o uso de diferentes algoritmos de hash: neoscrypt e scrypt, respectivamente. O objetivo é reduzir a necessidade de usar hardware personalizado, como mineiros ASIC, em vez de CPUs comuns. Para miná-los, é necessário não só a energia da CPU, mas também uma grande quantidade de memória.

A última moeda alternativa, Monero, é diferente das outras duas. Sua característica principal é um maior nível de privacidade em comparação com o Bitcoin, considerando que é mais difícil de rastrear transações tendo em conta que o blockchain não é transparente. Em particular, usa assinaturas de círculo para esconder o endereço do remetente entre vários endereços de remetente possíveis. Também gera uma nova chave pública para cada transferência, a fim de esconder o destinatário real. O algoritmo de hash usado, cryptonight, também requer muita memória. Portanto, faz sentido escolher este tipo de moedas alternativas para minar com JavaScript em máquinas regulares.

Como a mineração requer muita energia de computação, não é nenhuma surpresa que o operador tenha decidido usar asm.js em vez de JavaScript regular para implementar os algoritmos de hash. Dizem que o asm.js é entre 1,5 e 2 vezes mais lento do que a implementação regular desses algoritmos em C. Três deles são fornecidos: scrypt.asm.js (Litecoin), cryptonight.asm.js (Monero) e neoscrypt.asm.js (Feathercoin).

Finalmente, o endereço da carteira Feathercoin é o mesmo em todos os scripts, enquanto que utilizam vários endereços do Monero. No entanto, vários scripts compartilham o mesmo endereço. Por isso, acreditamos que pertençam ao mesmo grupo.

Como a principal característica do Monero é o anonimato, não conseguimos acessar a quantidade de dinheiro armazenada nas carteiras. Com relação ao Feathercoin, o endereço não figura na rede e não temos certeza do motivo disso, mas pode ser devido ao uso de um pool para mineração.

Relação com web mineiros anteriores

Nos scripts de mineração, encontramos este endereço de Feathercoin hardcodeado: 6nmfjYVToBWb2ys4deasdydPj1kW9Gyfp4. Uma pesquisa rápida no Google mostra que esse endereço foi usado por vários anos.

Em um texto publicado no início de 2016, um usuário da Internet reclamava de um script que usava 100% de sua CPU. O que ele descrevia era muito semelhante ao que temos analisado e o endereço de Feathercoin coincide. No momento dessa descoberta, o script estava hospedado no minecrunch[.]co e, ao buscar este domínio, chegamos a um tópico sobre cryptocurrencytalk.com que o usuário Kukunin descreve em seu “humilde serviço, MineCrunch".

Com relação ao funcionamento, Kukunin explica:

"Enquanto a mineração clássica da CPU gera pouco lucro, a mineração distribuída (centenas e milhares de visitantes) de uma nova Criptomoeda (que use apenas CPU ou semelhante) com velocidade quase nativa (graças a asm.js) seria muito excelente.

[...]

O mineiro C Scrypt foi compilado para o Javascript usando o Emscripten para obter o melhor desempenho. O desempenho é cerca de 1.5x mais lento que o aplicativo nativo cpuminer."

Um link no primeiro post (https://kukunin.github.io/webminer/) mostra o mesmo endereço de Feathercoin como um exemplo. Isso reforça o vínculo entre o mineiro reasedoper[.]pw e o minecrunch[.]co. No entanto, se o objetivo do MineCrunch fosse propor um serviço aberto para mineração distribuída, os lucros gerados pelo reasedoper[.]pw beneficiariam apenas o autor do MineCrunch (ou os proprietários dos endereços hardcodeadas), pois é improvável que seja possível especificar um identificador do afiliado.

Conclusão

Apesar da redução no desempenho ao usar um mineiro JavaScript em vez de um programa nativo, o número de visitantes recebidos pelo site mineiro provavelmente permite obter lucros. Em junho, ocorreram muitas pesquisas de DNS para reasedoper[.]pw como para gist.github.com de acordo com o Cisco Umbrella Top 1M.

Mesmo que possa ser considerado como uma alternativa aos anúncios tradicionais, este comportamento é indesejado quando não há o consentimento do usuário. A Divisão de Assuntos do Consumidor de Nova Jersey considerou que a mineração de bitcoins na máquina de um usuário sem consentimento é equivalente a obter acesso ao computador. Portanto, os desenvolvedores de tais serviços devem anunciá-lo antes de iniciar a mineração, o que claramente não é o caso em um esquema de distribuição usando malvertising.

Por último, os usuários podem se proteger contra esses tipos de ameaças, tendo um complemento de bloqueio de anúncios ou um bloqueador de scripts bem configurado em seu navegador. Os usuários da ESET podem se proteger destas sequencias de comandos mal-intencionados, detectadas como um aplicativo não desejado JS/CoinMiner.A, habilitando a detecção de aplicativos potencialmente inseguros.

IOCs

URLs de mineração e malvertising

Domínio URL Nota
static.reasedoper.pw static.reasedoper[.]pw/launcher.0.single.js
static.reasedoper[.]pw/launcher.1.single.js
static.reasedoper[.]pw/launcher.2.single.js
static.reasedoper[.]pw/launcher.0.multi.js
static.reasedoper[.]pw/launcher.1.multi.js
static.reasedoper[.]pw/launcher.2.multi.js
[…]
Site que hospeda os scripts de mineração.
mataharirama[.]xyz mataharirama[.]xyz/launcher.9.single.js
[…]
Cópia do reasedoper. Compartilham dois endereços IP:

·         163.172.162.231

·         163.172.153.226

listat[.]biz listat[.]biz/3.html Redirecionamento para o reasedoper[.]pw ou mataharirama[.]xyz
lmodr[.]biz lmodr[.]biz/mdstat.php Redireção para listat[.]biz

Hash

Hash (SHA-1) Nome do arquivo
Detecção
fa2f4cf2f38383477a0a78d7e3d0841f254c5adf launcher.0.multi.js Aplicativo potencialmente indesejado JS/CoinMiner.A
b9cd68313b72deac23a53f44ae68598ec139ad27 launcher.0.single.js
e44c502ff69b6bbe291e8125304203af0f675aa3 launcher.1.multi.js
7ce2fb5cea77cbd38cd54533bce81d1b0b0d7a82 launcher.1.single.js
3b28b5f079f6d2bdaa028b31a2b5fa9734f832f2 launcher.2.multi.js
51b97b46fe53cc5aaedc3f45d6517a74008ca9cd launcher.2.single.js
38ccae4555505c8d5f36a9d9c9a20fe80a11304a launcher.3.multi.js
2aa56f945c7d3805d3ee7851cdd4e932f1cd3160 launcher.3.single.js
ae6fe31b8355a3e70d6bf6c89ff7ae18c8de41d0 launcher.4.single.js
fc7e8fb976cc260ceb680e10713e4640b23dde79 launcher.4.multi.js
d5482f2f7bab8a8832f65f6ba5dc2edc5e19687f launcher.5.multi.js
b5d475d9c084d652faabe3888bbda5b673ebe9dd launcher.5.single.js
626646c572211e157dceeb4b918b9f46c3c656f5 launcher.6.single.js
3c70b32180c2e6ae39006eee867135650c98cfa0 launcher.6.multi.js
80c11eb331758a4d6d581ddcb5ebeca9410afe93 launcher.7.multi.js
52317c0abdc69f356dd2865c1fd35923f8beb7d3 launcher.7.single.js
31d40684cd765ef6625fd9a03d2522d84f0ca79b launcher.8.single.js
9bc931ec55d1fed45bec1c571a401f4a201a02cf launcher.8.multi.js
afae4cf246125671b7eae976c7329b4e0729e109 launcher.9.multi.js
3ac2e2d827e39bd802d5e3f7619099696bc38955 launcher.9.single.js
c4c5f13f0250364bd1321d038d56dbf1a97154f8 launcher.10.single.js
29695469e53822602d9b1884c2268a68e80df999 launcher.10.multi.js
b34216ee46ea1355cbc956514012e74ff9712129 launcher.11.multi.js
9394db4ba0ee70673d451547fd4ae40bfea6112d launcher.11.single.js
6f0bf3fa4dea541a7293b89661d539bb602218c6 launcher.12.single.js
3512351bd8903ae82cc1162fed4faaafceba893d launcher.12.multi.js
5adf5146a84699b6aca5e9da52bb629bceaa7726 launcher.13.single.js
8c45141791b94e172fd5ad8eaefebe5ebb8e729c launcher.13.multi.js
519928629becb1f8b18a56609b03d4cea3c52ddd launcher.14.multi.js
c5629530af39c99c25f83baee7db4a24a9d0aa03 launcher.14.single.js
bf3a1151bc4f8188f735583257ecbbd1eaff123f launcher.15.multi.js
6e5d2b1b9f1140079f3b48edec09c8515e77e14d launcher.15.single.js
12b1bfd6b49c02f928f0429f1505d114583c213c monero.worker.js
885f102c9d4dd2e286401756ca265e4aa3f7a664 scrypt.worker.js

Domínios com script de injeção hardcodeado

allday[.]in[.]ua
anekbook[.]ru
bike[.]co[.]ua
cg-lab[.]ru
dikobras[.]com
doctrina62[.]ru
ekavuz[.]ru
fenix-45[.]ru
ipnalog[.]ru
jobochakov[.]com
kharkov-arenda[.]com[.]ua
kuzdoska[.]ru
laminirovanievolos[.]ru
marlin-group[.]ru
mat4ast[.]com
megalifez[.]net
mirstihoff[.]ru
munirufa[.]ru
murlyka[.]net[.]ua
newscom[.]ru
obad[.]ru
ogms[.]ru
opinionblog[.]ru
optiplast[.]ru
otdamprimy[.]ru
pcook[.]ru
pogelanie[.]info
posbank[.]ru
programs-tv[.]ru
psinovo[.]ru
scoot-club[.]ru
ska4ka[.]com
stihi[.]by
stihoslov[.]ru
subcar[.]org
sumytex[.]in[.]ua
suntehnic[.]ru
td-klassik[.]ru
trbook[.]com[.]ua
vstupino[.]su
x-sport[.]info