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