陳興蜀 陳佳昕 金 鑫 葛 龍
1(四川大學網絡空間安全學院 成都 610065)2(四川大學計算機學院 成都 610065)(chenxsh@scu.edu.cn)
隨著云計算技術的快速發展,云平臺的安全性也受到了業界的廣泛關注.虛擬化技術作為云計算的關鍵支撐技術,引入了虛擬機監視器(virtual machine monitor,VMM)用以管理云平臺上的虛擬機.在虛擬化平臺廣泛應用的同時,虛擬機卻能成為黑客的攻擊對象,威脅云平臺的安全,故針對虛擬機中的進程進行安全監控與異常檢測,維護云平臺可用性與虛擬機數據安全性顯得尤為重要.
現有的虛擬機安全監控方案主要分為2類.第1類方案[1-2]借鑒傳統主機在系統中添加安全服務的方式,通過在虛擬機中添加監視代理監控其異常行為,但缺點在于云計算環境下不同虛擬機系統之間版本差異較大,安全代理可移植性差,對虛擬機自身不具有透明性,易受到攻擊,而且在閉源的Windows操作系統虛擬機中也往往難以實施[3].第2類方案[4]采用無代理監控方式,在虛擬機外部對虛擬機進行監控,對虛擬機系統影響較小,且減小了因為添加監控代理服務而引入的額外攻擊面.
文獻[5]首次提出了一種基于系統調用的檢測程序異常行為的方法,通過計算程序運行過程中產生的系統調用序列偏離正常程序序列的程度來確定其是否受到入侵,在現有基于系統調用的異常檢測研究中,大多針對主機內的特權進程進行異常行為檢測;文獻[6]利用系統調用與函數返回地址鏈作為檢測數據源,提出了一種基于隱Markov模型的入侵檢測方法,用于區分正常與異常進程行為;文獻[7]針對下一代攻擊威脅(next generation of attacks,NGA)難以和正常進程行為區分的問題,提出了一種半監督的學習算法,能有效分類異常進程系統調用;文獻[8]引入了最小熵長度來描述進程系統調用的用戶行為不變性,并結合程序行為不變性,提出了一種進程異常行為檢測方法;文獻[9]提出了一種上下文無關文法(context-free grammar,CFG)來分析目標進程的系統調用語義,并利用極限學習機(extreme learning machine,ELM)決策目標進程是否為異常進程.上述均為在主機環境下的進程異常行為檢測方案,與主機環境不同的是,云計算環境下的虛擬機不僅存在著傳統單臺主機中的安全風險,還存在諸如虛擬機逃逸攻擊[10]的等復雜的安全威脅,僅僅依賴傳統主機對特權進程的檢測方案,將傳統主機入侵檢測策略應用于虛擬化平臺,往往無法保證檢測的全面性;在云計算環境下,文獻[11]采用C4.5決策樹算法,依賴于虛擬機中的代理程序采集到的數據進行分析并檢測,取得了良好的檢測效果,但忽略了代理程序自身的安全性和待測數據的有效性;文獻[12]提出了一種“Key-Value Pair”算法,分別用于存儲進程運行產生的所有系統調用與其后續系統調用序列,但在進程長時間運行下,需要使用極大的存儲空間,檢測效率不高;文獻[13]關注于虛擬機進程運行產生系統調用的頻率性,但忽略了對時序性的研究,存在著攻擊者偽造正常進程系統調用頻率發起惡意攻擊的情況.
本文針對上述提到的主機入侵檢測方案不適用于云計算環境的問題,以及現階段云計算環境下入侵檢測方案的不足,提出了一種無代理監控方式的虛擬機進程行為檢測方法,其旨在檢測虛擬機中可能存在的異常進程,發現云平臺上存在的攻擊行為.本文的主要貢獻有4個方面:
1)針對在主機安全問題的研究中,多數研究往往將進程系統調用時序性與頻率性相互獨立[14],在云計算環境中難以細粒度描述虛擬機中存在的潛在攻擊問題.本文提出了一種向量空間方法來同時表征虛擬機系統調用的時序特性與頻率特性,并結合平均余弦相似度計算方式提出了一種基于向量空間的系統調用短序列相似度計算方法,能更為準確地衡量序列的匹配程度;
2)引入了文本分類中詞頻率-逆文本頻率(term frequency-inverse document frequency,TF-IDF)[15]算法的思想,為目標虛擬機中所有進程的系統調用進行加權,用于區分租戶虛擬機中運行的不同服務,并以所有進程作為檢測對象,降低了主機環境下僅對單一特權進程行為進行檢測的誤報率;
3)設計了行格式存儲法(compressed sparse row,CSR)稀疏矩陣與KD樹(k-dimension tree)結合的存儲策略,優化了基于向量空間方式下的行為模型存儲方式,并采用多線程方式并發處理多個待測進程,提高了檢測算法的效率;
4)在KVM(kernel-based virtual machine)虛擬化平臺上設計并實現了VMPBD(virtual machine process behavior detecting)原型系統,并利用Linux和Windows兩種操作系統環境下的正常程序樣本和惡意程序樣本對原型系統的功能有效性進行了測試.實驗結果表明,VMPBD能有效檢測出虛擬機中可能存在的惡意進程,且性能損耗在可接受范圍內.
圖1給出了VMPBD原型系統的總體架構.VMPBD系統修改了原生KVM源代碼,添加了虛擬機進程語義重構功能和虛擬機進程系統調用捕獲功能.在VMPBD系統既定的監控策略下(包括進程調度事件與系統調用事件),虛擬機進程運行過程中將會觸發監控事件導致虛擬機退出(VM Exit),并被VMPBD系統的KVM內核模塊捕獲.

Fig.1 Architecture of VMPBD圖1 VMPBD系統總體架構
圖1中語義重構模塊監控虛擬機進程調度事件,在VMM中獲取虛擬機進程底層語義,采用無代理方式重構虛擬機進程高級語義信息,并分別以進程頁目錄基地址與進程語義信息作為鍵值,存入由KVM動態維護的Hash表,實時更新Hash表項.捕獲模塊監控虛擬機進程系統調用事件,在VMM中實時采集虛擬機系統調用數據,并根據當前進程頁目錄基地址索引Hash表,匹配對應的虛擬機進程,將數據保存到數據日志文件當中.在VMPBD系統的檢測模型中,建模模塊根據已有訓練數據構建特征模式庫,檢測模塊將采集到的待測數據樣本與特征模式庫進行規則匹配,并將檢測結果輸出到檢測日志文件.
為了在VMM中重構目標虛擬機內部進程語義信息,需要獲取虛擬機進程的底層語義數據.在現代操作系統中,系統內運行的進程分時復用CPU時間片,在自身被分配的CPU時間片耗盡時,進程交還CPU控制權,操作系統內核調度新進程運行.VMPBD采用在VMM中監控虛擬機內進程切換的方式重構進程語義信息.在VMM中監控虛擬機退出事件,過濾出虛擬機內由于進程切換產生的退出事件,并獲取虛擬機進程底層語義數據.
本文以32 b Linux操作系統與32 b Windows 7操作系統的虛擬機為例,簡要說明進程語義重構過程.Linux操作系統中,內核為每個進程分配了一塊獨立的8 KB大小的內存區域,用于存放進程內核棧與進程thread_info結構體.結構如圖2所示,根據thread_info結構體首地址指向進程task_struct結構體指針的特性,在虛擬機進程切換事件發生退出到VMM中時,讀取虛擬機棧指針esp計算得到進程thread_info結構體地址,并進一步可以獲取到當前進程task_struct結構體的首地址,重構出Linux虛擬機進程語義.

Fig.4 Acquisition of virtual machine process system call圖4 虛擬機進程系統調用獲取

Fig.2 Schematic of semantic reconstruction of Linux process圖2 Linux進程語義重構示意圖
Windows 7操作系統中,當進程運行于Ring 0時,FS(flag segment)段寄存器存儲的內存地址經過轉換后指向處理器控制區域(kernel processor control region,KPCR),通過KPCR獲取當前線程指針,進而重構出線程所屬的進程語義.示意圖如圖3所示:

Fig.3 Schematic of semantic reconstruction of Windows 7 process圖3 Windows 7進程語義重構示意圖
為兼顧虛擬化平臺上不同操作系統版本的需求,VMPBD采用無代理方式在VMM中動態捕獲虛擬機進程運行過程中產生的系統調用,以分析進程運行過程中的行為.在Intel x86 Pentium Ⅱ及其之后更新的處理器中,Intel提供了專門針對快速系統調用功能的指令(SYSENTER/SYSEXIT).在支持快速系統調用服務的操作系統中,進程在運行過程中執行系統調用與一組特定的MSR(model specific register)寄存器相關聯.其中寄存器SYSENTER_EIP_MSR指向系統調用入口函數地址,寄存器eax保存系統調用服務號.由于上述設定與硬件相關,故本文在VMM中通過無代理方式獲取虛擬機進程系統調用具有通用性,不依賴特定操作系統版本,原理如圖4所示:
在VMM中透明地設置虛擬機SYSENTER_EIP_MSR寄存器指向非法地址,使得虛擬機中進程在發生系統調用時由于缺頁異常導致虛擬機退出,從而被VMM捕獲.在VMM處理虛擬機缺頁異常的流程中獲取虛擬機進程系統調用數據,并將指令寄存器eip指向虛擬機正常的系統調用入口地址,重新恢復虛擬機運行.捕獲模塊將系統調用數據與當前虛擬機進程信息合并,將結果保存在虛擬機數據日志文件中.
虛擬機數據日志文件中保存了所有進程運行過程中產生的系統調用數據,一個進程所有系統調用的有序排列構成了該進程的系統調用序列(system call sequence).VMPBD系統的進程異常行為檢測模型根據已有的訓練數據構建特征模式庫,檢測過程讀入待測的虛擬機數據日志文件,匹配特征模式庫,并將結果輸出到檢測日志文件中.
2.3.1 構造系統調用短序列向量空間
TF-IDF[15]算法利用文檔中出現頻率高而在其他文檔中很少出現的詞語進行統計和分類.本文把虛擬機進程作為一個檢測單元,正常進程與異常進程的運行行為是不相同的,可以用系統調用序列來表征這個行為,而異常進程存在著時序性或頻率性與正常進程差異較大的系統調用序列,從而以此作為分類算法的特征.
給定采集到的L長度的進程系統調用序列:
SEQ=〈s1,s2,…,sL〉
(1)

定義1.系統調用權值系數.在已收集的虛擬機進程系統調用序列訓練集合Q中,包含了若干進程在運行過程產生的系統調用序列.引入IDF逆向文件頻率概念,系統調用si在集合Q中的權值系數:

(2)
其中,N為訓練集合Q中的進程總數,Nsi是訓練集合Q中出現系統調用si的進程數.對于不存在于特征庫中的待測系統調用,其權值系數被賦予一個極大值,用于區分正常系統調用行為,本文中為lb 1 000.
定義2.系統調用頻率向量.引入TF詞頻概念,對于測試集合中的任意進程P,計算系統調用頻率向量:
F=(fre1,fre2,…,fren),
(3)
其中,frei是系統調用si在所屬進程P的訓練數據中出現的頻率.
定義3.系統調用進程行為權值.根據本文檢測模型定義的系統調用權值系數Weight和系統調用頻率向量F,定義每個系統調用si在測試集合中的進程行為權值:
Wsi=Weighti×frei.
(4)
定義4.系統調用短序列矩陣.對每個進程的系統調用序列,采用滑動窗口技術分割為若干定長為M的系統調用短序列.對于任意系統調用短序列seq=〈s1,s2,…,sM〉,可以用矩陣表示:

(5)
其中,在Vseq中v1,s1=1,v2,s2=1,…,vj,sj=1,…,vM,sM=1,其他均為0.將矩陣Vseq轉化為1維行向量,構造系統調用短序列向量空間.對于所有互異的系統調用短序列,都可由一個系統調用短序列向量組唯一表示.
定義5.系統調用短序列向量組.對虛擬機進程在運行過程中產生的系統調用序列,任意系統調用短序列seq=〈s1,s2,…,sM〉 可表示為向量組:

(6)
2.3.2 建立基于KD樹和稀疏矩陣的檢測模型
本文所構造的系統調用短序列向量空間維度較大,建立進程特征模式庫需要占用大量的磁盤空間,且在檢測過程中提取特征進行計算也增加了額外的檢測時間.
為解決此問題,本文引入了CSR稀疏矩陣存儲每個系統調用短序列向量組,降低了特征模式庫存儲的空間復雜度.為了進一步提高模型檢測速率,本文采用了KD樹結構建立進程特征模式庫,索引待測進程在特征模式庫中的KD樹,并完成特征匹配,檢測所需時間開銷相較于逐一匹配特征庫的方式有明顯節省.過程如圖5所示.

Fig.5 Schematic of feature matching based on KD tree圖5 基于KD樹的特征匹配示意圖
2.3.3 檢測算法
對于數據日志文件中的待測進程,定義其在特征模式庫中的任意系統調用短序列NSeq=〈ns1,ns2,…,nsM〉,對應系統調用短序列向量組為N,待測的任意系統調用短序列TSeq=〈ts1,ts2,…,tsM〉,對應系統調用短序列向量組為T.
為了減小2個具有公共序列的系統調用短序列之間的相似度計算偏差,定義系統調用短序列向量空間二進制相似度:
(7)
為了表征向量組N與向量組T的時序特性和頻率特性,定義系統調用短序列向量空間余弦相似度:

(8)
定義系統調用短序列向量空間相似度:
Sim(N,T)=μ(N,T)×ω(N,T),
(9)
定義系統調用短序列向量空間差異系數:
Dif(N,T)=1-Sim(N,T).
(10)
在模型檢測過程中,采用多線程方式對每個待測進程產生的系統調用短序列分別計算與特征模式庫中系統調用短序列相似度,并以返回的最大相似度作為待測短序列的行為權重,生成進程行為軌跡.根據多次實驗測試結果,設定行為權重閾值為ε,對連續3M長度小于閾值ε的短序列進行告警.檢測算法如下:
算法1.異常行為檢測算法.
輸入:檢測模型與待測數據集;
輸出:檢出的異常序列.
① While (待測數據集中仍有未判斷的seq)
② If (T=N)
③seq判定為正常
④ Else
⑤ 初始化maxSim
⑥ While (KDTree仍未遍歷完)
⑦ 計算Sim(N,T),Dif(N,T);
⑧ 更新maxSim為值更大的Sim(N,T);
⑨ If (當前kdnode為葉節點)
⑩ 在Dif(N,T)范圍內遍歷KDTree;
/*遍歷結束返回最鄰近節點*/
本文基于KVM虛擬化平臺實現并部署了VMPBD原型系統,并對系統的功能有效性和性能進行了測試.其中系統的功能測試主要是針對本文提出的虛擬機進程異常行為檢測模型進行了檢測率和誤報率測試.測試樣例分別為Linux操作系統與Windows操作系統環境下的進程系統調用數據.
為驗證本文檢測模型的功能有效性,并與現階段研究現狀進行對比,針對Linux環境下的測試用例,本文測試了來自于美國新墨西哥大學的數據集[16],該數據集多次被用作入侵檢測領域實驗測試數據集,數據量豐富,具有一定的權威性.本文將其與實時獲取的Linux虛擬機進程系統調用數據結合,構建了云計算環境的測試數據集.Windows環境下的測試用例,本文利用Windows 7操作系統虛擬機實時采集得到,其中惡意攻擊樣本包含WannaCry蠕蟲病毒、Petya勒索病毒、熊貓燒香蠕蟲病毒以及模擬測試攻擊.
Forrest研究結果表明[5],進程在運行過程中產生的正常系統調用序列與異常系統調用序列具有明顯差異,本文提出的基于系統調用向量空間的檢測方案能夠有效區分正常進程行為與異常進程行為.表1中給出了定長M分別采用3,6,10時的系統調用短序列向量空間的平均相似度,相似度越接近于1越與正常訓練樣本相似.

Table 1 The Similarity of Process System Call表1 進程系統調用相似度
表1中xlock與lpr為Linux操作系統環境下的進程,svchost.exe與System為Windows操作系統環境下的進程.從表1可以看出,本文檢測模型能夠在一定程度上區分正常進程與異常進程行為.svchost.exe與System進程為Windows操作系統中提供重要系統服務,其進程行為復雜,在實時采集過程中無法囊括所有行為軌跡,故待測進程在訓練集中依然存在部分相似度較低的情況,但與異常行為相比,仍能有效區分.
在不同長度的系統調用短序列情況下,向量空間相似度存在差異,主要表現為:長度越小相似度越高.原因在于,構建特征模式庫時,采用越小長度的滑動窗口劃分系統調用短序列,產生互異系統調用短序列的個數越少,在檢測過程中進行特征匹配時匹配數越多,所以相似度越高.實驗結果也滿足Forrest實驗的理論描述[5].
本文檢測模型在將檢測結果輸出到虛擬機檢測日志文件的同時,也將記錄進程的行為軌跡并將結果可視化,以進一步分析進程行為特征并驗證與檢測結果的一致性.圖6和圖7給出了Linux系統下的xlock與lpr 2組進程行為的可視化結果.

Fig.6 The trace of xlock process behavior圖6 xlock進程行為軌跡

Fig.7 The trace of lpr process behavior圖7 lpr進程行為軌跡
從圖6與圖7的結果可以看出,正常進程所表現的系統調用向量空間相似度相較于異常進程更接近于特征庫中的正常樣本,系統調用向量空間的相似度接近于1.而異常進程除部分在入侵發生前產生的正常行為軌跡,大量數據均與特征模式庫匹配度不高,系統調用向量空間相似度分布在0~0.5,離散性明顯.
本節針對Linux與Windows環境下的測試用例進行測試,并給出詳細測試結果.
1)Linux系統環境下功能測試.本文與文獻[9,11-12,17-18]采用統一的評價標準,使用真正率(true positive rate,TPR)來評價模型的檢測率,使用假正率(false positive rate,FPR)來評價模型的誤報率.其中TPR為檢出的異常進程占比,FPR為正常進程被誤檢為異常進程的占比.表2給出了VMPBD檢測模型的測試結果以及與其他模型的對比.從表2可以看出,本文模型都略優于表2中各檢測模型,原因在于VMPBD檢測模型依賴于所有進程運行產生的系統調用數據,不同進程的系統調用被計算了不同的權值,這對于單個異常進程而言,具有較好的區分度.其中與主機環境下的入侵檢測模型比較,在相同檢測率區間內,VMPBD檢測模型的誤報率都略優于文獻[16-17],而文獻[18]檢測率存在優于VMPBD檢測模型的情況,但在相同檢測率時誤報率仍遜于本文方法.與云計算環境下的入侵檢測模型比較,文獻[12]盡管沒有產生誤報,但其檢測率區間較大,VMPBD檢測模型在誤報率增大的同時,檢測率未出現陡增的現象,檢測性能優于該方法.
2)Windows系統環境下功能測試.根據實時采集得到的Windows 7操作系統下的虛擬機進程產生的系統調用序列,建立特征模式庫.觸發部署在虛擬機中的惡意樣本,采集數據并完成檢測.表3為實驗測試結果.

Table 2 The Detection of Linux Process and Result Comparing表2 Linux系統進程檢測與結果比較

Table 3 The Detecting Result of Windows 7 Processes表3 Windows 7系統進程檢測結果
Notes:mesecsvc is the propagation process of WannaCry,taskche is the file encryption process of WannaCry,Petyavirus is the virus of Petya and the PandaSetup is the virus of Panda Burning Incense.

Fig.8 The result of performance from UnixBench圖8 UnixBench性能測試結果
實驗結果表明:對于Windows 7環境下的虛擬機進程異常行為,VMPBD檢測模型能進行有效檢測.
在部署與未部署VMPBD原型系統的環境下,本文采用UnixBench微基準測試工具與魯大師分別針對Linux虛擬機與Windows虛擬機運行引入的額外性能損耗進行測試.測試結果如圖8、圖9所示.

Fig.9 The result of performance from Ludashi圖9 魯大師性能測試結果
測試結果看出,Linux系統下性能影響主要在文件傳輸(file copy)、進程創建與切換(pipe-based context switching,process creation)、Shell腳本測試(shell scripts)以及系統調用測試(system call overhead)方面,與Windows系統測試結果類似,多為CPU處理進程調度與運行帶來的開銷.VMPBD原型系統的引入會給虛擬機進程上下文切換造成一定的性能開銷,其主要原因在于VMPBD系統采用無代理監控方式,需要實時獲取虛擬機進程與系統調用信息,但考慮無代理監控方式并未給虛擬機引入額外的安全風險,保證了虛擬機操作系統的透明性,系統所帶來的性能損耗可以接受.
對測試1(VMPBD原型系統)與測試2(不采用稀疏矩陣與KD樹方式)建模方式的檢測時間與存儲空間進行比對,可以看出VMPBD系統在檢測性能上有明顯提高,結果如表4所示:

Table 4 The Comparing Result of Storage Space and Detection Time表4 存儲空間與檢測時間對比結果
本文提出了一種基于進程系統調用向量空間的異常檢測方法,并針對傳統主機環境下的檢測方法難以適用于云計算環境的問題,引入了TF-IDF統計方法思想,構建了云計算環境下的進程異常行為檢測模型.采用了無代理方式,針對Linux與Windows操作系統重構進程語義信息,并利用已有數據集與實時采集數據對檢測模型的有效性進行了測試.最后在KVM虛擬化平臺上設計并實現了VMPBD原型系統,評測了原型系統的有效性與性能.測試結果表明,VMPBD具有良好的檢測性能.后續工作將考慮針對原型系統性能進行改進,并用于云計算環境下的虛擬機逃逸攻擊檢測中.