FireEye公司最近發(fā)現(xiàn)一份惡意微軟Office RTF文檔,其中利用到一項(xiàng)SOAP WSDL解析器代碼注入漏洞——編號(hào)CVE-2017-8759。該漏洞允許惡意人士在解析SOAP WSDL的定義內(nèi)容期間注入任意代碼。FireEye公司對(duì)該微軟Office文檔進(jìn)行了分析,并發(fā)現(xiàn)攻擊者能夠利用代碼注入方式下載并執(zhí)行一份包含PowerShell指令的Visual Basic腳本。
FireEye公司已經(jīng)將該漏洞的詳細(xì)信息與微軟方面進(jìn)行共享,并在協(xié)調(diào)公布事宜的同時(shí)發(fā)布了漏洞修復(fù)程序以及安全指南,感興趣的朋友可以點(diǎn)擊此處查看。
FireEye公司的郵件、終端與網(wǎng)絡(luò)產(chǎn)品皆檢測(cè)到了該惡意文檔。
此項(xiàng)漏洞用于攻擊俄語(yǔ)用戶此次發(fā)現(xiàn)的惡意文檔“Проект.doc” (MD5: fe5c4d6bb78e170abf5cf3741868ea4c)可能被用于攻擊俄語(yǔ)用戶。
在成功利用CVE-2017-8759漏洞之后,該文檔下載了多個(gè)組件(詳見后文)并最終啟動(dòng)了FINSPY(惡意監(jiān)控軟件)載荷(MD5: a7b990d5f57b244dd17e9a937a41e7f5)。
FINSPY惡意軟件,亦被稱為FinFisher或者WingBird,可作為“合法攔截”方案的一部分進(jìn)行獲取。根據(jù)此次以及之前曾經(jīng)出現(xiàn)的FINSPY使用案例,F(xiàn)ireEye表示能夠在一定程度上認(rèn)定此惡意文件被民族國(guó)家專門用于針對(duì)俄語(yǔ)目標(biāo)實(shí)施網(wǎng)絡(luò)間諜活動(dòng)。FireEye公司的動(dòng)態(tài)威脅情報(bào)系統(tǒng)通過額外檢測(cè)發(fā)現(xiàn),盡管可能針對(duì)不同的受眾群體,但相關(guān)活動(dòng)也許早在2017年7月就已經(jīng)出現(xiàn)。
CVE-2017-8759 WSDL解析器代碼注入PrintClientProxy方法的WSDL解析器模塊中存在一項(xiàng)代碼注入漏洞。其中若所提供數(shù)據(jù)中包含一條CRLF序列,則IsValidUrl無(wú)法正常執(zhí)行驗(yàn)證。如此一來,攻擊者即可注入并執(zhí)行任意代碼。圖一所示即為漏洞代碼的對(duì)應(yīng)部分。
圖一:存在漏洞的WSDL解析器
在一條SOAP響應(yīng)中存在多個(gè)address定義時(shí),代碼會(huì)在首條地址之后插入“//base.ConfigureProxy(this.GetType()”字符串,從而將其余地址注釋掉。但如果為地址附加CRLF序列,則CRLF后的代碼將不會(huì)被注釋掉。如圖二所示,由于缺少對(duì)CRLF的驗(yàn)證,攻擊者可向其中注入一個(gè)System.Diagnostics.Process.Start方法。由此生成的代碼將由.NET框架的csc.exe進(jìn)行編譯,并以DLL的形式被Office可執(zhí)行文件進(jìn)行加載。
圖二:SOAP定義與所生成代碼
真實(shí)攻擊案例
FireEye公司觀察到的攻擊活動(dòng)利用到RTF格式(即富文本格式)文檔,且類似于我們之前曾經(jīng)報(bào)道過的CVE-2017-0199(此前WannaCry與Petya利用改漏洞發(fā)起勒索攻擊)文檔。此惡意樣本當(dāng)中包含一個(gè)嵌入SOAP標(biāo)記以簡(jiǎn)化漏洞利用流程(如圖三所示)。
圖三:SOAP標(biāo)記
有效載荷從攻擊者控制的服務(wù)器處獲取惡意SOAP WSDL定義。而立足.NET框架的System.Runtime.Remoting.ni.dll實(shí)現(xiàn)的此WSDL解析器則進(jìn)行內(nèi)容分析,并在當(dāng)前目錄中生成.cs源代碼。.NET框架的csc.exe隨后將生成的源代碼編譯為一套庫(kù),名為http[url path].dll。微軟Office而后加載此庫(kù),整個(gè)漏洞利用流程即告完成。圖四所示為一套示例惡意源代碼庫(kù)。
圖四:所加載的DLL
在成功利用漏洞之后,注入代碼會(huì)創(chuàng)建一個(gè)新的進(jìn)程,并利用mshta.exe從同一服務(wù)器處檢索名為“word.db”的HTA腳本。該HTA腳本會(huì)將源代碼、編譯后的DLL以及PDB文件從磁盤中刪除,而后下載并執(zhí)行名為“left.jpg”的FINSPY惡意軟件——這里雖然使用.jpg擴(kuò)展名以誤導(dǎo)用戶將其視為“圖像jpeg”內(nèi)容,但實(shí)際上卻屬于可執(zhí)行文件。圖五所示為該惡意軟件傳輸流程的PCAP細(xì)節(jié)信息。
圖五:實(shí)時(shí)請(qǐng)求
該惡意軟件將被命名為%appdata%MicrosoftWindowsOfficeUpdte-KB[ 6位隨機(jī)數(shù)字].exe。圖六所示為進(jìn)程監(jiān)控器下生成的進(jìn)程鏈。
圖六:進(jìn)程創(chuàng)建鏈
惡意軟件“left.jpg” (md5: a7b990d5f57b244dd17e9a937a41e7f5)屬于FINSPY的一類變種。其利用高度混淆代碼、內(nèi)置虛擬機(jī)以及其它反分析技術(shù)提升逆向工程難度。此外,它還具備另一種獨(dú)特的反分析技術(shù),即解析自身完整路徑并搜索自身MD5哈希的字符串表達(dá)形式。目前各類分析工具以及沙箱機(jī)制都會(huì)將文件/樣本重命名為MD5哈希形式,從而確保其擁有惟一文件名。而此變種則采用“WininetStartupMutex0”作為互斥量實(shí)現(xiàn)運(yùn)行。
第二個(gè)傳播FINSPY惡意軟件的漏洞CVE-2017-8759是FireEye公司在2017年年內(nèi)發(fā)現(xiàn)的第二項(xiàng)被用于傳播FINSPY惡意軟件的零日漏洞。現(xiàn)實(shí)證明目前市場(chǎng)上存在著大量能夠?qū)ζ髽I(yè)及客戶進(jìn)行“合法攔截”的資源。另外,F(xiàn)INSPY也被銷售至多位客戶手中,這意味著此項(xiàng)漏洞未來將被用于對(duì)付更多潛在目標(biāo)。
盡管目前還沒有觀察到相關(guān)跡象,但CVE-2017-8759漏洞也可能已經(jīng)被其他攻擊者所掌握。至少可以肯定的是,2017年4月被用于傳播FINSPY惡意軟件的零日漏洞CVE-2017-0199應(yīng)該屬于經(jīng)濟(jì)利益驅(qū)動(dòng)的產(chǎn)物。如果FINSPY背后的使用者是從同一來源獲得這兩項(xiàng)漏洞,那么相關(guān)源代碼很有可能也會(huì)被出售給其他惡意人士。