信息來源:嘶吼網(wǎng)
在調(diào)查 NukeSped(一種遠(yuǎn)程訪問木馬)樣本時(shí),趨勢(shì)科技研究人員發(fā)現(xiàn)幾個(gè) Bundlore 廣告軟件樣本使用與 NukeSped 中發(fā)現(xiàn)的相同的無文件例程。
該后門可能是網(wǎng)絡(luò)犯罪組織 Lazarus開發(fā)的,該組織至少自 2014 年以來一直活躍。 NukeSped 有多種變體,旨在在 32 位系統(tǒng)上運(yùn)行并使用加密字符串來逃避檢測(cè)。最近,作為 Lazarus 網(wǎng)絡(luò)間諜活動(dòng)的一部分,這種名為 ThreatNeedle 的木馬程序出現(xiàn)了一種更復(fù)雜的形式。
在這些樣本中發(fā)現(xiàn)的加密 Mach-O 文件已將 Bundlore(一種以下載合法應(yīng)用程序?yàn)榛献釉谀繕?biāo)設(shè)備中安裝廣告軟件的惡意軟件家族)升級(jí)為更隱蔽且常駐內(nèi)存的威脅。 Bundlore 還以 macOS 設(shè)備為目標(biāo),并與去年對(duì) macOS Catalina 用戶的攻擊有關(guān)。北京時(shí)間2019年6月4日凌晨,在2019年WWDC全球開發(fā)者大會(huì)上,蘋果macOS全新版本Catalina發(fā)布。將iTunes拆分為蘋果音樂、蘋果播客和蘋果TV。
研究人員對(duì) Lazarus 使用的 Ants2WhaleHelper 文件的分析導(dǎo)致研究人員將其檢測(cè)為 NukeSped。 VirusTotal 中還發(fā)現(xiàn)了另一個(gè)具有 NukeSped 檢測(cè)功能的文件 unioncryptoupdater。兩者都包含一個(gè)看起來基于 GitHub 提交的例程。然而,奇怪的是,這些文件似乎都沒有使用這個(gè)例程。
在 Ants2WhaleHelper 文件上使用 Interactive Disassembler Pro (IDA Pro) 顯示其主要載荷為 _mapBuffer(圖 1),它似乎是 _memory_exec 函數(shù)的修改版本(圖 2)。這個(gè)函數(shù)看起來像是基于 GitHub 帖子中的代碼;但是,沒有指向 _memory_exec 函數(shù)的引用。
_mapBuffer 函數(shù)
從 GitHub 帖子復(fù)制的 _memory_exec 函數(shù)
此外,有效載荷有一個(gè) _resolve_symbol 函數(shù),它似乎沒有被使用。它似乎也不是必需的,如圖 3 所示。NukeSped 通常從 Web 服務(wù)器檢索和啟動(dòng)其有效載荷,因此它不需要多余的 _resolve_symbol 函數(shù),該函數(shù)在內(nèi)部定位數(shù)據(jù)。如圖4所示,在VirusTotal上搜索這個(gè)函數(shù)的操作代碼會(huì)在201個(gè)文件中檢測(cè)到它。結(jié)果只產(chǎn)生了兩個(gè)NukeSped樣品,而其余的是Bundlore樣本。
NukeSped(左)與 Bundlore(右)的 _resolve_symbol 函數(shù)
搜索到的操作碼
類似地,使用 VirusTotal 的 Retrohunt 進(jìn)行搜索得到 273 個(gè)結(jié)果;其中大部分是 Bundlore 文件,只有三個(gè)是 Nukesped 文件。但是,這些 Nukesped 樣本中的一個(gè)被驗(yàn)證為來自先前搜索的 Nukesped 文件的父級(jí)。在發(fā)現(xiàn)的 Bundlore 樣本中,最古老的樣本可以追溯到去年 5 月。對(duì)來自 VirusTotal 查詢的這些 Bundlore 樣本的進(jìn)一步調(diào)查顯示,這些樣本確實(shí)使用了無文件例程,使 Bundlore 能夠直接從內(nèi)存中執(zhí)行有效載荷。
Bundlore 的無文件例程
研究人員對(duì) Bundlore 樣本的研究表明,它們利用了 NukeSped 樣本中未使用的相同功能。如圖 5 所示,它們被混淆了,因?yàn)樵?IDA Pro 中反匯編時(shí)它們的名稱是隨機(jī)的。雖然函數(shù)有一些差異,但內(nèi)存文件執(zhí)行的例程保持不變(圖 6 和 圖8)。
混淆函數(shù)
NukeSped(左列)與 Bundlore(右列)樣本的反匯編
其中一個(gè) Bundlore 樣本(sha256:0a3a5854d1ae3f5712774a4eebd819f9e4e3946f36488b4e342f2dd32c8e5db2)的主要例程如下:
解密 __DATA.__data 部分以顯示嵌入的 Mach-O 文件,如圖 7 所示。 解密使用每個(gè)周期遞增的 XOR 密鑰:例如,0xDD 遞增 0x2A、0xDD、0x00、0x2A、0x54, 0x7E、0xA8、0xD2、0xFC、0x00 等等。
__DATA.__data部分的解密例程
調(diào)用一個(gè)名為 NSCreateObjectFileImageFromMemory 的函數(shù)從內(nèi)存中的 Mach-O 文件創(chuàng)建一個(gè)廣告軟件圖像。之后,調(diào)用 NSLinkModule 將惡意圖像鏈接到主可執(zhí)行文件的圖像庫。 Mach-O 文件格式從可執(zhí)行文件 (0x02) 更改為包 (0x08),然后才能調(diào)用 NSCreateObjectFileImageFromMemory,如圖 6 所示。
在內(nèi)存中解析 Mach-O 文件的頭結(jié)構(gòu)以獲取 value(LC_MAIN),一個(gè)值為 0x80000028 的加載命令。該命令包含諸如 Mach-O 文件入口點(diǎn)的偏移量之類的數(shù)據(jù)(圖 8)。之后,廣告軟件檢索偏移量并轉(zhuǎn)到入口點(diǎn)。
在 NukeSped(左列)與 Bundlore(右列)中查找惡意圖像的入口點(diǎn)
Bundlore 的 Mach-O 文件在內(nèi)存中運(yùn)行
解密密鑰和增量值在 Bundlore 樣本中有所不同,為了更好地理解嵌入文件,研究人員創(chuàng)建了一個(gè) Python 腳本來解密和提取嵌入的 Mach-O 文件。通過這樣做,研究人員能夠觀察到一個(gè)這樣解密的 Mach-O 文件(sha256:a7b6639d9fcdb13ae5444818e1c35fba4ffed90d9f33849d3e6f9b3ba8443bea),它連接到一個(gè)目標(biāo)URL (13636337101185210173363631[.]cloudfront[.]net/?cc-00&),但是地址在不同的樣本中是不同的。然后下載一個(gè)名為 Player.app 的應(yīng)用程序包,它偽裝成 Flash Player,然后被下載并解壓縮到 /tmp 目錄中。 chmod 777 命令用于提取的應(yīng)用程序包,然后啟動(dòng)偽造的應(yīng)用程序。在執(zhí)行這些例程時(shí),Bundlore 會(huì)顯示一條欺詐性錯(cuò)誤消息(圖 10)。完成后,它通過調(diào)用 sleep 函數(shù)并重復(fù)循環(huán)來休眠。
解密后的 Mach-O 文件的主要程序
Player.app 顯示的虛假錯(cuò)誤消息