本發(fā)明涉及IaaS云計算領域,特別涉及一種IaaS云環(huán)境下輕量級虛擬機內部進程追蹤系統(tǒng)和方法。
背景技術:IaaS云計算是一種將計算機基礎設施資源通過互聯(lián)網為用戶提供服務的新型計算模式和商業(yè)模式。虛擬化作為支撐IaaS云模式的關鍵技術,通過對CPU、內存、硬盤存儲器等硬件的聚合和再分配,構建一個物理上異地分布、邏輯上單一呈現(xiàn)、功能上彈性伸縮的云環(huán)境,以虛擬機的形式響應用戶的業(yè)務需求。云計算降低了資源使用者和資源實體之間的耦合程度,便于維護和管理,可以降低基礎設施的運營成本,受到學術界和產業(yè)界的廣泛關注,并且在許多行業(yè)得到應用和推廣。IaaS云計算整合了大量計算機資源,為用戶提供了資源無限利用的可能性。但是,資源規(guī)模的增大也產生了兩個問題,即資源合理利用和資源安全利用的問題。首先,大規(guī)模資源如果不能合理分配和管理必然導致云提供商經濟效益降低。目前,大多數數據中心的資源分配都是靜態(tài)的,在申請時預先配置一定數量的設備,容易造成過度配置資源和過低配置資源兩種極端情況。要實現(xiàn)資源優(yōu)化,必須能夠監(jiān)視和預測用戶資源的實時動態(tài)變化,根據負載的輕重程度追加或釋放相關資源以達到提高資源使用效率和提高服務質量并降低成本的目標。業(yè)界現(xiàn)已提供的監(jiān)視工具都是虛擬機系統(tǒng)級別的,這些工具的檢測、管理粒度太大,不能確切地反映虛擬機的行為,只有進行細粒度進程級別的監(jiān)視,才能準確把握操作系統(tǒng)的具體行為,進而判斷虛擬機正在執(zhí)行和將要執(zhí)行的作業(yè),正在消費和將要消費的資源,為資源優(yōu)化提供量化的判斷依據。其次,資源安全利用是云計算能否推廣和普及的根本。那些規(guī)模龐大的基礎設施除了被用于合法業(yè)務外,還同樣可能為非法需求提供計算的可能性。例如,2011年4月侵入索尼PlayStation游戲網絡的黑客使用了亞馬遜彈性計算云來破解一些加密密鑰,從而竊取了數萬用戶的信用卡信息。云計算系統(tǒng)使有關部門和企業(yè)難于追查數字犯罪,一個主要原因是由于使用虛擬化技術導致的。用戶租用的虛擬機可能實際上分布在云提供商數據中心內十幾個甚至更多實體內存和實體硬盤驅動器上。假如一臺虛擬機被關閉,它占用的存儲空間很快就會被回收,犯罪信息就被隨后的合法用戶數據抹去,對數字犯罪的追蹤也無從進行。因此,迫切需要一套虛擬機實時安全監(jiān)視的解決方案,為IaaS云環(huán)境下虛擬機安全問題提供理論與方法支持。IaaS模式下關于虛擬機監(jiān)視的技術和系統(tǒng),主要集中在兩個方面,即從虛擬機內部或外部進行檢測。內部檢測工具運行在被監(jiān)視系統(tǒng)的內部,能夠直接獲取內核結構、進程、系統(tǒng)調用等高級語義信息,擁有高可見性,便于分析資源使用情況或判斷安全狀況。缺點是不僅會加重虛擬機運行負荷,還會由于因系統(tǒng)被攻擊導致內部監(jiān)控工具會暴露在攻擊者的控制之下,獲取不到系統(tǒng)的任何信息,甚至根本無法啟動任何監(jiān)控程序,不能發(fā)揮正常的監(jiān)視功能。外部檢測工具運行在特權虛擬機或虛擬化平臺上。現(xiàn)有技術中,有針對虛擬機進程識別的方法。2007年,中國專利200710118186.0公開了一種虛擬機監(jiān)視器識別客戶操作系統(tǒng)中進程的方法和裝置,它通過在進程切換時,由虛擬機監(jiān)視器記錄待運行進程頁表信息和當前運行進程的標識信息來識別進程。該方法在實現(xiàn)過程中需要記錄待運行進程和當前運行進程的上下文信息,如果面向云計算環(huán)境下數量龐大的用戶和頻繁的多任務作業(yè)時,這一方法會產生巨大的系統(tǒng)消耗,從而影響云平臺的整體性能。2008年,中國專利200910237996.7提供了一種通過虛擬機運行中應用程序的同步感知對虛擬機進行分類的技術,其中同步感知的方法也可以用于進程識別。但是,該方法在虛擬機進程識別時,需要反復解析每臺虛擬機內核中的task_struct結構來獲取進程信息,實時操作性差;而且這一方法在多用戶多任務IaaS客戶機時,重復解析task_struct結構會加重云平臺的整體負荷。目前現(xiàn)有技術中,從虛擬機外部進行進程追蹤的技術,功能上都可以識別運行中進程信息,但都需要實時解析不同操作系統(tǒng)內核數據結構,因此進程追蹤不僅系統(tǒng)開銷都很大,而且可移植性也不強。如果將這些技術用在IaaS云環(huán)境下的虛擬機監(jiān)視,不僅要面對成千上萬的虛擬客戶機實例,還必須考慮不同類型不同版本的虛擬機操作系統(tǒng)內核結構,頻繁進行在線實時內核解析將成為一項繁重而耗時的工作,必然會影響云平臺的整體運行性能。因此這些技術都不易被接受和推廣。
技術實現(xiàn)要素:本發(fā)明正是針對現(xiàn)有技術的不足,提供一種IaaS云環(huán)境下輕量級虛擬機內部進程追蹤的系統(tǒng)和方法。本發(fā)明是這樣實現(xiàn)的,基于IaaS云環(huán)境下輕量級虛擬機進程追蹤系統(tǒng),包括進程監(jiān)視終端、虛擬化平臺和進程追蹤器,所述進程監(jiān)視終端通過有線或無線和云平臺連接,其中,所述進程監(jiān)視終端,包括通信模塊和進程顯示模塊;所述進程追蹤器,包括進程追蹤器前端和進程追蹤器后端,功能上相互依存,實現(xiàn)上相互獨立;所述進程追蹤器前端,嵌入到虛擬化平臺內部,包括進程物理內存定位模塊和進程高級語義視圖構建模塊;所述進程追蹤器后端,包括進程信息靜態(tài)獲取模塊和進程信息靜態(tài)庫;所述進程物理內存定位模塊,用于在進程追蹤任務啟動之后,通過客戶虛擬機的內核棧指針,定位當前進程控制塊在所述客戶虛擬機所依托宿主實體機的物理內存地址;所述進程高級語義視圖構建模塊,用于根據所述進程物理內存定位模塊獲得的實體機物理內存地址,參照所述進程追蹤器后端的進程信息靜態(tài)庫,解析物理內存,構建進程高級語義視圖,還原所述客戶虛擬機內部進程的語義內容;所述進程信息靜態(tài)獲取模塊,用于在所述進程追蹤器前端啟動之前執(zhí)行并完成,解析客戶虛擬機使用的操作系統(tǒng)的內核數據結構和進程控制塊PCB,獲取描述進程的具體信息,并生成進程信息靜態(tài)庫,提供進程信息訪問接口,所述描述進程的具體信息包括進程表示符、處理器狀態(tài)、進程調度、進程控制;所述進程信息靜態(tài)庫,用于接收來自所述進程追蹤器前端傳遞的進程語義信息調用請求,并將請求處理結果(即進程特定信息)向所述進程追蹤器前端回復;所述通信模塊,用于向所述進程追蹤器前端發(fā)出啟動、掛起和停止的請求;接收所述進程追蹤器前端返回的進程高級語義視圖信息;所述進程顯示模塊,用于顯示所述進程追蹤器前端返回的進程高級語義視圖信息。作為上述方案的進一步改進,所述進程追蹤器后端所在的操作系統(tǒng)為Windows或者Linux。作為上述方案的進一步改進,所述進程監(jiān)視終端還包括進程分析模塊,用于分析進程對云平臺整體以及客戶機本身運行帶來的影響。本發(fā)明還提供上述IaaS云環(huán)境下輕量級虛擬機進程追蹤系統(tǒng)的追蹤方法,所述追蹤方法包括進程監(jiān)終端追蹤IaaS云平臺上客戶虛擬機操作系統(tǒng)中任務所對應的進程的步驟:步驟101,啟動進程追蹤器的進程追蹤器后端,針對客戶虛擬機被采用的操作系統(tǒng),解析所述操作系統(tǒng)的內核數據結構及進程控制塊,生成描述進程信息的訪問函數,構建進程信息靜態(tài)庫,該描述進程信息的訪問函數包括進程描述信息調用接口、系統(tǒng)變量訪問接口、系統(tǒng)調用和中斷訪問接口;步驟102,通過進程監(jiān)視終端提交進程追蹤請求;步驟103,嵌入虛擬化平臺內部的進程追蹤器前端接到請求,啟動追蹤任務,掃描IaaS云平臺上所有的客戶虛擬機;步驟104,進程追蹤器前端的進程物理內存定位模塊通過客戶虛擬機CPU的控制寄存器,獲取當前客戶虛擬機操作系統(tǒng)的內核堆棧指針ESP;進而定位當前客戶虛擬機當前進程的進程控制塊PCB的客戶虛擬機的虛擬地址GVA;步驟105,根據通過虛擬化平臺的影子頁表將客戶機虛擬機的虛擬地址GVA轉化為宿主機物理地址HPA;步驟106,函數API實時調用進程追蹤器后端進程信息靜態(tài)庫中的數據,進程追蹤器前端進程高級語義視圖構建模塊開始解析HPA,將HPA對應的硬件字節(jié)信息還原為客戶虛擬機內部進程描述信息,該解析過程需要遍歷進程控制塊鏈表和進程樹,將進程控制塊PCB所對應的HPA傳遞給進程追蹤器后端預先生成的進程信息靜態(tài)庫,獲取當前進程所對應的進程號、進程名稱;步驟107,搜索當前客戶虛擬機的相鄰的進程節(jié)點,判斷是否存在相鄰進程節(jié)點,若存在,進入步驟104;若不存在,進入步驟108;解析一臺虛擬機的正在運行和待運行的所有進程信息;步驟108,搜索IaaS云平臺上的其他客戶虛擬機,判斷是否存其他客戶虛擬機,進入步驟104;若不存在,進入步驟109,解析IaaS云平臺上的所有虛擬機的正在運行和待運行進程信息;步驟109,進程追蹤器前端根據進程監(jiān)視終端的請求,將解析結果傳遞到進程監(jiān)視終端,供進程監(jiān)視終端分析或顯示用。本發(fā)明相較于現(xiàn)有技術具有下列突出的優(yōu)點和效果:本發(fā)明一種IaaS云環(huán)境下輕量級虛擬機內部進程追蹤系統(tǒng),將解析物理內存頁和解析操作系統(tǒng)內核分開,進程追蹤器分為進程追蹤器前端和進程追蹤器后端,進程追蹤器后端用于預處理解析操作系統(tǒng)內核數據結構,進程追蹤器前端用于實時解析宿主機物理內存,通過調用由進程追蹤器后端生成的進程信息靜態(tài)庫,動態(tài)構建進程高級語義視圖,進程追蹤器前端在解析物理內存時,無需在線解析操作系統(tǒng)內核,處理效率高,系統(tǒng)負荷小,是一種輕量級的追蹤系統(tǒng)。本發(fā)明一種IaaS云環(huán)境下輕量級虛擬機內部進程追蹤系統(tǒng)是一種細粒度的進程追蹤系統(tǒng),為IaaS云平臺更準確的監(jiān)控提供了可能。業(yè)界現(xiàn)已提供的成熟工具主要是虛擬機系統(tǒng)級別的,粒度大以至于不能夠及時根據虛擬機的行為來采取補償性甚至預測性的動作,如Xen、KVM、VMware只能監(jiān)測到虛擬機操作系統(tǒng)類型、版本、運行狀態(tài)機對應物理資源的信息,而不能提供虛擬機內部的任何信息。因此迫切需要一套細粒度,如模塊、進程級別的虛擬機運維系統(tǒng)及工具。本發(fā)明的一種IaaS云環(huán)境下輕量級虛擬機內部進程追蹤系統(tǒng)是一種從虛擬機外部監(jiān)視虛擬機內部進程的系統(tǒng),進程追蹤模塊嵌入到虛擬化平臺中,在保持對被監(jiān)視虛擬客戶機高可見性的同時,保持著與被監(jiān)控系統(tǒng)很好的隔離度。即使在被監(jiān)控虛擬機被攻擊者成功入侵的情況下,依然能夠免于受到攻擊的影響,保持對虛擬機有效的監(jiān)控。本發(fā)明的一種IaaS云環(huán)境下輕量級虛擬機內部進程追蹤方法是一種進程追蹤模塊化設計方法,進程追蹤器后端預處理模塊可針對任何操作系統(tǒng),如Windows、Linux等,和任何虛擬化平臺,如Xen、KVM、Vmware等,可移植性強,不僅可用于小型虛擬化平臺,也可用于IaaS大型云平臺,如Eucalyptus、OpenStack等架構,特別是用在大型IaaS平臺下,更能體現(xiàn)出本發(fā)明的效果和效率。本發(fā)明的一種IaaS云環(huán)境下輕量級虛擬機內部進程追蹤系統(tǒng),提出”分別編譯、組合鏈接”的實現(xiàn)方式,采用模塊設計方案,在實施時避免了代碼融合帶來的定義沖突,限定了排錯范圍,使得進程追蹤器的可移植性和復用性大大增強。附圖說明圖1為本發(fā)明較佳實施方式提供的IaaS云環(huán)境下輕量級虛擬機內部進程追蹤系統(tǒng)的體系結構框圖。圖2為本發(fā)明進程追蹤器的進程追蹤器前端和進程追蹤器后端實施例示意圖。圖3為本發(fā)明的進程追蹤器的掃描流程圖。具體實施方式為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。如圖1所示的較佳實施方式提供的IaaS云環(huán)境下輕量級虛擬機內部進程追蹤系統(tǒng)的體系結構框圖。所述基于IaaS云環(huán)境下輕量級虛擬機進程追蹤系統(tǒng)包括進程追蹤器、虛擬化平臺3和進程監(jiān)視終端1。虛擬化平臺3對IaaS云平臺物理硬件5的物理內存頁2進行管理,負責對對虛擬機提供硬件資源抽象,分配和管理這些資源,同時為其上運行的虛擬機6的操作系統(tǒng)提供硬件環(huán)境。虛擬化平臺3根據實際需要將IaaS云平臺物理硬件集合成一臺虛擬機6,或分配成多臺虛擬機6,虛擬機6有獨立的系統(tǒng)進程61和至少一個用戶進程62。進程監(jiān)視終端1包括通信模塊13、進程分析模塊12和進程顯示模塊11。進程追蹤器包括進程追蹤器前端42和進程追蹤器后端41,功能上相互依存,實現(xiàn)上相互獨立。進程追蹤器前端42嵌入虛擬化平臺3的內部,利用虛擬化平臺3對硬件和虛擬機的控制實現(xiàn)物理內存定位和解析。進程追蹤器前端42包括進程物理內存定位模塊422和進程高級語義視圖構建模塊421。進程追蹤器后端41位于虛擬化平臺3的外部,架構上獨立于虛擬化平臺3包括進程信息靜態(tài)獲取模塊411和進程信息靜態(tài)庫412。所述進程物理內存定位模塊422用于在進程追蹤任務啟動之后,通過虛擬機6的內核棧指針,定位當前進程控制塊在虛擬機6所依托宿主實體機的物理內存頁地址。進程高級語義視圖構建模塊421用于根據進程物理內存定位模塊獲得的實體機物理內存地址,參照進程追蹤器后端41的進程信息靜態(tài)庫412,解析物理內存,構建進程高級語義視圖,還原虛擬機6內部進程的語義內容。進程信息靜態(tài)獲取模塊411用于在進程追蹤器前端42啟動之前執(zhí)行并完成,解析虛擬機6使用的操作系統(tǒng)的內核數據結構和進程控制塊PCB,獲取進程表示符、處理器狀態(tài)、進程調度、進程控制等描述進程的具體信息,并生成進程信息靜態(tài)庫,提供進程信息訪問接口。進程信息靜態(tài)庫412用于接收和處理來自進程追蹤器前端42傳遞的進程語義信息調用請求,并將進程號、進程狀態(tài)等進程特定信息反饋給進程追蹤器前端42。通信模塊13用于向進程追蹤器前端42發(fā)送啟動、掛起和停止的業(yè)務請求,并接收其實時構建的進程高級語義視圖;進程分析模塊12用于解析進程描述信息,如針對資源優(yōu)化策略和系統(tǒng)安全策略等具體需求,分析進程對云平臺整體以及客戶機本身運行帶來的影響;進程顯示模塊11用于顯示所述進程追蹤器前端42返回的進程高級語義視圖信息,如進程ID、進程名稱、運行狀態(tài)以及進程上下文信息等內容。IaaS云環(huán)境下輕量級虛擬機內部進程追蹤系統(tǒng)實現(xiàn)從虛擬化平臺3外部實時追蹤虛擬化平臺3內部虛擬機6的進程,將進程追蹤器分為進程追蹤器后端41和進程追蹤器前端42,在進程追蹤啟動前,預先構建進程追蹤器后端41進程信息庫靜態(tài)庫412。進程追蹤開始后,在云虛擬化平臺3內部啟動進程追蹤器前端42物理內存定位模塊422監(jiān)視虛擬機6內部事件,將從外部獲得的硬件級字節(jié)信息還原為虛擬機內部的行為和事件特征,快速構建進程高級語義視圖,實時捕獲虛擬機6的進程以及進程之間的關聯(lián)關系。如圖2所示的進程追蹤器的進程追蹤器前端和進程追蹤器后端實施例示意圖。進程追蹤器的進程追蹤器前端包括進程物理內存定位模塊(hpa_location.c)、進程高級語義視圖構建模塊(hpa_analyzer.c)、用來聲明在進程追蹤器前端中要使用到的接口服務函數的一個feedback.h頭文件、Makefile和Xen。Xen源碼沒有引入任何來自操作系統(tǒng)內核源代碼,進程追蹤器前端嵌入虛擬化平臺,完全不影響虛擬化平臺的任何功能。進程追蹤器的進程追蹤器后端,有一個或多個“Feedback_X.c”,如Feedback_Ubuntu.c、Feedback_Debian.c、Feedback_Fedora.c、Feedback_Centos.c、Feedback_Opensuse.c、Feedback_WinXP.c、Feedback_X.c等。根據虛擬機的特定操作系統(tǒng)種類和內核版本來單獨編譯,按需作為進程追蹤器前端的服務容器,數量上按需增減且不影響已有其它進程追蹤器后端模塊的工作,即該方法具有一定程度上的普適性和可擴展性;進程追蹤器前端和進程追蹤器后端的分工明確,進程追蹤器前端模塊只有一個,進程追蹤器后端模塊離線生成且按需增減,該方法保證進程追蹤器輕量性的前提條件。如圖3所示的較佳實施方式提供的IaaS云環(huán)境下輕量級虛擬機的進程追蹤器掃描流程圖。進程追蹤器后端流程必須在執(zhí)行虛擬機掃描前啟動并完成相關操作。進程追蹤器后端開始301-結束305中間包括流程:步驟302,解析客戶虛擬機操作系統(tǒng)內核數據結構;步驟303,獲取進程描述信息;步驟304建立進程信息靜態(tài)庫。生成的進程信息靜態(tài)庫供進程追蹤器前端調用。進程追蹤器前端開始的步驟311-結束的步驟323是進程追蹤器前端接到進程監(jiān)視終端的指令后,開始掃描虛擬機的詳細過程。步驟312-322掃描Iaas云平臺下所有虛擬機;步驟313-317首先定位包含進程詳細信息的進程描述符所對應的物理內存頁;步驟313-321是構建進程高級語義視圖的詳細過程;步驟319通過當前進程節(jié)點task_struct的成員tasks搜索與與其相鄰的進程節(jié)點,獲取其相鄰節(jié)點task_struct的客戶機虛擬地址,以此遍歷所有進程。本實施例展示了虛擬機操作系統(tǒng)為Linux的進程追蹤。追蹤步驟具體如下:1、啟動進程追蹤器后端41的步驟301-305,針對虛擬機6被采用的操作系統(tǒng),解析其內核數據結構及進程控制塊,生成進程描述信息調用接口、系統(tǒng)變量訪問接口、系統(tǒng)調用和中斷訪問接口等描述進程信息的訪問函數,構建進程信息靜態(tài)庫412。2、云管理員通過進程監(jiān)視終端1提交進程追蹤請求;3、嵌入虛擬化平臺3內部的進程追蹤器前端42接到請求,執(zhí)行步驟311,啟動追蹤任務;執(zhí)行步驟312,掃描IaaS云平臺上所有的虛擬機6;4、即執(zhí)行步驟313,讀取目標虛擬機內核堆棧指針ESP,進程追蹤器前端42的進程物理內存定位模塊422通過虛擬機6的CPU的控制寄存器,獲取當前虛擬機操作系統(tǒng)的內核堆棧指針ESP;執(zhí)行步驟314,換算出結構體thread_info的客戶機虛擬地址;執(zhí)行步驟315,定位thread_info的宿主機物理地址。thread_info是位于進程內核棧棧底或棧頂(根據棧的增長方向)的一個結構體,它的成員task指向進程描述符task_struct,進而定位當前虛擬機6的當前進程的進程控制塊PCB的虛擬機6的虛擬地址GVA;5、執(zhí)行步驟316獲取task_struct虛擬機機虛擬地址GVA;執(zhí)行步驟317定位task_struct物理地址,根據通過虛擬化平臺3的影子頁表將虛擬機6的虛擬地址GVA轉化為宿主機物理地址HPA;6、執(zhí)行步驟318,進程追蹤器后端41調用函數API實時調用步驟304進程追蹤器后端41生成的進程信息靜態(tài)庫412中的數據,進程追蹤器前端42的進程高級語義視圖構建模塊421開始解析HPA,將HPA對應的硬件字節(jié)信息還原為虛擬機6內部進程描述信息,該解析過程需要遍歷進程控制塊鏈表和進程樹,將進程控制塊PCB所對應的HPA傳遞給進程追蹤器后端41預先生成的進程信息靜態(tài)庫412,獲取當前進程所對應的進程號、進程名稱等;7、執(zhí)行步驟319,通過成員tasks搜索相進程節(jié)點,執(zhí)行步驟320,獲取相進程節(jié)點task_struct的虛擬機6地址;執(zhí)行步驟321,判斷是否完成所有節(jié)點搜素;若完成,執(zhí)行步驟322;若未完成,返回步驟317;解析一臺虛擬機的正在運行和待運行的所有進程信息;8、搜索IaaS云平臺上的其他虛擬機,執(zhí)行步驟322,判斷是否完成所有虛擬機掃描,若完成,進入步驟9;若未完成,返回步驟317,解析IaaS云平臺上的所有客戶虛擬機的正在運行和待運行進程信息;9、當步驟322判斷完成所有虛擬機掃描時,進程追蹤器前端42根據進程監(jiān)視終端1的請求,將解析結果傳遞到進程監(jiān)視終端1,供進程監(jiān)視終端1分析或顯示用。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。