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