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