999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于動態策略學習的關鍵內存數據訪問監控

2019-07-15 11:56:10馮馨玥楊秋松李明樹
計算機研究與發展 2019年7期
關鍵詞:頁面關鍵系統

馮馨玥 楊秋松 石 琳 王 青,3 李明樹

1(中國科學院軟件研究所基礎軟件國家工程研究中心 北京 100190) 2(中國科學院大學 北京 100049) 3(計算機科學國家重點實驗室(中國科學院軟件研究所) 北京 100190)

現代操作系統內核空間中包含代碼和內核數據,內核攻擊可以通過篡改代碼和內核中的數據來達到它們的攻擊目的.例如通過修改中斷描述符表(interrupt descriptor table, IDT)來更改系統調用的函數入口,更改可裝載內核模塊(loadable kernel module, LKM)鏈表來隱藏攻擊本身的存在,更改task_struct結構來隱藏惡意進程等.這些攻擊的本質上都是通過重寫內核中的代碼和數據來達到攻擊目的,為了檢測內核攻擊,對內核空間的內存訪問行為監控可以有效地幫助攻擊檢測.為了使內核行為監控程序不被內核中的攻擊篡改,現有的研究[1-2]通常將內核攻擊檢測和保護程序部署在虛擬機監控器(virtual machine monitor, VMM)中來解決這個問題,如圖1所示.這是因為VMM具有更高的權限,將內核攻擊檢測程序部署在該層,監控程序本身在更高權限的VMM環境中,內核層的程序感知不到它的存在,并且不易被內核中的攻擊篡改.將內核攻擊檢測程序部署在VMM層,可以利用硬件虛擬化的技術截獲系統事件并且獲取系統運行的狀態.

Fig. 1 Memory access monitor with VMM圖1 基于VMM的內存訪問監控

在VMM中監控內存訪問事件的最大瓶頸是系統性能開銷問題.我們使用硬件輔助虛擬化技術監控內存訪問事件,如圖1所示,通過設置內存的訪問權限,當被監控區域內存訪問事件發生時,訪問權限不滿足,產生可擴展頁表(extended page table, EPT)Violation使CPU控制權由客戶機陷入到VMM中.客戶機陷入VMM時會觸發VM Exit指令,每次VM Exit將導致2 000~7 000周期的CPU開銷[3],因此頻繁陷入VMM會導致系統性能開銷增大.對于動態區域的內存訪問行為的監控,由于動態區域可以被頻繁地寫,導致頻繁陷入VMM中截獲內存訪問行為,性能開銷巨大.為了減小內存訪問事件監控的開銷,已有的研究通常采用的方案是只監控極少量安全關鍵數據[1].安全關鍵數據分散地分布在內核地址空間的各個位置,并且和非安全關鍵數據混合分布在同一頁面.由于硬件支持的權限設置的粒度是頁面級,而我們需要監控的安全關鍵數據的粒度是變量級,這就導致了和被監控安全關鍵數據在同一個頁面內,存在大量不需要監控的非安全關鍵數據的訪問行為,也會產生EPT Violation,頻繁陷入VMM,從而增大系統性能開銷,這就是監控粒度的鴻溝問題[4].

為了解決內存訪問監控帶來的巨大開銷問題,研究者們提出了將安全關鍵數據重定向到1個集中的內存區域的方法.HookSafe[4]通過直接分析和更改內核的二進制文件,將被監控安全關鍵區域的訪存指令替換為1個固定的跳轉指令.當對該區域的內存訪問時,跳轉到固定的重定向代碼段,在1個集中的影子區域內完成訪問操作后跳轉回程序正常運行的位置.Sentry[5]通過修改內核的源代碼,在內存加載時將安全敏感數據和非安全敏感數據加載到不同的頁面中,采用插入空指令和更改內存分配函數的方法重新對內存空間進行布局.這些將安全關鍵數據和非安全關鍵數據隔離的方法都需要修改被監控系統的源碼或者編譯好的二進制文件,對于閉源系統不適用,修改難度大,且在一定程度上限制了保護機制的應用場景.且一旦系統被部署后,就不能再修改被監控的安全關鍵數據的范圍,不能在系統運行時靈活更改需要監控的對象.

傳統的監控內存訪問行為的系統,在監控開始時對頁面權限進行設置,之后其監控的粒度和范圍不再改變,這種方式的監控靈活性受到了限制.Lu等人[6]提出了一種靈活的頁面級的內存訪問監控,首先將每個安全關鍵數據都分配1個獨立的客戶機虛擬內存頁面,在系統運行時根據內存訪問情況動態改變內存訪問的監控粒度.他們使用的方法是利用硬件EPT支持2級頁表映射的特性,通過監控歷史數據中哪些客戶機物理頁面通常一起被訪問,將這些客戶機物理內存頁面映射到同一機器物理頁面中.這種方法僅對監控粒度做出了動態的調整,并沒有對監控區域本身做出動態調整,也需要對被監控系統源碼進行修改.

針對這3個問題:1)關鍵內存數據訪問監控的性能開銷大,2)當前解決該性能問題的方法需要修改被監控系統本身,3)被監控的關鍵內存數據在被監控系統部署前已經確定,在運行期間不能調整,本文提出了一種根據內核運行狀態,動態地調整需要被監控的內存區域的方法DynMon.首先,收集系統運行時的事件序列、時間信息和安全關鍵數據訪問行為的相關數據,根據系統的歷史數據,利用時序關聯規則算法,自動地學習安全關鍵數據被訪問的場景,建立系統運行狀態、時間和安全關鍵數據訪問行為之間的關系作為監控策略.根據安全關鍵數據訪問行為的動態監控策略,在VMM層中截獲被監控系統的事件,收集這些事件.當在VMM中收集到的事件序列滿足動態監控策略中的條件時,在相應監控策略規定的一段時間內,觸發對特定的安全關鍵數據的監控.

本文主要貢獻有3個方面:

1) 提出一種根據內核運行狀態,動態地調整需要被監控的內存區域的方法.當根據系統當前運行狀態可以判斷某些安全關鍵數據不會被訪問時,不設置監控安全關鍵數據所在的頁面的訪問權限,避免了該頁面中非安全關鍵數據的訪問導致頻繁陷入VMM,從而減小了額外產生的系統開銷.該方法不依賴于內核源碼,不需要重新編譯內核源碼或者修改內核二進制文件,并且對被監控系統透明.

2) 帶有時間信息的動態監控策略自動生成,動態監控策略指的是在系統運行過程中,并不是始終對所有安全關鍵區域的內存訪問行為進行監控,而是根據系統狀態自動地進行動態調整.

3) 在基于硬件虛擬化技術的開源虛擬化平臺Xen上實現了原型系統,可以容易地移植到任何支持硬件虛擬化技術的VMM平臺.通過實驗評估,驗證了DynMon的有效性.使用了動態安全關鍵數據監控策略的方法比靜態監控的方法降低了22.23%的性能開銷,并且可以檢測到實驗中考慮的內核攻擊.當被監控的安全關鍵數據的范圍增大時,系統的性能開銷依然在可以接受的范圍內.

1 相關工作

近年來,為了監控和保護內核中的動態數據,研究者通過對內核區域設置訪問權限來達到監控和保護的目的.然而,這些被監控的動態數據被動態加載到內核堆中的,和其他不需要被監控的內核數據共用同一區域,而現代硬件支持的內存權限設置粒度是頁面,這導致該頁面中所有數據的訪問都會陷入到VMM,使得系統性能開銷巨大.Wang等人[4]提出的了保護粒度鴻溝問題,即需要被保護的數據是字節級的,而硬件只提供頁面粒度的保護.他們提出了HookSafe,通過修改內核的二進制文件,將鉤子點的訪問進行重定向,把鉤子點集中到1個特定的內存區域,對該集中的內存區域進行寫保護;Sentry[5]為了解決內存訪問監控開銷巨大的問題,通過修改內核源碼,在內核數據加載時將安全關鍵數據和非安全關鍵數據分離在不同的頁面,這樣可以對安全關鍵數據和非安全關鍵數據實施不同的訪問控制策略;Li等人[7]提出了一種通過修改編譯器的方式,將鉤子點索引到1個只讀的跳轉表中,只有符合內核的控制流圖的方式才可以訪問該表中被保護的鉤子點.這些方法都需要修改被監控系統的源碼,并且重新編譯,或者直接修改被監控系統的二進制文件,對于真實場景下的被監控系統,通常是不接受系統本身被修改的,并且方法的可移植性差.

另一類解決該問題的方法是使用頁面粒度的監控,Lu等人[6]提出了一種靈活的頁面粒度的內存訪問行為的監控方法,為了解決保護粒度的鴻溝引起的性能問題,首先將被監控的對象分配到獨立的虛擬地址頁面中,為了防止每個監控對象都分配1個獨立頁面造成物理頁面的浪費,在內存分配時,將1個頁面分為多個虛擬頁面,再將多個虛擬頁面映射到同一物理頁面,并利用EPT技術在運行中動態調整內存訪問截獲的粒度.該方法依然需要修改被監控系統的內核源碼,并且只能在運行過程中動態控制監控粒度,并不能在動態調整監控區域本身.

由于內核中的對象對計算機系統起著至關重要的作用,近年來研究者對內存中數據的訪問模式進行研究來更有效地保護系統安全.在入侵檢測系統的研究中,大量的工作使用行為模型描述正常的行為和惡意行為.一種常用的方法是使用系統調用序列和系統調用的參數來分別刻畫正常行為和惡意行為[8];一些研究者使用基于圖的模型,用系統調用來描述系統行為[9];Rhee等人[10]使用系統訪問的模式來描述系統行為;Mao等人[11]使用page-rank算法評估內核對象的重要性;Xu等人[12]使用機器學習的方法分析了虛擬內存訪問.

入侵檢測系統被用來檢測系統中潛在的安全問題.研究者們將大量的數據挖掘方法應用到入侵檢測領域,關聯規則可以用來查找到給定攻擊行為中的頻繁子集,被用來挖掘惡意行為的模式.文獻[13]中提出一種自動的方法學習帶有時序的系統狀態,并建立一種混合的入侵檢測系統;Lee等人[14]提出了一種系統自動化的入侵檢測框架,使用數據挖掘算法計算審計數據中的活躍模式,并從這些模式中抽取出可以用來預測入侵的特征;文獻[15]提出了一種帶權重的序列挖掘的方法用在入侵檢測系統中,對于更傾向于惡意篡改行為的屬性,增大其在序列挖掘算法中的權重.

2 背景知識介紹

在本節中,我們描述硬件輔助虛擬化(hardware assisted virtualization, HAV)的背景和基于HAV的內存監控的性能問題.

2.1 硬件輔助虛擬化

為了可以在高權限級下監控系統行為,我們使用了硬件虛擬化技術.硬件虛擬化技術可以支持不更改操作系統,并且帶來的性能開銷更小.目前主流的CPU都支持硬件虛擬化技術,如Intel的VT-x技術[16]、AMD的AMD-V技術,它們的實現原理類似,本文中使用Intel的VT-x技術為例介紹硬件虛擬化技術.

為了支持CPU虛擬化,VT-x提供了2個模式:VMX(virtual machine extension)根模式和VMX非根模式,分別用來支持客戶機和VMM,如圖2(a)所示.這2種模式可以通過1組指令進行相互切換:VM Exit和VM Entry.當1個高權限的指令在非根模式下執行時,處理器通過VM Exit指令將其切換到根模式下執行.在根模式下,虛擬機監控器處理VM Exit后,通過VM Entry指令重新返回到虛擬機層.在截獲內存訪問行為時,設置某個頁面的訪問權限為不可訪問,當出現訪問該頁面的操作時,會觸發EPT Violation,從而使得CPU通過VM Exit從客戶機陷入到VMM中.在VMM中處理EPT Violation后,通過VM Entry重新將CPU控制權返回給客戶機.

Fig. 2 Hardware assisted virtualization圖2 硬件虛擬化

擴展頁表(extended page table, EPT)使用硬件來虛擬內存管理單元(memory management unit, MMU),如圖2(b)所示.MMU利用CR3指向的頁表,通過查找頁表將客戶機虛擬地址翻譯成客戶機物理地址,客戶虛擬地址是指客戶機操作系統使用的虛擬地址,客戶物理地址是客戶機的操作系統使用的物理地址.當EPT被使能后,利用EPT頁表指針(EPT base pointer, EPTP)指向的擴展頁表EPT,通過1組EPT頁表查找操作,將客戶物理地址翻譯成真實的機器地址.即使用了EPT技術后可以支持客戶虛擬地址,客戶物理地址和真實機器地址之間的轉換[17].EPT也可以設置軟件訪問特定地址內存數據的權限,包括讀、寫和執行.任何不在權限允許訪問內的訪問操作都會觸發EPT Violation,然后導致VM Exit.

2.2 性能開銷問題

使用硬件輔助虛擬化技術時,特權事件會導致CPU控制權從客戶機陷入到VMM中.當這些事件觸發VM Exit時,將導致將近2 000~7 000周期的CPU開銷[3],這是硬件虛擬化技術增大系統開銷的1個原因.基于EPT的內存訪問監控會加大此方面的開銷,因為硬件設置頁面訪問權限的最小粒度是頁,利用EPT設置內存訪問權限后,任何在這個頁面中的超出訪問權限的操作都會觸發VM Exit,導致監控內存訪問行為會極大增加VM陷入VMM的頻率.動態內存區域會被頻繁讀寫,頁面內大量的內存訪問的截獲產生EPT Violation,使得VM Exit被頻繁觸發.文獻[4]中,作者在監控鉤子點的內存訪問行為時,發現14個頁面中僅僅存在50個鉤子點,其中最差的情況下,1個頁面中只有1個鉤子點.即在監控的1個動態頁面中,只有4 B是真正需要捕獲的內存訪問,其他4 092 B的動態數據的訪問行為由于EPT權限設置也需要觸發VM Exit,導致VM Exit觸發特別頻繁,系統開銷巨大.本文的工作試圖通過動態設置內存訪問行為監控的時機,盡量在真正需要捕獲的安全關鍵數據被訪問時對該內存區域進行監控,減少內存訪問監控時VM陷入到VMM的頻率,從而減小這部分的性能開銷.

3 內存關鍵數據動態監控方法

Fig. 3 Dynamic memory access monitor architecture圖3 動態內存監控框架

本文提出的內存關鍵數據動態監控方法DynMon主要包括事件監控、內存訪問監控和動態監控策略,如圖3所示.其中動態監控策略是依據線下分析歷史運行數據得出的,分析的數據包含事件序列、時間影響和安全關鍵數據的訪問行為.利用時序關聯規則挖掘出事件序列、時間影響和安全關鍵數據訪問行為間的關系作為動態監控策略.事件監控利用硬件虛擬化技術和內存虛擬化技術在運行時對操作系統層的事件進行截獲,并收集這些事件序列.當收集到的事件序列和動態監控策略匹配時,根據動態監控策略在一定的時間范圍內,觸發內存訪問監控特定的安全關鍵數據的內存訪問行為.內存訪問監控收到特定的安全關鍵數據的監控請求后,利用內存虛擬化技術限制安全關鍵數據所在頁面的內存訪問權限,當被監控的系統試圖訪問該數據時,觸發EPT Violation陷入到VMM中,從而捕獲該數據的訪問行為.這樣,就可以減少和安全關鍵數據無關的動態數據的監控,從而減小系統性能開銷.我們將詳細介紹動態內存監控系統中的5個關鍵組件.

3.1 事 件

VMM可以截獲包括硬件相關的和軟件相關的事件,硬件相關的事件主要包括寄存器訪問、IO訪問、內存訪問等,軟件層的事件主要包括中斷、異常和系統調用.在本文的工作中,我們主要關注的是寄存器訪問事件,內存訪問事件和系統調用事件.

定義1.寄存器訪問事件.寄存器訪問事件是對系統中的關鍵寄存器訪問,表示為r,op,其中r表示被訪問的寄存器,op表示被訪問的類型.包括控制寄存器(control register, CR)、調試寄存器(debug register, DR)、特殊模塊寄存器(model special register, MSR)和全局描述符表寄存器(global descriptor table register, GDTR)等.通過截獲寄存器訪問事件,可以感知系統狀態的變化,如CR3中記錄了運行進程在虛擬地址空間的頁目錄信息,一旦進程發生了切換,CR3中的內容也將被改變.通過截獲CR3的寫事件,可以監控進程切換的行為.

定義2.內存訪問事件.內存訪問事件只的是對內存中數據進行讀、寫、執行的操作,表示為m,l,op,其中m表示被監控的關鍵內存區域的名稱,l表示關鍵內存區域m在內存中的位置,l的范圍表示為l∈[start_address,end_address].這些地址指的是操作系統中的虛擬地址,op表示訪問的類型,如讀、寫或者執行.攻擊程序如果要破壞系統的完整性,不可避免地需要通過內存的寫事件,內存訪問事件是非常關鍵的系統事件.

定義3.系統調用事件.系統調用提供了用戶程序和系統函數之間的關鍵接口,用戶通過系統調用可以使用內核定義的特權操作.本文中將系統調用表示為syscall_num,arg1,arg2,…,argn,其中syscall_num指系統調用號,argi指第i個系統調用的參數.攻擊程序通常在1個系統調用后破壞內核的完整性,大量內核攻擊通過破壞系統調用來達到它們的攻擊目的.

定義4.中斷和異常.中斷提供了操作系統和外設之間的交互,在計算機運行中,出現意外情況需要計算機進行干預,計算機中斷當前執行的程序,進行中斷處理程序,處理完成后,轉回之前暫停的程序繼續執行.異常指CPU執行指令內部的事件出現錯誤,轉入到異常處理程序來處理異常.表示為intr,vec,其中intr表示中斷或者異常,vec表示中斷和異常向量號.

3.2 安全關鍵數據

安全關鍵數據是指有可能影響到系統安全性的數據,如task_struct存儲了進程相關信息,LKM鏈表存儲了Linux內核模塊的關鍵信息.一些攻擊通過修改task_struct中的成員信息來達到它們的攻擊目的,如:修改flag域以指示隱藏哪些進程,修改uid域以提升程序權限,通過修改LKM鏈表的頭指針來隱藏攻擊模塊本身的存在.安全關鍵數據可以分為靜態數據和動態數據,對于靜態數據要求始終不能被寫訪問,靜態數據正常情況下不會被寫訪問并且靜態數據是集中存儲在靜態區域中的,實時監控所有靜態區域不會造成頻繁陷入VMM導致性能開銷增大.而動態安全關鍵數據是和動態非安全關鍵數據通常混合在一起的,即1個頁面中通常同時存在安全關鍵動態數據和非安全關鍵數據.動態數據可以被合法地進行訪問,這也增加了檢測動態數據是否被非法篡改的難度.

3.3 動態監控策略

DynMon通過使用動態監控策略,根據系統實時運行狀態,對監控的內存區域進行調整,這樣如果根據當前系統狀態可以判斷不存在訪問該安全關鍵區域的行為,就不對相應區域監控,從而減少該區域中的非安全關鍵數據陷入產生的不必要性能開銷.為了得到合理的動態監控策略,首先收集系統運行時的事件序列、時間信息和安全關鍵數據的訪問行為,通過數據分析獲取事件序列、時間信息和安全關鍵數據訪問行為間的關系,得出動態監控的策略為:當某個事件序列發生后的某段時間內對相應的安全關鍵數據的訪問行為進行監控.

通過觀察,發現安全關鍵數據的訪問通常伴隨著一系列的行為,如LKM鏈表的讀寫是由Linux內核模塊加載和刪除導致的,在系統調用init_module和execve后改寫LKM鏈表.再例如task_struct中內容的修改需要經過一系列系統調用execve,open,close之后才對task_struct中的內容進行修改來達到攻擊內核的目的.由于系統事件和安全關鍵數據的訪問之間存在這樣的關系,通過分析歷史數據來得到它們之間的聯系,并將其作為動態監控策略.

定義5.事件序列.事件序列是多個不同的事件通過不同的關系組合起來的,我們使用模式語言來描述.在不同模式之間存在4種關系:基本事件關系、順序關系、選擇關系和重復關系.不同的行為模式間的關系:

1)pat.reg_op|mem_op|system_call|intr表示基本事件,reg_op,mem_op,system_call,intr分別表示寄存器訪問事件、內存訪問事件、系統調用事件、中斷和異常.

2) sequencing. pat1;pat2表示pat2緊接著pat1出現.它表示2個事件序列間的順序關系.

3) alternation. pat1‖pat2表示pat1或者pat2同時出現,它表示2個事件序列間的選擇關系.

4) repetition. pat*表示pat出現了0次或者多次,它表示1個事件序列重復出現了多次.

定義6.動態監控策略.本文中將動態監控策略定義為:當某個事件序列發生后的某段時間內,對相應的安全關鍵數據的訪問行為進行監控.表示為{s1,s2,…,sn,[t1,t2]}→{security_dataj,accessj},其中:

1)s1,s2,…,sn表示定義5中定義的事件序列.

2) [t1,t2]表示在事件序列發生后的一段時間區間.

3)security_dataj表示某個安全關鍵數據.

4)accessj表示訪問行為包括讀、寫和執行.

即在序列{s1,s2,…,sn}發生后的經過t1到t2時間內,需要對安全關鍵數據security_dataj的accessj訪問行為進行監控.由于在系統運行中時間點t1和t2并不容易評估,我們使用被監控的VM陷入VMM的次數來表達關鍵數據的訪問行為監控和事件序列{s1,s2,…,sn}的相對時間關系.{s1,s2,…,sn,[n1,n2]}→{security_dataj,accessj},其中[n1,n2]表示在事件序列發生后n1次VMM陷入事件n2次VMM陷入事件之間,需要對安全關鍵數據security_dataj的訪問行為進行監控.

為了挖掘出定義6所述的事件序列和安全關鍵數據訪問的關系作為安全監控策略,我們需要經過圖4所示的4個步驟.

Fig. 4 Safety-critical data access behavior analysis圖4 安全關鍵數據訪問行為分析

步驟①. 在被監控系統運行過程中,利用硬件虛擬化技術截獲事件序列和安全關鍵數據訪問行為的序列.

步驟②. 將完整序列合理的劃分為多個子序列.

步驟③. 將子序列的集合轉換為時序關聯規則可以處理的輸入格式,利用帶有時序關系的數據挖掘算法得出事件序列和安全關鍵數據的訪問行為的關系.

步驟④. 根據序列關聯規則挖掘出的頻繁序列結合原始收集的帶有時間信息的數據,抽取出在某個事件序列完成后會存在安全關鍵數據的訪問行為的時間范圍.根據上述一系列數據分析可以得到在某個序列完成后,在一段時間內會存在某個安全關鍵數據的訪問行為.

3.3.1 事件序列收集

首先我們在系統運行狀態下,收集系統運行時的事件,包括控制寄存器的訪問、系統調用、中斷異常和安全關鍵數據的訪問.2.2節中已經描述,對動態安全關鍵數據訪問行為的截獲使得性能開銷急劇增大,在我們的事件收集中同時對多個動態區域的內存訪問進行監控會因為性能開銷過大導致系統崩潰,我們每次只對1個安全關鍵數據所在頁面的訪問行為進行監控.在算法1中,描述了帶有時序信息的事件收集過程,從事件收集開始,使用1個計數器來記錄陷入VMM中的次數,每1個收集到的事件的格式為(counter,event),其中counter為從開始收集事件到事件event發生時陷入VMM的次數,在開始監控時將counter初始化為0,每次陷入VMM處理時將counter進行加1處理.

算法1.事件序列的收集算法.

輸入:計數器counter、運行時系統運行狀態;

輸出:事件序列{(counter1,event1),(counter2,event2),…,(countern,eventn)}.

①counter=0,i=1;

② while事件收集do

③ if (VM Exit)

④ if (檢查到事件)

⑤eventi=VMExitreason;

⑥counteri=counter;

⑦i++;

⑧ end if

⑨counter++;

⑩ 處理陷入的原因;

3.3.2 事件子序列的劃分

3.3.1節中收集到的是系統運行時完整的事件序列,我們需要對其進行分割,分割成事件序列片段,我們以標志性事件作為事件序列的分割點.由于我們需要挖掘的是事件序列和關鍵數據訪問行為之間的關系,關鍵數據的訪問行為就是每個事件序列的結束位置.事件序列開始的位置根據關鍵數據采用2種方式來確定:1)基于標志性事件的方法;2)基于窗口的方法.針對一些特征性明顯的關鍵數據,如LKM鏈表頭的寫訪問在起始位置伴隨著2個系統調用init_module或者delete_module,我們使用這些關鍵事件作為序列的起始位置.對于一些關鍵數據,并沒有一些明顯的標志性起始事件如task_struct中安全關鍵數據的訪問,我們使用窗口的方法,將距離結尾固定長度的事件序列截取出來作為一個事件序列.

3.3.3 時序關聯規則分析

由于我們抽取的事件序列是帶有前后時序關系的,時序關聯規則[18]可以用于挖掘這種帶有前后時序關系的序列.時序關聯規則可以在1組帶有時序信息的序列中挖掘出子序列模式,當某個模式出現的次數超過給定的閾值時,它是頻繁模式.頻繁模式出現的次數和所有序列個數的比值稱為支持度,給定的閾值稱為最小支持度.研究者們已經提出了許多時序關聯規則的算法,如AprioriAll[18],GSP[19]是廣度優先的算法來查找頻繁時序模式;Spade[20],Spam[21]是通過深度優先的方法查找;FreeSpan[22],PrefixSpan[23]是使用模式增長的方法查找.這些傳統的方法會挖掘出大量的子序列模式,為了減少挖掘出的冗余的頻繁子模式,基于閉集的序列模式挖掘方法(closed sequence patterns, CSP)[24]被提出,該方法挖掘出的頻繁序列模式中,1個模式不被任何1個其他模式所包含.本文做時序關聯規則分析時,使用了基于閉集的方法CloFast[24],該算法對挖掘大規模的長序列更為有效.如圖4所示,需要先將收集到的數據轉化為CloFast的輸入格式,通過CloFast挖掘出時序序列的頻繁模式.對于CloFast,輸入包括事件子序列集和最小支持度,在本文中使用CloFast算法挖掘頻繁序列模式如算法2中所描述.最小支持度的選擇根據第4節中實驗得出的數據確定,選擇性能開銷可以接受,并且可以截獲到絕大多數關鍵數據訪問行為的最小支持度作為CloFast的最小支持度.

算法2.基于CloFast算法的安全關鍵數據.

輸入:最小支持度min_sup、事件子序列集{{s11,s21,…,sn1,security_data1,access1},…,{s1m,s2m,…,snm,security_datam,accessm}};

輸出:序列模式閉集序列模式閉集{s1,s2,…,sn}→{security_dataj,accessj}.

① 頻繁項FI:識別支持度大于min_sup的頻繁1-項集;

② 頻繁項閉集CFI:識別出FI中支持度大于min_sup的頻繁項閉集;

③ for eachcfi∈CFI

④n=createNode(cfi);

⑤addChildNode(T,root(T),n);

⑥ end for

⑦ for eachchild∈children(T,root(T))

⑧ 深度優先搜索頻繁序列(T,child,

min_sup);

⑨ end for

⑩ return序列模式閉集{s1,s2,…,sn}→

{security_dataj,accessj}.

3.3.4 監控窗口的確定

對于關鍵數據訪問事件監控的時間窗口的確定,我們使用序列中最后1個事件到關鍵數據訪問事件的時間距離來確定.窗口的開始時間是頻繁序列模式中最后1個事件到第1個關鍵數據訪問事件間的最小時間間隔,窗口的結束時間是頻繁序列模式中最后1個事件到該模式中最后1個關鍵數據訪問事件的最大時間間隔.由于在虛擬機監控器VMM中直接度量時間間隔,時間間隔不易精確度量并受到虛擬機的陷入影響,我們使用一種更易度量的相對時間度量方式,使用陷入VMM的次數作為相對時間.由于在圖4中步驟①事件收集時,收集到的每個事件信息包括事件發生時陷入VMM的次數、以這個次數作為事件發生時的時間信息.

3.3.5 安全關鍵數據訪問的動態監控策略

根據3.3.1節到3.3.4節中安全關鍵數據訪問行為的分析,我們可以得到一種動態監控安全關鍵數據訪問的策略.在特定事件序列出現后的一段時間內,將相應的安全關鍵數據所在頁面設置為不可訪問,當超過監控時間后,取消對該安全關鍵數據所在頁面的訪問限制.即在匹配到事件序列{s1,s2,…,sn}后,陷入VMM的次數在[n1,n2]區間內,對相應的安全關鍵數據的特定訪問行為(如讀、寫或者執行)進行監控.這樣就可以在運行時,根據系統的運行狀態動態調整需要監控的安全關鍵數據,從而減小不必要的內存動態區域訪問行為監控造成的巨大性能開銷.由于不同類型的安全關鍵數據具有不同的特征,相應的監控策略也不同.我們對安全關鍵數據進行分類:分為靜態數據和動態數據,動態數據又包含控制流數據,鏈表類數據,非控制流數據等.對于靜態數據,由于它所在的區域內都是靜態數據,在沒有惡意攻擊存在的情況下不存在寫行為,所以始終監控該區域的寫行為不會導致系統頻繁陷入VMM,幾乎不會增加系統性能開銷.當出現寫行為時,通常可以認為是惡意程序篡改了內核中的靜態數據,所以從系統初始化穩定開始監控后,就始終設置靜態數據的寫行為監控.表示為monitor_init→{static_data,write},即從監控開始,就對靜態區域static_data進行寫訪問行為的監控.

對于動態數據,我們使用3.3.1節到3.3.4節中數據分析的結果{s1,s2,…,sn,[n1,n2]}→{security_dataj,accessj}作為動態內存區域訪問行為監控的策略,我們以幾個安全關鍵數據為例,表1中列了通過對收集事件序列,時間信息和相應的關鍵數據訪問行為分析,得到的動態監控策略.以LKM_list_head為例,當新的內核模塊被加載或者被卸載時,會將其module結構插入到LKM鏈表的頭指針位置(本文中使用LKM_list_head描述),根據時序關聯規則CloFast挖掘的結果可以看出存在2種頻繁序列,即{init_module,close,socketcall,LKM_list_head_write}和{delete_module,LKM_list_head_write}.通過對其中系統調用事件的分析可以看出這2個序列的語義分別是加載內核模塊時需要進行init_module(加載內核模塊的系統調用),close(文件關閉的系統調用)和socketcall(套接字相關系統調用總入口),卸載內核模塊時,需要delete_module(卸載模塊的系統調用).監控的時間范圍是由3.3.4節中根據數據分析確定的窗口大小,在該時間范圍內對LKM鏈表的頭指針進行內存訪問監控.

Table 1 Partial Monitor Strategies of Critical Data表1 部分關鍵數據的監控策略

3.4 事件監控

事件監控在系統運行時截獲系統的事件,并收集事件.VMM可以截獲和軟硬件相關的多種事件,在本文原型系統的事件監控,我們主要關注的是寄存器訪問事件和系統調用的截獲.

對于寄存器相關的操作,本文關注于控制寄存器CR、調試寄存器DR,特殊模塊寄存器MSR和全局描述符表寄存器GDTR.通過截獲寄存器訪問事件,可以感知到操作系統狀態的變化,如CR3中記錄了運行進程在虛擬地址空間的頁目錄信息,一旦進程發生了切換,CR3中的內容也將被改變.通過截獲CR3的寫事件,可以監控進程切換的行為.寄存器訪問行為是1種高權限操作,我們利用硬件輔助虛擬化技術截獲寄存器訪問行為.虛擬機控制塊(virtual machine control data structure, VMCS)結構中的客戶狀態域可以管理客戶寄存器的訪問權限,當寄存器訪問事件發生時,VM Exit將被觸發.因此,我們通過VMCS結構中的VMExitreason域解析可以截獲寄存器訪問事件.

中斷和異常是操作系統的重要事件,用于處理操作系統和外部事件的交互,內部的錯誤和陷入.硬件虛擬化技術支持對中斷和異常的截獲,中斷的截獲通過設置VMCS域中的虛擬機執行控制域中的“外部中斷陷入位”,可以使外部中斷發生時陷入到VMM,DynMon通過對陷入原因解析可以截獲到中斷和中斷號.對于異常的截獲,硬件虛擬化提供了1個數據結構Exception Bitmap,可以通過該結構具體設置對哪些異常進行截獲.例如需要截獲page_fault異常,需要將Exception Bitmap中的第14位設置為1,當發生page_fault時陷入VMM,DynMon通過解析陷入的原因截獲該異常事件.

系統調用提供了用戶程序和系統函數之間的關鍵接口,入侵檢測的研究表明許多攻擊通過破壞系統調用來達到它們的攻擊目的[8].本文在事件監控中截獲系統調用和系統調用中的相關參數.系統調用的截獲需要根據系統調用的實現不同將系統調用分為2類:軟中斷和快速系統調用.在截獲軟中斷時,將原有的int80在中斷描述符表中的項存儲起來,然后將該位置指向1個不可執行的地址.這樣,當執行系統調用時,會產生EPT Violation陷入VMM.在EPT Violation的處理函數中我們記錄系統調用事件,并將EIP寄存器的值設置成之前保存的原始int80在中斷描述符表中的地址,這樣就模擬了系統調用的執行.對于快速系統調用,使用硬件指令完成系統調用,現代操作系統通常在32 b系統中使用SYSENTERSYSEXIT,在64 b系統中使用SYSCALLSYSRET.對于SYSENTER的截獲,將IA32_SYSENTER_EIP MSR寄存器中的值設置為1個不可執行的地址,同軟中斷的截獲,當產生系統調用時會觸發1個EPT Violation陷入VMM.之后的處理同軟中斷的處理.記錄系統調用事件的詳細信息,將EIP寄存器的值設置成之前保存的IA32_SYSENTER_EIP MSR中的地址以模擬系統調用的執行.對于SYSCALL指令的截獲,首先將EFER寄存器中的SCE位(該位表明是否允許SYSCALLSYSRET指令)置為0.當發生系統調用時,產生invalid_op異常陷入到虛擬機中,我們在虛擬機中通過陷入信息解析出該異常,通過寄存器的值獲取系統調用的相關信息,然后將SCE位恢復為1使得該條指令可以正常執行.并設置TF(trap flag)位,執行完SYSCALL后由于trap_debug異常重新陷入VMM.在TrapDebug處理程序中將SCE重新置為0,繼續對SYSCALL進行截獲.

3.5 內存訪問監控

為了截獲內存訪問行為,首先需要確定監控哪些頁面的內存訪問事件.傳統的方法是在初始化系統監控程序時就已經決定對哪些位置的關鍵內存訪問行為進行監控,在之后的監控過程中需要監控的內存范圍不改變.為了減小監控內存訪問帶來的系統性能開銷,本文提出了動態安全關鍵數據內存訪問行為的監控方法.

算法3.內存訪問行為的動態監控.

輸入:動態監控策略{s1,s2,…,sn,[n1,n2]}→{security_dataj,accessj}.

輸出:set_mem_access(security_dataj,accessj).

① 系統運行時收集事件;

② if (事件序列匹配{s1,s2,…,sn})

③counter=0;

④ end if

⑤ if (VM Exit)

⑥counter=counter+1;

⑦ if (counter=n1)

set_mem_access(security_dataj,accessj);

⑨ end if

⑩ if (counter=n2)

access_rxz);

算法4.關鍵數據訪問的截獲.

輸入:安全關鍵數據的地址;

輸出:被訪問的安全關鍵數據.

① if (安全關鍵數據所在頁面被訪問)

② 觸發EPT Violation;

③ if (VM Exit地址=安全關鍵數據地址)

④ 記錄該安全關鍵數據被訪問;

⑤ end if

⑥eflagTF;

⑦ end if

⑧ 下一條指令執行陷入VMM;

⑨set_mem_access(security_dataj,accessj).

算法3描述了安全關鍵數據的動態監控策略,當事件監控模塊收集到的事件序列滿足動態監控策略中的事件序列{s1,s2,…,sn}時,在VMM中開啟計數器counter的功能.counter初始為0,counter記錄被監控系統陷入VMM的次數.當counter=n1時,將相應安全關鍵數據所在頁面的access權限從EPT頁表中移除;當counter=n2時,系統取消對該安全關鍵數據的監控,即在EPT頁表中重新添加被監控安全關鍵數據所在頁面的訪問權限.

算法4描述了在算法3中n1~n2之間,對安全關鍵數據進行監控,一旦有事件試圖訪問被監控的頁面,將觸發EPT Violation,導致CPU從VM陷入到VMM中去處理EPT Violation.陷入VMM后,內存訪問監控模塊判斷產生EPT Violation的客戶機物理地址是否屬于我們需要監控的安全關鍵數據的客戶機物理地址范圍,如果屬于,則記錄相應的被訪問的安全關鍵數據.在EPT Violation處理函數中,將頁面的讀寫權限恢復,使得內存訪問的指令可以重新執行.最后,我們需要恢復對該頁面的訪問監控,即在下一條指令執行之前,重新將該頁面的讀寫權限移除.為了實現該功能,在EPT Violation處理函數中,設置TF位,并且在處理異常的bitmap結構中使能trap_debug位,這樣在內存訪問指令重新執行后會再陷入VMM中.在trap_debug異常處理函數中,我們重新將該頁面的讀寫權限移除.

通過上述方法,DynMon實現對安全關鍵數據進行數據級的實時監控.例如需要監控的關鍵進程信息task_struct中flag域的客戶機線性地址為0xc03d63ac的1 B,需要先將該客戶機線性地址轉換為客戶機物理地址,將該頁面設置為不可訪問.當關鍵信息task_struct的flag域被寫時,產生EPT Violation并將導致該異常的客戶機物理地址作為陷入信息傳遞給VMM,DynMon在VMM中解析出產生異常的客戶機物理地址,和被監控的客戶機物理地址進行對比,相同時認為監控到了該關鍵數據的寫操作,并記錄下該訪問行為.當該頁面中1個非安全關鍵數據task_struct中的used_math域被寫訪問,由于該數據所在的頁面被設置了訪問權限,陷入VMM后,DynMon判斷該數據的客戶機物理地址不在監控范圍內,不記錄該內存訪問行為.DynMon可以根據數據的線性地址或者線性地址的范圍,控制被監控的數據.

4 實驗與驗證

為了驗證本文提出方法的有效性,本節首先說明了實驗環境和實驗中使用的攻擊程序.然后從3個方面說明DynMon的有效性:1)和不采用動態監控策略的方法做性能比對,驗證DynMon是否可以大幅降低動態區域的安全關鍵數據監控的性能開銷;2)增大監控范圍,評估DynMon的性能開銷是否可以接受;3)當監控到安全關鍵數據的訪問時,觸發完整性檢查,驗證是否可以檢測到內核攻擊行為.

4.1 實驗設置

4.1.1 實驗環境設置

本文提出的方法原型系統實現在基于硬件虛擬化的Xen平臺上.所有的實驗都是在Intel Core i7-4710MQ CPU上實現的,帶有2.5.0 GHz的主頻和8 GB內存.使用的Xen平臺是Xen 4.4.0 version,使用的被監控硬件虛擬機HVM的操作系統分別是32位Linux 2.6.24和64位Linux3.11.0.

4.1.2 對比實驗設置

在實驗中我們使用本文提出的基于動態監控策略的安全關鍵數據監控的方法和從內存監控開始就始終監控安全關鍵數據的方法進行對比對比.我們使用2組實驗名稱:

1) StaticMon表示從監控開始始終對安全關鍵數據所在的內存頁面進行訪問監控[1].

2) DynMon表示本文提出的方法對安全關鍵數據采用動態監控的策略進行訪問監控.由于動態策略的學習使用了時序關聯規則算法CloFast,不同支持度的設置會影響到挖掘出的監控策略,在實驗中我們設置了不同的最小支持度,比較最小支持度不同對性能和監控效率的影響,并根據實驗選擇出合適的最小支持度.DynMon_0.1表示最小支持度為0.1的時序關聯規則算法CloFast挖掘出的動態監控策略.依次類推,DynMon_0.2,DynMon_0.3,DynMon_0.4分別表示使用最小支持度為0.2,0.3,0.4的CloFast挖掘出的動態監控策略.

4.1.3 內核攻擊程序設置

表2中列舉了我們的實驗評估中使用的3個攻擊程序,包括它們攻擊的對象、需要檢測的被攻擊的內核數據和被攻擊的內核數據類型.我們選擇這3個攻擊程序是因為它們攻擊的對象包含了內核代碼、內核靜態數據和內核動態數據.除此之外,它們的攻擊行為和攻擊數據是短暫存在的.

Enyelkm是一個基于LKM實現的攻擊程序,它可以通過更改系統調用的入口函數來實現隱藏文件、目錄和進程的目的.Enyelkm更改系統調用getdents以隱藏目錄,更改系統調用read從而屏蔽讀出文件中的部分內容.除此之外Enyelkm還更改了系統調用kill來獲取根權限.當Enyelkm被加載,它使用LKM隱藏技術對操作系統隱藏自己的存在.

Adore-ng是一個基于LKM的攻擊程序.Adore-ng攻擊的是虛擬文件系統VFS中的文件操作的結構從而達到隱藏文件,進程和端口的效果.它也更改module→list結構隱藏自己.

Xingyiquan也是一個基于LKM的攻擊程序,它通過更改系統調用表重定向系統調用,從而可以隱藏進程、文件、目錄網絡連接和增加后門.

4.2 實驗評估

為了評估運行時動態監控內存訪問行為對系統開銷的影響,我們對比了開啟動態策略的內存監控方法和不開啟動態策略始終監控內存訪問行為方法的性能開銷.我們使用STREAM benchmark[25]評估性能,STREAM benchmark是一種常用的開源性能評估工具,通常被用來度量計算機系統內存的帶寬.性能評估涵蓋4組操作:Copy,Scale,Add,Triad,我們使用平均開銷表示系統的性能開銷.Copy函數將數據從一個位置復制到另一個位置.Scale和Copy相似,只是在寫到另一個位置之前將數據乘以1個常量.Add函數從內存中一個位置讀出數據,和內存中另一個位置讀出的數據相加,將結果寫到新的內存位置中.Triad函數將Scale和Add函數組合起來.我們在被監控的系統中運行STREAM benchmark.在下面描述的性能評估中,將使用的方法和Xen平臺上沒有部署事件監控的性能做比較.原始沒有修改的Xen跑出的性能開銷為100%.為了減少性能檢測中誤差帶來的影響,我們對每組實驗重復100次后取平均值作為性能檢測的結果.除了STREAM benchmark外,我們還使用另外的2個benchmark做進一步對比分析.io_zone[26]是一個文件系統和緩存的性能測試benchmark工具,用來測試文件系統的讀寫性能,包括讀、寫、再讀、再寫等操作;ramspeed[27]是一個緩存和內存的測試工具.

本文的實驗評估主要從4方面進行:1)對比從開始監控始終對安全關鍵數據進行監控的方法(StaticMon)和本文提出的動態內存監控方法(DynMon)的性能開銷進行對比.由于StaticMon不能監控過多的內存動態區域,監控過多動態內存區域會導致性能開銷過大而測不到性能開銷,在這組對比實驗時只監控1個安全關鍵數據.2)為了研究監控安全關鍵數據大小對DynMon的影響,我們使用1組實驗對比了不同數量的安全關鍵數據對應的性能開銷和內存使用情況.3)為了說明DynMon原型系統可以監控系統需要的安全關鍵數據并不增加過大的性能開銷,我們對本文中實現的原型系統中安全關鍵數據集進行監控的性能開銷進行評估.4)我們使用1組實驗說明本文提出的DynMon監控安全關鍵數據的訪問可以幫助檢測內核的攻擊程序.

4.2.1 DynMon和StaticMon性能對比

由于StaticMon監控多個頻繁寫操作的動態數據頁面會導致性能開銷過大難以測量,我們在性能開銷對比實驗中選擇1個動態安全關鍵數據區域(進程鏈表中的最后1個進程的task_struct)進行訪問行為的監控,僅監控1個動態內存頁面的訪問.圖5~8中是監控進程列表中最新進程的task_struct的寫訪問行為的性能對比,分別對應32 b系統和64 b系統在不同benchmark下的性能對比.可以看出在32 b系統和64 b系統中,3個bench-mark的結果均顯示使用了動態內存監控的方法DynMon可以減小監控安全關鍵數據的系統性能開銷,64 b系統內存監控的開銷稍高于32 b系統.

Fig. 5 Performance comparation of 32 b system by STREAM圖5 32 b系統性能開銷對比圖-STREAM

Fig. 6 Performance comparation of 32 b system by io_zone and ramspeed圖6 32 b系統性能開銷對比圖-io_zone-ramspeed

Fig. 7 Performance comparation of 64 b system by STREAM圖7 64 b系統性能開銷對比圖-STREAM

Fig. 8 Performance comparation of 64 b system by io_zone and ramspeed圖8 64 b系統性能開銷對比圖-io_zone-ramspeed

在動態關鍵數據監控的過程中,系統的額外性能開銷主要來源于監控的關鍵數據所在頁面內動態數據被訪問導致頻繁陷入虛擬機的開銷.對比64 b系統和32 b系統,雖然其虛擬地址大小和尋址空間差距懸殊,但是它們每個頁面的大小相同,都使用4 KB大小的頁面,對于動態關鍵內存數據的訪問監控,32 b系統和64 b系統的性能開銷十分接近.32 b和64 b系統在監控關鍵數據訪問的主要區別在于虛擬地址轉換為機器地址的開銷,即發生轉換檢測緩沖區(translation look aside buffer, TLB)缺失時,32 b系統本身需要2級走表,而64 b系統需要4級走表.虛擬機中由于硬件需要二維走表來轉換客戶機虛擬地址到機器地址,32 b系統共需要12級走表,而64 b系統需要24級走表[28],64 b系統性能開銷會稍高于32 b系統.根據圖5~8可以看出無論在32 b系統還是64 b系統下DynMon都可以減小關鍵內存數據監控的性能開銷,下文中為了簡潔,我們以32 b系統為例分析DynMon性能開銷下降的原因,不同的監控數據規模對性能開銷的影響.

以圖5中32 b系統中在STREAM benchmark的測試結果分析,在不增加動態策略的內存訪問監控方案StaticMon中需要25.86%的額外性能開銷,而本文提出的基于動態監控策略的動態內存監控方法DynMon在最小支持度為0.1的時序關聯規則挖掘得到的監控策略中額外性能開銷為3.63%,對于最小支持度為0.4的監控策略下僅需要0.22%的額外性能開銷.動態安全關鍵區域監控的開銷大的原因是由于監控安全關鍵數據時,安全關鍵數據相同頁面的其他內存訪問也會陷入到VMM中,導致性能開銷增大,表3中統計了針對task_struct中安全域的監控,每秒陷入VMM中的事件由真正的安全關鍵數據引起的次數和非安全關鍵數據引起的次數.其中監控頁面被寫訪問的次數為每秒17 829次,所有task_struct結構體中內容被寫訪問的次數為每秒8 865次,其中真正的安全關鍵域被寫訪問的次數為每秒113次,如表3所示.由安全關鍵數據訪問導致的VMM陷入次數僅占該頁面數據所有陷入次數的0.634%.大量和安全關鍵域無關的動態數據的訪問監控導致了頻繁陷入VMM,從而導致系統性能開銷增大.本文提出的DynMon的主要目的是減小由于安全無關的動態數據被監控引起的VMM陷入次數,從而降低不必要的系統性能開銷.

Table 3 Statistics of Memory Writing Access表3 內存寫訪問次數統計

本文中提出的方法引入了時序關聯規則學習監控策略的方法來動態調整需要監控的內存區域,由于不同最小支持度對應不同數量的監控策略,內存訪問行為的監控時機不同.表4給出了StaticMon和不同最小支持度DynMon的5組數據對比,包括監控策略數量、陷入VMM的頻率和漏報率.StaticMon表示始終對特定的動態區域進行內存訪問監控,DynMon_0.1表示動態監控策略中抽取頻繁時序規則時使用的最小支持度為0.1.監控策略數指的是3.3節中描述的方法自動抽取出來的內存區域的動態監控策略的數目,每秒內存訪問次數指的是特定動態區域的內存訪問截獲導致陷入VMM的次數,漏報率指的是該安全關鍵數據訪問沒有被監控到的次數和實際被訪問的次數比.

Table 4 Comparison of StaticMon and DynMon表4 StaticMon和DynMon對比

從表4的結果可以看出,對于本文提出的DynMon方法,最小支持度越低,監控的策略數越多,陷入VMM的次數越高,漏報率也越低.這是因為監控的策略數越多,觸發動態內存監控的時機也就越多,導致內存訪問行為被截獲的次數越多,遺漏掉的安全關鍵數據訪問行為越少.結合圖5可以看出,DynMon的最小支持度越小,漏報率越低,但是陷入VMM的頻率越高,系統的性能開銷越大.通過表4和圖5的對比,可以看出安全關鍵數據監控的漏報率和性能開銷是呈負相關的關系,而我們希望漏報率和性能開銷同時低,需要在漏報率和性能開銷之間做出權衡,使得漏報率和性能開銷都可以接受.根據該組數據,我們可以得出對該組實驗中監控的安全關鍵數據,基于支持度為0.1的時序關聯規則挖掘出的動態監控策略比較適合用于安全關鍵數據的訪問監控,在額外性能開銷不大(3.63%)的情況下可以截獲到絕大多數(漏報率為1.95%)的安全關鍵數據訪問行為.

綜合性能和動態安全關鍵數據的訪問行為的監控效率,我們采用支持度為0.1的動態監控策略.當我們采用支持度為0.1的時序關聯規則挖掘出來的動態監控策略時,和StaticMon相比,性能開銷減少了22.23%.對于安全關鍵數據訪問行為的監控漏報率為1.95%.

4.2.2 安全關鍵數據數量和性能的開銷對比

4.2.1節為了和StaticMon對比,防止StaticMon性能開銷過大導致系統崩潰,僅開啟了最新進程的task_struct的訪問行為的監控.本節中我們以32 b系統,最小支持度為0.1挖掘出的監控策略,使用STREAM benchmark為例,對比不同數量的安全關鍵數據被監控時的系統性能開銷.如圖9中所示,DynMon_1,DynMon_10,DynMon_50,DynMon_100分別代表選用1個安全關鍵數據、10個安全關鍵數據、50個安全關鍵數據和100個安全關鍵數據,在該實驗中每個安全關鍵數據都在不同的頁面.根據圖9的結果可以看出,當被監控的安全關鍵數據增多時,系統的性能開銷也在逐漸變大.

Fig. 9 Performance overhead of DynMon with different data sizes圖9 不同數量安全關鍵數據的DynMon性能開銷圖

這是由于這些關鍵數據所在的頁面中的動態數據被訪問陷入VMM導致的開銷,這部分性能開銷和被監控的頁面數量相關.在本組實驗中選用的每個安全關鍵數據在不用的頁面中,即DynMon_100這組實驗中有分散在100個頁面的動態數據訪問都會陷入VMM產生性能開銷.當被監控的安全關鍵數據增多時,DynMon系統的性能開銷也會增加,在監控的安全關鍵數據涉及到100頁面時,額外性能開銷約為20%,仍然沒有StaticMon監控1個頁面的性能開銷大.

本組實驗中還比較了不同監控數據集大小,對應的系統內存實際使用大小.如圖10所示,橫坐標表示被監控的安全關鍵數據的數量,縱坐標表示實際使用的內存大小,單位為MB.當監控的安全關鍵數據集大小發生變化時,系統內存的實際使用大小基本沒有區別.這是由于本文提出的方法并不會將安全關鍵數據重新映射到新的獨立頁面,不增大對系統內存的使用量.

Fig. 10 Used memory of different data sizes圖10 不同數量安全關鍵數據的內存實際使用數量

4.2.3 原型系統中DynMon的性能開銷

在我們的原型系統中,我們使用大家熟知的安全關鍵數據集合作為監控對象{av_decision,cred,dentry,file,inode,kernel_cap_struct,policydb,posix_acl,rlimit,socket,super_block,task_struct,module,thread_info,vfsmount,vm_area_struct},該集合可以根據監控需要進行擴充和調整.我們在32 b被監控系統中,對安全關鍵數據集合所有的安全關鍵域開啟動態監控策略后,使用STREAM benchmark測得的性能開銷如圖11所示:

Fig. 11 Performance overhead of DynMon prototype圖11 DynMon原型系統性能開銷圖

本節中對所有進程的task_struct和其他安全關鍵數據的訪問行為進行監控,監控的內存頁面的總數量根據系統運行狀態改變.如系統中的進程數量在不斷變化,每個進程的task_struct是分散在內核的動態數據空間的,在本組實驗評估性能開銷的過程中我們對監控的task_struct數量進行了統計,在96~102的范圍內變化,所有被監控的安全關鍵數據所占的頁面個數約為120個.在最小支持度為0.1,0.2,0.3,0.4的情況下,關鍵數據監控帶來的平均額外性能開銷分別為20.93%,14.11%,7.74%,0.30%.即當需要監控的安全關鍵數據和頁面大量增多時,額外的系統性能開銷也相應地增加,但是仍在可以接受的范圍內,如果不采用動態監控策略,原型系統中關鍵數據內存訪問監控會因為性能開銷過大導致系統崩潰.

4.2.4 攻擊的檢測效率

DynMon設計的初衷是因為在內核完整性檢測和內存取證等方法[29-30]中,需要通過事件來觸發完整性檢測,關鍵內存訪問事件是完整性檢測中最重要的事件之一,然而由于內存訪問監控的開銷過大,只能在極少量的關鍵數據上使用.為了驗證本文提出的方法使用到完整性檢測中,在內核攻擊檢測中的有效性,我們分別在4種不同的最小支持度下對表2中攻擊進行檢測.根據對表2中的攻擊程序的被攻擊對象分析,可以分為靜態代碼數據和動態數據兩大類,對于靜態代碼和數據特征都是一致的,即這些不允許被修改;對于動態數據,每種動態數據都有自己的特點,表5中列出了2種比較典型的常被攻擊的2種動態數據.對task_struct中的安全關鍵數據和LKM鏈表的攻擊通常都是短暫攻擊,即內核攻擊對其篡改后,為了防止被檢測程序發現立即將數據狀態還原到正常狀態以隱藏攻擊行為,需要通過實時監控和檢測才能檢查到該安全數據被惡意攻擊.對于對靜態代碼和數據的攻擊,我們的監控策略是始終對靜態區域進行寫訪問監控,可以檢測到所有篡改靜態代碼和數據的攻擊.對于動態數據,當截獲到安全關鍵數據的寫訪問時,觸發安全關鍵數據的完整性檢測[29],檢測該數據是否被非法的篡改.

Table 5 Rootkits Detection Against 100 Trials ofRecurring Attacks表5 100次重復實驗檢測到的攻擊數

根據表5的實驗結果我們可以看出,對task_struct中的安全關鍵域攻擊檢測到的概率隨著最小支持度的增大而降低,這是因為挖掘監控策略的最小支持度越大,得到的策略越少,結合表4,內存訪問的截獲次數越少,越容易漏掉一些安全關鍵數據訪問行為的截獲.對于LKM鏈表頭指針的篡改,由于其被更改的模式比較固定,都伴隨著加載模塊和刪除模塊的系統調用,對于不同的支持度得到的監控策略差別不大,在本文的實驗中,對于不同的最小支持度,都可以檢測到所有的LKM鏈表頭指針的篡改攻擊.因此,對于篡改模式多的安全關鍵數據如task_struct,當使用序列關聯規則挖掘的最小支持度較大時,挖掘出的監控策略不足以覆蓋該安全關鍵數據的,需要選擇較小的最小支持度的關聯規則挖掘.對于篡改模式比較單一的安全關鍵數據如LKM,對最小支持度的要求不高,如實驗結果中從0.1到0.4都可以.

4.2.1節中的結果已經可以看出,綜合性能開銷和安全關鍵數據監控的漏報率,使用最小支持度為0.1的序列關聯規則挖掘出的動態監控策略最為合適.在本組實驗中,結合表5的結果可以看出,最小支持度為0.1的序列關聯規則的動態內存監控方法DynMon可以檢測到實驗中靜態數據的攻擊和不同類型的動態數據攻擊.根據圖11所示,監控所需要的開銷也在可以接受的范圍內.

4.3 實驗結論

通過4.2節實驗分析,我們可以看出StaticMon監控安全關鍵數據訪問時,大量的安全關鍵無關數據(99.37%)的內存訪問截獲產生了巨大的性能開銷.為了解決直接監控內存關鍵數據時的性能問題,本文提出的DynMon可以減少不必要的安全無關數據的內存訪問截獲,使得內存訪問監控的性能下降,4.2.1節實驗中1個頁面的內存訪問監控降低了22.23%的性能開銷.不使用動態監控策略的方法StaticMon監控安全關鍵數據內存訪問的性能開銷巨大,不能支持本文原型系統中安全關鍵數據集的內存訪問監控,會直接因為性能開銷巨大導致系統崩潰.本文提出的DynMon可以支持該安全關鍵數據集的內存訪問監控,且額外性能開銷在可以接受的范圍.因此,DynMon可以解決監控內存關鍵數據的訪問行為性能開銷過大的問題,并且從表4中可以看出,可以檢測到大多數安全關鍵數據的訪問行為.最后,將本文提出的安全關鍵數據訪問監控的方法應用到內核完整性檢測系統中,當檢測到安全關鍵數據訪問觸發完整性檢測,可以檢測到實驗中提供的所有內核攻擊.

5 總 結

本文提出了一種基于動態監控策略的安全關鍵數據訪問的監控方法.通過使用時序關聯規則對歷史數據進行學習,自動獲取安全關鍵數據的動態監控策略.根據該監控策略和系統運行狀態,實時調整需要監控的內存區域,從而解決動態內存區域性能開銷大的問題.本文通過在開源虛擬機監控平臺Xen上搭建原型系統,不需要修改被監控系統的源碼和二進制文件,驗證了使用動態內存監控的方法可以檢測到實驗中使用的內核攻擊,并通過性能對比實驗說明了使用動態內存監控的策略可以減低動態區域內存監控的性能開銷.在后續工作中,我們將擴充當前原型系統的安全關鍵數據集合,并自動學習出更多的監控策略來進一步驗證本文提出的方法.考慮利用或者修改硬件特性,在不修改被監控系統的情況下,將安全關鍵數據進行集中式的存儲,以進一步減小動態內存監控的開銷.

猜你喜歡
頁面關鍵系統
大狗熊在睡覺
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
高考考好是關鍵
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
獲勝關鍵
NBA特刊(2014年7期)2014-04-29 00:44:03
生意無大小,關鍵是怎么做?
中國商人(2013年1期)2013-12-04 08:52:52
同一Word文檔 縱橫頁面并存
主站蜘蛛池模板: 国产精品成人免费综合| 精品视频在线观看你懂的一区| 免费中文字幕一级毛片| 日本人妻一区二区三区不卡影院| 国产爽妇精品| 中国精品自拍| 操国产美女| 99色亚洲国产精品11p| 99视频精品全国免费品| 国产丝袜啪啪| 九九久久精品国产av片囯产区| 亚洲乱码在线播放| 亚洲乱码视频| 亚洲无码精彩视频在线观看| 久久亚洲黄色视频| 国产成人啪视频一区二区三区| 中文字幕一区二区视频| 在线精品欧美日韩| 伊伊人成亚洲综合人网7777| 少妇人妻无码首页| 成人无码一区二区三区视频在线观看| 国产欧美网站| AV片亚洲国产男人的天堂| 国产日本欧美在线观看| 亚洲欧洲日韩综合| 经典三级久久| 精品亚洲麻豆1区2区3区| 亚洲国产精品日韩av专区| 伊人精品视频免费在线| 2019国产在线| 夜夜操国产| 四虎亚洲精品| 久久久久久久久亚洲精品| 丁香婷婷综合激情| 亚洲中文字幕97久久精品少妇| 丁香六月激情综合| 亚洲国产无码有码| 一级毛片免费观看不卡视频| 成人在线视频一区| 亚洲成a人片77777在线播放| 91亚洲国产视频| www.99精品视频在线播放| 国产成a人片在线播放| 无遮挡国产高潮视频免费观看| 美女视频黄又黄又免费高清| 色婷婷丁香| 国产精品成人第一区| 亚洲国产系列| 国产成人a毛片在线| 白浆视频在线观看| 国产福利拍拍拍| 99在线视频免费| 成人午夜天| 中文字幕丝袜一区二区| 91蜜芽尤物福利在线观看| 亚洲日韩精品无码专区97| 99精品欧美一区| 成人精品区| 精品久久国产综合精麻豆| 欧美在线综合视频| 国产菊爆视频在线观看| 激情六月丁香婷婷| 玩两个丰满老熟女久久网| 婷婷五月在线视频| 亚洲AV无码精品无码久久蜜桃| 亚洲国产欧美国产综合久久 | 亚洲日韩久久综合中文字幕| 手机看片1024久久精品你懂的| av一区二区无码在线| 男女男免费视频网站国产| 国产精品亚洲va在线观看 | 国产在线拍偷自揄观看视频网站| 国产精品一区在线观看你懂的| 国产高清毛片| 一级毛片无毒不卡直接观看| 91亚洲视频下载| 国产在线观看人成激情视频| 久久伊人操| 国产精品漂亮美女在线观看| 国产麻豆aⅴ精品无码| 亚洲毛片一级带毛片基地| 91精品国产麻豆国产自产在线|