一、前言
究竟什么是“無(wú)文件惡意軟件(fileless malware)”?談到這個(gè)名詞時(shí),許多安全行業(yè)的專業(yè)人員都心有余悸,許多文章和產(chǎn)品手冊(cè)在介紹無(wú)文件惡意軟件時(shí),總會(huì)順帶提到我們難以防御和分析這類威脅。我在這篇文章中會(huì)試著拋開這些陳詞濫調(diào),追溯無(wú)文件惡意軟件的最初起源,并以此類惡意軟件的幾個(gè)樣本為例,勾勒出這個(gè)名詞的演變輪廓。
二、這是一個(gè)熱門話題
人們?cè)诠I(yè)事件、私人會(huì)議以及在線討論中經(jīng)常會(huì)提到無(wú)文件惡意軟件這個(gè)話題。原因可能在于這類威脅放大了傳統(tǒng)端點(diǎn)安全技術(shù)的缺點(diǎn),又給了新型安全技術(shù)展現(xiàn)實(shí)力的機(jī)會(huì)。
事實(shí)的確如此,Google趨勢(shì)給出的資料表明,人們?cè)?012年到2014年之間對(duì)這個(gè)名詞鮮有問津,自2015年后人們對(duì)它的興趣逐步提升,并在2017年到達(dá)了一個(gè)峰值。
這種趨勢(shì)與近年來(lái)公眾對(duì)具備“無(wú)文件”能力的惡意軟件的討論不無(wú)關(guān)系,特別是在2017年,有大量關(guān)于這個(gè)話題的研究成果和出版物噴涌而出。
三、什么是無(wú)文件惡意軟件
首先我們得明確一點(diǎn),那就是“無(wú)文件惡意軟件有時(shí)候還是會(huì)使用文件”,F(xiàn)如今,大多數(shù)人們?cè)谑褂脽o(wú)文件惡意軟件這個(gè)名詞時(shí),似乎約定俗成地使用了以下這個(gè)定義:
“無(wú)文件惡意軟件是一種不需要在文件系統(tǒng)中存放惡意可執(zhí)行文件的軟件”。
這個(gè)定義對(duì)于利用惡意腳本或者文件系統(tǒng)中良性可執(zhí)行文件進(jìn)行傳播的惡意軟件來(lái)說(shuō)是適用的。對(duì)于隱藏在注冊(cè)表中惡意軟件來(lái)說(shuō),這個(gè)定義也是正確的,雖然這種情況下注冊(cè)表本身還是存儲(chǔ)在Windows文件系統(tǒng)中。這個(gè)定義不需要考慮惡意文件的傳播途徑,不論是通過(guò)漏洞利用、社會(huì)工程學(xué)技巧還是濫用某些正常功能來(lái)進(jìn)行傳播,這個(gè)定義都是適用的。
雖然無(wú)文件惡意軟件最初指的是那些不使用本地持久化技術(shù)、完全駐留在內(nèi)存中的惡意代碼,但這個(gè)術(shù)語(yǔ)的范圍在逐漸擴(kuò)大,現(xiàn)在也將那些依賴文件系統(tǒng)的某些功能以實(shí)現(xiàn)惡意代碼激活和駐留的惡意軟件包括在內(nèi)。讓我們一起回顧一下對(duì)這個(gè)術(shù)語(yǔ)的演變過(guò)程造成影響的那些惡意程序。
四、2001-2003: Code Red以及SQL Slammer
完全駐留在內(nèi)存中的惡意代碼肯定在21世紀(jì)前就已經(jīng)存在。然而,直到2001年,Code Red蠕蟲在互聯(lián)網(wǎng)上肆意傳播,才將“無(wú)文件惡意軟件”這個(gè)名詞帶給普羅大眾。我所能找到的最早與此有關(guān)的公開資料發(fā)布于2001年的夏天,當(dāng)時(shí)卡巴斯基實(shí)驗(yàn)室發(fā)表了一份公告,其中提到:
“我們預(yù)測(cè),在不久的將來(lái),像Code Red之類的‘無(wú)文件’蠕蟲將泛濫成災(zāi),無(wú)法處理這類威脅的反病毒軟件只能給大眾帶來(lái)安全風(fēng)險(xiǎn)”。
Code Red蠕蟲使用了微軟IIS web服務(wù)器中的一個(gè)漏洞進(jìn)行傳播,能夠完全駐留在受害主機(jī)的內(nèi)存中,詳細(xì)的分析可以參考CAIDA的這篇文章。
一年半以后,另一個(gè)蠕蟲(SQL Slammer)就像燎原野火一般傳播。SQL Slammer利用的是微軟SQL服務(wù)器中的一個(gè)漏洞。Robert Vamosi在2003年為ZDNet撰寫的一篇文章中,將這個(gè)蠕蟲歸類為“無(wú)文件”類別惡意軟件,指出它“與Code Red類似,僅駐留在內(nèi)存中”。
我也在Peter Szor(彼時(shí)正在賽門鐵克工作的一名資深前輩)于2003年提交的一份專利申請(qǐng)中找到了一些資料。專利名為“簽名提取系統(tǒng)及方法”,其中給出了無(wú)文件惡意軟件的定義,如下所示:
“無(wú)文件惡意軟件指的是不依賴文件、僅存在于內(nèi)存中的惡意代碼……更具體地說(shuō),無(wú)文件惡意代碼……可以將自身附加到活動(dòng)進(jìn)程的內(nèi)存空間中……”。
無(wú)文件惡意軟件的原始定義與這個(gè)名詞字面上的意思非常接近,指的是能夠在沒有殘留文件的前提下保持活躍的那些惡意軟件。
五、2012:安裝Lurk木馬的僵尸程序
我能找到與無(wú)文件惡意軟件有關(guān)的另一份資料,是在Code Red和SQL Slammer蠕蟲誕生的近十年之后。2012年,卡巴斯基實(shí)驗(yàn)室的Sergey Golovanov發(fā)表了一份分析報(bào)告,介紹了某個(gè)沒有文件落盤行為的僵尸程序(bot),其中提到:
“我們面對(duì)的是一個(gè)非常罕見的惡意軟件,這種無(wú)文件程序不存在于硬盤文件中,僅在受感染計(jì)算機(jī)的內(nèi)存中活動(dòng)”。
這個(gè)僵尸程序利用了Java客戶端的某個(gè)漏洞,僅在受感染的javaw.exe進(jìn)程的內(nèi)存空間中活動(dòng)。Sergey提到這個(gè)僵尸程序具備安裝Lurk銀行木馬的功能。
在2012年的早些時(shí)候,SecurityXploded的Amit Malik發(fā)表了一篇技術(shù)短文,介紹了從互聯(lián)網(wǎng)下載Windows程序后,如何在不保存到本地硬盤的前提下,實(shí)現(xiàn)Windows程序的“內(nèi)存化或無(wú)文件執(zhí)行”。
六、2014:Powerliks、Angler以及Phase僵尸程序
前面提到的程序完全駐留在內(nèi)存中,不會(huì)在文件系統(tǒng)中留下任何明顯的蛛絲馬跡。因?yàn)檫@種特性,它們?cè)谙到y(tǒng)重啟后就消失得無(wú)影無(wú)蹤。相比之下,2014年出現(xiàn)的Poweliks惡意軟件是一種“無(wú)需文件的可持久化惡意軟件”(G Data的原話)。這個(gè)惡意軟件利用了微軟Word的某個(gè)漏洞來(lái)進(jìn)入系統(tǒng),使用帶有shellcode的PowerShell以及JavaScript腳本實(shí)現(xiàn)內(nèi)存中的執(zhí)行功能。賽門鐵克的Kevin Gossett對(duì)它的本地持久化技術(shù)進(jìn)行了分析,其中提到:
“通常情況下,惡意軟件會(huì)在注冊(cè)表的Run鍵值中添加一個(gè)子項(xiàng),指向某個(gè)惡意可執(zhí)行文件以完成本地持久化。Poweliks將Run鍵值的子鍵指向rundll32.exe,利用這個(gè)合法的微軟程序加載DLL文件,并向其傳遞幾個(gè)參數(shù)。傳遞的參數(shù)中包括JavaScript代碼,最終實(shí)現(xiàn)將Poweliks加載到內(nèi)存中并執(zhí)行的目的”。
一個(gè)月之后,安全研究員Kafeine發(fā)表一篇關(guān)于Angler漏洞利用工具的分析文章。惡意軟件的攻擊目標(biāo)是存在漏洞的Java客戶端,僅在受感染的javaw.exe進(jìn)程的內(nèi)存空間中活動(dòng)。2016年,Palo Alto的安全研究員Brad Duncan在一篇分析報(bào)告中提到,Angler開始出現(xiàn)安裝Bedep下載器的行為,且在安裝時(shí)不涉及到任何文件創(chuàng)建,因?yàn)锳ngler將下載器直接加載到內(nèi)存中運(yùn)行。
2014年年末,安全研究員MalwareTech發(fā)表了一篇分析報(bào)告,研究了一款名為“Phase僵尸程序”的無(wú)文件rootkit。根據(jù)該報(bào)告內(nèi)容,這款惡意軟件可以“在不釋放任何文件到本地磁盤、不創(chuàng)建自身進(jìn)程的前提下安裝到系統(tǒng)中。……Phase將可重新定位的惡意代碼加密保存在注冊(cè)表中,通過(guò)PowerShell讀取并在內(nèi)存中執(zhí)行這段與具體位置無(wú)關(guān)的代碼”。與Powerliks類似,這個(gè)惡意軟件通過(guò)注冊(cè)表的autorun鍵值,調(diào)用rundll32.exe執(zhí)行JavaScript實(shí)現(xiàn)本地持久化。
七、2014-2015:Duqu 2.0以及Kovter
在2015年年中,卡巴斯基實(shí)驗(yàn)室發(fā)表了一份報(bào)告,詳細(xì)介紹了某個(gè)高級(jí)組織在2014-2015年期間使用一款名為Duqu 2.0的復(fù)雜惡意軟件平臺(tái)開展攻擊活動(dòng)。他們?cè)诠艋顒?dòng)使用了某個(gè)Windows漏洞來(lái)安裝惡意軟件,惡意軟件完全隱藏在受感染主機(jī)的內(nèi)存中。惡意軟件沒有實(shí)現(xiàn)本地持久化機(jī)制,相反,攻擊者的目標(biāo)是長(zhǎng)時(shí)間上線的服務(wù)器,他們只需要在服務(wù)器重啟后重新感染系統(tǒng)即可。
名為Kovter的另一個(gè)無(wú)文件惡意軟件也在2015年引起了人們的關(guān)注。Kovter的感染方式與Powerliks十分相似。它最初由某個(gè)惡意可執(zhí)行文件加載運(yùn)行,將經(jīng)過(guò)混淆或加密處理的程序保存在注冊(cè)表后,惡意軟件就將原始的加載程序從磁盤中刪除。至少有一個(gè)Kovter變種通過(guò)創(chuàng)建快捷方式執(zhí)行JavaScript以實(shí)現(xiàn)本地持久化。正如Airbus的Andrew Dove所述,這個(gè)JavaScript腳本會(huì)啟動(dòng)一個(gè)能夠執(zhí)行shellcode的PowerShell腳本,所執(zhí)行的shellcode會(huì)將惡意代碼注入到一個(gè)非惡意的應(yīng)用程序中,并執(zhí)行這個(gè)應(yīng)用程序。
八、2016:PowerSniff、PowerWare以及August
在2016年年中,Palo Alto Networks的Josh Grunzweig和Brandon Levene在一篇文章中介紹了PowerSniff這個(gè)惡意軟件。惡意軟件的感染路徑從包含惡意宏的微軟Word文檔開始。PowerSniff的內(nèi)存駐留技巧在某些方面與Kovter類似,使用了PowerShell腳本來(lái)執(zhí)行shellcode,僅在內(nèi)存中執(zhí)行的shellcode可以解碼并執(zhí)行附加的惡意載荷。PowerSniff具備將惡意DLL臨時(shí)保存到文件系統(tǒng)中的能力。
幾周之后,Carbon Black的Mike Sconzo和Rico Valdez在一篇文章中介紹了PowerWare這個(gè)惡意軟件。與PowerSniff類似,PowerWare依然使用包含惡意宏的微軟Office文檔開始攻擊活動(dòng),文檔中的惡意宏最終會(huì)啟動(dòng)一個(gè)PowerShell腳本,不需要在文件系統(tǒng)中存放惡意可執(zhí)行文件即可完成攻擊流程。
在當(dāng)年晚些時(shí)候,Proofpoint在另一篇文章中介紹了August這個(gè)惡意軟件,該樣本同樣使用微軟Word宏以及PowerShell來(lái)完成攻擊過(guò)程。根據(jù)這篇文章,August會(huì)“從遠(yuǎn)程站點(diǎn)下載部分載荷,作為PowerShell的字節(jié)數(shù)組”,載荷的執(zhí)行完全在內(nèi)存中完成,不需要保存到文件系統(tǒng)中。
九、2017:POSHSPY等
在2017年初,卡巴斯基實(shí)驗(yàn)室在一篇文章中介紹了某款惡意工具,其惡意代碼以Meterpreter為基礎(chǔ),完全在內(nèi)存中活動(dòng)。在文件系統(tǒng)方面,攻擊者僅使用了合法的Windows實(shí)用工具,如sc(用來(lái)安裝運(yùn)行PowerShell的惡意服務(wù))以及netsh(使用隧道方式來(lái)承載惡意網(wǎng)絡(luò)流量)。
幾個(gè)月之后,Mandiant的Matthew Dunwoody在一篇分析復(fù)雜攻擊活動(dòng)的文章中也提到了無(wú)文件惡意代碼。名為POSHSPY的惡意軟件使用了系統(tǒng)提供的WMI(Windows Management Instrumentation)功能來(lái)實(shí)現(xiàn)本地持久化機(jī)制,同時(shí)使用PowerShell來(lái)執(zhí)行攻擊載荷。POSHSPY能夠下載可執(zhí)行文件,并將該文件保存到文件系統(tǒng)中。Matthew總結(jié)到:
“攻擊者通過(guò)這種‘離地(living off the land)’攻擊技術(shù),實(shí)現(xiàn)了一個(gè)非常獨(dú)立的后門,可以與之前更為傳統(tǒng)和更為復(fù)雜的后門族群一起部署,以便在傳統(tǒng)后門失效后還保留目標(biāo)的控制權(quán)”。
這次攻擊事件突出反映了入侵者的強(qiáng)大實(shí)力,即使他們只能夠依賴系統(tǒng)內(nèi)置的正常程序,他們也能在被感染系統(tǒng)上執(zhí)行惡意載荷。
十、“無(wú)文件惡意軟件”的其他說(shuō)法
2012年,Sergey Golovanov在一篇文章中,最開始使用的是“無(wú)文件惡意軟件”這個(gè)名詞。非常有趣的是,現(xiàn)在這篇文章中,使用的是“無(wú)實(shí)體惡意軟件”(bodiless malware)這個(gè)名詞。卡巴斯基實(shí)驗(yàn)室在2016年之前使用的都是“無(wú)實(shí)體惡意軟件”,但在2017年之后,他們?cè)谖恼轮杏只氐搅?ldquo;無(wú)文件惡意軟件”這個(gè)說(shuō)法。
此外,還有其他說(shuō)法沒有流行起來(lái)。2013年,“高級(jí)易變性威脅”(Advanced Volatile Thread,AVT)這個(gè)說(shuō)法短暫浮出水面。根據(jù)維基百科的解釋,該名詞由Triumfant公司的John Prisco提出。“AVT”存在的時(shí)間并不長(zhǎng),2013年,Byron Acohido在《今日美國(guó)》的一篇文章中,使用這個(gè)名詞來(lái)指代存在后門的某個(gè)Apache軟件。根據(jù)Piere-Marc Bureau(彼時(shí)是ESET的一員)的說(shuō)法,這個(gè)后門“除了對(duì)web服務(wù)器文件進(jìn)行修改之外,沒有在硬盤上留下其他任何痕跡”。
相比之下,Carbon Black在2016年的一份威脅報(bào)告中,使用了與無(wú)文件惡意軟件更為貼切的另一種說(shuō)法。這篇報(bào)告中使用的是“無(wú)惡意軟件攻擊”這個(gè)名詞。幾個(gè)月之后,Michael Viscuso在公司的一篇博文中,對(duì)這個(gè)名詞做出了解釋,原話如下:
“無(wú)惡意軟件攻擊,指的是攻擊者使用現(xiàn)有軟件、被許可的應(yīng)用程序以及已授權(quán)的協(xié)議來(lái)開展惡意活動(dòng)。無(wú)惡意軟件攻擊無(wú)需下載任何惡意文件,即可獲取計(jì)算機(jī)的控制權(quán)。無(wú)惡意軟件攻擊這個(gè)概念也可以代表無(wú)文件、內(nèi)存化或‘離地’攻擊”。
Gartner在2017年的一份報(bào)告中,與Carbon Black一樣,使用了“無(wú)惡意軟件攻擊”這個(gè)名詞。不過(guò),一個(gè)月后,Gartner在的另一篇文章中,改用了“無(wú)文件攻擊”這個(gè)名詞。
十一、為什么寫這篇文章
我認(rèn)為對(duì)于不同的場(chǎng)合,我們可以使用不同的說(shuō)法。比如,對(duì)于僅僅依賴合法的系統(tǒng)管理工具以及其他非惡意軟件的攻擊事件,我更傾向于使用“無(wú)惡意軟件攻擊”這個(gè)說(shuō)法,這種場(chǎng)景也就是人們常說(shuō)的“離地”攻擊場(chǎng)景。另外,如果惡意代碼從來(lái)沒有保存到本地硬盤中(比如惡意代碼被注入到其他進(jìn)程的內(nèi)存空間中),我更傾向于使用“完全內(nèi)存化惡意軟件(memory-only malware)”這個(gè)說(shuō)法。如果惡意軟件不需要在文件系統(tǒng)中保存?zhèn)鹘y(tǒng)意義上的可執(zhí)行文件來(lái)實(shí)現(xiàn)本地持久化,此時(shí)我認(rèn)為使用“無(wú)文件惡意軟件”也是可以的。
不幸的是,現(xiàn)在這些說(shuō)法已經(jīng)雜糅在一起。盡管“無(wú)文件惡意軟件”代表各種含義,我們還是會(huì)堅(jiān)持使用這個(gè)說(shuō)法來(lái)描述前面提到的各種場(chǎng)景。只能感慨人類的語(yǔ)言不僅含義不清,而且總是在變,如果大家說(shuō)的都是“C#”語(yǔ)言,說(shuō)不定這個(gè)世界會(huì)變得更加美好 :-)
我之所以會(huì)關(guān)心這個(gè)術(shù)語(yǔ),原因在于我在Minerva的工作是負(fù)責(zé)介紹某款反惡意軟件產(chǎn)品的功能,我需要避免使用那些陳詞濫調(diào)和毫無(wú)意義的短語(yǔ)。這款產(chǎn)品可以與其他端點(diǎn)安全工具配合使用,防御各種惡意軟件,無(wú)論它們的攻擊載荷是否需要保存到磁盤中。客戶經(jīng)常向我咨詢我們對(duì)無(wú)文件惡意軟件的處理方式,因此我決定寫一篇綜合調(diào)研文章,以便更好把握這個(gè)名詞使用的方式和時(shí)機(jī)。
|