安全動(dòng)態(tài)

wav音樂(lè)里面竟然有病毒?

來(lái)源:聚銘網(wǎng)絡(luò)    發(fā)布時(shí)間:2019-10-31    瀏覽次數(shù):
 

信息來(lái)源:Free Buf

我原本認(rèn)為,在聽(tīng)音樂(lè)這件事上,最不需要的就是提心吊膽了。直到又一例隱藏惡意代碼的wav音頻文件曝光,隱寫(xiě)術(shù)的魔爪終于從png和jpg伸向wav文件。

10月17日,BlackBerry Cylance威脅研究人員最新發(fā)現(xiàn):wav音頻文件中嵌入模糊惡意代碼。

播放時(shí),你聽(tīng)到的wav文件發(fā)出的音樂(lè)沒(méi)有明顯的毛刺或質(zhì)量問(wèn)題,甚至還有點(diǎn)動(dòng)聽(tīng)。背地里,音頻加載程序解碼并執(zhí)行音頻數(shù)據(jù)中的惡意代碼,目標(biāo)很清晰,就是挖礦。

無(wú)獨(dú)有偶,俄羅斯Turla也用過(guò)這一招。今年6月,俄羅斯網(wǎng)絡(luò)間諜組織Turla就創(chuàng)意性地將惡意代碼隱藏在W**音頻文件中并傳輸至攻擊目標(biāo),這也是全球首個(gè)用W**文件傳播惡意代碼的攻擊活動(dòng)。有點(diǎn)不同的是,人家Turla組織不挖礦,而是用W**音頻文件發(fā)起的國(guó)家級(jí)攻擊活動(dòng),直接指向網(wǎng)絡(luò)間諜入侵。

Turla組織顛覆了以往文本、圖片、鏈接等形式的局限,拉開(kāi)了用W**音頻文件傳播惡意代碼的大幕。

繼Turla組織的間諜行動(dòng)后,其他黑客也效仿了起來(lái)。

BlackBerry Cylance所發(fā)現(xiàn)的是全球首例用W**音頻隱寫(xiě)術(shù)加密挖礦的網(wǎng)絡(luò)攻擊。受感染主機(jī)在下載并使用特定wav加載程序加載W**文件后,會(huì)繞開(kāi)電腦殺毒軟件與防火墻,安裝XMRrig加密貨幣礦工應(yīng)用程序,變身“挖礦機(jī)”。

BlackBerry Cylance研究與情報(bào)副總裁還補(bǔ)充說(shuō),現(xiàn)在Windows桌面和服務(wù)器上都發(fā)現(xiàn)這種隱寫(xiě)惡意代碼的W**文件。簡(jiǎn)言之,個(gè)人及企業(yè)用戶(hù)已暴露在了隱寫(xiě)術(shù)加持下的惡意攻擊威脅中。

什么是隱寫(xiě)術(shù)?

安全員都知道,隱寫(xiě)術(shù)就是指將信息隱藏在另一種數(shù)據(jù)介質(zhì)中的技術(shù)。例如,將純文本隱藏在圖像中,又例如將惡意代碼隱藏在音頻中。

這挺雞賊的,因?yàn)橥ㄟ^(guò)這種手段,暗藏惡意代碼的文件就可以躲開(kāi)安全軟件的查殺攔截,甚至“洗白”享受白名單待遇,長(zhǎng)久潛伏而不被發(fā)現(xiàn)。

隱寫(xiě)術(shù)在惡意程序開(kāi)發(fā)中已經(jīng)流行了十多年,最近開(kāi)始,隱寫(xiě)術(shù)開(kāi)始從PNG、JPG圖片蔓延至W**音頻文件。

我們以BlackberryCylance披露的報(bào)告威力進(jìn)行分析,這類(lèi)wav文件加載器可以分為以下三類(lèi):

1、采用最低有效位(LSB)隱寫(xiě)術(shù)的加載程序解碼并執(zhí)行PE文件。

2、加載程序采用基于rand()的解碼算法來(lái)解碼和執(zhí)行PE文件。

3、加載程序采用基于rand()的解碼算法來(lái)解碼和執(zhí)行shellcode。

第一類(lèi):隱寫(xiě)術(shù)PE加載器

第一類(lèi)加載程序采用隱寫(xiě)術(shù)從W**文件中提取可執(zhí)行內(nèi)容。

隱寫(xiě)術(shù)是一種在另一個(gè)文件中隱藏文件或消息的做法,一般情況下不會(huì)引起對(duì)目標(biāo)文件的懷疑。攻擊者大量使用隱寫(xiě)技術(shù)來(lái)隱藏?cái)?shù)據(jù)。

實(shí)際上,BlackBerry Cylance于4月發(fā)布了一份報(bào)告,該報(bào)告描述了海蓮花組織如何利用隱寫(xiě)術(shù)來(lái)隱藏圖像文件中的惡意后門(mén)。本文分析的樣本使用了最低有效位隱寫(xiě)術(shù)(LSB)將惡意代碼隱藏在音頻文件中,其中單個(gè)字節(jié)的最右位包含惡意代碼。

樣本信息如下:

技術(shù)細(xì)節(jié):

這個(gè)加載器讀取wav文件頭的最后四個(gè)字節(jié),這四個(gè)字節(jié)表示wav文件中存儲(chǔ)數(shù)據(jù)的大小,在這個(gè)惡意的wav文件里,這個(gè)大小是15,179,552 字節(jié)。

圖:W**文件頭-數(shù)據(jù)大小

在下面的代碼片段中,加載程序讀取這四個(gè)字節(jié),并依此分配內(nèi)存空間。然后,它讀取數(shù)據(jù)并關(guān)閉W**文件。最后,do-while循環(huán)遍歷前64個(gè)字節(jié)。按照下圖所示的算法進(jìn)行解碼。

圖:解碼文件大小

顯而易見(jiàn),循環(huán)是在計(jì)數(shù)器<32且計(jì)數(shù)器每次迭代遞增1時(shí)執(zhí)行的。另外,data_offset表示編碼數(shù)據(jù)內(nèi)的偏移量,其值每次迭代從零開(kāi)始遞增2。此循環(huán)將覆蓋數(shù)據(jù)的前64個(gè)字節(jié)(32* 2):

圖:W**文件數(shù)據(jù)-64字節(jié)

對(duì)于每個(gè)已處理的字節(jié),加載程序?qū)⑻崛SB并將其分配給decoded_size中的相應(yīng)位位置,從31(即最左邊的位)開(kāi)始,并在每次迭代時(shí)遞減1,并將此算法應(yīng)用于數(shù)據(jù)的前64個(gè)字節(jié)。

接下來(lái),分配大小為decoded_size的存儲(chǔ)器,并且執(zhí)行各種計(jì)算。修改了默認(rèn)標(biāo)簽名稱(chēng),以指示所有計(jì)算的結(jié)果。這些數(shù)字將在即將到來(lái)的解碼循環(huán)中用作已編碼數(shù)據(jù)的偏移量:

圖:分配內(nèi)存并計(jì)算偏移量

按照上面的代碼,do-while循環(huán)開(kāi)始解碼其余的編碼數(shù)據(jù):

圖:解碼文件內(nèi)容

與前一個(gè)解碼循環(huán)類(lèi)似,此循環(huán)提取每個(gè)其他字節(jié)的LSB。但是,區(qū)別就在于它起始于最低位(最右一位)。每次迭代都從8個(gè)字節(jié)中提取LSB,以形成8位(1個(gè)字節(jié))的解碼數(shù)據(jù)。

如果應(yīng)用此算法生成兩個(gè)字節(jié)的解碼數(shù)據(jù),就需要32個(gè)編碼字節(jié)。因?yàn)?位組成一個(gè)解碼字節(jié),并且每?jī)蓚€(gè)編碼字節(jié)提取一個(gè)LSB,所以生成兩個(gè)解碼字節(jié)就需要32個(gè)編碼字節(jié)(2個(gè)解碼字節(jié)*每個(gè)解碼字節(jié)8個(gè)LSB * 2 = 32):

圖:32個(gè)字節(jié)的編碼數(shù)據(jù)

第二類(lèi) 基于Rand()的PE加載程序

第二類(lèi)加載器使用基于rand()的解碼算法來(lái)隱藏PE文件。

樣本信息如下:

技術(shù)細(xì)節(jié):

執(zhí)行后,此加載程序?qū)⒆x取W**文件頭,提取數(shù)據(jù)大小,相應(yīng)地分配內(nèi)存,并將W**數(shù)據(jù)存儲(chǔ)在新分配的內(nèi)存中。接下來(lái),加載器解碼W**文件的數(shù)據(jù)內(nèi)容:

圖:基于Rand()的PE加載器解碼循環(huán)

注意,size_of_data表示從W**頭中提取的數(shù)據(jù)大小,wave_data包含編碼的W**數(shù)據(jù)的地址。加載程序調(diào)用srand函數(shù)和rand函數(shù),從W**數(shù)據(jù)中提取PE文件。

為什么選擇這兩個(gè)函數(shù)呢?因?yàn)楫?dāng)srand函數(shù)接收一個(gè)固定的值作為種子的時(shí)候,每次調(diào)用rand函數(shù)就會(huì)生成一個(gè)固定的偽隨機(jī)數(shù)。

此時(shí),do-while循環(huán)遍歷編碼數(shù)據(jù)的每個(gè)字節(jié),用從編碼字節(jié)中減去rand()生成的偽隨機(jī)數(shù)替換該字節(jié)。例如,讓我們解碼此處顯示的數(shù)據(jù)的前兩個(gè)字節(jié):

使用本節(jié)分析的加載器和W**文件,下表顯示srand()種子值為0×309的前兩次迭代的值:

循環(huán)運(yùn)行 W**數(shù)據(jù)(字節(jié)) rand()輸出(低字節(jié)) 區(qū)別
1 0x5C 0x0F 0x5C-0x0F = 0x4D
2 0×99 0x3F 0×99-0x3F = 0x5A

前兩個(gè)字節(jié)代表通常在PE文件開(kāi)頭出現(xiàn)的“ MZ”。循環(huán)遍歷所有數(shù)據(jù)字節(jié)后,就解碼出XMRig Monero CPU64位挖礦DLL。生成的DLL與Song.wav解碼的DLL僅相差四個(gè)字節(jié):

圖:解碼后的click.wav與Song.wav

雖然不清楚這些字節(jié)為何不同,但是它們對(duì)DLL的功能沒(méi)有影響,因此這兩個(gè)XMRig DLL文件實(shí)際上是相同的。

接下來(lái),加載器獲取在命令行中指定的導(dǎo)出函數(shù)地址。如果存在,則加載器將啟動(dòng)一個(gè)線程來(lái)執(zhí)行它:

圖:確定導(dǎo)出和啟動(dòng)線程的地址以執(zhí)行它

第三類(lèi):基于Rand()的Shellcode加載器

此方式和上述的方式及原理完全相同,不同點(diǎn)僅僅是前者加載的PE文件而后者加載的Shellcode

零日反思

網(wǎng)絡(luò)威脅的演進(jìn),從來(lái)都是多維立體的。

隱寫(xiě)術(shù)從文本、圖片擴(kuò)散至音頻,就是最直觀的例子。

而隱寫(xiě)術(shù)+惡意代碼+音頻多種形式融合的網(wǎng)絡(luò)威脅手段,也不斷提醒著我們,網(wǎng)絡(luò)空間威脅會(huì)越來(lái)越復(fù)雜,單純的攻防策略已難以有效守護(hù)網(wǎng)絡(luò)空間的一片安寧。

 
 

上一篇:全球數(shù)據(jù)泄露報(bào)告:內(nèi)部威脅成數(shù)據(jù)安全最大風(fēng)險(xiǎn)!

下一篇:11新規(guī)即將施行!網(wǎng)絡(luò)平臺(tái)泄露用戶(hù)信息500條以上可入罪