申 培,劉福龍,桑海偉
(1.河鋼數(shù)字技術(shù)股份有限公司, 石家莊 050035; 2.河鋼集團(tuán)有限公司,石家莊 050023;3.貴州師范學(xué)院 數(shù)學(xué)與大數(shù)據(jù)學(xué)院, 貴陽 550018)
惡意代碼是指具有一定破壞性或者具有惡意企圖的一組程序或指令集合[1-2]。最常見的病毒、蠕蟲、木馬等在廣義上都屬于惡意代碼;而從狹義上來看,惡意代碼單指后門程序或一系列軟件指令等,設(shè)計者研究并發(fā)現(xiàn)系統(tǒng)或應(yīng)用程序的漏洞,設(shè)計惡意代碼并將其植入系統(tǒng)或者應(yīng)用程序中,引誘用戶執(zhí)行。1983年,F(xiàn)red Cohen編寫了可以自我復(fù)制和傳播的代碼,被公認(rèn)為第一個計算機(jī)病毒程序[3]。1986年,一對巴基斯坦兄弟開發(fā)了計算機(jī)病毒Brain,該病毒迅速傳播,并成功破壞了成千上萬的計算機(jī)系統(tǒng)。1993年,VBA(visual basic for applications)語言應(yīng)用到微軟 Office文檔開發(fā)中,被認(rèn)為是第一個基于文檔攻擊的惡意代碼。1999年,Melissa Virus被普遍認(rèn)為是第一種借助電子郵件發(fā)送的病毒。2004年,卡比爾病毒被公認(rèn)為第一種手機(jī)病毒。2017年,Wanna Cry勒索病毒波及150個國家的30萬名用戶,造成損失高達(dá)80億美元。近年來,惡意代碼隨著網(wǎng)絡(luò)迅速發(fā)展也在不斷演化,Cybersecurity Ventures 報告稱,2021年包括惡意代碼在內(nèi)的網(wǎng)絡(luò)犯罪造成大約6萬億美元的損失。第49次中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告指出,截至2021年12月,我國網(wǎng)民規(guī)模達(dá)10.32億,高達(dá)62.0%的網(wǎng)民表示過去半年在上網(wǎng)過程中未遭遇過網(wǎng)絡(luò)安全問題。
由于惡意代碼近年來呈現(xiàn)爆發(fā)式增長,研究人員對惡意代碼展開了深入研究。只有充分掌握惡意代碼的運(yùn)行機(jī)理,才能更好地進(jìn)行檢測和防范。
目前,惡意代碼攻擊技術(shù)主要包括代碼注入、緩沖區(qū)溢出、端口復(fù)用和協(xié)同攻擊等技術(shù)。2021年,新華三收錄的漏洞總數(shù)為20 203條,其中超危漏洞2 591條,高危漏洞8 451條,安全問題不容忽視。
代碼注入技術(shù)是指將惡意代碼植入到結(jié)構(gòu)化的程序中,當(dāng)該程序執(zhí)行時,惡意代碼同時會被加載并運(yùn)行。代碼注入攻擊一般是用戶輸入缺乏安全驗(yàn)證機(jī)制和相應(yīng)的過濾機(jī)制導(dǎo)致,發(fā)布的Web應(yīng)用程序大都面臨代碼注入威脅,包含(XSS)和SQL注入等代碼注入式攻擊,嚴(yán)重威脅數(shù)據(jù)完整性和用戶隱私等[4-6]。隨著Android智能手機(jī)的迅速普及,Android系統(tǒng)受到代碼注入的設(shè)備數(shù)量和軟件數(shù)量呈現(xiàn)出爆發(fā)式增長,因此,移動惡意代碼注入并攻擊移動終端也是近年來研究的熱點(diǎn)[7-8]。
緩沖區(qū)是指一段連續(xù)可讀寫的操作系統(tǒng)內(nèi)存空間,當(dāng)數(shù)據(jù)超出緩沖區(qū)的大小范圍時便會引發(fā)緩沖區(qū)異常。惡意代碼就是基于此原理,將更多的數(shù)據(jù)放入緩沖區(qū),使其緩沖區(qū)發(fā)生異常,導(dǎo)致緩沖區(qū)溢出漏洞[9]。緩沖區(qū)溢出會導(dǎo)致程序崩潰,甚至有些惡意代碼借此手段獲得系統(tǒng)的控制權(quán)限,對系統(tǒng)進(jìn)行任意操作,引發(fā)數(shù)據(jù)丟失、篡改或其他嚴(yán)重后果。通常,緩沖區(qū)溢出首先是攻擊者注入攻擊代碼,緊接著引誘程序跳轉(zhuǎn)到注入的攻擊代碼,最后執(zhí)行該攻擊代碼[10-11]。該漏洞通常是由于系統(tǒng)對用戶輸入信息未做安全檢測等原因引發(fā)。
端口復(fù)用是指在一個端口上建立了多個連接,使應(yīng)用程序不能正常訪問。其中最常見端口復(fù)用攻擊方法,如木馬程序就是基于此進(jìn)行設(shè)計。木馬程序首先攔截網(wǎng)絡(luò)上應(yīng)用程序的端口,然后借助其端口進(jìn)行通信,使該端口下正常程序不能正常提供服務(wù)。木馬設(shè)計者為了逃避惡意代碼檢測程序,一般會對通信內(nèi)容進(jìn)行加密[12-13],其中一種有效解決方式就是編寫應(yīng)用程序的時候獨(dú)占端口。
協(xié)同攻擊是近年來出現(xiàn)并不斷演化的攻擊技術(shù)。與傳統(tǒng)攻擊技術(shù)不同,分布式協(xié)同攻擊因具有高效、健壯、隱蔽等特點(diǎn),給檢測和防御工作帶來了挑戰(zhàn)。協(xié)同攻擊技術(shù)使用多線程等技術(shù),一般惡意程序會啟動多個進(jìn)程,并攻擊其他進(jìn)程。在對其攻擊行為的層次性和關(guān)聯(lián)性的分析基礎(chǔ)上,學(xué)者將協(xié)同攻擊行為劃分為基于時間和基于空間的2種行為,結(jié)合適當(dāng)?shù)墓舯磉_(dá)方法[14-18]。
惡意代碼檢測可作為一個代碼的分類問題看待,算法的核心為檢測代碼與惡意代碼之間是否具有相似性,進(jìn)而判斷是否為惡意代碼。傳統(tǒng)的惡意代碼分析方法分為基于靜態(tài)分析的惡意代碼分析和基于動態(tài)分析的惡意代碼分析方法,以及目前興起的基于深度學(xué)習(xí)的檢測分析方法。
惡意代碼的靜態(tài)分析針對生成的匯編文件或者二進(jìn)制文件進(jìn)行形式或者結(jié)構(gòu)分析,是在非執(zhí)行狀態(tài)下信息進(jìn)行分析與檢測,主要從匯編或者二進(jìn)制文件結(jié)構(gòu)和其調(diào)用等程序流程來提取惡意代碼的特征。
2.1.1特征碼匹配技術(shù)
基于特征碼進(jìn)行惡意代碼檢測的基本原理是通過分析人員手動或其他自動化方法提取惡意代碼的靜態(tài)特征,并將其存入惡意代碼特征數(shù)據(jù)庫中,待檢測代碼提取的特征與特征數(shù)據(jù)庫中特征進(jìn)行匹配,進(jìn)而通過相似性等來確定該代碼是否屬于惡意代碼[19]。隨著網(wǎng)絡(luò)的發(fā)展,惡意代碼的反檢測技術(shù)也在不斷改進(jìn),其中混淆以及加密技術(shù)等使得基于特征匹配檢測方法的檢測難度越來越大。文獻(xiàn)[20-21]等利用匯編代碼和馬爾可夫模型手段等,改變了之前通過單一內(nèi)容特征碼進(jìn)行檢測,實(shí)現(xiàn)了多復(fù)合特征碼。實(shí)驗(yàn)表明,基于復(fù)合特征可以大幅度提高檢測的準(zhǔn)確率,檢測準(zhǔn)確率可達(dá)99.9%。
2.1.2基于簽名的惡意代碼檢測方法
基于簽名的惡意代碼檢測與特征匹配檢測方法有些類似,其原理也是基于模式匹配,不同的是基于簽名的惡意代碼檢測與特征匹配提取靜態(tài)特征不同,其主要提取惡意代碼唯一的特征簽名。該特征簽名包括文件名和代碼內(nèi)容等屬性,用來標(biāo)識惡意代碼。同樣將提取的特征簽名信息加入到惡意代碼簽名數(shù)據(jù)庫中,待檢測代碼提取特征簽名后與數(shù)據(jù)庫中已有的特征簽名進(jìn)行匹配,進(jìn)而判斷是否屬于惡意代碼。但是特征簽名的獲取通常需要專家手工提取來獲得,影響其推廣使用。檢測是與數(shù)據(jù)庫中已知惡意代碼的簽名進(jìn)行匹配來判斷其是否屬于惡意代碼[22]。近年來,惡意代碼通常利用偽造或者篡改數(shù)字簽名等方式,使檢測準(zhǔn)確率極大降低。
2.1.3基于文件結(jié)構(gòu)特征的檢測技術(shù)
不同格式的文件具有不同的結(jié)構(gòu)信息,基于文件結(jié)構(gòu)特征可以在一定程度上判斷文件是否被篡改。尤其是在文件上傳時,惡意代碼偽裝成圖片格式上傳到服務(wù)器。為此,學(xué)者們提出基于文件的結(jié)構(gòu)信息進(jìn)行惡意代碼檢測。比如不同類型的圖片具有特定格式信息,對結(jié)構(gòu)信息進(jìn)行分析可以在一定程度上判斷目標(biāo)文件是否為惡意代碼。文獻(xiàn)[23-24]基于此進(jìn)行研究,提出了對可執(zhí)行文件的結(jié)構(gòu)進(jìn)行分析,進(jìn)而判斷是否屬于惡意代碼。近年來,有學(xué)者提出使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行識別[25],該模型構(gòu)建了9個特征進(jìn)行惡意代碼識別,可實(shí)時識別,準(zhǔn)確率高達(dá)95.59%。
2.1.4基于控制流程圖的靜態(tài)檢測技術(shù)
惡意代碼在程序流程控制和函數(shù)調(diào)用中具有一定特征,基于此,Yamaguchi等[26]提出基于控制流程圖進(jìn)行特征提取,算法判斷程序在代碼運(yùn)行中可能會運(yùn)行的流程和執(zhí)行的路徑等,提取惡意代碼程序執(zhí)行流程特征,待檢測代碼與其特征進(jìn)行匹配判斷。文獻(xiàn)[27-28]提出了基于語義跟蹤和行為語義分析的檢測方法。文獻(xiàn)[29-30]提出基于控制流圖特征和機(jī)器學(xué)習(xí)惡意代碼檢測方法,借助機(jī)器學(xué)習(xí)算法構(gòu)建分類器,進(jìn)行病毒檢測,在DroidKungfu惡意代碼數(shù)據(jù)集上進(jìn)行驗(yàn)證,檢測準(zhǔn)確率超過90%。
靜態(tài)檢測方法的優(yōu)點(diǎn)是檢測速度快,但存在不同性質(zhì)和特征的眾多程序,特征提取只能提取部分特征和性質(zhì),易發(fā)生誤報或者漏報[19]。
動態(tài)檢測方法根據(jù)代碼運(yùn)行過程中的表現(xiàn)形式進(jìn)行分析判斷,其檢測方法一般是將惡意代碼放在特定的、安全的環(huán)境中運(yùn)行,然后檢測運(yùn)行過程中發(fā)生的系統(tǒng)調(diào)用、產(chǎn)生的數(shù)據(jù)流量以及運(yùn)行中對權(quán)限申請等情況,并記錄運(yùn)行過程中內(nèi)存空間使用、網(wǎng)絡(luò)流量變化情況以及其他物理特征等信息,得到惡意代碼運(yùn)行特征。
2.2.1基于行為的惡意代碼檢測技術(shù)
惡意代碼行為是指在網(wǎng)絡(luò)系統(tǒng)中具有惡意添加、篡改甚至刪除等行為的代碼。基于行為的惡意代碼檢測方法中最常見的是基于應(yīng)用程序接口調(diào)用序列的分析。文獻(xiàn)[33-34]提出了利用半監(jiān)督聚類算法和DNA序列比對算法等檢測方法。Kolosnjaji等[36]提出了利用深度學(xué)習(xí)方法實(shí)現(xiàn)惡意代碼自動分類,該方法與SVM以及隱馬爾可夫模型在檢測準(zhǔn)確度上都有一定提升。
2.2.2基于流量的惡意代碼檢測技術(shù)
基于流量載荷特征的檢測技術(shù)的原理是解析數(shù)據(jù)分組的有效負(fù)載對進(jìn)行惡意流量進(jìn)行檢測。根據(jù)解析結(jié)果提取惡意代碼相應(yīng)特征、構(gòu)建特征規(guī)則庫,待檢測代碼基于特征規(guī)則對數(shù)據(jù)分組中的載荷進(jìn)行匹配[37]。Anderson等[38]提出了基于流量上下文和背景知識的TLS指紋構(gòu)建方法和TrafficAV模型的流量檢測方法,對網(wǎng)絡(luò)系統(tǒng)和移動端惡意代碼行為進(jìn)行檢測和分析。
2.2.3基于磁盤和內(nèi)存的惡意代碼檢測技術(shù)
基于磁盤取證分析分析惡意代碼運(yùn)行過程中虛擬機(jī)中磁盤文件變化情況,進(jìn)行對可疑行為的識別和標(biāo)記。隨著磁盤容量越來越大,以及近年來數(shù)據(jù)加密、數(shù)據(jù)隱藏等反取證技術(shù)的興起,其檢測難度越來越大[59]?;趦?nèi)存的惡意代碼檢測針對各種內(nèi)核對象進(jìn)行分析,提取惡意代碼引發(fā)的一系列異常行為。一些惡意程序會通過APIHOOK技術(shù)[54]和替換系統(tǒng)服務(wù)DKOM[55]以修改內(nèi)存數(shù)據(jù)結(jié)構(gòu)的方式隱藏自身,導(dǎo)致一般的取證工具難以發(fā)現(xiàn)其運(yùn)行過程[56-57]。徐佳[40]提出了基于內(nèi)存鏡像分析的方法進(jìn)行惡意代碼,Chin-Wei等[41]和Aja等[58]提出了一種基于VMI和利用虛擬機(jī)的內(nèi)存取證技術(shù)。
2.2.4基于物理的檢測技術(shù)
一些惡意代碼在運(yùn)行時會申請更多的內(nèi)存等資源,通過檢測硬件信息使用情況可以發(fā)現(xiàn)異常信息?;诖?,學(xué)者們提出了根據(jù)惡意代碼在運(yùn)行狀態(tài)下硬件使用情況,判斷惡意代碼的運(yùn)行特征。比如在無線傳感網(wǎng)中節(jié)點(diǎn)通訊狀況以及web系統(tǒng)中CPU頻率的變化、發(fā)熱量情況等硬件物理特征變化情況。楊光[44]和潘緋等[60]基于物理特征的認(rèn)證對無線傳感網(wǎng)中節(jié)點(diǎn)行為進(jìn)行分析,識別其中的惡意節(jié)點(diǎn)。Bridges等[42]基于CPU耗電特征,提出一種無監(jiān)督惡意代碼檢測方法。Sayadi等[43]利用機(jī)器學(xué)習(xí)方法,研究硬件特征與惡意代碼之間的關(guān)系,對惡意代碼進(jìn)行實(shí)時檢測。
動態(tài)分析技術(shù)基于程序執(zhí)行中流程、行為、流量和物理等特征,對惡意代碼的加密、混淆、多態(tài)等技術(shù)具有較好的抑制作用。但是面對不斷變化的惡意代碼,動態(tài)檢測方法無法及時發(fā)現(xiàn)惡意代碼。
機(jī)器學(xué)習(xí)算法不需要手動提取惡意代碼特征,自動提取、挖掘惡意代碼特征之間的關(guān)系,能夠提取更多的深層次特征,因此對未知的惡意代碼也可以實(shí)現(xiàn)自動化分析。惡意代碼的檢測可以理解為分類問題。其檢測技術(shù)步驟如下:首先,對惡意代碼樣本進(jìn)行分類,與正常的程序一起作為樣本,進(jìn)行模型訓(xùn)練;然后,對樣本數(shù)據(jù)進(jìn)行預(yù)處理,提取樣本特征,設(shè)計機(jī)器學(xué)習(xí)算法模型;最后,基于訓(xùn)練的分類模型對未知樣本進(jìn)行惡意代碼檢測。近年來,學(xué)者們將機(jī)器學(xué)習(xí)應(yīng)用到惡意代碼檢測領(lǐng)域,2011年,Nataraj[45]將惡意代碼文件段轉(zhuǎn)化為8位灰度圖像,最后通過卷積神經(jīng)網(wǎng)絡(luò)CNN對灰度圖像進(jìn)行判別。2014年,Syed等[46]將惡意軟件的行為信息可視化為彩色圖,取得了更好的效果。2018年,Kan等[47]基于反匯編等方法,利用分類網(wǎng)絡(luò)對惡意代碼進(jìn)行檢測和分類。文獻(xiàn)[48]提出了一種深度學(xué)習(xí)和動態(tài)方法相結(jié)合的檢測方式,明顯提升了準(zhǔn)確率,但計算成本較高。Cui等[49]提出了一種基于深度學(xué)習(xí)方法的變種檢測算法。Vu等[50]將惡意軟件二進(jìn)制文件轉(zhuǎn)化為彩色圖像,利用卷積變換網(wǎng)絡(luò)實(shí)現(xiàn)惡意代碼的自動識別。
與此同時,2006年開始針對機(jī)器學(xué)習(xí)模型測試數(shù)據(jù)的“投毒”到2014年對抗樣本的提出,機(jī)器學(xué)習(xí)對惡意代碼的發(fā)展也起到了推動作用?;诖藢咕W(wǎng)絡(luò)也在惡意代碼檢測中發(fā)揮了重要作用[51-53]。
綜上所述,惡意代碼檢測大致分為動態(tài)檢測和靜態(tài)檢測2種。采用機(jī)器學(xué)習(xí)或深度學(xué)習(xí)算法對數(shù)據(jù)進(jìn)行進(jìn)一步處理或者學(xué)習(xí)是未來重要的研究方向。
當(dāng)前,惡意代碼攻擊趨于智能化。隨著人工智能在諸多領(lǐng)域都取得了較好成效,惡意代碼設(shè)計者也借助人工智能技術(shù)來提升惡意代碼的反檢測能力。傳統(tǒng)的人工提取特征不能及時對復(fù)雜多變的惡意代碼進(jìn)行及時檢測,人工分析難度越來越大,借助深度學(xué)習(xí)進(jìn)行特征提取是未來重要研究方向之一。
惡意代碼最早是基于二進(jìn)制文件,近年來非二進(jìn)制文件中出現(xiàn)的惡意代碼越來越多。郵件等也是惡意可執(zhí)行文件的載體,隨著防護(hù)意識的提升,接收并執(zhí)行帶有惡意病毒的可執(zhí)行程序的成功率越來越低。但針對Word文檔和其他Office文件的攻擊越來越頻繁[61]。與二進(jìn)制可執(zhí)行文件不同,惡意文檔具有涉及領(lǐng)域更廣、影響范圍更大、攻擊手段更靈活多樣等特點(diǎn),因此對于非二進(jìn)制惡意代碼檢測也是未來重要的研究領(lǐng)域。
不斷發(fā)展的惡意代碼攻擊及其防范技術(shù)是“矛”與“盾”的關(guān)系。隨著新型惡意代碼和攻擊方式的出現(xiàn),單一的防范技術(shù)與手段在現(xiàn)實(shí)任務(wù)中將難以勝任。因此,多個技術(shù)路線和多個方法的高效融合式應(yīng)用十分必要。在確定的硬軟件環(huán)境與資源下,構(gòu)建高效率與高精度的惡意代碼檢測能力是一個開放性問題。在具體任務(wù)中,傳統(tǒng)方法與基于機(jī)器學(xué)習(xí)的方法相結(jié)合、2個或多個代碼靜態(tài)分析與動態(tài)分析方法聯(lián)合的情況下,方法的具體融合方式、如何取得最優(yōu)效率與性能平衡、如何在極低漏報率的前提下維持低誤報率都是值得深入持續(xù)研究的問題。此外,惡意代碼和攻擊的分級及基于此的差異化防范也是值得研究的具有實(shí)際意義的問題。
闡述了惡意代碼的發(fā)展現(xiàn)狀,概括了惡意代碼的代碼注入、緩沖區(qū)溢出、端口復(fù)用和協(xié)同攻擊技術(shù),對機(jī)器學(xué)習(xí)的興起對攻擊技術(shù)的影響和發(fā)展做了闡述。惡意代碼的靜態(tài)檢測方法效率比較高,但是隨著惡意代碼的不斷發(fā)展,特征提取難度越來越大,容易發(fā)生誤報;動態(tài)檢測技術(shù)可以彌補(bǔ)靜態(tài)檢測適用范圍小、無法有效識別惡意代碼靈活構(gòu)造等問題,但資源消耗大,檢測效率低。隨著機(jī)器學(xué)習(xí)的發(fā)展,基于機(jī)器學(xué)習(xí)方法構(gòu)造惡意代碼可使得傳統(tǒng)的動靜態(tài)檢測方法失效,而基于機(jī)器學(xué)習(xí)的惡意代碼檢測方法也可以有效提升檢測準(zhǔn)確率。動靜態(tài)結(jié)合以及融合機(jī)器學(xué)習(xí)方法進(jìn)行檢測是未來發(fā)展趨勢。