ESET 研究人員發(fā)現(xiàn)了一種獨(dú)特且以前未出現(xiàn)過(guò)的 Windows 二進(jìn)制加載程序,與其他此類加載程序不同,它作為服務(wù)器運(yùn)行并在內(nèi)存中執(zhí)行接收到的模塊。研究人員將這個(gè)新的惡意軟件命名為Wslink,Wslink是其中一個(gè)dll的名稱。
在過(guò)去兩年中,研究人員只在中歐、北美和中東的觀察中發(fā)現(xiàn)過(guò)幾次由Wslink發(fā)起的攻擊。初始攻擊向量是未知的,大多數(shù)示例都使用了MPRESS,部分代碼是虛擬化的。不幸的是,到目前為止,研究人員還無(wú)法獲得它應(yīng)該接收的任何模塊。根據(jù)對(duì)比,目前還有已知的惡意軟件與它在代碼、功能或操作上具有相似性。
接下來(lái),我們將對(duì)加載程序和研究人員自己的客戶端進(jìn)行分析,這最初研究人員是用來(lái)測(cè)試檢測(cè)方法的。這個(gè)客戶端的源代碼可能對(duì)惡意軟件分析的初學(xué)者感興趣,它展示了如何重用和與先前分析的惡意軟件的現(xiàn)有功能進(jìn)行交互。
技術(shù)分析
Wslink作為服務(wù)運(yùn)行,偵聽服務(wù)參數(shù)(Parameters)項(xiàng)的ServicePort注冊(cè)表值中指定的端口上的所有網(wǎng)絡(luò)接口。前面注冊(cè)Wslink服務(wù)的組件是未知的。下圖描述了接受到該端口的傳入連接的代碼。
接受傳入連接的循環(huán)的 Hex-Rays 反編譯
Hex-Rays號(hào)稱最強(qiáng)悍的反編譯工具??梢苑淳幾gVB VC BCB Delphi等等一切 x86/x64代碼為C代碼。
接受連接之后是使用硬編碼的 2048 位公鑰進(jìn)行 RSA 握手,以安全地交換密鑰和 IV,以用于 CBC 模式下的 256 位 AES。加密模塊是隨后收到一個(gè)惟一的標(biāo)識(shí)符——簽名以及用于解密的附加密鑰。
有趣的是,最近接收到的帶有其簽名的加密模塊是全局存儲(chǔ)的,這使得它對(duì)所有客戶端都可用。這種方式節(jié)省流量,如果要加載的模塊的簽名與前一個(gè)匹配,則只傳輸密鑰即可。
接收模塊及其簽名的 Hex-Rays 反編譯
使用MemoryModule庫(kù)將解密的模塊(它是一個(gè)常規(guī)PE文件)加載到內(nèi)存中,并最終執(zhí)行其第一次導(dǎo)出。用于通信、套接字、鍵和IV的函數(shù)以參數(shù)的形式傳遞給導(dǎo)出,使模塊能夠通過(guò)已經(jīng)建立的連接交換消息。
在內(nèi)存中執(zhí)行接收模塊的代碼的Hex-Rays反編譯
客戶端實(shí)現(xiàn)
研究人員自己的Wslink客戶端實(shí)現(xiàn),如下所述,簡(jiǎn)單地與修改后的 Wslink 服務(wù)器建立連接,并發(fā)送一個(gè)模塊,然后解密和執(zhí)行該模塊。由于研究人員的客戶端無(wú)法知道在任何給定的Wslink服務(wù)器實(shí)例中與公鑰匹配的私鑰,因此研究人員生成了自己的密鑰對(duì),并使用來(lái)自該密鑰對(duì)的公鑰修改服務(wù)器可執(zhí)行文件,并在研究人員的Wslink客戶端實(shí)現(xiàn)中使用私鑰。
該客戶端使研究人員能夠復(fù)制Wslink的通信和搜索獨(dú)特的模式,這進(jìn)一步證實(shí)了研究人員的發(fā)現(xiàn),因?yàn)檠芯咳藛T可以模仿它的行為。
最初,一些用于發(fā)送/接收消息的函數(shù)是從原始示例中獲得的,且可以立即使用它們進(jìn)行實(shí)現(xiàn)。
從Wslink示例中加載函數(shù)的代碼
隨后,研究人員的客戶端從文件中讀取要使用的私有RSA密鑰,并建立到指定IP和端口的連接。預(yù)計(jì)Wslink的一個(gè)實(shí)例已經(jīng)在提供的地址和端口上偵聽。當(dāng)然,其嵌入的公鑰也必須替換為已知私鑰的公鑰。
研究人員的客戶端和Wslink服務(wù)器繼續(xù)執(zhí)行握手,交換用于AES加密的密鑰和IV。如下圖所示分為三個(gè)步驟,發(fā)送客戶端hello,接收帶有IV的對(duì)稱密鑰,并將它們發(fā)送回來(lái)以驗(yàn)證成功解密。通過(guò)反轉(zhuǎn) Wslink 二進(jìn)制文件,研究人員了解到hello消息的唯一約束,除了大小240字節(jié)之外,就是第二個(gè)字節(jié)必須為零,因此研究人員將其全部設(shè)置為零。
研究人員客戶端的 RSA 握手密碼
最后一部分是發(fā)送模塊。如下圖所示,分為以下四個(gè)簡(jiǎn)單步驟:
?接收到之前加載的模塊的簽名,研究人員決定在實(shí)現(xiàn)中不使用它,因?yàn)樗鼘?duì)研究人員不重要;
?發(fā)送模塊的硬編碼簽名;
?從文件中讀取模塊,加密它并發(fā)送;
?發(fā)送模塊的加密密鑰;
研究人員的客戶端發(fā)送模塊的代碼
研究人員客戶端用于加載和加密模塊的代碼
研究人員的客戶端的完整源代碼可以在WslinkClient GitHub存儲(chǔ)庫(kù)中找到。請(qǐng)注意,代碼仍然需要大量的加工才能用于攻擊,并且從頭開始創(chuàng)建另一個(gè)加載程序會(huì)更容易。
總結(jié)
Wslink是一個(gè)小巧靈活的加載程序,與研究人員通??吹降募虞d程序不同,它作為服務(wù)器運(yùn)行,并在內(nèi)存中執(zhí)行接收到的模塊。
有趣的是,這些模塊在通信、秘鑰和套接字方面重用了加載程序的函數(shù);因此,因此他們不必啟動(dòng)新的出站連接,Wslink 還具有完善的加密協(xié)議來(lái)保護(hù)交換的數(shù)據(jù)。