Se você usa o Kodi, talvez tenha notado que um repositório holandês popular de complementos, o XvBMC, foi encerrado recentemente por causa de avisos de violação de direitos autorais. Após deixar de funcionar, descobrimos que esse repositório - provavelmente sem saber - fazia parte de uma campanha de criptomineração que remonta a dezembro de 2017. É o segundo caso conhecido de distribuição de malware em grande escala por meio de complementos para o Kodi e o primeiro conhecido publicamente, sendo também a primeira campanha de criptomineração lançada através da plataforma Kodi. Curiosamente, essa campanha apresenta binários específicos do Linux e/ou do Windows nos sistemas operacionais dos usuários do Kodi.

Para aqueles que não estão familiarizados com a plataforma Kodi, o popular software de reprodução multimídia não fornece nenhum conteúdo, mas os usuários podem estender a funcionalidade do software instalando vários add-ons, encontrados no repositório oficial do Kodi e em outros repositórios. Alguns add-ons permitem que os usuários acessem conteúdo pirateado, provocando controvérsia em torno do Kodi.

Ultimamente, os add-ons acusados de violação de direitos autorais também foram acusados de expor os usuários a malware. Mas, além de um incidente no qual um módulo DDoS foi adicionado a um popular add-ons do Kodi de outra parte, nenhuma evidência de malware distribuído através de add-ons de Kodi foi apresentada até agora.

A campanha maliciosa através do Kodi

De acordo com nossa pesquisa, o malware que encontramos no repositório XvMBC foi adicionado pela primeira vez ao popular repositório de terceiros Bubbles e Gaia em dezembro de 2017 e janeiro de 2018, respectivamente. A partir dessas duas fontes, e por meio de rotinas de atualização de proprietários de repositórios desprevenidos de outros add-ons e builds do Kodi pré-montados, o malware se propagou através do ecossistema do Kodi.

O malware tem uma arquitetura multi-stage e emprega medidas para garantir que o payload - o criptominerador - não possa ser facilmente rastreada até o add-on malicioso. O criptominerador é executado no Windows e no Linux e minera a criptomoeda Monero (XMR). Até o momento, não vimos uma versão ativa direcionada aos dispositivos Android ou macOS.

As vítimas desta campanha acabam executando o criptominerador de três formas:

  1. Adicionando a URL de um repositório malicioso ao instalador do Kodi para baixar alguns add-on. O add-on malicioso é então instalado sempre que atualizam os add-on do Kodi.
  2. Instalando builds do Kodi prontos para incluir a URL de um repositório malicioso. O add-on malicioso é então instalado sempre que atualizam os add-on do Kodi.
  3. Instalando builds do Kodi prontos que contém um add-on malicioso, mas sem qualquer link para um repositório de atualizações. Eles são inicialmente comprometidos, embora não recebam mais atualizações para o add-on malicioso. No entanto, se o criptominerador for instalado, ele persistirá e receberá atualizações.

Os cinco principais países afetados por essa ameaça, de acordo com a telemetria da ESET, são os Estados Unidos, Israel, Grécia, Reino Unido e Holanda, o que não surpreende, pois todos esses países estão na lista dos “principais países de tráfego”, de acordo com as estatísticas da Comunidade Unofficial Kodi Addon.

Figura 1 - Propagação das detecções de criptomineradores segundo a ESET

A partir dessa pesquisa, os repositórios a partir dos quais o malware começou a se propagar deixaram de existir (no caso do Bubbles) ou não estão mais propagando o código malicioso (Gaia). No entanto, as vítimas que conseguiram instalar o criptominerador em seus dispositivos ainda estão sendo afetadas. Além disso, o malware ainda persiste em alguns builds do Kodi, provavelmente sem o conhecimento de seus criadores.

Figura 2 - Linha do tempo da Campanha

Análise técnica: Como funciona a campanha maliciosa no Kodi

Depois que as vítimas adicionam o repositório malicioso à sua instalação do Kodi, o repositório malicioso inclui um add-on chamado script.module.simplejson - um nome que corresponde a um add-on legítimo usado por muitos outros add-ons. No entanto, enquanto outros repositórios possuem apenas contam com o script.module.simplejson add-on na versão 3.4.0, o repositório malicioso inclui esse add-on com o número de versão 3.4.1.

Como o Kodi se baseia no número das versões para atualizar as detecções, todos os usuários com o recurso de Auto Update ativado (que é uma configuração padrão comum) receberão automaticamente o script.module.simplejson na versão 3.4.1 do repositório malicioso.

A única parte do script.module.simplejson na versão 3.4.1 que apresenta modificações em relação à versão 3.4.0 são seus metadados - o arquivo addon.xml contém uma linha adicional <requires>:

Isso diz ao Kodi para baixar e instalar um complemento chamado script.module.python.requests, na versão 2.16.0 ou superior. O add-on script.module.python.requests é servido apenas pelo repositório malicioso. É uma modificação do add-on legítimo script.module.requests, que contém adicionalmente umas linhas de código em Python.

O código em Python baixa e executa conforme seja apropriado, um binário do Windows ou Linux. Este executável é um downloader que chama e executa o payload final: um criptominerador executável. Se a instalação do criptominerador for bem-sucedida, o código malicioso em Python será movido para um estágio de auto-eliminação e será excluído.

Figura 3 – Os malwares

Código malicioso em Python

Na amostra analisada aqui, o código malicioso ofuscado está localizado nas linhas 846-862 do arquivo script.module.python.requests\lib\requests\packages\urllib3\connectionpool.py.

Figura 4 - Código malicioso ofuscado em connectionpool.py

Quando desofuscado e comentado, o código se torna muito mais legível, como podemos ver na Figura 5.

Figura 5. Código malicioso depois da desofuscação (comentário adicionado pelo pesquisador)

É claro que o código é escrito por alguém com um bom conhecimento do Kodi e sua arquitetura add-on. O script detecta em qual sistema operacional está sendo executado (somente o Windows e o Linux são suportados), o conecta ao seu servidor C&C e faz o download e executa um módulo downloader binário apropriado para o sistema operacional.

O binário do Windows é gravado em: C:\Users\[username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\TrustedInstaller.exe, enquanto o binário do Linux é gravado em /tmp/systems/systemd.

Depois de recuperar e executar o módulo de downloader binário, o script em Python - connectionpool.py - executa sua rotina de exclusão. Olhando para trás na Figura 4, vemos que o código malicioso está entre os marcadores especiais #-+- y  #-_-#. O código executado após a execução bem-sucedida do downloader binário abre o arquivo Python, localiza esses marcadores especiais e os exclui, assim como também tudo o que está no meio de ambos. O arquivo limpo em Python é salvo. Como resultado, a instalação do criptominerador não pode ser facilmente rastreada até o add-on para Kodi.

Figura 6. Exclusão do código Python (comentários adicionados pelo pesquisador)

Criptominerador executável

O módulo downloader (arquivo 64 bits EXE para Windows, 64 bits ELF para Linux) recuperado pelo código Python contém uma configuração do criptominerador criptografado e links de download para o payload do segundo estágio – os atuais binários do criptominerador.

O downloader binário entrega o payload de segundo estágio apropriado, de acordo com o sistema operacional (binários criptominerador para diferentes GPUs e um módulo lançador/ atualizador malicioso) arquivos ZIP protegidos por senha. Estes binários são compilados tanto para Windows de 64 bits como para Linux 64 bits e se baseiam no software para criptomineração de código aberto XMRStak.

A configuração para o criptominerador é a seguinte:

{“monero”:{“default”:{“wallet”:”49WAk6TaCMX3HXN22nWPQAfBjP4J3ReUKg9tu3FoiPugcJs3fsnAvyGdrC41HZ4N6jcHEiwEGvH7z4Sn41PoZtLABFAVjm3″,”password”:””,”name”:””,”email”:””,”weight”:1,”format”:{“rig”:””,”address”:”%w%.%n%/%e%”,”password”:”%p%”}},”pools”:[{“host”:”xmr-us-east1.nanopool.org:14444″},{“host”:”xmr-eu1.nanopool.org:14444″},{“host”:”xmr-asia1.nanopool.org:14444″}]}}

Meu dispositivo foi comprometido? Como faço para limpá-lo?

Se você usa o Kodi em um dispositivo com Windows ou Linux e instalou add-ons de outros repositórios ou um build do Kodi pronto, há uma chance de ter sido afetado por essa campanha de criptomineração.

Para saber se o seu dispositivo foi comprometido, verifique-o com uma solução de segurança confiável. Os produtos da ESET detectam e bloqueiam essas ameaças como Win64/CoinMiner.II y Win64/CoinMiner.MK no Windows e como Linux/CoinMiner.BC, Linux/CoinMiner.BJ, Linux/CoinMiner.BK, e Linux/CoinMiner.CU no Linux. No Windows, você pode usar o teste gratuito da ESET e, no Linux, a versão de avaliação gratuita do ESET NOD32 Antivírus para Linux Desktop, para verificar se há ameaças no computador e remover qualquer coisa detectada. Os clientes da ESET são protegidos automaticamente.

Conclusão

Embora os principais repositórios de add-on que inicialmente introduziam esse malware no ecossistema do Kodi agora estejam fechados ou limpos, isso não muda o fato de que muitos dispositivos já executaram os add-ons maliciosos. Como pode ser visto na Figura 7, muitos dispositivos ainda estão minerando o Monero para os cibercriminosos por trás dessa campanha.

Figura 7. Pagamentos recebidos pelo criador do malware

De acordo com estas estatísticas da carteira Monero dos autores do malware, fornecida pela Nanopool, pelo menos 4.774 vítimas estão sendo afetadas atualmente pelo código malicioso e geraram 62,57 XMR (cerca de 5.700 euros ou 6700 dólares) até a presente data.

Além de ser o segundo malware e o primeiro criptominerador, distribuído pela popular plataforma Kodi, essa campanha de malware empregava uma interessante técnica de comprometimento. Ao utilizar a complexa funcionalidade de código dos complementos do Kodi, que funcionam nos sistemas operacionais suportados pelo Kodi - Android, Linux, macOS e Windows. Os cibercriminosos por trás dessa campanha se dirigiram facilmente ao Kodi no Linux e no Windows.

Provavelmente, os responsáveis ​​por essa campanha conseguiram atacar dispositivos em mais sistemas operacionais. Quer através da construção de versões nativas dos seus criptomineradores para estes outros sistemas operacionais ou criando payloads alternativos mais ajustados para a plataforma (por exemplo, payloads menos intensas em termos de energia para dispositivos alimentados através de uma bateria) que poderiam comprometer mais sistemas operacionais que suporta o Kodi.

Na medida em que as disposições de segurança dos sistemas operacionais continuam sendo ajustadas, buscando oportunidades em aplicativos do tipo add-on e/ou de funcionalidades que são baseadas em código, como foram aqueles que foram exploradas aqui, parece que isso se tornará algo cada vez mais recorrente por parte dos cibercriminosos. Com as macros do Visual Basic em aplicativos para o Microsoft Office, vimos isso no passado e também recentemente. Os add-ons de Jodi podem não ser "os próximos VBA", mas os passos que foram vistos aqui podem ser um indicador do que está por vir.

Indicadores de comprometimento (IoCs)

Add-ons maliciosos do Kodi

Desde repositórios originalmente contendo add-ons maliciosos (Bubbles e Gaia) foram removidos ou limpos, nós estamos fornecendo exemplos de links para repositórios semelhantes que ainda contêm código malicioso, e também exemplos de links para alguns builds  do Kodi maliciosos escolhidos forma aleatória.

É importante ter em conta que é muito provável que os proprietários dessas fontes secundárias de arquivos maliciosos listados abaixo estejam propagando essas ameaças sem nem mesmo saberem disso.

Example mirror of Bubbles
github[.]com/yooperman17/trailerpark/blob/master/repository/repository.bubbles.3/repository.bubbles.3-4.2.0[.]zip
github[.]com/yooperman17/trailerpark/blob/master/repository/common/script.module.urllib.3/script.module.urllib.3-1.22.3[.]zip
Example mirror of Gaia
github[.]com/josephlreyes/gaiaorigin/blob/master/common/script.module.python.requests/script.module.python.requests-2.16.1[.]zip
github[.]com/josephlreyes/gaiaorigin/blob/master/common/script.module.simplejson/script.module.simplejson-3.4.1[.]zip
Malicious files previously available on XvBMC repository
github[.]com/XvBMC/repository.xvbmc/tree/b8f5dd59961f2e452d0ff3fca38b26c526c1aecb/Dependencies/script.module[.]simplejson
github[.]com/XvBMC/repository.xvbmc/tree/b8f5dd59961f2e452d0ff3fca38b26c526c1aecb/Dependencies/script.module.python[.]requests
github[.]com/XvBMC/repository.xvbmc/blob/b8f5dd59961f2e452d0ff3fca38b26c526c1aecb/Dependencies/zips/script.module.python.requests/script.module.python.requests-2.16.3[.]zip
github[.]com/XvBMC/repository.xvbmc/blob/b8f5dd59961f2e452d0ff3fca38b26c526c1aecb/Dependencies/zips/script.module.simplejson/script.module.simplejson-3.4.1[.]zip
Sampling of malicious Kodi builds
archive[.]org/download/retrogamesworld7_gmail_Kodi_20180418/kodi[.]zip
archive[.]org/download/DuggzProBuildWithSlyPVRguideV0.3/DuggzProBuildWithSlyPVRguideV0.3[.]zip
ukodi1[.]xyz/ukodi1/builds/Testosterone%20build%2017[.]zip

C&C URLs
openserver[.]eu/ax.php
kodinet.atspace[.]tv/ax.php
kodiupdate.hostkda[.]com/ax.php
kodihost[.]rf.gd/ax.php
updatecenter[.]net/ax.php
stearti.atspace[.]eu/ax.php
mastercloud.atspace[.]cc/ax.php
globalregistry.atspace.co[.]uk/ax.php
meliova.atwebpages[.]com/ax.php
krystry.onlinewebshop[.]net/ax.php

Downloader module (Windows)
openserver[.]eu/wib
kodinet.atspace[.]tv/wib
kodiupdate.hostkda[.]com/wib
kodihost.rf[.]gd/wib
updatecenter[.]net/wib
bitbucket[.]org/kodiserver/plugin.video.youtube/raw/HEAD/resources/lib/wib
gitlab[.]com/kodiupdate/plugin.video.youtube/raw/master/resources/lib/wib
www.dropbox[.]com/s/51fgb0ec9lgmi0u/wib?dl=1&raw=1

Downloader module (Linux)
openserver[.]eu/lib
kodinet.atspace[.]tv/lib
kodiupdate.hostkda[.]com/lib
kodihost.rf[.]gd/lib
updatecenter[.]net/lib
bitbucket[.]org/kodiserver/plugin.video.youtube/raw/HEAD/resources/lib/lib
gitlab[.]com/kodiupdate/plugin.video.youtube/raw/master/resources/lib/lib
www.dropbox[.]com/s/e36u2wxmq1jcjjr/lib?dl=1&raw=1

Cryptominer binaries (Windows)
updatecenter[.]net/wub
openserver[.]eu/wub
glocato.atspace[.]eu/wub
oraceur.hostkda[.]com/wub
dilarti.1free-host[.]com/wub
utudict.vastserve[.]com/wub
encelan.atspace[.]cc/wub

Cryptominer binaries (Linux)
updatecenter[.]net/lub
openserver[.]eu/lub
glocato.atspace[.]eu/lub
oraceur.hostkda[.]com/lub
dilarti.1free-host[.]com/lub
utudict.vastserve[.]com/lub
encelan.atspace[.]cc/lub

Hashes of malicious add-ons
B8FD019D4DAB8B895009B957A7FEBAEFCEBAFDD1
BA50EAA31441D5E2C0224B9A8048DAF4015735E7
717C02A1B040187FF54425A64CB9CC001265C0C6
F187E0B6872B096D67C2E261BE41910DAF057761
4E2F1E9E066D7D21CED9D690EF6119E59CF49176
53E7154C2B68EDBCCF37FB73EEB3E042A1DC7108
FF9E491E8E7831967361EDE1BD26FCF1CD640050
3CC8B10BDD5B98BEA94E97C44FFDFB1746F0C472
389CB81D91D640BA4543E178B13AFE53B0E680B5
6DA595FB63F632EE55F36DE4C6E1EB4A2A833862
9458F3D601D30858BBA1AFE1C281A1A99BF30542
B4894B6E1949088350872BDC9219649D50EE0ACA
79BCC4F2D19A394DD2DB2B601208E1D1EA57565B
AAAEDE03F6C014CEE8EC0D9C0EA4FC7B0E67DB59
C66B5ADF3BDFA87B0731512DD2654F4341EBAE5B
F0196D821381248EB8717F47C70D8C235E83A12E
7CFD561C215DC04B702FE40A199F0B60CA706660

A ESET detecta o código malicioso do Python como Python/CoinMiner.W.

Hashes of cryptominers and downloader modules (Windows)
08406EB5A8E75F53CFB53DB6BDA7738C296556D6
2000E2949368621E218529E242A8F00DC8EC91ED
5B1F384227F462240178263E8F2F30D3436F10F5
B001DD66780935FCA865A45AEC97C85F2D22A7E2
C6A4F67D279478C18BE67BEB6856F3D334F4AC42
EE83D96C7F1E3510A0D7D17BBF32D5D82AB54EF3

A ESET detecta tanto o criptominerador quanto o módulo de download como Win64/CoinMiner.II e/ou Win64/CoinMiner.M. Nossa telemetria mostra mais de 100 hashes diferentes para os nomes de detecção.

Hashes of cryptominers and downloader modules (Linux)
38E6B46F34D82BD23DEACD23F3ADD3BE52F1C0B6
90F39643381E2D8DFFF6BA5AB2358C4FB85F03FC
B9173A2FE1E8398CD978832339BE86445ED342C7
D5E00FB7AEA4E572D6C7C5F8D8570DAB5E1DD156
D717FEC7E7C697D2D25080385CBD5C122584CA7C
DF5433DC7EB272B7B837E8932E4540B216A056D8

A ESET detecta as versões do criptominerador e módulo downloader para Linux como Linux/CoinMiner.BC, Linux/CoinMiner.BJ, Linux/CoinMiner.BK e Linux/CoinMiner.CU.