摘 要:軟件受到攻擊后將在所執(zhí)行的系統(tǒng)調(diào)用狀況中有所體現(xiàn),因此可將基于系統(tǒng)調(diào)用的入侵檢測(cè)技術(shù)應(yīng)用于軟件漏洞的檢測(cè)。本文針對(duì)無(wú)源碼的可執(zhí)行程序,引入系統(tǒng)調(diào)用節(jié)點(diǎn)和系統(tǒng)調(diào)用上下文信息的概念來(lái)刻畫(huà)軟件行為的動(dòng)態(tài)特性和漏洞的位置信息,利用改進(jìn)的STIDE算法構(gòu)造軟件正常行為特征庫(kù)來(lái)檢測(cè)并定位漏洞。實(shí)驗(yàn)結(jié)果表明該方法能夠準(zhǔn)確獲取軟件行為信息,且具有較強(qiáng)的漏洞檢測(cè)能力。
關(guān)鍵詞:漏洞檢測(cè);行為建模;系統(tǒng)調(diào)用短序列;STIDE算法;函數(shù)調(diào)用鏈
中圖分類(lèi)號(hào):TP393.08 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
軟件漏洞是存在于軟件系統(tǒng)內(nèi)的一組弱點(diǎn)或缺陷,這組弱點(diǎn)或缺陷被惡意主體(攻擊者或攻擊程序)加以利用,可達(dá)到訪問(wèn)未授權(quán)信息或損壞系統(tǒng)的目的。軟件由于其功能及行為的復(fù)雜性不可避免地存在一些漏洞,這給整個(gè)軟件系統(tǒng)帶來(lái)了極大的隱患。傳統(tǒng)的漏洞檢測(cè)技術(shù)分為針對(duì)源代碼進(jìn)行檢查的靜態(tài)檢測(cè)技術(shù)和在缺少源代碼的情況下對(duì)軟件漏洞進(jìn)行檢測(cè)和防護(hù)的動(dòng)態(tài)檢測(cè)技術(shù),但這些技術(shù)僅能檢測(cè)出已知漏洞類(lèi)型,能檢測(cè)的對(duì)象有限,且存在檢測(cè)規(guī)模大、誤報(bào)率高等缺點(diǎn)[1]。
研究表明,軟件受到攻擊后將在所執(zhí)行的系統(tǒng)調(diào)用狀況中有所體現(xiàn),并且系統(tǒng)調(diào)用之間的關(guān)系也在一定程度上反映了軟件的分支結(jié)構(gòu)??紤]到軟件系統(tǒng)在未遭到攻擊時(shí),安全漏洞(而非引起系統(tǒng)崩潰的錯(cuò)誤)并未給系統(tǒng)造成損失,可在軟件系統(tǒng)交付使用后,當(dāng)其遭到攻擊的時(shí)候攔截攻擊并檢測(cè)出漏洞以便日后進(jìn)行修補(bǔ)[2-5]。因此將基于系統(tǒng)調(diào)用的入侵檢測(cè)技術(shù)應(yīng)用于軟件漏洞的檢測(cè)是很有必要的。
本文針對(duì)無(wú)源碼的可執(zhí)行程序,提出一種基于系統(tǒng)調(diào)用短序列的軟件漏洞檢測(cè)方法。將目標(biāo)程序在安全環(huán)境下運(yùn)行,監(jiān)測(cè)其系統(tǒng)調(diào)用序列和堆棧信息,利用改進(jìn)的STIDE算法將系統(tǒng)調(diào)用序列“分割”為短序列,并建立正常行為特征庫(kù)和位置信息庫(kù)。再將目標(biāo)程序暴露于攻擊下,采用同樣的算法得到短序列進(jìn)行模式匹配,通過(guò)計(jì)算橫向異常值和縱向異常值來(lái)判斷是否發(fā)生行為偏離。當(dāng)行為偏離超過(guò)閾值時(shí)告警,并根據(jù)可疑系統(tǒng)調(diào)用的位置特征與位置信息庫(kù)中的位置特征進(jìn)行比對(duì),定位漏洞。
2 相關(guān)研究(Correlational research)
目前對(duì)軟件行為的動(dòng)態(tài)檢測(cè)大多采用異常檢測(cè)方式,在可信環(huán)境下通過(guò)靜態(tài)分析軟件代碼或者動(dòng)態(tài)監(jiān)控軟件實(shí)例,從中提取軟件行為特征建立軟件的正常行為模型,然后監(jiān)控軟件的實(shí)際運(yùn)行,提取其行為特征并與正常行為模型進(jìn)行比較。如果軟件行為發(fā)生的偏差超過(guò)指定閾值,則判定軟件行為不可信。
目前軟件行為模型已經(jīng)取得了一些研究成果,按照不同的組織模式,相關(guān)研究主要包括基于短序列的N-gram模型[5]、Var-gram模型[6],以及引入系統(tǒng)調(diào)用頻率特性[7]、數(shù)據(jù)挖掘理論或隱式馬爾可夫鏈的模型;基于自動(dòng)機(jī)的FSA模型、Abstract Stack模型、Call Graph模型、Execution Graph模型;基于系統(tǒng)調(diào)用參數(shù)的Dyck模型、DTEMSB-BTCS模型;基于虛擬路徑的Vt-Path模型、VPstatic模型。
現(xiàn)有研究將基于系統(tǒng)調(diào)用的入侵檢測(cè)模型應(yīng)用于漏洞檢測(cè)技術(shù),具體方法為:采用動(dòng)態(tài)訓(xùn)練方式,結(jié)合系統(tǒng)調(diào)用的PC值構(gòu)造出程序執(zhí)行路徑的有限狀態(tài)自動(dòng)機(jī),自動(dòng)機(jī)的節(jié)點(diǎn)為系統(tǒng)調(diào)用對(duì)應(yīng)的PC值,而狀態(tài)轉(zhuǎn)換為系統(tǒng)調(diào)用。當(dāng)每個(gè)系統(tǒng)調(diào)用發(fā)生時(shí),在檢測(cè)程序中存儲(chǔ)當(dāng)前的函數(shù)堆棧,根據(jù)異常發(fā)生的狀態(tài)機(jī)所屬函數(shù)來(lái)判斷可能的函數(shù)漏洞在哪個(gè)函數(shù)中?;跔顟B(tài)機(jī)的漏洞檢測(cè)方法需要建立自動(dòng)機(jī),存在時(shí)間、空間消耗較大及不可能路徑等問(wèn)題。
針對(duì)上述已有技術(shù)存在的不足,本文將基于系統(tǒng)調(diào)用短序列模型和STIDE算法加以改進(jìn)并應(yīng)用于軟件漏洞檢測(cè),其目的在于發(fā)揮短序列模型匯聚時(shí)間短、運(yùn)行時(shí)間負(fù)載較低的優(yōu)勢(shì),同時(shí)克服由于缺乏定位信息和系統(tǒng)調(diào)用上下文信息導(dǎo)致模型對(duì)上下文不敏感、粒度粗等缺點(diǎn),增強(qiáng)了模型的檢測(cè)能力。
3 基于系統(tǒng)調(diào)用短序列的軟件漏洞檢測(cè)模型
(Software vulnerability detection model based on
short sequence of system calls)
3.1 基本概念
定義1:系統(tǒng)調(diào)用短序列SCS(System Call Sequence)是指包含一定數(shù)量的系統(tǒng)調(diào)用節(jié)點(diǎn)的有序集合:
其中,n表示短序列長(zhǎng)度,SC表示系統(tǒng)調(diào)用節(jié)點(diǎn)。
定義2:系統(tǒng)調(diào)用節(jié)點(diǎn)SC(System Call)是指含有系統(tǒng)調(diào)用相關(guān)信息的一個(gè)系統(tǒng)調(diào)用向量:
其中,SCI表示系統(tǒng)調(diào)用基本信息,SCP表示系統(tǒng)調(diào)用屬性,SCC表示系統(tǒng)調(diào)用上下文。這三個(gè)向量值唯一標(biāo)識(shí)一個(gè)系統(tǒng)調(diào)用節(jié)點(diǎn)。
定義3:系統(tǒng)調(diào)用基本信息SCI(System Call Information):
其中,SysCall_No表示系統(tǒng)調(diào)用號(hào),SysCall_Name表示系統(tǒng)調(diào)用名。
定義4:系統(tǒng)調(diào)用屬性SCP(System Call Properties):
其中,n()表示系統(tǒng)調(diào)用參數(shù)個(gè)數(shù),SysCallArg表示系統(tǒng)調(diào)用參數(shù)。
定義5:系統(tǒng)調(diào)用上下文信息SCC(System Call Context):
其中,PC表示當(dāng)前系統(tǒng)調(diào)用發(fā)生時(shí)的PC值,CSV表示函數(shù)調(diào)用鏈值,通過(guò)如下算式得到:
CS(Call Stack)為函數(shù)調(diào)用鏈,當(dāng)系統(tǒng)調(diào)用發(fā)生時(shí),記錄函數(shù)堆棧里的返回地址所對(duì)應(yīng)的函數(shù)名稱(chēng),并將其存于位置信息庫(kù)CS_Table中,作為該表索引:
即調(diào)用了,調(diào)用了,…,調(diào)用了。其中,n表示函數(shù)調(diào)用鏈的長(zhǎng)度。
上述系統(tǒng)調(diào)用信息的獲取采用修改中斷向量表的方法,準(zhǔn)確高效。函數(shù)返回地址與名稱(chēng)的對(duì)應(yīng)方法參考ELF文件格式分析方法,從可執(zhí)行ELF文件中提取出相對(duì)地址對(duì)應(yīng)的函數(shù)名稱(chēng)。
3.2 模型概述
基于系統(tǒng)調(diào)用短序列的軟件安全漏洞檢測(cè)模型,如圖1所示,分為兩個(gè)階段:離線訓(xùn)練階段與在線檢測(cè)階段。離線訓(xùn)練階段要求目標(biāo)軟件在安全環(huán)境下運(yùn)行,在線檢測(cè)階段則將目標(biāo)軟件曝露于惡意攻擊中。
(1)離線訓(xùn)練
在離線訓(xùn)練階段,由于系統(tǒng)調(diào)用序列是動(dòng)態(tài)生成的,因此采用STIDE算法以固定長(zhǎng)度值為n的滑動(dòng)窗口對(duì)正常行為序列進(jìn)行掃描,將生成的一系列短序列存儲(chǔ)到正常行為特征庫(kù)中。正常行為特征庫(kù)是由一系列上述系統(tǒng)調(diào)用短序列組成的,n為滑動(dòng)窗口大小也即短序列長(zhǎng)度。此外,還需維護(hù)一個(gè)位置信息庫(kù)CS_Table,記錄函數(shù)調(diào)用鏈,其索引是。
(2)在線檢測(cè)
在線檢測(cè)階段中,同樣采用STIDE滑動(dòng)窗口機(jī)制,STIDE算法使用計(jì)算海明距離的方法來(lái)判定待測(cè)序列中的異常發(fā)生情況。此外,針對(duì)系統(tǒng)調(diào)用節(jié)點(diǎn)SC的變動(dòng),相應(yīng)改進(jìn)STIDE匹配算法,給出定位算法。
3.3 改進(jìn)的STIDE算法及定位算法
第一步,采用長(zhǎng)度為n、步長(zhǎng)為1的滑動(dòng)窗口機(jī)制對(duì)正常行為產(chǎn)生的系統(tǒng)調(diào)用序列進(jìn)行掃描,并記錄每個(gè)窗口內(nèi)各個(gè)系統(tǒng)調(diào)用節(jié)點(diǎn)從自身i開(kāi)始到其后n-1個(gè)位置所生成的短序列。,以這種包含系統(tǒng)調(diào)用節(jié)點(diǎn)之間的位置關(guān)系信息的短序列SCS為結(jié)果建立特征庫(kù),并將其存儲(chǔ)至描述正常行為的特征庫(kù)中。
第二步,用同樣的方式將未知行為的系統(tǒng)調(diào)用序列進(jìn)行劃分,與已建立的包含正常行為的數(shù)據(jù)庫(kù)進(jìn)行短序列元素關(guān)系匹配,匹配算法如下:
(1)系統(tǒng)調(diào)用節(jié)點(diǎn)匹配算法:對(duì)待測(cè)的系統(tǒng)調(diào)用節(jié)點(diǎn)SC,計(jì)算系統(tǒng)調(diào)用偏差值D。
其中,為當(dāng)前待匹配的系統(tǒng)調(diào)用節(jié)點(diǎn)元素的字符串拼接,為特征庫(kù)中系統(tǒng)調(diào)用節(jié)點(diǎn)元素的字符串拼接。
當(dāng)時(shí),系統(tǒng)調(diào)用無(wú)偏差,與匹配;
當(dāng)時(shí),系統(tǒng)調(diào)用無(wú)偏差,與匹配;
當(dāng)時(shí),系統(tǒng)調(diào)用有偏差,與不匹配。
的取值與Hash函數(shù)的選擇有關(guān),在實(shí)現(xiàn)時(shí)采用安全套接層工具包OpenSSL包默認(rèn)的散列函數(shù)來(lái)計(jì)算系統(tǒng)調(diào)用上下文值。
(2)系統(tǒng)調(diào)用短序列偏差值算法:對(duì)待測(cè)系統(tǒng)調(diào)用短序列,計(jì)算其與特征庫(kù)中短序列的系統(tǒng)調(diào)用短序列偏差值。
其中,為滑動(dòng)窗口大小,為短序列中第個(gè)系統(tǒng)調(diào)用節(jié)點(diǎn)與中第個(gè)系統(tǒng)調(diào)用節(jié)點(diǎn)的系統(tǒng)調(diào)用偏差值。
(3)對(duì)待測(cè)序列采用滑動(dòng)窗口機(jī)制劃分系統(tǒng)調(diào)用短序列,計(jì)算該序列對(duì)比特征庫(kù)中每條短序列的海明距離,記錄最小值,記為待測(cè)短序列的最小海明距離。
其中,為短序列與中系統(tǒng)調(diào)用節(jié)點(diǎn)的不匹配個(gè)數(shù),匹配算法采用系統(tǒng)調(diào)用節(jié)點(diǎn)匹配算法。
(4)找到特征庫(kù)中與待測(cè)短序列匹配后海明距離最小的,記為。采用系統(tǒng)調(diào)用短序列偏差值算法,計(jì)算與的系統(tǒng)調(diào)用短序列偏差值??赡艽嬖诙鄠€(gè),選取最小的系統(tǒng)調(diào)用短序列偏差值,記為待測(cè)短序列的最小系統(tǒng)調(diào)用短序列偏差值。
(5)計(jì)算橫向異常值和縱向異常值。
其中,為待測(cè)系統(tǒng)調(diào)用短序列,橫向異常值記錄當(dāng)前所有待測(cè)系統(tǒng)調(diào)用短序列的最小海明距離的最大值。縱向異常值記錄當(dāng)前所有待測(cè)系統(tǒng)調(diào)用短序列的最小系統(tǒng)調(diào)用短序列偏差值的最大值。
(6)當(dāng)橫向異常值和縱向異常值超過(guò)一定閾值,則掛起用戶進(jìn)程。兩個(gè)閾值的選取分別基于滑動(dòng)窗口大小和(1)中值的大小。接著從最近一次未超過(guò)閾值的短序列中,找到系統(tǒng)調(diào)用偏差值D最大的系統(tǒng)調(diào)用節(jié)點(diǎn)的值,并在位置信息庫(kù)CS_Table中找出對(duì)應(yīng)的函數(shù)調(diào)用鏈CS到當(dāng)前系統(tǒng)調(diào)用節(jié)點(diǎn)的函數(shù)調(diào)用鏈CS,這之間判為可疑漏洞的位置。
4 實(shí)驗(yàn)及分析(Experiment and analysis)
4.1 實(shí)驗(yàn)環(huán)境及實(shí)驗(yàn)方法
實(shí)驗(yàn)主機(jī)的硬件配置為:CPU為主頻2.53GHz的Intel(R) Core(TM)2 Duo T9400,內(nèi)存為4.00 GB;運(yùn)行內(nèi)核版本為2.6.32的redhat 6.5操作系統(tǒng),編譯器版本為gcc4.4.7。
在上述實(shí)驗(yàn)環(huán)境下進(jìn)行了模型實(shí)現(xiàn),實(shí)現(xiàn)方法如下:在離線階段,首先為系統(tǒng)新增一個(gè)LKM模塊,用來(lái)修改中斷向量表和恢復(fù)中斷服務(wù)程序。其次獲取當(dāng)前系統(tǒng)調(diào)用并保存相關(guān)信息。隨后將截獲的系統(tǒng)調(diào)用劃分成短序列,并輸出到短序列集合文件中。最后讀入該文件,構(gòu)造系統(tǒng)調(diào)用短序列森林,形成正常行為特征庫(kù)。
在線檢測(cè)階段采用CVE漏洞庫(kù)中sendmail進(jìn)程的exploit來(lái)攻擊sendmail進(jìn)程,獲得異常數(shù)據(jù)。獲取異常行為與離線階段的方法一致。此外,獲取當(dāng)前系統(tǒng)調(diào)用時(shí)的ebp進(jìn)行?;厮荩瑢⒑瘮?shù)堆棧的所有返回地址存于返回地址集合文件,并根據(jù)改進(jìn)的STIDE算法在特征庫(kù)中進(jìn)行匹配,主要工作如下:
①計(jì)算橫向異常值和縱向異常值;
②根據(jù)異常值偏差程度報(bào)告漏洞檢測(cè)結(jié)果;
③如果異常值未超出閾值,則調(diào)用原系統(tǒng)調(diào)用;如果超出閾值,則報(bào)警并結(jié)束進(jìn)程。
圖2和圖3分別展示了離線訓(xùn)練階段和在線檢測(cè)階段的實(shí)現(xiàn)流程。
4.2 閾值確定
本文針對(duì)sendmail漏洞進(jìn)行了實(shí)驗(yàn),實(shí)驗(yàn)常值如表1所示。
針對(duì)不同的異常值取值,選取部分漏洞和正常數(shù)據(jù)進(jìn)行異常度測(cè)試,統(tǒng)計(jì)同一閾值下各漏洞的異常度,計(jì)算其標(biāo)準(zhǔn)偏差的方差。實(shí)驗(yàn)采用大小為30的局部幀,異常度為不匹配數(shù)目。
實(shí)驗(yàn)結(jié)果表明縱向異常值閾值取3、橫向異常值閾值取36時(shí),方差最小,異常度聚合程度最高。
4.3 漏洞檢測(cè)能力
根據(jù)上述閾值,針對(duì)不同漏洞檢測(cè)其漏洞所在函數(shù)及函數(shù)所在文件,實(shí)驗(yàn)結(jié)果如表2所示。
參照漏洞標(biāo)準(zhǔn)描述,其中四個(gè)漏洞所在函數(shù)和存在文件與披露的漏洞所在文件一致,其余兩個(gè)漏洞未披露漏洞所在文件,但檢測(cè)報(bào)告中函數(shù)調(diào)用鏈與披露的漏洞成因一致。
5 結(jié)論(Conclusion)
目前基于系統(tǒng)調(diào)用的軟件行為研究方興未艾,漏洞的在線檢測(cè)方法更是研究熱點(diǎn)之一?;谙到y(tǒng)調(diào)用短序列的軟件漏洞檢測(cè)模型引入系統(tǒng)調(diào)用節(jié)點(diǎn)和系統(tǒng)調(diào)用上下文信息的概念來(lái)刻畫(huà)軟件行為的動(dòng)態(tài)特性和漏洞的位置信息,利用改進(jìn)的STIDE算法構(gòu)造軟件正常行為特征庫(kù)來(lái)檢測(cè)并定位漏洞。實(shí)驗(yàn)結(jié)果表明模型能夠準(zhǔn)確獲取軟件行為信息,也具有較強(qiáng)的漏洞檢測(cè)能力。
參考文獻(xiàn)(References)
[1] Simple Nomad.Sendmail 8.12.x-'X-header' Remote Heap Buffer Overflow Vulnerability[EB/OL].https://www.exploit-db.com/exploits/32995.
[2] redsand.Sendmail<=8.13.5-Remote Signal Handling Exploit PoC[EB/OL].[2014-6-12].https://www.exploit-db.com/exploits/2051.
[3] Giffin J T,et al.Environment-Sensitive Intrusion Detection[J].Lecture Notes in Computer Science,2006:185-206.
[4] 傅建明,等.基于對(duì)象的軟件行為模型[J].軟件學(xué)報(bào),2011,
22(11):2716-2728.
[5] 忽朝儉,等.基于可執(zhí)行代碼的漏洞檢測(cè)技術(shù)[J].清華大學(xué)學(xué)報(bào):自然科學(xué)版,2009,S2:225-233.
[6] 張林,曾慶凱.軟件安全漏洞的靜態(tài)檢測(cè)技術(shù)[J].計(jì)算機(jī)工程,2008,(12):157-159.
[7] 單國(guó)棟,戴英俠,王航.計(jì)算機(jī)漏洞分類(lèi)研究[J].計(jì)算機(jī)工程,2002,28(10):3-6.
作者簡(jiǎn)介:
葛立欣(1970-),男,碩士,副教授.研究領(lǐng)域:計(jì)算機(jī)網(wǎng)絡(luò),
軟件工程.