针对Kodi媒体播放器第三方插件被用于加密货币挖矿活动的分析

分类: KMPlayer资讯 发布时间:2018-09-19 19:53

如果你使用Kodi媒体播放器,那么你可能注意到,最近该播放器因为版权问题关闭了荷兰的第三方组件库XvBMC。在关闭之后,我们发现该组件库中的部分插件与2017年12月的加密货币恶意活动有所关联,可能是第三方组件在不知情的情况下被植入了恶意代码。这是发现的第二起通过Kodi媒体播放器附加组件实现大规模恶意软件分发的情况,同时也是披露的第一起借助Kodi平台发起的加密恶意活动。有趣的是,该恶意活动会将Linux或Windows语言的二进制文件推送到Kodi用户的计算机上。

对于那些不熟悉Kodi的人来说,Kodi播放器自身并没有太多亮点,但用户可以通过安装官方Kodi组件库和众多第三方组件库中的各种附加组件,来扩展软件的功能。而我们所说的争议,正是由于一些第三方附加组件可以让客户访问盗版的内容。

近期,这些疑似侵犯版权的附加组件也被指出包含恶意软件,但根据分析,这些侵犯版权的组件除去添加了DDoS模块之外,似乎没有证据表明还包含其他的恶意软件。

恶意活动

根据我们的研究,在XvMBC组件库中发现的恶意软件分别于2017年12月和2018年1月首次添加到第三方组件Bubbles和Gaia(Bubbles的一个分支)中。这两个存在威胁的组件通过多个第三方组件库实现了大范围的感染,不少Kodi用户受到影响。

该恶意软件具有多个阶段的基础架构,并且采取了一定手段,确保研究人员根据其最终的Payload(挖矿恶意软件,Cryptominer)无法轻松追溯到恶意的附加组件。挖矿恶意软件可以在Windows或Linux操作系统上运行,并挖掘门罗币(Monero,XMR)。目前,我们还没有看到针对于Android或macOS操作系统的在野版本存在。

针对这一恶意挖矿软件,用户有3种不同的感染途径:

1、将恶意组件库的URL添加到Kodi的安装包中,以便下载一些附加组件。当用户更新Kodi附加组件时,就会安装恶意组件。

2、用户安装已经包含恶意组件库URL版本的Kodi。只要用户更新Kodi附加组件,就会安装恶意组件。

3、用户安装的Kodi中包含一个恶意组件,该组件没有连接到组件库以进行更新。用户安装后立即被感染,但该恶意附加组件不会对其自身进行更新。然而,当附加组件成功在用户电脑上安装恶意挖矿软件后,挖矿软件会保持自动更新。

根据ESET的监测,受此类威胁影响最大的五个国家分别是美国、以色列、希腊、英国和荷兰。这样的结果也在情理之中,因为根据非官方的Kodi Addon社区统计,上述国家都是Kodi播放器用户数量排名的前几名。此外,还有一种针对这一地理分布现状的其他解释,就是有可能针对特定国家或地区的Kodi安装包被恶意攻击者修改后发布,同样也可能是在特定国家或地区非常流行的组件库中包含恶意组件,比如荷兰的XvBMC。

在撰写本文时,首次开始传播恶意软件的组件已经不存在(Bubbles)或不再包含恶意代码(Gaia)。但是,此前已经遭受感染的用户仍会受到影响。最重要的是,目前恶意软件仍然存在于其他组件库以及一些现有的Kodi安装包中,并且很可能是在其作者不知情的情况下存在。

技术分析

被感染用户将恶意组件库添加到Kodi播放器中后,恶意组件库会提供一个名为script.module.simplejson的附加组件,该组件使用的是一个看似合法的名称。然而,其他组件库上的正常script.module.simplejson组件版本号为3.4.0,而包含恶意软件的组件版本号为3.4.1。

由于Kodi仅根据版本号来判定是否进行更新,因此启用了自动更新功能的所有用户(该设置默认启用)将会自动从恶意组件库中接收3.4.1版本的script.module.simplejson。

与3.4.0版本相比,修改后的所谓3.4.1版本元数据中,addon.xml文件增加了一行额外的

这一行会导致Kodi下载一个名为script.module.python.requests的附加组件,版本为2.16.0或更高。而该script.module.python.requests附加组件仅由恶意存储库提供,该组件是对合法组件script.module.python.requests的修改,其中包含其他恶意的Python代码。

该Python代码根据系统环境,选择Windows或Linux版本的二进制文件并执行。该可执行文件是一个下载器,用于获取并执行最终Payload,也就是挖矿恶意软件。如果挖矿恶意软件安装成功,那么恶意Python代码将会进入到自我删除阶段,并自行删除。

Python代码

针对我们所分析的样本,经过混淆后的恶意代码位于文件script.module.python.requests\lib\requests\packages\urllib3\connectionpool.py的第846-862行。

我们对这部分代码进行了反混淆和注释,使其具有更高的可读性,如下图所示。

非常明显,该代码的编写者对Kodi播放器及其附加组件的结构具有深入的了解。这段脚本会检测操作系统(仅支持Windows和Linux,忽略Android和macOS),连接到其C&C服务器,并下载和执行适配于被感染操作系统的二进制下载器模块。

针对Windows,二进制文件会写入C:\Users\[username]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\TrustedInstaller.exe,而针对Linux,二进制文件会写入/tmp/systems/systemd。

在检索并运行二进制下载器模块后,Python脚本(在我们的样本中为connectionpool.py)会运行自毁例程,删除其自身。在上文代码截图中,我们可以看到恶意代码被使用特殊标记#-+-和#-_-#括了起来。在成功执行下载器后,该恶意组件会打开这一Python文件,找到这些特殊标记并删除中间的所有内容,然后保存修改后的Python文件。正因如此,研究人员才难以从挖矿恶意软件追溯到这一Kodi附加组件。

挖矿恶意可执行文件

由Python写成的下载器模块(Windows为64位EXE,Linux为64位ELF)包含第二阶段Payload的加密挖矿配置和下载器的下载地址。

二进制下载器从受密码保护的ZIP文件中获取适合于被感染操作系统的第二阶段Payload,这些Payload是用于不同GPU的挖矿二进制文件和恶意启动器/更新器模块。所有这些二进制文件都是针对64位Windows和64位Linux编译的,并且基于开源挖矿软件XMRStak。

挖矿恶意程序的配置如下:

受影响设备

如果用户在Windows或Linux设备上使用Kodi播放器,并且安装了来自第三方组件库的附加组件,或者使用了预装组件库的现有版本,那么可能会受到这一挖矿恶意软件的影响。

要检查自己的设备是否感染,需要使用可靠地反恶意软件产品进行扫描。ESET将该恶意软件检测为:Win64/CoinMiner.II、Win64/CoinMiner.MK、Linux/CoinMiner.BC、Linux/CoinMiner.BJ、Linux/CoinMiner.BK、Linux/CoinMiner.CU。

总结

该恶意软件最初成功渗入了Kodi播放器的一些主要附加组件库,尽管目前这些存在问题的组件库都已经被关闭或清除了威胁,但已经被感染的设备却仍处于危险之中。从下图可以看出,目前还有许多设备正在为攻击者挖掘门罗币。

根据Nanopool提供的恶意软件开发者门罗币钱包的统计数据,在撰写本文时,至少有4774名用户受到恶意软件的影响,并且总计已经产生6257门罗币(约5700欧元、6700美元)。

除了通过流行的媒体播放器Kodi实现分发,这个恶意软件还采用了一种有趣的技术。通过利用Kodi附加组件的复杂脚本功能,这些恶意组件可以在Kodi支持的操作系统(Android、Linux、macOS和Windows)上运行,尽管此次攻击者只选择了其中的两个操作系统。

攻击者可能已经将目标瞄准更多的操作系统。通过为这些系统量身定做挖矿程序(例如,使这些设备再感染病毒后仍能保持较低的功耗),从而试图感染Kodi支持的更多类型的操作系统。随着大家对系统安全重视程度的加大,应用程序附加组件和脚本功能可能成为网络犯罪分子青睐的目标。在过去,攻击者使用Microsoft Office中的Visual Basic宏感染用户,而我们今天所分析的Kodi可能就是下一个VBA。

IoC

由于包含恶意组件(Bubbles和Gaia)的原始组件库已经被删除,所以我们提供了仍然包含恶意代码的镜像组件库地址,以及部分恶意版本Kodi的地址。

值得注意的是,这些文件来源的管理者很可能并不清楚其中存在着恶意软件。

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

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

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

archive[.]org/download/DuggzProBuildWithSlyPVRguideV0.3/DuggzProBuildWithSlyPVRguideV0.3[.]zip

ukodi1[.]xyz/ukodi1/builds/Testosterone%20build%2017[.]zip

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

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

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

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

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

4E2F1E9E066D7D21CED9D690EF6119E59CF49176

53E7154C2B68EDBCCF37FB73EEB3E042A1DC7108

3CC8B10BDD5B98BEA94E97C44FFDFB1746F0C472

389CB81D91D640BA4543E178B13AFE53B0E680B5

9458F3D601D30858BBA1AFE1C281A1A99BF30542

AAAEDE03F6C014CEE8EC0D9C0EA4FC7B0E67DB59

EE83D96C7F1E3510A0D7D17BBF32D5D82AB54EF3

38E6B46F34D82BD23DEACD23F3ADD3BE52F1C0B6

D5E00FB7AEA4E572D6C7C5F8D8570DAB5E1DD156

DF5433DC7EB272B7B837E8932E4540B216A056D8