針對Kodi媒體播放器第三方外掛被用於加密貨幣挖礦活動的分析
概述
如果你使用Kodi媒體播放器,那麼你可能注意到,最近該播放器因為版權問題關閉了荷蘭的第三方元件庫XvBMC。在關閉之後,我們發現該元件庫中的部分外掛與2017 年 12 月的加密貨幣惡意活動有所關聯,可能是第三方元件在不知情的情況下被植入了惡意程式碼。這是發現的第二起通過Kodi媒體播放器附加元件實現大規模惡意軟體分發的情況,同時也是披露的第一起藉助Kodi平臺發起的加密惡意活動。有趣的是,該惡意活動會將Linux或Windows語言的二進位制檔案推送到Kodi使用者的計算機上。
對於那些不熟悉Kodi的人來說,Kodi播放器自身並沒有太多亮點,但使用者可以通過安裝官方Kodi元件庫和眾多第三方元件庫中的各種附加元件,來擴充套件軟體的功能。而我們所說的爭議,正是由於一些第三方附加元件可以讓客戶訪問盜版的內容。
近期, ofollow,noindex">這些疑似侵犯版權的附加元件也被指出包含惡意軟體 ,但根據分析, 這些侵犯版權的元件除去添加了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