虛擬機進程監(jiān)控方法和裝置制造方法
【專利摘要】本發(fā)明提供一種虛擬機進程監(jiān)控方法和裝置,其中,方法包括:獲取虛擬機的操作系統(tǒng)類型;根據(jù)操作系統(tǒng)類型確定與操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,內核數(shù)據(jù)結構偏移數(shù)組中包括:操作系統(tǒng)類型對應的虛擬機的進程鏈表數(shù)據(jù)結構以及操作系統(tǒng)類型對應的虛擬機中各進程的進程信息在各進程對應的結構體中的偏移量;根據(jù)進程鏈表數(shù)據(jù)結構確定操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址;根據(jù)各進程對應的結構體的虛擬地址以及各進程的進程信息在各進程對應的結構體中的偏移量確定操作系統(tǒng)類型對應的虛擬機中各進程的進程信息,解決了現(xiàn)有技術中難以對宿主機上安裝有不同操作系統(tǒng)的多個虛擬機同時進行監(jiān)控,降低監(jiān)控效率的問題。
【專利說明】虛擬機進程監(jiān)控方法和裝置
【技術領域】
[0001]本發(fā)明涉及計算機【技術領域】,尤其涉及一種虛擬機進程監(jiān)控方法和裝置。
【背景技術】
[0002]現(xiàn)有技術中,通過在宿主機上的虛擬機監(jiān)控器中安裝監(jiān)控程序,實現(xiàn)對宿主機上的虛擬機的進程進行監(jiān)控。
[0003]然而現(xiàn)有技術中,由于不同種類的操作系統(tǒng)的語義不同,因此虛擬機監(jiān)控器中的監(jiān)控程序只能分析一種操作系統(tǒng)的語義,獲取安裝有同一種操作系統(tǒng)的多個虛擬機的進程,難以對宿主機上安裝有不同操作系統(tǒng)的多個虛擬機同時進行監(jiān)控,降低了監(jiān)控效率。
【發(fā)明內容】
[0004]本發(fā)明提供一種虛擬機進程監(jiān)控方法和裝置,用于解決現(xiàn)有技術中難以對宿主機上安裝有不同操作系統(tǒng)的多個虛擬機同時進行監(jiān)控,降低監(jiān)控效率的問題。
[0005]本發(fā)明的第一個方面是提供一種虛擬機進程監(jiān)控方法,包括:
[0006]獲取虛擬機的操作系統(tǒng)類型;
[0007]根據(jù)所述操作系統(tǒng)類型,查詢預設的內核數(shù)據(jù)結構偏移集合,確定與所述操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,所述內核數(shù)據(jù)結構偏移數(shù)組中包括:所述操作系統(tǒng)類型對應的虛擬機的進程鏈表數(shù)據(jù)結構以及所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息在各進程對應的結構體中的偏移量;
[0008]根據(jù)所述進程鏈表數(shù)據(jù)結構確定所述操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址;
[0009]根據(jù)所述各進程對應的結構體的虛擬地址以及所述各進程的進程信息在各進程對應的結構體中的偏移量獲取所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息。
[0010]本發(fā)明的另一個方面提供一種虛擬機進程監(jiān)控裝置,包括:
[0011]獲取模塊,用于獲取虛擬機的操作系統(tǒng)類型;
[0012]確定模塊,用于根據(jù)所述操作系統(tǒng)類型,查詢預設的內核數(shù)據(jù)結構偏移集合,確定與所述操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,所述內核數(shù)據(jù)結構偏移數(shù)組中包括:所述操作系統(tǒng)類型對應的虛擬機的進程鏈表數(shù)據(jù)結構以及所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息在各進程對應的結構體中的偏移量;
[0013]所述確定模塊還用于,根據(jù)所述進程鏈表數(shù)據(jù)結構確定所述操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址;
[0014]所述獲取模塊還用于,根據(jù)所述各進程對應的結構體的虛擬地址以及所述各進程的進程信息在各進程對應的結構體中的偏移量獲取所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息。
[0015]本發(fā)明通過獲取虛擬機的操作系統(tǒng)類型,根據(jù)虛擬機的操作系統(tǒng)類型確定與操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,根據(jù)內核數(shù)據(jù)結構偏移數(shù)組獲取虛擬機中各進程的進程信息,從而能夠對宿主機上安裝有不同操作系統(tǒng)的多個虛擬機同時進行監(jiān)控,提高了監(jiān)控效率。
【專利附圖】
【附圖說明】
[0016]圖1為本發(fā)明提供的虛擬機進程監(jiān)控方法一個實施例的流程圖;
[0017]圖2為本發(fā)明提供的虛擬機進程監(jiān)控方法又一個實施例的流程圖;
[0018]圖3為在待終止進程對應的結構體中保存終止待終止進程指令的工作流程示意圖;
[0019]圖4為本發(fā)明提供的虛擬機進程監(jiān)控方法另一個實施例的流程圖;
[0020]圖5為本發(fā)明提供的虛擬機進程監(jiān)控裝置一個實施例的結構示意圖。
【具體實施方式】
[0021]為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0022]圖1為本發(fā)明提供的虛擬機進程監(jiān)控方法一個實施例的流程圖,如圖1所示,包括:
[0023]101、獲取虛擬機的操作系統(tǒng)類型。
[0024]本發(fā)明的執(zhí)行主體為虛擬機進程監(jiān)控裝置,虛擬機進程監(jiān)控裝置具體可以位于宿主機上的虛擬監(jiān)控器(Virtual Machine Monitor)中,例如位于虛擬監(jiān)控器KVM(Kernel-based Virtual Machine,)或者虛擬監(jiān)控器XEN中。虛擬監(jiān)控器可以位于虛擬機操作系統(tǒng)和宿主機之間。
[0025]對于本宿主機上正在運行的虛擬機或者剛從其他宿主機遷移到本宿主機的虛擬機,虛擬機進程監(jiān)控裝置可以獲取中斷描述符表(Interrupt Descriptor Table, IDT)寄存器的base數(shù)值;對于在本宿主機啟動的虛擬機,由于啟動過程需要一定的時間,每次CR3控制寄存器切換時虛擬機進程監(jiān)控裝置可以讀取IDT寄存器的limit數(shù)值,當limit數(shù)值為“Oxff”時表示IDT寄存器已初始化完成,此時虛擬機進程監(jiān)控裝置可以獲取IDT寄存器的base數(shù)值。獲取到虛擬機的IDT寄存器的base數(shù)值之后,虛擬機進程監(jiān)控裝置可以根據(jù)base數(shù)值判斷虛擬機的操作系統(tǒng)類型。
[0026]虛擬機進程監(jiān)控裝置可以通過創(chuàng)建裝有操作系統(tǒng)的虛擬機鏡像,使用qemu-system-x86_64命令的-monitor stdio選項啟動虛擬機,在標準輸入輸出控制臺執(zhí)行info register命令來獲取IDT寄存器的base數(shù)值。
[0027]102、根據(jù)操作系統(tǒng)類型,查詢預設的內核數(shù)據(jù)結構偏移集合,確定與操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,內核數(shù)據(jù)結構偏移數(shù)組中包括:操作系統(tǒng)類型對應的虛擬機的進程鏈表數(shù)據(jù)結構以及操作系統(tǒng)類型對應的虛擬機中各進程的進程信息在各進程對應的結構體中的偏移量。
[0028]其中,虛擬機進程監(jiān)控裝置根據(jù)操作系統(tǒng)類型,查詢預設的內核數(shù)據(jù)結構偏移集合,確定與操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組之前,虛擬機進程監(jiān)控裝置還需要創(chuàng)建內核數(shù)據(jù)結構偏移集合,內核數(shù)據(jù)結構偏移集合中包括宿主機支持的各虛擬機的操作系統(tǒng)類型以及與各虛擬機的操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組。
[0029]當虛擬機的操作系統(tǒng)類型為Windows XP或Windows7等操作系統(tǒng)時,虛擬機進程監(jiān)控裝置創(chuàng)建內核數(shù)據(jù)結構偏移集合中的內核數(shù)據(jù)結構偏移數(shù)組的過程具體可以為:虛擬機進程監(jiān)控裝置可以將IDT寄存器的base數(shù)值作為虛擬機的操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組的首個元素;虛擬機進程監(jiān)控裝置還可以使用Windbg中的命令dt獲取進程標識號(UniqueProcessID)、進程名稱(ImageFi IeName )、進程鏈表數(shù)據(jù)結構(ActiveProcessLinks)和 DirectoryTableBase 在 EPR0CESS 結構體中的偏移量、ApcState在KTHREAD結構體中的偏移量以及Process在ApcState結構體中的偏移量,將 UniqueProcessID、ImageFiIeName、ActiveProcessLinks 和 DirectoryTableBase 在EPR0CESS結構體中的偏移量、ApcState在KTHREAD結構體中的偏移量以及Process在Ap c S t a t e結構體中的偏移量按照一定的順序依次作為虛擬機的操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組的元素。其中,KTHREAD結構體位于Windows內核數(shù)據(jù)結構處理器控制區(qū)(KPCR)結構體內的 PrcbData 變量中的 Current Process 中。UniqueProcessID、ImageFi I eName、ActiveProcessLinks、DirectoryTableBase > ApcState 和 Process 均為支持Windows XP或Windows7等操作系統(tǒng)的虛擬機的進程信息可以包括的參數(shù)。
[0030]對應的,當虛擬機進程監(jiān)控裝置根據(jù)IDT寄存器的base數(shù)值判斷得知虛擬機的操作系統(tǒng)類型為Windows XP或Wind0ws7等時,虛擬機進程監(jiān)控裝置可以根據(jù)IDT寄存器的base數(shù)值查詢預設的內核數(shù)據(jù)結構偏移集合,確定與操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組。
[0031]當虛擬機的操作系統(tǒng)類型為Linux虛擬機支持的Debian、Ubuntu> Fedora或CentOS等操作系統(tǒng)時,虛擬機進程監(jiān)控裝置創(chuàng)建內核數(shù)據(jù)結構偏移集合中的內核數(shù)據(jù)結構偏移數(shù)組的過程具體可以為:虛擬機進程監(jiān)控裝置可以執(zhí)行x/2x IDTR.base+0x400指令獲取0x80號中斷描述符,即系統(tǒng)調用表入口地址,將系統(tǒng)調用表入口地址作為虛擬機的操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組的首個元素;在虛擬機內部安裝內核模塊工具,采用內核模塊工具來獲取進程標識號(pid)、進程名稱(comm)、內存結構體(mm_struct)、進程鏈表數(shù)據(jù)結構(tasks)和待處理信號(pending_signal)等在task_struct結構體中的偏移量及頁目錄入口地址Pgd和內存啟動代碼(start_code )在mm_struct結構體中的偏移量,將 pid、comm、mm_st;ruct、tasks、pending_signal 等結構在 task_struct 結構體中的偏移量及pgd、start_code在mm_struct結構體中的偏移按照一定的順序依次作為虛擬機的操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組的元素。其中,pid、comm、mm_struct、tasks、pending_signal、pgd 和 start_code 均為支持 Debian、Ubuntu、Fedora 或 CentOS 等操作系統(tǒng)的虛擬機的進程信息可以包括的參數(shù)。
[0032]對應的,當虛擬機進程監(jiān)控裝置根據(jù)IDT寄存器的base數(shù)值判斷得知虛擬機的操作系統(tǒng)類型為Linux虛擬機支持的Debian、Ubuntu> Fedora或CentOS等操作系統(tǒng)時,虛擬機進程監(jiān)控裝置可以執(zhí)行x/2x IDTR.base+0x400指令獲取0x80號中斷描述符,即系統(tǒng)調用表入口地址,根據(jù)系統(tǒng)調用表入口地址查詢預設的內核數(shù)據(jù)結構偏移集合,確定與操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組。
[0033]103、根據(jù)進程鏈表數(shù)據(jù)結構確定操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址。
[0034]其中,根據(jù)進程鏈表數(shù)據(jù)結構確定操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址之前,還包括:獲取操作系統(tǒng)類型對應的虛擬機中正在運行的進程對應的結構體的虛擬地址;對應的,步驟103具體可以為:根據(jù)正在運行的進程對應的結構體的虛擬地址查詢進程鏈表數(shù)據(jù)結構,確定操作系統(tǒng)類型對應的虛擬機中除正在運行的進程之外的其他進程對應的結構體的虛擬地址。
[0035]具體地,當虛擬機內部進行進程切換時,虛擬機的狀態(tài)將會存放在虛擬監(jiān)控器維護的虛擬機控制結構體(Virtual Machine Control Structure, VMCS)中,因此虛擬機進程監(jiān)控裝置可以從虛擬監(jiān)控器維護的VMCS中獲取進程切換之前虛擬機內部正在運行的進程對應的結構體的虛擬地址。
[0036]104、根據(jù)各進程對應的結構體的虛擬地址以及各進程的進程信息在各進程對應的結構體中的偏移量獲取操作系統(tǒng)類型對應的虛擬機中各進程的進程信息。
[0037]進一步地,步驟104之后,還可以包括:創(chuàng)建與操作系統(tǒng)類型對應的虛擬機對應的數(shù)據(jù)結構,數(shù)據(jù)結構包括:操作系統(tǒng)類型,操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,操作系統(tǒng)類型對應的虛擬機的進程鏈表數(shù)據(jù)結構。
[0038]例如,虛擬機進程監(jiān)控裝置可以為虛擬機創(chuàng)建對應的數(shù)據(jù)結構vm_info。若虛擬機的操作系統(tǒng)類型為Windows XP,ffindows7等,虛擬機進程監(jiān)控裝置還需要將FS寄存器在內核態(tài)的數(shù)值寫入vm_info結構體的fs_base變量中。另外,vm_info結構體中還可以包括下一個vm_info結構體指針。
[0039]更進一步地,步驟104中根據(jù)各進程對應的結構體的虛擬地址以及各進程的進程信息在各進程對應的結構體中的偏移量確定操作系統(tǒng)類型對應的虛擬機中各進程的進程信息的過程具體可以為,虛擬機進程監(jiān)控裝置可以先根據(jù)正在運行的進程對應的結構體的虛擬地址和正在運行的進程的進程信息在該進程對應的結構體中的偏移量確定正在運行的進程的進程信息;然后根據(jù)正在運行的進程對應的結構體的虛擬地址查詢進程鏈表數(shù)據(jù)結構,獲取下一進程對應的結構體的虛擬地址,采用與獲取正在運行的進程的進程信息的方法,獲取下一進程的進程信息。
[0040]例如,對于支持Debian、Ubuntu> Fedora、CentOS等操作系統(tǒng)的Linux虛擬機,虛擬機進程監(jiān)控裝置獲取Linux虛擬機的進程信息的具體步驟可以為:當Linux虛擬機企圖修改CR3控制寄存器時,Linux虛擬機將執(zhí)行權限交給虛擬監(jiān)控器,虛擬機進程監(jiān)控裝置獲取ESP寄存器的數(shù)值,將ESP寄存器的數(shù)值和OxFFFFEOOO進行“與”操作后得到Linux虛擬機中正在運行的進程對應的task_struct結構體的虛擬地址;結合task_struct結構體的虛擬地址和虛擬機對應的vm_info結構體中的內核數(shù)據(jù)結構偏移數(shù)組,讀取pid、comm、pending_signal等正在運行的進程的進程信息;以正在運行的進程作為起始進程,讀取task_struct結構體中的進程鏈表數(shù)據(jù)結構,獲取下一個進程的進程信息,依次進行下去,直到下一個進程指向正在運行的進程,從而獲取到虛擬機內部的全部進程的進程信息。
[0041]又例如,對于支持Windows XP、Windows7等操作系統(tǒng)的Windows虛擬機,虛擬機進程監(jiān)控裝置獲取Windows虛擬機的進程信息的具體步驟可以為:當Windows虛擬機企圖修改CR3控制寄存器時,Windows虛擬機將執(zhí)行權限交給虛擬機進程監(jiān)控裝置,虛擬機進程監(jiān)控裝置根據(jù)vm_info結構體中的fs_base獲取Windows內核數(shù)據(jù)結構KPCR的地址;獲取KPCR結構體內的PrcbData變量(類型為KPRCB結構體)中Current Process的KTHREAD結構體地址,KTHREAD結構體內的ApcState變量(類型為KAPC_STATE結構體)中的Process指針指向正在運行的進程的EPR0CESS結構體。結合EPR0CESS結構體以及虛擬機對應的vm_info結構體內的內核數(shù)據(jù)結構偏移數(shù)組,讀取進程標識號、進程名稱等進程信息;以正在運行的進程作為起始進程,讀取EPR0CESS結構體中的ActiveProcessLinks進程鏈表數(shù)據(jù)結構,獲取下一個進程的信息,依次進行下去,直到下一個進程指針指向當前進程,從而獲取到虛擬機內部的全部進程的進程信息。
[0042]本實施例中,通過獲取虛擬機的操作系統(tǒng)類型,根據(jù)虛擬機的操作系統(tǒng)類型確定與操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,根據(jù)內核數(shù)據(jù)結構偏移數(shù)組獲取虛擬機中各進程的進程信息,從而能夠對宿主機上安裝有不同操作系統(tǒng)的多個虛擬機同時進行監(jiān)控,提高了監(jiān)控效率。
[0043]圖2為本發(fā)明提供的虛擬機進程監(jiān)控方法又一個實施例的流程圖,如圖2所示,在圖1所示實施例的基礎上,操作系統(tǒng)類型對應的虛擬機中各進程的進程信息可以包括:各進程的進程標識號。為了保證虛擬機進程監(jiān)控裝置能夠終止虛擬機中需要終止的進程,步驟104之后,還可以包括:
[0044]105、獲取待終止進程的進程標識號。
[0045]其中,待終止進程可以由用戶根據(jù)操作系統(tǒng)類型對應的虛擬機中各進程的安全性提前進行設置。
[0046]106、根據(jù)待終止進程的進程標識號終止待終止進程。
[0047]具體地,步驟106具體可以為:根據(jù)待終止進程的進程標識號,獲取待終止進程對應的結構體的虛擬地址;根據(jù)待終止進程對應的結構體的虛擬地址,在待終止進程對應的結構體中保存終止待終止進程的終止進程指令,以使操作系統(tǒng)類型對應的虛擬機執(zhí)行所述終止進程指令。
[0048]例如,對于支持Debian、Ubuntu、Fedora、CentOS等操作系統(tǒng)的Linux虛擬機,虛擬機進程監(jiān)控裝置根據(jù)待終止進程對應的結構體的虛擬地址,在待終止進程對應的結構體中保存終止待終止進程的終止進程指令的工作流程示意圖如圖3所示,具體可以為:(I)在啟動虛擬機時添加-monitor pty>monitorFile2>&l選項,將QEMU Monitor控制臺重定向到monitorFile文件;(2)向monitorFile文件寫終止進程命令kill X(X為待終止的進程標識號),利用QMP (QEMU Monitor Protocol)解析終止進程命令后,通過ioctl向虛擬監(jiān)控器中的進程控制模塊發(fā)送命令;(3)進程控制模塊收到命令后,根據(jù)虛擬機的uuid找到虛擬機的vm_info結構體,通過vm_info結構體內的進程鏈表數(shù)據(jù)結構找到待終止的進程對應的proc_identity結構體,該結構體存放待終止進程的task_struct結構體的虛擬地址;
(4)結合內核數(shù)據(jù)結構偏移數(shù)組中的pending_signal偏移量和task_struct結構體的虛擬地址,在虛擬監(jiān)控器層將數(shù)值為0x100的SIGKILL信號設置在pending_signal中,并設置thread結構體中的flags的數(shù)值為1UL〈〈2,將thread結構體中的preempt_count的數(shù)值為0x0。從而使得虛擬機在判斷task_struct結構體的pending_signal中攜帶SIGKILL信號,且thread結構體中的flags的數(shù)值為1UL〈〈2, thread結構體中的preempt_count的數(shù)值為0x0時,終止待終止進程。
[0049]本實施例中,通過獲取虛擬機的操作系統(tǒng)類型,根據(jù)虛擬機的操作系統(tǒng)類型確定與操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,根據(jù)內核數(shù)據(jù)結構偏移數(shù)組獲取虛擬機中各進程的進程信息,并對待終止進程進行終端,從而能夠對宿主機上安裝有不同操作系統(tǒng)的多個虛擬機同時進行監(jiān)控,提高了監(jiān)控效率。
[0050]圖4為本發(fā)明提供的虛擬機進程監(jiān)控方法另一個實施例的流程圖,如圖4所示,在圖1所示實施例的基礎上,為了保證虛擬機進程監(jiān)控裝置能夠在進程對待操作數(shù)據(jù)塊的操作超過待操作數(shù)據(jù)塊的訪問權限時終止進程,步驟104之后,還可以包括:
[0051]107、獲取操作系統(tǒng)類型對應的虛擬機中正在運行的進程中待操作數(shù)據(jù)塊的塊號。
[0052]其中,虛擬機的內存中包括至少一個塊組,每個塊組中包括至少一個數(shù)據(jù)塊,每個數(shù)據(jù)塊由至少一個扇區(qū)組成。虛擬機運行過程中,虛擬機進程監(jiān)控裝置可以對虛擬機內的I/o操作進行實時監(jiān)控和截獲,獲取虛擬機中正在運行的進程中待操作數(shù)據(jù)塊的塊號。
[0053]108、在預設的受保護數(shù)據(jù)塊集合中存在待操作數(shù)據(jù)塊時,判斷正在運行的進程是否為可疑進程。
[0054]其中,可疑進程指的是虛擬機中存在安全問題或者可能存在安全問題的進程,可疑進程可以在獲取到虛擬機中全部進程的進程信息后,由虛擬監(jiān)控器或者用戶提前進行設置。
[0055]109、在正在運行的進程為可疑進程時,判斷正在運行的進程對待操作數(shù)據(jù)塊的操作是否超過待操作數(shù)據(jù)塊的訪問權限。
[0056]虛擬機中各數(shù)據(jù)塊的訪問權限可以由虛擬監(jiān)控器或者用戶提前進行設置。例如,當虛擬監(jiān)控器將待操作的數(shù)據(jù)塊的訪問權限設置為只讀時,若正在運行的進程對待操作數(shù)據(jù)塊的操作為寫操作,則正在運行的進程對待操作數(shù)據(jù)塊的操作超過待操作的數(shù)據(jù)塊的訪問權限。又例如,當虛擬監(jiān)控器將待操作的數(shù)據(jù)塊的訪問權限設置為不可進行任何操作時,若正在運行的進程對待操作數(shù)據(jù)塊的操作為讀操作或者寫操作,則正在運行的進程對待操作數(shù)據(jù)塊的操作超過待操作的數(shù)據(jù)塊的訪問權限。
[0057]110、在正在運行的進程對待操作數(shù)據(jù)塊的操作超過待操作數(shù)據(jù)塊的訪問權限時,終止正在運行的進程對待操作數(shù)據(jù)塊的操作。
[0058]此處終止正在運行的進程對待操作數(shù)據(jù)塊的操作與實施例2中虛擬機進程監(jiān)控裝置終止待終止進程的過程類似,此處不再進行贅述。
[0059]進一步地,步驟107之前,還可以包括:創(chuàng)建虛擬機對應的配置文件,配置文件中包括:受保護的文件以及受保護的文件的訪問權限;確定受保護的文件在操作系統(tǒng)類型對應的虛擬機中對應的數(shù)據(jù)塊;將受保護的文件在操作系統(tǒng)類型對應的虛擬機中對應的數(shù)據(jù)塊確定為受保護數(shù)據(jù)塊;將受保護的文件的訪問權限確定為與受保護的文件對應的受保護數(shù)據(jù)塊的訪問權限;將受保護數(shù)據(jù)塊和受保護數(shù)據(jù)塊的訪問權限保存到受保護數(shù)據(jù)塊集合中。
[0060]其中,配置文件為基于用戶配置的特定文件集合。配置文件中特定文件的訪問權限分為只讀和不可讀不可寫。前者只允許可疑進程對特定文件進行讀操作,后者不允許可疑進程對特定文件的任何操作。虛擬機進程監(jiān)控裝置創(chuàng)建虛擬機對應的配置文件的具體過程可以為:在宿主機內為啟用虛擬機進程監(jiān)控裝置的所有虛擬機鏡像文件建立目錄,在每個目錄中創(chuàng)建用戶敏感文件的配置文件,用戶將需要進行保護的文件寫進該配置文件中。另外,在啟動虛擬機之前,若用戶敏感文件發(fā)生了變化,虛擬機進程監(jiān)控裝置還可以修改配置文件,指定本次啟動虛擬機時需要進行保護的文件集合。
[0061]進一步地,虛擬機進程監(jiān)控裝置確定受保護的文件在操作系統(tǒng)類型對應的虛擬機中對應的數(shù)據(jù)塊的具體過程可以為:將虛擬機鏡像文件掛載在宿主機中,獲取虛擬機鏡像文件中各文件的文件名對應的inode號。(2)在啟動虛擬機時分析虛擬機鏡像文件的文件系統(tǒng)的相關信息,包括塊大小、inode大小、塊組個數(shù)等。(3)根據(jù)表1中的公式計算與各文
件--對應的inode的地址。其中bg_num為inode所在的塊組,inode_offset表示inode
在inode表中的偏移位置。inode_addr表不inode在虛擬機鏡像文件中的塊號,即inode對應的結構體的地址。(4)獲取該文件的inode結構體后,第41~100字節(jié)是記錄該inode對應的文件所占用的數(shù)據(jù)塊信息。其中,若虛擬機鏡像文件的文件系統(tǒng)為EXT2或EXT3文件系統(tǒng),則inode結構體的第41~88字節(jié)為12個直接塊指針,即每四個字節(jié)表示一個存放數(shù)據(jù)的數(shù)據(jù)塊號;第89~92字節(jié)為“一次間接塊指針”,即這四個字節(jié)表示一個塊號,塊號對應的塊中的每四個字節(jié)表示的才是存放數(shù)據(jù)的數(shù)據(jù)塊號;以此類推,93~96字節(jié)為“二次間接塊指針”,97~100字節(jié)為“三次間接塊指針”。若虛擬機鏡像文件的文件系統(tǒng)為EXT4,則需要分析inode結構體中的extent結構體獲得文件所占用的所有塊號。
[0062]表1inode地址計算公式
[0063]
【權利要求】
1.一種虛擬機進程監(jiān)控方法,其特征在于,包括: 獲取虛擬機的操作系統(tǒng)類型; 根據(jù)所述操作系統(tǒng)類型,查詢預設的內核數(shù)據(jù)結構偏移集合,確定與所述操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,所述內核數(shù)據(jù)結構偏移數(shù)組中包括:所述操作系統(tǒng)類型對應的虛擬機的進程鏈表數(shù)據(jù)結構以及所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息在各進程對應的結構體中的偏移量; 根據(jù)所述進程鏈表數(shù)據(jù)結構確定所述操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址; 根據(jù)所述各進程對應的結構體的虛擬地址以及所述各進程的進程信息在各進程對應的結構體中的偏移量獲取所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息。
2.根據(jù)權利要求1所述的方法,其特征在于,所述獲取虛擬機的操作系統(tǒng)類型之前,還包括: 創(chuàng)建內核數(shù)據(jù)結構偏移集合,所述內核數(shù)據(jù)結構偏移集合中包括宿主機支持的各虛擬機的操作系統(tǒng)類型以及與各虛擬機的操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組。
3.根據(jù)權利要求2所述的方法,其特征在于,所述根據(jù)所述進程鏈表數(shù)據(jù)結構確定所述操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址之前,還包括: 獲取所述操作系統(tǒng)類型對應的虛擬機中正在運行的進程對應的結構體的虛擬地址; 所述根據(jù)所述進 程鏈表數(shù)據(jù)結構確定所述操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址,包括: 根據(jù)所述正在運行的進程對應的結構體的虛擬地址查詢所述進程鏈表數(shù)據(jù)結構,確定所述操作系統(tǒng)類型對應的虛擬機中除所述正在運行的進程之外的其他進程對應的結構體的虛擬地址。
4.根據(jù)權利要求1-3任一項所述的方法,其特征在于,所述根據(jù)所述各進程對應的結構體的虛擬地址以及所述各進程的進程信息在各進程對應的結構體中的偏移量獲取所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息之后,還包括: 創(chuàng)建與所述操作系統(tǒng)類型對應的虛擬機對應的數(shù)據(jù)結構,所述數(shù)據(jù)結構包括:所述操作系統(tǒng)類型,所述操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,所述操作系統(tǒng)類型對應的虛擬機的進程鏈表數(shù)據(jù)結構。
5.根據(jù)權利要求1-3任一項所述的方法,其特征在于,所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息包括:各進程的進程標識號; 所述根據(jù)所述各進程對應的結構體的虛擬地址以及所述各進程的進程信息在各進程對應的結構體中的偏移量獲取所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息之后,還包括: 獲取待終止進程的進程標識號; 根據(jù)所述待終止進程的進程標識號終止所述待終止進程。
6.根據(jù)權利要求5所述的方法,其特征在于,所述根據(jù)所述待終止進程的進程標識號終止所述待終止進程,包括: 根據(jù)所述待終止進程的進程標識號,獲取所述待終止進程對應的結構體的虛擬地址; 根據(jù)所述待終止進程對應的結構體的虛擬地址,在所述待終止進程對應的結構體中保存終止所述待終止進程的終止進程指令,以使所述操作系統(tǒng)類型對應的虛擬機執(zhí)行所述終止進程指令。
7.根據(jù)權利要求1-3任一項所述的方法,其特征在于,所述根據(jù)所述各進程對應的結構體的虛擬地址以及所述各進程的進程信息在各進程對應的結構體中的偏移量獲取所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息之后,還包括: 獲取所述操作系統(tǒng)類型對應的虛擬機中正在運行的進程中待操作數(shù)據(jù)塊的塊號;在預設的受保護數(shù)據(jù)塊集合中存在所述待操作數(shù)據(jù)塊時,判斷所述正在運行的進程是否為可疑進程; 在所述正在運行的進程為可疑進程時,判斷所述正在運行的進程對所述待操作數(shù)據(jù)塊的操作是否超過所述待操作數(shù)據(jù)塊的訪問權限; 在所述正在運行的進程對所述待操作數(shù)據(jù)塊的操作超過所述待操作數(shù)據(jù)塊的訪問權限時,終止所述正在運行的進程對所述待操作數(shù)據(jù)塊的操作。
8.根據(jù)權利要求7所述的方法,其特征在于,所述獲取所述操作系統(tǒng)類型對應的虛擬機中正在運行的進程中待操作數(shù)據(jù)塊的塊號之前,還包括: 創(chuàng)建所述虛擬機對應的配置文件,所述配置文件中包括:受保護的文件以及所述受保護的文件的訪問權限; 確定所述受保護的文件在所述操作系統(tǒng)類型對應的虛擬機中對應的數(shù)據(jù)塊; 將所述受保護的文件在所述操作系統(tǒng)類型對應的虛擬機中對應的數(shù)據(jù)塊確定為受保護數(shù)據(jù)塊; 將所述受保護 的文件的訪問權限確定為與所述受保護的文件對應的受保護數(shù)據(jù)塊的訪問權限; 將所述受保護數(shù)據(jù)塊和所述受保護數(shù)據(jù)塊的訪問權限保存到所述受保護數(shù)據(jù)塊集合中。
9.一種虛擬機進程監(jiān)控裝置,其特征在于,包括: 獲取模塊,用于獲取虛擬機的操作系統(tǒng)類型; 確定模塊,用于根據(jù)所述操作系統(tǒng)類型,查詢預設的內核數(shù)據(jù)結構偏移集合,確定與所述操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組,所述內核數(shù)據(jù)結構偏移數(shù)組中包括:所述操作系統(tǒng)類型對應的虛擬機的進程鏈表數(shù)據(jù)結構以及所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息在各進程對應的結構體中的偏移量; 所述確定模塊還用于,根據(jù)所述進程鏈表數(shù)據(jù)結構確定所述操作系統(tǒng)類型對應的虛擬機中各進程對應的結構體的虛擬地址; 所述獲取模塊還用于,根據(jù)所述各進程對應的結構體的虛擬地址以及所述各進程的進程信息在各進程對應的結構體中的偏移量獲取所述操作系統(tǒng)類型對應的虛擬機中各進程的進程信息。
10.根據(jù)權利要求9所述的裝置,其特征在于,還包括:創(chuàng)建模塊; 所述創(chuàng)建模塊用于,在所述獲取模塊獲取虛擬機的操作系統(tǒng)類型之前,創(chuàng)建內核數(shù)據(jù)結構偏移集合,所述內核數(shù)據(jù)結構偏移集合中包括宿主機支持的各虛擬機的操作系統(tǒng)類型以及與各虛擬機的操作系統(tǒng)類型對應的內核數(shù)據(jù)結構偏移數(shù)組。
【文檔編號】G06F11/30GK103544090SQ201310485094
【公開日】2014年1月29日 申請日期:2013年10月16日 優(yōu)先權日:2013年10月16日
【發(fā)明者】李博, 李楠, 崔磊, 李建欣, 邰振贏 申請人:北京航空航天大學