导语:如果你使用Kodi媒体播放器,那么你可能注意到,最近该播放器因为版权问题关闭了荷兰的第三方组件库XvBMC。
概述
如果你使用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文件增加了一行额外的<requires>:
这一行会导致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。
挖矿恶意程序的配置如下:
{“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″}]}}
受影响设备
如果用户在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的地址。
值得注意的是,这些文件来源的管理者很可能并不清楚其中存在着恶意软件。
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
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
此前在XvBMC组件库中的恶意文件:
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
恶意版本的Kodi:
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 URL:
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
下载器模块(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
下载器模块(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
挖矿二进制文件(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
挖矿二进制文件(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
附加组件哈希值:
B8FD019D4DAB8B895009B957A7FEBAEFCEBAFDD1 BA50EAA31441D5E2C0224B9A8048DAF4015735E7 717C02A1B040187FF54425A64CB9CC001265C0C6 F187E0B6872B096D67C2E261BE41910DAF057761 4E2F1E9E066D7D21CED9D690EF6119E59CF49176 53E7154C2B68EDBCCF37FB73EEB3E042A1DC7108 FF9E491E8E7831967361EDE1BD26FCF1CD640050 3CC8B10BDD5B98BEA94E97C44FFDFB1746F0C472 389CB81D91D640BA4543E178B13AFE53B0E680B5 6DA595FB63F632EE55F36DE4C6E1EB4A2A833862 9458F3D601D30858BBA1AFE1C281A1A99BF30542 B4894B6E1949088350872BDC9219649D50EE0ACA 79BCC4F2D19A394DD2DB2B601208E1D1EA57565B AAAEDE03F6C014CEE8EC0D9C0EA4FC7B0E67DB59 C66B5ADF3BDFA87B0731512DD2654F4341EBAE5B F0196D821381248EB8717F47C70D8C235E83A12E 7CFD561C215DC04B702FE40A199F0B60CA706660
挖矿程序和下载器模块哈希值(Windows):
08406EB5A8E75F53CFB53DB6BDA7738C296556D6 2000E2949368621E218529E242A8F00DC8EC91ED 5B1F384227F462240178263E8F2F30D3436F10F5 B001DD66780935FCA865A45AEC97C85F2D22A7E2 C6A4F67D279478C18BE67BEB6856F3D334F4AC42 EE83D96C7F1E3510A0D7D17BBF32D5D82AB54EF3
挖矿程序和下载器模块哈希值(Linux):
38E6B46F34D82BD23DEACD23F3ADD3BE52F1C0B6 90F39643381E2D8DFFF6BA5AB2358C4FB85F03FC B9173A2FE1E8398CD978832339BE86445ED342C7 D5E00FB7AEA4E572D6C7C5F8D8570DAB5E1DD156 D717FEC7E7C697D2D25080385CBD5C122584CA7C DF5433DC7EB272B7B837E8932E4540B216A056D8