專利名稱:Linux環(huán)境下基于調用棧圖的入侵檢測方法
技術領域:
本發(fā)明涉及計算機網(wǎng)絡安全技術領域,特別涉及一種Linux環(huán)境下基于調用棧圖的入侵檢測方法。
背景技術:
隨著因特網(wǎng)的廣泛發(fā)展,我國各級政府、企事業(yè)單位、網(wǎng)絡公司等多個上網(wǎng)工程的全面啟動,電子政務、電子商務等服務的迅速發(fā)展,網(wǎng)絡安全問題正在成為上述網(wǎng)絡應用的瓶頸。美國商業(yè)軟件聯(lián)盟(BSA)在對美國企業(yè)安全措施的調查報告中指出,60%的美國企業(yè)在今后一年內極有可能遭受大規(guī)模的網(wǎng)絡攻擊,而在這些網(wǎng)絡攻擊下能夠進行自我保護的民間企業(yè)只有18%。雖然人們的網(wǎng)絡安全防護意識在不斷提高,但防護措施仍然極不完善。中國互聯(lián)網(wǎng)絡信息中心(CNNIC)最近一次的中國互聯(lián)網(wǎng)調查表明,在接受調查的用戶中,有47.1%的個人用戶被入侵過,這僅僅是用戶自己所覺察到被入侵的數(shù)字,還有很多個人用戶可能在自己的電腦被入侵后卻一無所知。由于網(wǎng)絡安全等原因,國內金融界每年的損失在100億元以上,2003年一個用戶用普通軟件就輕易盜取了8萬個信用卡密碼。有超過七成以上的計算機曾經受過病毒感染。從這些驚人的數(shù)字我們可以看到,中國互聯(lián)網(wǎng)絡安全狀況并不令人樂觀,無論是政府組織、企事業(yè)單位還是眾多的個人用戶,網(wǎng)絡安全仍然是一個非常嚴峻的問題。
通過分析系統(tǒng)調用信息實現(xiàn)對入侵行為的檢測,是基于主機的入侵檢測中重要的一個方面,許多研究者在這方面做了很多的工作。Forrest等在1996年首先引入了一個簡單的基于系統(tǒng)調用的入侵檢測方法,以進程正常運行時產生的一定長度的系統(tǒng)調用短序列為模型來刻畫進程正常運行狀態(tài),在得到某一個進程正常運行時所有可能產生的一定長度的短序列后,就可以以此為依據(jù)檢測出異常的短序列,進而發(fā)現(xiàn)入侵。WenKe Lee等人繼續(xù)了Forrest的工作,使用RIPPER從系統(tǒng)調用序列中挖掘出正常和異常的模式,以規(guī)則的形式來描述系統(tǒng)的運行狀態(tài),從而建立了一個更簡潔有效的系統(tǒng)正常模型。IBM蘇黎士研究中心的Wespi等在Forrest的定長短序列的思想基礎上,提出用變長的序列來刻畫進程的運行狀態(tài),并用實驗證明了該模型有更好的檢測效果。Berkeley的Wagner等提出基于過程調用的Callgraph模型,采用靜態(tài)分析程序代碼的方法獲取程序運行的正常NDFA模型,應用NDFA對程序的運行進行動態(tài)監(jiān)控。Giffin等人在Wagner思想的基礎上,將靜態(tài)程序分析改為對二進制文件運行靜態(tài)分析。Sekar等人提出了基于系統(tǒng)調用的FSA方法,其中在傳統(tǒng)的系統(tǒng)調用序列中引入了程序計數(shù)器信息(PC),將程序運行中的計數(shù)器值作為狀態(tài),將系統(tǒng)調用作為狀態(tài)之間的轉移。UMass大學的Hanping Feng等人提出對程序的調用棧信息進行獲取和分析,建立前后兩個程序執(zhí)行點之間的抽象路徑VtPath,這僅僅對用戶空間的被調用函數(shù)的返回地址進行建模,而并沒有在內核中對系統(tǒng)調用函數(shù)的調用棧信息建立模型,因為復雜的程序會涉及到更多的被調用函數(shù),這會使得由抽象路徑構成的VtPath非常復雜,分析效率低下,這也是VtPath模型難以大規(guī)模實際應用的一個主要原因。
以上的幾種方法中,前三種方法存在一個共同特征,即在程序行為建模過程中,都只采用系統(tǒng)調用序列作為信息源,而與只分析系統(tǒng)調用序列的方法有所不同,后面幾種方法在分析系統(tǒng)調用序列的過程中都附加了其它類型的信息,如程序計數(shù)器、函數(shù)返回地址信息等。但對函數(shù)返回地址的分析其實是對用戶空間的函數(shù)的分析,由于用戶空間的函數(shù)種類非常多,變化非常大,因此這種方法難以廣泛推廣。
發(fā)明內容
本發(fā)明的目的在于克服上述現(xiàn)有技術的缺點,提供了一種Linux環(huán)境下基于調用棧圖的入侵檢測方法,實現(xiàn)了對指定進程系統(tǒng)調用的調用鏈的異常檢測機制。
為達到上述目的本發(fā)明采用的技術方案是首先,獲取調用棧數(shù)據(jù)首先通過Ptrace機制實時獲取操作系統(tǒng)中每個進程產生的每個系統(tǒng)調用的調用棧數(shù)據(jù),由父進程通過fork()產生一個子進程,然后父進程進入等待;在子進程中通過PTRACE ME主動請求被其父進程跟蹤,然后在子進程中通過系統(tǒng)EXECVE函數(shù)運行被跟蹤的父進程,進程返回標志為正數(shù)則表示為成功執(zhí)行,否則,再次創(chuàng)建子進程,則會在執(zhí)行第一個系統(tǒng)調用前停下來,并發(fā)送一個SIGCHILD信號給等待的父進程,父進程停止等待后發(fā)出PTRACE SYSCALL請求重新啟動停止的系統(tǒng)調用,父進程重新進入等待;子進程繼續(xù)執(zhí)行,在系統(tǒng)調用的入口處被信號SIGTRAP停止并發(fā)出SIGCHILD信號中止父進程的等待狀態(tài),父進程退出等待狀態(tài),此時獲取到系統(tǒng)調用入口處的調用號、傳入?yún)?shù)、返回地址以及調用函數(shù)的棧幀指針EBP,并進行相應調用棧圖的生成或實時檢測;然后父進程發(fā)出PTRACE SYSCALL請求重新啟動停止的系統(tǒng)調用,父進程第三次進入等待子進程停止信號的狀態(tài),子進程將被停止的系統(tǒng)調用運行結束,在系統(tǒng)調用退出前被信號SIGTRAP停止并通知父進程,父進程在此時獲取系統(tǒng)調用運行后的返回值和系統(tǒng)調用中分配的棧幀信息,然后再發(fā)出重新啟動信號讓子進程繼續(xù)運行下一個系統(tǒng)調用,開始新的一輪對系統(tǒng)調用數(shù)據(jù)的控制和觀察,直到子進程結束;其次,用調用棧數(shù)據(jù)生成調用棧圖通過調用棧圖生成算法(Call Stack GraphBuildingAlgorithm,CSGBA)對得到的調用棧數(shù)據(jù)即調用號、傳入?yún)?shù)、返回地址以及調用函數(shù)的棧幀指針EBP進行訓練,從而形成指定進程的由不同的實時檢測的數(shù)據(jù)建成的調用棧圖;將獲得的實時檢測的數(shù)據(jù)在建立的調用棧上進行分層匹配,調用棧圖是有向圖,由第i層的節(jié)點指向第i+1層的節(jié)點,在每個節(jié)點的數(shù)據(jù)結構中保存了與之相連的下一層節(jié)點的關聯(lián)信息,其中包括關聯(lián)節(jié)點和對應的關聯(lián)邊,調用棧圖構建算法是循環(huán)地將調用鏈的第i個節(jié)點Ch[i]在調用棧圖上對應的第i層進行匹配,當?shù)趇層上存在這樣的節(jié)點Ch[i]時,通過獲取節(jié)點Ch[i]的關聯(lián)邊數(shù)據(jù)結構判斷它與第i+1層的節(jié)點Ch[i+1]的關聯(lián)關系,如果節(jié)點Ch[i]和節(jié)點Ch[i+1]在原有的圖上不存在關聯(lián)關系,則在原有的圖上添加Ch[i]節(jié)點與Ch[i+1]節(jié)點之間的邊建立它們之間的關聯(lián),而當?shù)趇層上不存在這樣的節(jié)點Ch[i]時,在第i層上創(chuàng)建新的節(jié)點Ch[i],并將Ch[i+1]作為下一層的關聯(lián)節(jié)點,并以此建立第i層節(jié)點Ch[i]和第i+1層節(jié)點Ch[i+1]之間的關聯(lián)邊,通過i次遞歸,將不同的多個調用鏈利用調用棧圖描述出來,其中每個節(jié)點可能擁有多個關聯(lián)邊和下層關聯(lián)節(jié)點,它們的數(shù)量和節(jié)點的分歧因子是一致的;再次,將調用鏈與調用棧圖相匹配帶最大匹配度的深度優(yōu)先搜索將從調用棧圖中的第一層的第一個頂點v1出發(fā),按如下過程進行如果實時檢測的數(shù)據(jù)中的第一個節(jié)點與第一層的第一個頂點v1匹配,則將第一層的第一個頂點v1標記為已到達頂點,然后選擇一個與第一層的第一個頂點v1鄰接的尚未到達的第二層的第一個頂點u1,如果實時檢測的數(shù)據(jù)的第二層節(jié)點與第二層第一個頂點u1不匹配,則搜索中止,得到一個對應的匹配度;假設第二層第一個頂點u1與實時檢測的數(shù)據(jù)的第二層節(jié)點匹配,則匹配度加1,那么從第二層第一個頂點u1又開始一個新的最大匹配度的深度優(yōu)先搜索;反之如果實時檢測的數(shù)據(jù)中的第一個節(jié)點與第一層的第一個頂點v1不匹配則選擇第一層中的第二個頂點v2,如果第一層中的第二個頂點v2與實時檢測的數(shù)據(jù)中的第一個節(jié)點匹配則開始一個新的最大匹配度的深度優(yōu)先搜索;當從第二層第一個頂點u1開始的搜索結束時,再選擇另外一個與第一層中的第一個頂點v1鄰接的尚未到達的頂點,如果這樣的頂點不存在,那么搜索終止;而如果存在這樣的頂點,則匹配度加1,又從這個頂點開始最大匹配度的深度優(yōu)先搜索,如此循環(huán)下去,直到在調用棧有向圖中找到所有的實時檢測的數(shù)據(jù)或其子集,如果在調用棧圖中完全找到了被檢測的調用鏈實時數(shù)據(jù),則匹配系數(shù)μ等于匹配度除以實時檢測的數(shù)據(jù)的長度,如果實時檢測的數(shù)據(jù)在調用棧圖中不能完全被匹配,則以最大匹配度作為實時檢測的數(shù)據(jù)在調用棧圖中的匹配度;最后,通過最大匹配度和異常度的映射檢測入侵將滑動窗口內的每個系統(tǒng)調用產生的實時檢測的數(shù)據(jù)在調用棧圖中的最大匹配值進行累加再減窗口長度,用所得到的值來檢測窗口內所有系統(tǒng)調用對應的實時檢測的數(shù)據(jù)是否是異常還是正常,從而建立了最大匹配度和異常度之間的映射關系,針對異常度的具體度量方法如下Ad[w]=WL-Σi=0WL-1Max(MD)[i]]]>(0≤MD[i]≤1 0≤Ad[w]≤WL),其中Ad[w]為第w個滑動窗口處的異常度值,Max(MD)[i]為滑動窗口中第i個系統(tǒng)調用的調用鏈在對應的調用棧圖中的最大匹配度,WL為窗口長度,當Aa[w]越小則越正常,當Ad[w]越大則越異常,通過設置特定的閾值,當Ad[w]超過特定的閾值則系統(tǒng)發(fā)出報警,當Ad[w]低于閾值則系統(tǒng)不發(fā)出報警,以此系統(tǒng)通過報警通知系統(tǒng)管理員采取必要的安全防衛(wèi)措施,在實際測試中,系統(tǒng)把WL/2做為報警閾值。
本發(fā)明通過對內核級系統(tǒng)調用對應的調用棧信息建立指定進程的調用棧圖,利用進程運行時產生的系統(tǒng)調用的調用棧信息來描述進程的運行模式,從而獲得函數(shù)的信息。實現(xiàn)了對指定進程系統(tǒng)調用的實時檢測的數(shù)據(jù)的異常檢測機制。本發(fā)明對Httpd、Samba、Wu-ftpd以及Imapd四個在RedHat Linux系統(tǒng)中非常重要的系統(tǒng)服務的調用棧圖進行了訓練,獲得了具有不同數(shù)量節(jié)點的穩(wěn)定的調用棧圖。通過帶最大匹配度的深度優(yōu)先搜索技術,可以把被檢測進程的系統(tǒng)調用的實時檢測的數(shù)據(jù)在其對應的調用棧圖上進行搜索匹配,以獲得到最大匹配度。通過獲得的最大匹配度,采用滑動窗口將一定長度的系統(tǒng)調用序列中每個調用對應的實時檢測的數(shù)據(jù)的最大匹配度進行累加,然后通過帶滑動窗口的異常度的計算獲得當前窗口對應的異常度的大小。這種方法確定了滑動窗口內系統(tǒng)調用序列的實時檢測的數(shù)據(jù)相對于調用棧圖的異常度,通過這個異常度可以用來確定系統(tǒng)是否有異常入侵發(fā)生。
圖1是本發(fā)明截獲系統(tǒng)調用并獲取Call Stack數(shù)據(jù)的Ptrace機制;圖2是本發(fā)明單個系統(tǒng)調用對應的調用棧圖的示例圖;圖3是本發(fā)明調用棧圖生成算法流程圖;圖4是本發(fā)明訓練1個小時的Samba進程的調用棧圖節(jié)點統(tǒng)計圖5是本發(fā)明訓練2個小時的Samba進程的調用棧圖節(jié)點統(tǒng)計圖6是本發(fā)明訓練8個小時的Samba進程的調用棧圖節(jié)點統(tǒng)計圖7是本發(fā)明訓練16個小時的Samba進程的調用棧圖節(jié)點統(tǒng)計圖8是本發(fā)明訓練8個小時的Samba進程的調用棧圖節(jié)點統(tǒng)計圖9是本發(fā)明訓練24個小時的Samba進程的調用棧圖節(jié)點統(tǒng)計圖10是本發(fā)明訓練2個小時的Wu-ftp進程的調用棧圖節(jié)點統(tǒng)計圖1是本發(fā)明訓練4個小時的Wu-ftp進程的調用棧圖節(jié)點統(tǒng)計圖12是本發(fā)明訓練6個小時的Wu-ftp進程的調用棧圖節(jié)點統(tǒng)計圖13是本發(fā)明訓練1個小時的Apache(Httpd)進程的調用棧圖節(jié)點統(tǒng)計圖14是本發(fā)明訓練2個小時的Apache(Httpd)進程的調用棧圖節(jié)點統(tǒng)計圖15是本發(fā)明訓練4個小時的Apache(Httpd)進程的調用棧圖節(jié)點統(tǒng)計圖16是本發(fā)明訓練2個小時的Imapd進程的調用棧圖節(jié)點統(tǒng)計圖17是本發(fā)明基于n層調用棧圖的通用調用鏈匹配算法圖18是本發(fā)明帶匹配度的深度優(yōu)先搜索流程19是本發(fā)明對兩次Apache-SSL攻擊進行檢測的結果圖20是本發(fā)明對1次Wu-ftp緩沖區(qū)溢出攻擊的檢測結果圖21是本發(fā)明對11次Samba緩沖區(qū)溢出漏洞暴力攻擊嘗試的檢測圖22是本發(fā)明對1次Imap緩沖區(qū)溢出漏洞攻擊的檢測結果具體實施方式
下面結合附圖對本發(fā)明作進一步詳細說明。
參見圖1,本發(fā)明是通過Ptrace機制獲取進程系統(tǒng)調用對應的調用棧數(shù)據(jù)。當父進程Parent通過fork()產生一個子進程Child,然后父進程Parent進入等待;子進程Child通過PTRACE ME主動請求被其父進程Parent跟蹤,通過系統(tǒng)EXECVE函數(shù)運行被跟蹤的進程,如果成功執(zhí)行,則會在執(zhí)行第一個系統(tǒng)調用前停下來,并發(fā)送一個SIGCHILD信號給等待的父進程Parent,父進程Parent停止等待后發(fā)出PTRACE_SYSCALL請求重新啟動停止的系統(tǒng)調用,父進程Parent重新進入等待;子進程Child繼續(xù)執(zhí)行,在系統(tǒng)調用的入口處被信號SIGTRAP停止并發(fā)出SIGCHILD信號中止父進程Parent的等待狀態(tài),父進程Parent退出等待狀態(tài),在這個時候,可以獲取到系統(tǒng)調用入口處的各種信息,并可以進行相應的處理;然后父進程Parent發(fā)出PTRACE_SYSCALL請求重新啟動停止的系統(tǒng)調用,自己第三次進入等待子進程Child發(fā)出停止信號的狀態(tài),子進程Child將被停止的系統(tǒng)調用運行結束,在系統(tǒng)調用退出前被信號SIGTRAP停止并通知父進程Parent,父進程Parent在這個時候可以獲取系統(tǒng)調用運行后的返回值和其他信息,然后再發(fā)出重新啟動信號讓子進程Child繼續(xù)運行下一個系統(tǒng)調用,開始新的一輪對系統(tǒng)調用數(shù)據(jù)的控制和觀察,直到子進程Child結束。從這個過程中可以看出,對子進程Child的每個系統(tǒng)調用,可以進行兩次有效的觀察。一次是在系統(tǒng)調用的入口處,一次是在系統(tǒng)調用結束退出之前的時候。在這兩次觀察中,第一次可以獲得系統(tǒng)調用的調用號、傳入?yún)?shù)、返回地址以及調用函數(shù)的棧幀指針EBP;第二次可以獲得系統(tǒng)調用執(zhí)行后的返回值,系統(tǒng)調用中分配的棧幀信息等。本發(fā)明是在第二次觀察時進行調用棧信息獲取的。
通過獲取的系統(tǒng)調用的調用棧信息,可以建立如圖2所示的單個系統(tǒng)調用的調用棧圖,如圖2所示的一個n層Call Stack圖,其中每層上面有k個可能的調用地址,每個調用地址nk(k∈{1..t})(t為第n層可能出現(xiàn)的不同的調用地址的個數(shù))為唯一存在,也即是每層的節(jié)點保持著唯一性。Call Stack圖是本發(fā)明中最重要的數(shù)據(jù)結構,它清楚地表明每個系統(tǒng)調用執(zhí)行過程中對操作系統(tǒng)中的基本庫函數(shù)的調用過程。對這些調用地址的建??梢詭椭芯咳藛T對遠程或本地緩沖區(qū)溢出等非常嚴重的入侵事件從系統(tǒng)調用對應的調用棧中進行觀察和建立相應的防衛(wèi)機制。當節(jié)點(n-1)j出現(xiàn)后下一個調用地址為節(jié)點nk則就構成了節(jié)點(n-1)i到節(jié)點nk之間的連接邊,其實這個邊是有方向性的,它是由節(jié)點(n-1)j指向節(jié)點nk的一條有向邊,因此構成的Call Stack圖本質上也是一個有向圖。如圖2所示,可以看到當進入一個系統(tǒng)調用時,從第1層的節(jié)點11對應的調用地址開始進行調用操作,當?shù)?層的調用完成后再轉向第2層的節(jié)點21對應的調用地址,由此不斷地進行調用操作,但每一層上僅有1個節(jié)點對應的地址被調用,從第n-1層某個節(jié)點到第n層的某個節(jié)點之間存在一條邊E(n-1),n,當系統(tǒng)調用退出時,就得到了一條調用地址鏈L(E12,E23,...,E(n-1,n)),因此每兩層之間存在的邊就前后相連構成了調用地址鏈L(E12,E23,...,E(n-1,n)),也就是系統(tǒng)調用運行時在Call Stack圖中對應的一條調用路徑。從理論上將,當Call Stack圖訓練到完備情況下時正常狀況下的調用鏈肯定能從圖上找到對應的執(zhí)行路徑,也即是L(E12,E23,..,E(n-1,n))∈G(V,E,S)。為了更好地描述Call Stack圖中可能出現(xiàn)的節(jié)點數(shù)量,本文提出了分歧因子的定義,如下分歧因子(Branching factor)在一個假想的狀態(tài)空間中,每個狀態(tài)都可以擴展得到b個狀態(tài),則認為這些狀態(tài)的分歧因子就是b。
在一個n層分歧因子為b的Call Stack圖中,如果從第一層的唯一一個節(jié)點開始到第二層產生了b個節(jié)點,每個節(jié)點在第三層又產生b個節(jié)點,以此類推在第n層可以產生bn個節(jié)點。則整個Call Stack圖上最多可以產生1+b+b2+b3…+bn個節(jié)點。但在實際情況下,Call Stack圖上的節(jié)點個數(shù)會遠遠小于這個數(shù)。
參見圖3,本發(fā)明采用CSGBA(Call Stack Graph Building Algorithm)算法來構建調用棧圖。調用棧圖是由不同的調用鏈構建成的。將獲得的調用鏈的數(shù)據(jù)在建立的調用棧上進行分層匹配。由于建立的調用棧圖是有向圖,由第i層的節(jié)點指向第i+l層的節(jié)點,因此在每個節(jié)點的數(shù)據(jù)結構中保存了與之相連的下一層節(jié)點的關聯(lián)信息,其中包括關聯(lián)節(jié)點和對應的關聯(lián)邊。調用棧構建算法的基本原理是循環(huán)地將調用鏈的第i個節(jié)點Ch[i]在調用棧圖Graph上對應的第i層進行匹配。當?shù)趇層上存在這樣的節(jié)點Ch[i]時,通過獲取此節(jié)點的關聯(lián)邊從而發(fā)現(xiàn)是否與第i+l層的節(jié)點Ch[i+1]有關聯(lián),從而確定是否已有一條建立在節(jié)點Ch[i]和節(jié)點Ch[i+1]之間的邊。如果不存在關聯(lián),則建立與Ch[i+1]節(jié)點之間的邊,從而建立它們之間的關聯(lián)。而當?shù)趇層上不存在這樣的節(jié)點Ch[i]時,在第i層上創(chuàng)建新的節(jié)點Ch[i],并將Ch[i+1]作為下一層的關聯(lián)節(jié)點,并以此建立了第i層節(jié)點Ch[i]和第i+l層節(jié)點Ch[i+1]之間的關聯(lián)邊。通過這樣的i次遞歸,可以將不同的多個調用鏈利用調用棧圖Graph描述出來,其中每個節(jié)點可能擁有多個關聯(lián)邊和下層關聯(lián)節(jié)點,它們的數(shù)量和節(jié)點的分歧因子是一致的。對圖3所示流程圖的描述Call Stack圖構建算法的輸入為獲取的調用鏈Ch[]和圖變量Graph,初始化層變量i和節(jié)點(邊)的存在標志,將第i層與調用鏈的長度進行比較,當層數(shù)i小于調用鏈的長度時,讀取第i層的節(jié)點,當?shù)趇層的節(jié)點不為空時,對其包含的節(jié)點地址和Ch[i]進行匹配,如果節(jié)點包含的地址≠Ch[i],則返回上一步讀下一個節(jié)點,如果節(jié)點包含的地址=Ch[i],則查看節(jié)點的關聯(lián)邊是否為空,如果為空則添加邊,如果不為空,則和下一個調用鏈節(jié)點Ch[i+1]進行匹配,如果不相等則繼續(xù)讀取下一個關聯(lián)邊,如果相等即關聯(lián)節(jié)點地址=Ch[i+1]則讀取第i層的下一個節(jié)點,如果關聯(lián)邊為空,則添加關聯(lián)邊。如果讀取第i層的節(jié)點為空,則添加節(jié)點,添加邊,同時層數(shù)i遞增1。
為了訓練指定進程的調用棧圖,需要對指定的進程進行訓練。訓練的目的是通過對指定進程進行各種不同方式的使用從而建立每一種系統(tǒng)調用的調用棧圖。在這種實時的訓練方式下,進程中涉及到的各種系統(tǒng)調用將以不同的方式或參數(shù)運行,這樣就會產生更多不同的系統(tǒng)調用鏈,由此可以構成更加完備的調用棧圖。從理論上分析,在越長的時間內訓練,使用更完備的操作,就可以因此獲得更多的不同的調用鏈,直到得到整個進程中的所有系統(tǒng)調用出現(xiàn)時產生的不同的調用鏈,從而構成完備的調用棧圖。但在實際情況下,由于程序涉及到的功能有可能非常多,非常復雜,而理論上完備的調用棧圖只能無限趨近,但不一定能真正獲得,因而這使得不可能獲得真正完備的調用棧圖,只能近似獲得。本發(fā)明的實驗在RedHat 7.2(內核2.4.7-10)環(huán)境下進行的,其中對Samba、Wu-ftp、Apache以及Imap等Linux操作系統(tǒng)中的一些關鍵服務對應的進程進行了訓練。其中,訓練結果圖中的橫坐標表示的是出現(xiàn)的系統(tǒng)調用總的數(shù)量,而縱坐標指所有系統(tǒng)調用對應的總的系統(tǒng)調用鏈的個數(shù),也即是所有系統(tǒng)調用在調用棧圖中的節(jié)點的總和。
訓練結果圖如圖4到圖16所示,由圖中可以看出,對Samba進程的訓練時間最長,達到24個小時,同時訓練得到的節(jié)點數(shù)也最多,而對Httpd進程訓練得到的節(jié)點數(shù)最少。這也說明Samba進程的功能和結構非常復雜,而Httpd和Imapd進程的功能和結構相對簡潔。從圖中也可以看出,對以上四種進程的訓練都進入了穩(wěn)定狀態(tài),即在相對長的一段時間內每個進程對應的Call Stack圖中沒有出現(xiàn)新的節(jié)點,我們就認為獲得到了相對穩(wěn)定的Call Stack圖。
在檢測過程中,本發(fā)明對被檢測進程進行跟蹤,對每個出現(xiàn)的系統(tǒng)調用的調用鏈進行檢測,通過帶最大匹配度的深度優(yōu)先搜索發(fā)現(xiàn)這條鏈在調用棧圖中的匹配程度。通過提出帶滑動窗口的異常度的計算方法,將匹配度與異常度映射起來;以便用更加明顯的方式來進一步區(qū)分這個進程是正常的還是異常。
如圖17和18所示,如果被檢測的調用鏈長度為L,將其在指定的系統(tǒng)調用的調用棧圖中進行搜索和匹配。從圖17流程圖的描述可以看出,基于n層調用棧圖的通用調用鏈匹配算法的初始部分為被匹配的調用鏈Ch[],接著初始化最大匹配度數(shù)組MD[]和訪問標志數(shù)組Visited[],讀取第i層的節(jié)點,如果節(jié)點v不為空則通過Visited[v→id]來判斷其是否被訪問過,同時是否等于調用鏈節(jié)點Ch[i],如果這個節(jié)點沒有被訪問過,同時它包含的地址等于Ch[i],則調用DFS-MMD算法,進行深度優(yōu)先搜索和匹配,同時將這個節(jié)點的訪問標志Visited[v→id]改為Visited[v→id]=1(表示已經訪問過);如果這個節(jié)點已經被訪問過或它的地址不等于Ch[i]則繼續(xù)讀取第i層的下一個節(jié)點,直到節(jié)點為空,這時層數(shù)i加1,如果層數(shù)i大于總的層數(shù)n則通過Maxium(MD[])計算獲得到的最大匹配度。
如圖18所示的帶匹配度的深度優(yōu)先搜索算法(DFS-MMD)流程圖,初始部分為被檢測調用鏈Ch[j],將當前節(jié)點V0的訪問標志置位,并求節(jié)點V0的鄰節(jié)點,當不存在鄰節(jié)點時,計算最大匹配度MD[j]=j/L;返回Max(MD[m]),當節(jié)點V0的鄰節(jié)點w存在時,下一步判斷w是否被訪問過,如果是則求下一個鄰節(jié)點,如果w沒有被訪問過,則判斷w包含的地址是否等于Ch[j],如果不相等,則計算最大匹配度MD[j]=j/L并返回Max(MD[m]);如果相等,則把當前節(jié)點w做為當前節(jié)點V0,調用鏈節(jié)點j遞增1,如果j小于調用鏈的總長度,則從當前節(jié)點又開始下一輪DFS-MMD算法;如果j大于調用鏈的總長度,則計算最大匹配度MD[j]為j/L并返回Max(MD[m]);帶匹配度的深度優(yōu)先搜索有非常低的內存需求,同時其時間復雜性為O(bn),雖然它的時間復雜性和寬度優(yōu)先搜索相同,但它的實際速度仍然比寬度優(yōu)先搜索快,因為它往往可以在僅僅搜索一小塊狀態(tài)空間以后獲得結果。而寬度優(yōu)先必須要搜索完n層調用棧圖的所有路徑。但帶匹配度的深度優(yōu)先搜索在最壞的情況下的時間復雜性仍然為O(bn)。對于一個n層以及分歧因子為b的調用棧圖來說,帶匹配度的深度優(yōu)先搜索在內存中僅需要保存b×n個節(jié)點,而相同情況下寬度優(yōu)先搜索要保存bn個節(jié)點。從實際的實驗數(shù)據(jù)發(fā)現(xiàn),通常調用棧的層數(shù)都在20以下,也有個別系統(tǒng)調用的調用棧圖的層數(shù)較大,但也都在40以下;另外,所形成的調用棧圖中的分歧因子的大小也都在40以下。由于實際中的分歧因子和層數(shù)都不是很大,因此在實際的使用上也獲得了較好的性能。
為了把最大匹配度與異常度聯(lián)系起來,本發(fā)明提出了帶滑動窗口的異常度度量方法。基本思想是把在滑動窗口內的每個系統(tǒng)調用產生的調用鏈在調用棧圖中的最大匹配值進行累加再減窗口長度,用所得到的值來描述窗口內所有系統(tǒng)調用對應的調用鏈是否是異常還是正常,從而建立了最大匹配度和異常度之間的映射關系。因此針對異常度的具體度量方法如下Ad[w]=WL-Σi=0WL-1Max(MD)[i]]]>(0≤MD[i]≤1 0≤Ad[w]≤WL)其中Ad[w]為第w個滑動窗口處的異常度值。Max(MD)[i]為滑動窗口中第i個系統(tǒng)調用的調用鏈在對應的調用棧圖中的最大匹配度。WL為窗口長度,在實驗中選擇窗口長度為6。因此有0≤Ad[w]≤6。當Ad[w]越小則越正常,當Ad[w]越大則越異常。帶滑動窗口的異常度的度量方法可以把最大匹配度和異常度進行映射起來,避免了沒有使用滑動窗口時,單靠一個系統(tǒng)調用的調用鏈對應的最大匹配度作為異常判斷時造成的報警不明顯等問題。這種方法使得正常情況下的系統(tǒng)調用窗口的異常度和異常情況下的異常度之間的區(qū)別更加明顯。當Ad[w]越小則越正常,當Ad[w]越大則越異常。通過設置特定的閾值,當Ad[w]超過特定的閾值則系統(tǒng)發(fā)出報警,當Ad[w]低于閾值則系統(tǒng)不發(fā)出報警,以此系統(tǒng)通過報警通知系統(tǒng)管理員采取必要的安全防衛(wèi)措施。在實際測試中,系統(tǒng)把WL/2做為報警閾值。
圖19到圖22表示了在這種技術下對Linux服務器上的各種服務的入侵檢測結果。為了驗證本發(fā)明的模型和方法,在RedHat7.2(內核2.4.7-10)上進行了系統(tǒng)地試驗。實驗中檢測的攻擊種類包括Apache-SSL攻擊、Wu-ftp緩沖區(qū)溢出攻擊、Samba緩沖區(qū)溢出暴力攻擊以及Imap緩沖區(qū)溢出攻擊。這幾種服務在Linux平臺非常具有代表性,這些攻擊在Linux平臺的嚴重程度都非常高。實驗中圖的橫坐標是出現(xiàn)的系統(tǒng)調用滑動窗口的序號,縱坐標是異常度。當本發(fā)明的檢測系統(tǒng)在跟蹤被檢測進程時,我們對出現(xiàn)的每個系統(tǒng)調用的調用棧數(shù)據(jù)都進行檢測,通過在對應進程的調用棧圖中搜索得到當前調用鏈的最大匹配度。通過獲得的最大匹配度,采用滑動窗口長度為6的系統(tǒng)調用序列中每個調用對應的調用鏈的最大匹配度進行累加,然后通過帶滑動窗口的異常度的度量方法獲得當前窗口對應的異常度的大小。通過這個異常度可以用來確定系統(tǒng)是否有入侵發(fā)生。對有的漏洞進行了實際多次攻擊,而對有的漏洞進行攻擊時采用了模擬黑客入侵行為的方式。通過帶滑動窗口的異常度度量方法可以計算出每個滑動窗口相對應的異常度。實驗結果中縱坐標表示的是異常度,它表示在當前窗口內出現(xiàn)的系統(tǒng)調用產生的調用鏈在調用棧圖中不匹配的總程度。
如圖19所示,本發(fā)明在實驗中進行了兩次針對Apache服務中存在的SSL漏洞的攻擊,所進行的兩次攻擊都是成功的入侵,而且在發(fā)起兩次攻擊之間的時間相隔不到2分鐘。兩次攻擊都獲得了系統(tǒng)apache用戶的使用權限。圖19表示的是采用帶最大匹配度的深度優(yōu)先搜索對Apache-SSL兩次成功攻擊進行入侵檢測的結果。從圖19中可以看出,從開始跟蹤Httpd進程,異常度一直為0,保持著正常的運行狀態(tài),說明Httpd進程沒有受到任何攻擊或出現(xiàn)異常的行為。當發(fā)起第一次攻擊時,在大約第285個滑動窗口處,異常度就達到了4,當攻擊過程結束后,異常度又返回到0,在圖19上表現(xiàn)為第一個突起的異常值;當發(fā)起第二次入侵時,在大約303個滑動窗口處異常度的值達到了6,隨后伴有較大的一次異常波動,波動幅度達到了5。因此,從對Httpd進程的入侵檢測結果來看,檢測結果明顯地反映了兩次入侵對Httpd進程的系統(tǒng)調用的調用鏈數(shù)據(jù)產生的異常。
如圖20所示的檢測結果所示,從圖中可以看出,在初始階段的Wu-ftp的滑動窗口異常值一直為最小值0。而當入侵攻擊發(fā)起的時候,發(fā)現(xiàn)從大約第169個系統(tǒng)調用滑動窗口處出現(xiàn)了異常度為2的反復波動,直到大約第265個滑動窗口處,異常值達到了最大值6,并伴有幅度為6的最大幅度波動,直到在大約第361個滑動窗口處才降低到最小值0。在成功入侵受害機系統(tǒng)后,本發(fā)明模擬黑客在目標機器上運行了以下的一些命令序列
從第一個命令dir開始,當執(zhí)行一個命令時,異常值從最小值急劇上升到最大值6,然后再迅速下跌到最小值0,這樣不斷的反復,直到exit命令退出。也可以根據(jù)此現(xiàn)象來判斷某些入侵后的行為情況和入侵時間長短等信息,但某些入侵后產生的shell由于不是被跟蹤進程的子進程,因此不能觀察到其具體的入侵行為,如圖19描述的對Apache-SSL服務的入侵檢測。當最后一個命令exit執(zhí)行后,入侵產生的shell退出,Wu-ftp進程恢復正常。通過對Wu-ftpd進程的檢測,獲得了非常好的實驗結果,一方面通過實驗成功地發(fā)現(xiàn)了整個入侵過程分為入侵發(fā)起過程和入侵成功后的黑客行為過程。從圖20可以看到,從大約第169個系統(tǒng)調用滑動窗口到大約第265個系統(tǒng)調用滑動窗口處是入侵的初始階段,這個階段的異常值波動不是特別大,幅度大約在2左右。這個階段黑客還沒有成功的入侵到受害機,當這個階段結束后,黑客在成功的入侵后往往會發(fā)出一系列命令來達到其目的。因此,從圖20可以看到,從第265到第361個系統(tǒng)調用滑動窗口處的異常值波動就非常大,幅度達到了最大值6。這種對黑客入侵后的行為進行進一步跟蹤的性能使得這個系統(tǒng)的功能更加強大,這也對觀察入侵后黑客的行為在系統(tǒng)調用的調用棧級的異常提供了可觀察的直接依據(jù)。
如圖21所示的檢測結果,在實驗中對Samba緩沖區(qū)溢出漏洞進行了11次連續(xù)的返回地址暴力猜測,以求達到入侵系統(tǒng)的目的。但所有11次攻擊都屬于失敗的攻擊,將這些失敗的攻擊確定為有11次攻擊嘗試或攻擊企圖。圖21中表示的是對Samba進程中存在的緩沖區(qū)溢出漏洞進行入侵攻擊的檢測結果。從圖中可以看出,和Httpd、Wu-ftp進程一樣,對于正常行為時的異常度總是始終保持在最小值0。本發(fā)明對Samba進程進行了11次暴力嘗試溢出的返回地址,當嘗試的返回地址為正確的Shellcode地址時,入侵將取得成功,否則失敗,再進行下一次嘗試。但實驗中進行的對11次暴力嘗試返回地址(從地址0xbffffed4到地址0xbffff8f8)進行的猜測都沒有成功,僅僅是11次入侵嘗試。從圖21看到,從大約第133個滑動窗口開始異常值就陡然上升到最大值6,然后進入了由最大值6到最小值0的反復波動,系統(tǒng)表現(xiàn)出了和正常狀態(tài)非常不一致的情況。這11次暴力攻擊嘗試持續(xù)了約2分鐘,當暴力攻擊結束后,系統(tǒng)調用的滑動窗口中的異常值又減小到最小值0。在不到2分鐘的攻擊過程中,整個檢測結果圖中的異常度波動非常大,而且頻率也非常高,這主要是由于暴力攻擊的次數(shù)較多,攻擊時間較短所造成的。
如圖22所示的檢測結果,實驗中本發(fā)明對Imap緩沖區(qū)溢出漏洞進行了1次成功的入侵,圖22表示的是對Imap進程中存在的緩沖區(qū)溢出漏洞進行入侵攻擊的檢測結果。從圖中可以看出,在發(fā)起入侵攻擊前從初始滑動窗口到第257個滑動窗口之間,異常值始終保持著最小值0,表明初始階段Imap進程對應的系統(tǒng)調用的調用鏈在調用棧圖上能完全準確地匹配,也即是Imap處于正常的運行中。而當發(fā)起針對Imap緩沖區(qū)溢出漏洞的入侵攻擊時,異常值急劇上升至5,并在異常值5和4之間反復波動,這個過程大約持續(xù)了約有60個系統(tǒng)調用滑動窗口,然后又恢復到正常狀態(tài)0。當入侵成功以后,在實驗中模擬了黑客的一些行為,運行了如下的一些系統(tǒng)命令
由于Imap緩沖區(qū)溢出攻擊生成的入侵shell是作為Imapd的子進程存在的,因此本發(fā)明的系統(tǒng)能夠對其進行跟蹤。從圖22可以看出,在大約第298個滑動窗口到第397個滑動窗口之間對應的異常值從最大值到最小值的反復幾次波動表示系統(tǒng)中的入侵者發(fā)出了一系列的異常行為,并且和入侵者發(fā)出的命令相對應。通過對比圖22中針對Wu-ftp緩沖區(qū)溢出攻擊的檢測結果,可以看出對Imap的檢測結果和前面對Wu-ftp進程的檢測結果有相似的一方面,都是將檢測結果分為兩部分,一部分是針對入侵過程的檢測,一部分是對入侵后的入侵者的行為的檢測。前一部分的異常值總是低于后一部分的異常值,并且入侵過程對應的異常值波動比較頻繁,而入侵后的行為部分的異常值波動較大,但卻并沒有出現(xiàn)頻繁波動,而是隨著黑客入侵后發(fā)出的行為一個一個產生的。對Imapd進程的入侵檢測獲得了非常好的檢測結果,不僅獲得了入侵初始階段的異常值,而且還獲得了成功入侵后黑客行為在系統(tǒng)調用的調用棧中對應的異常值,從而可以進一步觀察黑客入侵后的行為。
通過對內核級系統(tǒng)調用對應的調用棧信息建立指定進程的調用棧圖,并結合提出的帶最大匹配度的深度優(yōu)先搜索和帶滑動窗口的異常度,實現(xiàn)了對指定進程系統(tǒng)調用的調用鏈的異常檢測機制。本發(fā)明對Httpd、Samba、Wu-ftpd以及Imapd四個重要的系統(tǒng)服務的調用棧圖進行了訓練,獲得了具有不同數(shù)量節(jié)點的穩(wěn)定的調用棧圖。通過帶最大匹配度的深度優(yōu)先搜索,可以把被檢測進程的系統(tǒng)調用的調用鏈在其對應的調用棧圖上進行搜索匹配,以獲得到最大匹配度。通過獲得的最大匹配度,本發(fā)明采用滑動窗口將一定長度的系統(tǒng)調用序列中每個調用對應的調用鏈的最大匹配度進行累加,然后通過帶滑動窗口的異常度的計算方法獲得當前窗口對應的異常度的大小。這種方法確定了滑動窗口內系統(tǒng)調用序列的調用鏈相對于調用棧圖的異常度,通過這個異常度可以用來確定系統(tǒng)是否有異常入侵發(fā)生。實驗中本發(fā)明分別對Apache(Httpd)、Wu-ftpd、Imapd以及Samba等系統(tǒng)重要服務進行了攻擊檢測。成功地發(fā)現(xiàn)了2次Apache-SSL緩沖區(qū)溢出入侵、1次Wu-ftpd緩沖區(qū)溢出入侵、11次Samba暴力攻擊以及1次Imapd緩沖區(qū)溢出攻擊。實驗結果表明本章提出的方法較好地通過系統(tǒng)調用的調用棧信息檢測了黑客的入侵。對Imapd和Wu-ftpd進程的測試實驗中,不僅獲得了入侵初始階段的異常值,而且還得到了成功入侵后黑客行為在系統(tǒng)調用的調用棧中對應的異常值。為以后深入研究黑客入侵后的行為在系統(tǒng)底層的表現(xiàn)打下了良好的基礎。
本發(fā)明進程的系統(tǒng)調用的調用棧圖建模安全可靠,通過對進程的不同功能的操作與使用,從而可以建立準確的進程的調用棧圖的模型;異常行為檢測準確,檢測范圍覆蓋最嚴重的各種安全威脅;利用帶最大調用鏈匹配度的深度優(yōu)先搜索進行鏈匹配,其時間復雜性和空間復雜性都較低;帶滑動窗口的異常度度量技術可以把最大匹配度和異常度進行映射起來,避免了報警不明顯等問題。這種方法使得正常情況下的異常度和異常情況下的異常度之間的區(qū)別更加明顯;對發(fā)現(xiàn)有異常行為的進程可以及時采取防衛(wèi)措施,避免了黑客的進一步入侵。
權利要求
1.Linux環(huán)境下基于調用棧圖的入侵檢測方法,其特征在于1)首先,獲取調用棧數(shù)據(jù)首先通過Ptrace機制實時獲取操作系統(tǒng)中每個進程產生的每個系統(tǒng)調用的調用棧數(shù)據(jù),由父進程通過fork()產生一個子進程,然后父進程進入等待;在子進程中通過PTRACE_ME主動請求被其父進程跟蹤,然后在子進程中通過系統(tǒng)EXECVE函數(shù)運行被跟蹤的父進程,進程返回標志為正數(shù)則表示為成功執(zhí)行,否則,再次創(chuàng)建子進程,則會在執(zhí)行第一個系統(tǒng)調用前停下來,并發(fā)送一個SIGCHILD信號給等待的父進程,父進程停止等待后發(fā)出PTRACE_SYSCALL請求重新啟動停止的系統(tǒng)調用,父進程重新進入等待;子進程繼續(xù)執(zhí)行,在系統(tǒng)調用的入口處被信號SIGTRAP停止并發(fā)出SIGCHILD信號中止父進程的等待狀態(tài),父進程退出等待狀態(tài),此時獲取到系統(tǒng)調用入口處的調用號、傳入?yún)?shù)、返回地址以及調用函數(shù)的棧幀指針EBP,并進行相應調用棧圖的生成或實時檢測;然后父進程發(fā)出PTRACE_SYSCALL請求重新啟動停止的系統(tǒng)調用,父進程第三次進入等待子進程停止信號的狀態(tài),子進程將被停止的系統(tǒng)調用運行結束,在系統(tǒng)調用退出前被信號SIGTRAP停止并通知父進程,父進程在此時獲取系統(tǒng)調用運行后的返回值和系統(tǒng)調用中分配的棧幀信息,然后再發(fā)出重新啟動信號讓子進程繼續(xù)運行下一個系統(tǒng)調用,開始新的一輪對系統(tǒng)調用數(shù)據(jù)的控制和觀察,直到子進程結束;2)其次,用調用棧數(shù)據(jù)生成調用棧圖通過調用棧圖生成算法(Call Stack Graph Building Algorithm,CSGBA)對得到的調用棧數(shù)據(jù)即調用號、傳入?yún)?shù)、返回地址以及調用函數(shù)的棧幀指針EBP進行訓練,從而形成指定進程的由不同的實時檢測的數(shù)據(jù)建成的調用棧圖;將獲得的實時檢測的數(shù)據(jù)在建立的調用棧上進行分層匹配,調用棧圖是有向圖,由第i層的節(jié)點指向第i+1層的節(jié)點,在每個節(jié)點的數(shù)據(jù)結構中保存了與之相連的下一層節(jié)點的關聯(lián)信息,其中包括關聯(lián)節(jié)點和對應的關聯(lián)邊,調用棧圖構建算法是循環(huán)地將調用鏈的第i個節(jié)點Ch[i]在調用棧圖上對應的第i層進行匹配,當?shù)趇層上存在這樣的節(jié)點Ch[i]時,通過獲取節(jié)點Ch[i]的關聯(lián)邊數(shù)據(jù)結構判斷它與第i+1層的節(jié)點Ch[i+1]的關聯(lián)關系,如果節(jié)點Ch[i]和節(jié)點Ch[i+1]在原有的圖上不存在關聯(lián)關系,則在原有的圖上添加Ch[i]節(jié)點與Ch[i+1]節(jié)點之間的邊建立它們之間的關聯(lián),而當?shù)趇層上不存在這樣的節(jié)點Ch[i]時,在第i層上創(chuàng)建新的節(jié)點Ch[i],并將Ch[i+1]作為下一層的關聯(lián)節(jié)點,并以此建立第i層節(jié)點Ch[i]和第i+1層節(jié)點Ch[i+1]之間的關聯(lián)邊,通過i次遞歸,將不同的多個調用鏈利用調用棧圖描述出來,其中每個節(jié)點可能擁有多個關聯(lián)邊和下層關聯(lián)節(jié)點,它們的數(shù)量和節(jié)點的分歧因子是一致的;3)再次,將調用鏈與調用棧圖相匹配帶最大匹配度的深度優(yōu)先搜索將從調用棧圖中的第一層的第一個頂點v1出發(fā),按如下過程進行如果實時檢測的數(shù)據(jù)中的第一個節(jié)點與第一層的第一個頂點v1匹配,則將第一層的第一個頂點v1標記為已到達頂點,然后選擇一個與第一層的第一個頂點v1鄰接的尚未到達的第二層的第一個頂點u1,如果實時檢測的數(shù)據(jù)的第二層節(jié)點與第二層第一個頂點u1不匹配,則搜索中止,得到一個對應的匹配度;假設第二層第一個頂點u1與實時檢測的數(shù)據(jù)的第二層節(jié)點匹配,則匹配度加1,那么從第二層第一個頂點u1又開始一個新的最大匹配度的深度優(yōu)先搜索;反之如果實時檢測的數(shù)據(jù)中的第一個節(jié)點與第一層的第一個頂點v1不匹配則選擇第一層中的第二個頂點v2,如果第一層中的第二個頂點v2與實時檢測的數(shù)據(jù)中的第一個節(jié)點匹配則開始一個新的最大匹配度的深度優(yōu)先搜索;當從第二層第一個頂點u1開始的搜索結束時,再選擇另外一個與第一層中的第一個頂點v1鄰接的尚未到達的頂點,如果這樣的頂點不存在,那么搜索終止;而如果存在這樣的頂點,則匹配度加1,又從這個頂點開始最大匹配度的深度優(yōu)先搜索,如此循環(huán)下去,直到在調用棧有向圖中找到所有的實時檢測的數(shù)據(jù)或其子集,如果在調用棧圖中完全找到了被檢測的調用鏈實時數(shù)據(jù),則匹配系數(shù)μ等于匹配度除以實時檢測的數(shù)據(jù)的長度,如果實時檢測的數(shù)據(jù)在調用棧圖中不能完全被匹配,則以最大匹配度作為實時檢測的數(shù)據(jù)在調用棧圖中的匹配度;4)最后,通過最大匹配度和異常度的映射檢測入侵將滑動窗口內的每個系統(tǒng)調用產生的實時檢測的數(shù)據(jù)在調用棧圖中的最大匹配值進行累加再減窗口長度,用所得到的值來檢測窗口內所有系統(tǒng)調用對應的實時檢測的數(shù)據(jù)是否是異常還是正常,從而建立了最大匹配度和異常度之間的映射關系,針對異常度的具體度量方法如下Ad[w]=WL-Σi=0WL-1Max(MD)[i],(0≤MD[i]≤1,0≤Ad[w]≤WL)]]>5)其中Ad[w]為第w個滑動窗口處的異常度值,Max(MD)[i]為滑動窗口中第i個系統(tǒng)調用的調用鏈在對應的調用棧圖中的最大匹配度,WL為窗口長度,當Ad[w]越小則越正常,當Ad[w]越大則越異常,通過設置特定的閾值,當Ad[w]超過特定的閾值則系統(tǒng)發(fā)出報警,當Ad[w]低于閾值則系統(tǒng)不發(fā)出報警,以此系統(tǒng)通過報警通知系統(tǒng)管理員采取必要的安全防衛(wèi)措施,在實際測試中,系統(tǒng)把WL/2做為報警閾值。
全文摘要
Linux環(huán)境下基于調用棧圖的入侵檢測方法,本發(fā)明通過獲取系統(tǒng)調用對應的調用棧信息建立指定進程的調用棧圖,并結合帶最大匹配度的優(yōu)先搜索和帶滑動窗口的異常度度量方法,實現(xiàn)了對指定進程的系統(tǒng)調用調用鏈的異常檢測機制。通過帶最大匹配度的優(yōu)先搜索,可以把被檢測進程的系統(tǒng)調用的調用鏈在其對應的調用棧圖上進行匹配,以獲得到最大匹配度。實驗結果表明在攻擊檢測水平相當?shù)那闆r下,本發(fā)明系統(tǒng)的誤警率要遠低于國內外的同類系統(tǒng)。
文檔編號H04L12/24GK1710866SQ20051004288
公開日2005年12月21日 申請日期2005年6月30日 優(yōu)先權日2005年6月30日
發(fā)明者管曉宏, 馮力, 孫杰, 楊力偉 申請人:西安交通大學