CN103793651B - 基于Xen虚拟化的内核完整性检测方法 - Google Patents
基于Xen虚拟化的内核完整性检测方法 Download PDFInfo
- Publication number
- CN103793651B CN103793651B CN201410062486.1A CN201410062486A CN103793651B CN 103793651 B CN103793651 B CN 103793651B CN 201410062486 A CN201410062486 A CN 201410062486A CN 103793651 B CN103793651 B CN 103793651B
- Authority
- CN
- China
- Prior art keywords
- domu
- kernel
- system call
- data
- logical address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Storage Device Security (AREA)
Abstract
一种基于Xen虚拟化的内核完整性检测方法,利用内核完整性检测***对运行在Xen虚拟化平台上的虚拟机操作***进行内核完整性检测。***在Dom0设置内存映射、信息获取和安全检测三个部分,内存映射部分提供获取DomU中硬件层面的机器字节数据接口,信息获取部分部署通过内存映射部分提供的接口获取DomU中硬件层面的机器字节数据,根据DomU中的操作***版本将硬件层面的机器字节数据转化成操作***级别的信息。安全检测部分以轮询方式调用信息获取部分获得DomU中操作***内核关键数据,并根据***安全策略,判断DomU中操作***内核的完整性是否受到破坏。本发明***将检测***部署在被监控***外部,在保证检测***安全的同时对被监控***的内核进行完整性检测。
Description
技术领域
本发明涉及计算机虚拟化技术领域,进一步涉及计算机虚拟化以及安全领域。是一种基于Xen虚拟化的内核完整性检测检测方法,用于客户操作***为Linux或者类Unix操作***的Xen虚拟化平台上,实现在管理域Dom0中对虚拟化平台上的客户域DomU内的操作***的内核的关键数据结构与代码进行完整性检测,为运行在虚拟化平台上的操作***提供安全保障。
背景技术
操作***安全性是计算机安全不可或缺的一部分。内核,是一个操作***的核心,是基于硬件的第一层软件扩充,提供操作***的最基本的功能,是操作***工作的基础。
近几年来,随着黑客技术特别是Rootkit技术的发展,攻击者已经把触角伸入到了操作***的内核。操作***的内核代码面临着严重的威胁。因为内核具有最高特权,Rootkit运行在内核态,可以篡改内核数据结构、更改内核控制流,破坏内核的完整性,对***安全构成了巨大的威胁。检测内核完整性是否受到破坏、保护内核完整性是检测一个***是否安全、构建安全***的基础。
针对操作***内核的攻击通常的方法是篡改关键数据和改变控制流。现有的内核完整性检测、保护的技术大致可以分为两类:A、保障、检测数据完整性,确保影响***功能的关键数据对象只能由指定代码在特定情况下修改;B、保障、检测控制流完整性,保护和监控影响代码执行序列的所有因素。利用上述技术实现的完整性保护、检测工具,典型的有checkidt、kem-check等,它们均存在一个不足:内核完整性检测、保护的安全软件与被检测***在同一地址空间,目前流行的Rootkit等恶意软件运行在***内核态,与安全软件处于同一特权级别,与恶意软件相比安全软件没有任何的特权优势。Rootkit等恶意软件可以绕过安全软件的检测机制、甚至破坏安全软件。
近年来,虚拟化技术成为计算机***结构的发展趋势,虚拟机管理器具有更高的权限、更小的可信计算基、更好的隔离性。由于虚拟化架构具有上述优势,基于虚拟化架构构建的安全工具能够有效地监控虚拟机内部状态,同时抵御被监控***中可能发生的攻击,基于虚拟化架构增强安全工具的安全性成为安全研究的趋势。
发明内容
本发明在分析总结现有的内核完整性检测技术的不足的基础上,结合虚拟化技术、提供了一种新的基于Xen虚拟化的内核完整性检测方法。本发明利用虚拟化架构的特性,将内核完整性检测***部署在被监控虚拟机外,使内核完整性检测***不受被监控***中恶意软件的攻击;利用虚拟机管理器处于虚拟化架构最底层负责管理整个硬件平台的优势,可以有效监控虚拟机的内部状态,使完整性检测机制不被恶意软件绕过。
本发明的检测方法,利用内核完整性检测***对运行在Xen虚拟化平台上的虚拟机中的Linux或者类Unix操作***进行内核完整性检测,其特征在于:所述内核完整性检测***包括内存映射部分、信息获取部分和安全检测部分,这三个部分均部署在管理域Dom0,从管理域Dom0对客户域DomU的操作***内核完整性进行检测,并有效利用了Xen提供的隔离性,避免内核完整性检测***受到客户域DomU中的恶意软件的攻击;
所述内存映射部分提供获取客户域DomU中硬件层面的机器字节数据的接口,获取客户域DomU中寄存器二进制数据、物理地址空间对应的随机存储器中的二进制数据和内核态的逻辑地址空间对应的随机存储器的二进制数据,在管理域Dom0模拟客户域DomU操作***的分页模型,利用libxc,libxs库函数从管理域Dom0中获取客户域DomU内核态的逻辑地址空间对应的随机存储器二进制数据;
所述信息获取部分利用内存映射部分提供的接口,获取客户域DomU中与***内核状态相关的关键数据即中断向量表、***调用表和***调用函数指令数据;
所述安全检测部分以轮询方式调用信息获取部分获得客户域DomU的中断向量表、***调用表、***调用函数指令数据并求哈希值,与管理域Dom0安全策略文件的中断向量表、***调用表和***调用函数的SHA-1哈希值进行对比,检测客户域DomU中内核的完整性。
本发明的检测方法从管理域Dom0对客户域DomU中的操作***内核进行完整性检测,具体由安全检测部分检测客户域DomU的内核完整性,检测过程如下:
(1)从部署在管理域Dom0中的安全策略文件读取出以下信息:
1.1)中断向量表中每一个的中断处理函数的逻辑地址;
1.2)***调用表中每个***调用函数的逻辑地址;
1.3)***调用号以及其对应的***调用函数的指令数据的SHA-1哈希值;
(2)以轮询的方式利用信息获取模块提供的接口,获取下列信息:
2.1)客户域DomU中的中断向量表中每个中断处理程序的逻辑地址;
2.2)客户域DomU中的***调用表中的每个***调用函数的逻辑地址;
2.3)客户域DomU中的***调用函数指令的数据,然后利用SHA-1哈希算法计算出***调用函数指令数据的哈希值;
(3)比较从DomU获取的信息与从安全策略文件中读取的信息:
3.1)比较中断向量表中每个中断处理程序的逻辑地址,如果某一项的数据不一致,说明对应的中断处理程序受到恶意软件的中断处理程序重定向攻击,记录下不一致的表项,并向管理域Dom0告警;;
3.2)比较***调用表中的每个***调用函数的逻辑地址,如果某一项的数据不一致,说明对应的***调用函数被恶意软件进行了***调用重定向攻击,记录下不一致的表项,并向管理域Dom0告警;
3.3)比较***调用函数指令数据的哈希值,如果不一致,说明相应的***函数受到了恶意软件的代码注入攻击,记录下不一致的***调用号,并向管理域Dom0告警;
本发明与现有技术相比具有以下优点:
第一,本发明结合虚拟化技术,利用虚拟机管理器的特权级别优势、从虚拟化平台获得被监控***中最底层的信息,确保安全检测工具的监控行为不被恶意软件欺骗、绕过。
第二,本发明利用虚拟技术提供的隔离性、将安全检测工具部署在管理域Dom0,将安全检测工具与监控的客户域DomU隔离开,可以有效确保安全检测工具自身的安全性。
第三,本发明不需要修改客户域操作***、管理域操作***、虚拟机监控器,避免了修改可能引入的Bug、导致的紧耦合。
第四,本发明分析了当前流行的进行内核完整性攻击的恶意软件的行为特性以及性状表现,针对内核关键资源进行检测,在能以高准确率检测内核完整性的情况下,不对***运行效率造成可观影响。
附图说明
图1是本发明检测方法采用的***整体结构图;
图2是本发明内存映射部分逻辑地址通过分页机制映射到物理地址的示意图;
图3是本发明内存映射部分访问客户域DomU中指定内核态逻辑地址空间数据的流程图;
图4是本发明信息获取部分获取客户域DomU中中断向量表信息的流程图;
图5是本发明信息获取部分获取客户域DomU中***调用表信息的流程图;
图6是本发明信息获取部分获取客户域DomU中***调用函数指令数据的流程图;
图7是本发明安全检测部分检测客户域DomU中内核完整性流程图;
具体实施方式
下面结合附图对本发明作进一步的描述。
1、整体结构设计
基于Xen虚拟化的内核完整性检测***由三个基本部分构成,分别是内存映射部分、信息获取部分、安全检测部分。本发明***部署在管理域Dom0,有效利用了Xen提供的隔离性、避免本发明***受到客户域DomU中的恶意软件的攻击。整体***架构图如图1所示。
上述各部分功能如下:
内存映射部分,在管理域Dom0中模拟客户域DomU中的分页机制,提供了获取客户域DomU中硬件层面的机器字节数据的接口,包括获取客户域DomU中寄存器的二进制数据、物理地址空间对应的随机存储器的二进制数据、内核态逻辑地址空间对应的随机存储器的二进制数据。
所述信息获取部分通过内存映射部分提供的接口,获取客户域DomU中与***内核状态相关的关键数据包括中断向量表、***调用表、***调用函数指令数据。
安全检测部分,调用信息获取部分获得客户域DomU中操作***内核的关键数据,并根据安全检测部分中的存储的安全策略,判断客户域DomU中操作***内核的完整性是否受到破坏。
2、内存映射部分的具体实现
Linux操作***内有逻辑地址、线性地址、物理地址三种地址。在X86-32处理器架构上Linux的逻辑地址与线性地址相同。Linux操作***中,逻辑地址用于进程空间的寻址,物理地址用于随机存储器的内存单元的寻址。Linux操作***中每个进程的逻辑地址空间分为两个部分:1、用户态空间,地址范围从0X00000000到0XBFFFFFFF;2、内核态空间,地址范围从0XC0000000到0XFFFFFFFF。每个进程的用户态空间的信息不相同,但是内核态空间的信息完全一样。Linux操作***内核的数据、函数存储在进程的内核态空间。
当访问Linux操作***中某一进程的用户态或者内核态地址空间的数据、函数时,操作***首先会利用分页单元将逻辑地址转换为物理地址,然后访问该物理地址对应的随机存储器的内存单元的二进制数据,示意图如图2所示。X86-32架构上的Linux操作***的分页单元有4中分页模型:1、常规分页模型;2、扩展分页模型;3、物理地址扩展模型下的常规分页模型;4、物理地址扩展模型下的扩展分页模型。当编译Linux内核时,通过不同的配置选项可以指定Linux***采用的分页模型。
本发明***在管理域Dom0中对客户域DomU中的操作***内核进行完整性检测,需要获取客户域DomU中的某些内核信息,包括中断向量表、***调用表等,这些内核数据结构的地址都是用逻辑地址表示的,因此本发明***需要在管理域Dom0中访问客户域DomU的内核态逻辑地址空间的信息。
Xen虚拟化平台提供了开发库libxc,libxs。libxc,libxs库提供了以下接口:1、从管理域Dom0获取客户域DomU的中央处理器寄存器二进制数据的接口;2、从管理域Dom0中获取客户域DomU的物理地址空间对应的随机存储器中的二进制数据的接口。
内存映射部分在libxc,libxs库的基础上,在管理域Dom0中模拟客户域DomU中***的分页模型,实现了从管理域Dom0中获取客户域DomU中内核态逻辑地址空间对应的随机存储器的二进制数据的接口。获取DomU中内核态逻辑地址空间对应的随机存储器的二进制数据的过程如图3所示,具体步骤如下:
(1)首先、假设给定的客户域DomU中的内核态逻辑地址为virtAddr.
(2)确定DomU中操作***采用的分页模型。
2.1)通过libxc的库函数,获取客户域DomU中中央处理器的CR4寄存器的值。
2.2)取CR4寄存器的PSE允许页扩展标志位的值X,取CR4寄存器的PAE允许物理地址扩展标志位的值Y。
2.3)如果X等于0、Y等于0,则客户域DomU中***采用的是常规分页模型。如果X等于1、Y等于0,则客户域DomU中***采用的是扩展分页模型。如果X等于0、Y等于1,则客户域DomU中***采用的是物理地址扩展模型下的常规分页模型。如果X等于1、Y等于1,则客户域DomU中***采用的是物理地址扩展模型下的扩展分页模型。
(3)利用libxc的库函数获取客户域DomU中CR3寄存器的值、作为基地址,模拟DomU中操作******的分页模型,将逻辑地址virtAddr转换为物理地址phyAddr。
(4)利用libxc的库函数获取物理地址phyAddr对应的随机存储器中的二进制数据。
X86-64架构上的Linux操作***中,每个进程都有4GB的逻辑地址空间,前3GB的空间称为用户态空间,最后1GB空间称为内核态空间。两个进程中相同的用户态空间地址可能映射到不同的物理地址空间,相同的内核态空间会映射到相同的物理地址空间。Linux***运行时,CR3寄存器中存储着当前进程的页目录的物理地址,CR3用于分页机制,用于将当前进程的逻辑地址映射为物理地址。因为DomU中操作***有4种分页模型,所以在Dom0中模拟DomU中操作***的分页模型将内核态逻辑地址转换为物理地址,有4种不同的过程。下面分别描述这四种过程。
模拟DomU中的常规分页模型,将内核态逻辑地址转换为物理地址的步骤如下:
(1)首先假设给定的32位内核态逻辑地址为virtAddr.
利用libxc的库函数获取客户域DomU中CR3寄存器的二进制值,求得页目录基地址的物理地址、记为pageDirectoryBaseAddr。
(2)利用pageDirectroyBaseAddr作为基地址,和virtAddr的最高10位构成的偏移量,得到对应的页目录项所在的物理地址、记为pdeAddr.利用libxs的库函数获取物理地址pdeAddr处的数据,求得对应的页表基地址的物理地址,记为pageTableBaseAddr.
(3)利用pageTableBaseAddr作为基地址,和virtAddr的10至19位构成偏移量,得到对应的页表项所在的物理地址、记作pteAddr.利用libxs的库函数获取物理地址pteAddr处的数据,求得对应的页基地址的物理地址、记作pageBaseAddr.
(4)利用pageBaseAddr作为基地址,加上virtAddr的最低12位构成的偏移量,得到内核态逻辑地址virtAddr对应的物理地址phyAddr.
模拟DomU中的扩展分页模型,将内核态逻辑地址转换为物理地址的步骤如下:
(1)首先假设给定的32位内核态逻辑地址为virtAddr.
利用libxc的库函数获取客户域DomU中CR3寄存器的二进制值,求得页目录基地址的物理地址、记为pageDirectoryBaseAddr。
(2)利用pageDirectroyBaseAddr作为基地址,和virtAddr的最高10位构成的偏移量,得到对应的页目录项所在的物理地址、记为pdeAddr.利用libxs的库函数获取物理地址pdeAddr处的数据,求得对应的页基地址的物理地址、记作pageBaseAddr.
(3)利用pageBaseAddr作为基地址,加上virtAddr的最低22位构成的偏移量,得到内核态逻辑地址virtAddr对应的物理地址phyAddr.
模拟DomU中物理地址扩展模型下的常规分页模型,将内核态逻辑地址转换为物理地址的步骤如下:
(1)首先假设给定的32位内核态逻辑地址为virtAddr.
利用libxc的库函数获取客户域DomU中CR3寄存器的二进制值,得到页目录指针表基地址的物理地址、记作pageDirPointerTableAddr.
(2)利用pageDirPointerTableAddr作为基地址,和virtAddr的最高2位构成的偏移量,得到对应的页目录指针项所在的物理地址、记为pdpeAddr.利用libxs的库函数获取物理地址pdpeAddr处的数据,求得对应的页目录基地址的物理地址,记为pageDirectoryBaseAddr.
(3)利用pageDirectroyBaseAddr作为基地址,和virtAddr的2至10位构成的偏移量,得到对应的页目录项所在的物理地址、记为pdeAddr.利用libxs的库函数获取物理地址pdeAddr处的数据,求得对应的页表基地址的物理地址,记为pageTableBaseAddr.
(4)利用pageTableBaseAddr作为基地址,和virtAddr的11至19位构成偏移量,得到对应的页表项所在的物理地址、记作pteAddr.利用libxs的库函数获取物理地址pteAddr处的数据,求得对应的页基地址的物理地址、记作pageBaseAddr.
(5)利用pageBaseAddr作为基地址,加上virtAddr的最低12位构成的偏移量,得到内核态逻辑地址virtAddr对应的物理地址phyAddr.
模拟DomU中物理地址扩展模型下的扩展分页模型,将内核态逻辑地址转换为物理地址的步骤如下:
(1)首先假设给定的32位内核态逻辑地址为virtAddr.
利用libxc的库函数获取客户域DomU中CR3寄存器的二进制值,得到页目录指针表基地址的物理地址、记作pageDirPointerTableAddr.
(2)利用pageDirPointerTableAddr作为基地址,和virtAddr的最高2位构成的偏移量,得到对应的页目录指针项所在的物理地址、记为pdpeAddr.利用libxs的库函数获取物理地址pdpeAddr处的数据,求得对应的页目录基地址的物理地址,记为pageDirectoryBaseAddr.
(3)利用pageDirectroyBaseAddr作为基地址,和virtAddr的2至10位构成的偏移量,得到对应的页目录项所在的物理地址、记为pdeAddr.利用libxs的库函数获取物理地址pdeAddr处的数据,求得对应的页基地址的物理地址,记为pageBaseAddr.
(4)利用pageBaseAddr作为基地址,加上virtAddr的最低21位构成的偏移量,得到内核态逻辑地址virtAddr对应的物理地址phyAddr.
3、信息获取部分的具体实现
通过研究目前主流的破坏内核完整性的恶意软件、以及检测内核完整性技术采用的方法、技术,确定了本发明***需要检测的关键资源。本发明***在管理域Dom0中对客户域DomU中的内核完整性进行检测、需要检测客户域DomU中***的中断向量表、***调用表、***调用函数的完整性。信息获取模块提供了获取中断向量表信息、***调用表信息、***调用函数指令数据的接口。
Linux***的中断向量表的地址保存在IDTR寄存器中。Linux***运行时,IDTR寄存器中存放着中断向量表的32位逻辑地址和16位的表长度值。中断向量表中包含256项,每项占8Byte,每一表项的高16位和低16位合成后表示中断处理程序的32位逻辑地址。获取客户域DomU中***的中断向量表信息的过程如图4所示,具体步骤如下:
(1)利用libxc库函数获取客户域DomU中的中央处理器的IDTR寄存器的值。
(2)取IDTR寄存器值的最高32位,得到中断向量表的32位逻辑地址,记作idtBaseAddr。
(3)中断向量表包含256个表项,分别对中断向量表中的每一个表项,进行如下处理:
3.1)假设处理的表项为中断向量表中第N项,其逻辑地址为idtBaseAddr+8*N.
3.2)利用内存映射模块提供的接口获取第N个表项的二进制数据。每一个表项的二进制数据大小为8Byte,取其最高16位与最低16位便得到了对应的中断处理程序的32位逻辑地址。
Linux***中的***调用表的逻辑地址在内核编译后其地址是固定的,不同版本的Linux内核***调用表的地址可能不相同,通过查看Linux***中的system.map文件中的符号sys_call_table,可以知道***调用表的逻辑地址,本发明预先将DomU中的***调用表的逻辑地址存放在Dom0的安全策略文件中。***调用表中的每个表项占4Byte,每个表项的数据代表一个***调用函数的32位的逻辑地址。获取客户域DomU中***的***调用表信息的过程如图5所示、具体步骤如下:
(1)从部署在管理域Dom0的安全策略文件中读取客户域DomU中操作***的***调用表的逻辑地址、记作syscallTableAddr.。
(2)分别对***调用表中的每一个表项,进行如下处理:
2.1)假设处理的表项为***调用表中第N项,其逻辑地址为syscallTableAddr+4*N.
2.2)利用内存映射模块提供的接口获取第N个表项的二进制数据,便得到了对应的***调用函数的32位逻辑地址。
***调用表中的每个表项占4Byte,每个表项的数据代表一个***调用函数的逻辑地址。***调用函数的逻辑地址都在内核空间。每个编译好的Linux内核的***调用函数的指令数据是固定的,函数指令的长度也是固定的。通过反汇编查看Linux内核源代码编译的目标文件,可以得到***调用函数的指令的长度。获取客户域DomU中***的给定的***调函数的指令数据的过程如图6所示,具体步骤如下:
(1)首先,假设给定的是第N号***调用。
(2)从部署在管理域Dom0中的安全策略文件中读取客户域DomU中操作***的***调用表的32位逻辑地址,记作syscallTableAddr。
(3)从部署在管理域Dom0中的安全策略文件中读取第N号***调用号对应的***调用函数指令的长度,记作Len。
(4)对于第N号***调用,进行如下处理:
4.1)对于第N号***调用,其对应的***调用函数的地址存储在***调用表中的第N个表项,其逻辑地址为syscallTableAddr+4*N.利用内存映射模块的接口获取该表项的值,得到对应的***调用函数逻辑地址funcAddr。
4.2)利用内存映射部分的接口获取逻辑地址funcAddr处长度为Len的数据。这样便得到了第N个***调用函数指令的数据。
4、安全检测部分具体实现
编译好的Linux内核的中断向量表、***调用表、***调用函数指令数据是固定的。目前流行的破坏内核完整性的恶意软件大部分通过修改中断向量表、***调用表、***函数指令达到破坏内核完整性的目的。本发明***首先获取完整内核的中断向量表中的每个中断处理程序的逻辑地址、***调用表中的每个***调用函数的逻辑地址、每个***调用函数的指令数据的SHA-1哈希值,将这些信息记录在文件中,这个文件称为安全策略文件。
安全检测部分以轮询方式调用信息获取部分提供的接口,得到客户域DomU中的中断向量表、***调用表、***调用函数指令数据,与部署在管理域Dom0中的安全策略文件中的信息进行对比,检测客户域DomU中内核的完整性是否收到破坏。检测客户域DomU的内核完整性的过程如图7所示,具体步骤如下:
(1)从部署在管理域Dom0中的安全策略文件读取出以下信息:
1.1)中断向量表中每一个的中断处理函数的逻辑地址;
1.2)***调用表中每个***调用函数的逻辑地址;
1.3)***调用号以及其对应的***调用函数的指令数据的SHA-1哈希值。
(2)以轮询的方式利用信息获取部分提供的接口,获取下列信息:
2.1)客户域DomU中的中断向量表中每个中断处理程序的逻辑地址;
2.2)客户域DomU中的***调用表中的每个***调用函数的逻辑地址;
2.3)客户域DomU中的***调用函数指令的数据,然后利用SHA-1哈希算法计算出***调用函数指令数据的哈希值。
(3)比较从DomU获取的信息与从安全策略文件中读取的信息:
3.1)比较中断向量表中每个中断处理程序的逻辑地址,如果某一项的数据不一致,说明对应的中断处理程序受到恶意软件的中断处理程序重定向攻击,记录下不一致的表项,并向管理域Dom0告警;
3.2)比较***调用表中的每个***调用函数的逻辑地址,如果某一项的数据不一致,说明对应的***调用函数被恶意软件进行了***调用重定向攻击,记录下不一致的表项,并向管理域Dom0告警;
3.3)比较***调用函数指令数据的哈希值,如果不一致,说明相应的***函数受到了恶意软件的代码注入攻击,记录下不一致的***调用号,并向管理域Dom0告警。
Claims (4)
1.一种基于Xen虚拟化的内核完整性检测方法,利用内核完整性检测***对运行在Xen虚拟化平台上的虚拟机的Linux或者类Unix操作***进行内核完整性检测,其特征在于:所述内核完整性检测***包括内存映射部分、信息获取部分和安全检测部分,这三个部分均部署在管理域Dom0,从管理域Dom0对客户域DomU的操作***内核完整性进行检测,并有效利用了Xen提供的隔离性,避免内核完整性检测***受到客户域DomU中的恶意软件的攻击;
所述内存映射部分提供获取客户域DomU中硬件层面的机器字节数据的接口,获取客户域DomU中寄存器二进制数据、物理地址空间对应的随机存储器中的二进制数据和内核态的逻辑地址空间对应的随机存储器的二进制数据,在管理域Dom0模拟客户域DomU操作***的分页模型,利用libxc,libxs库函数从管理域Dom0中获取客户域DomU内核态的逻辑地址空间对应的随机存储器二进制数据;
所述信息获取部分利用内存映射部分提供的接口,获取客户域DomU中与***内核状态相关的关键数据即中断向量表、***调用表和***调用函数指令数据;
所述安全检测部分以轮询方式调用信息获取部分获得客户域DomU的中断向量表、***调用表、***调用函数指令数据并求哈希值,与管理域Dom0安全策略文件的中断向量表、***调用表和***调用函数的SHA-1哈希值进行对比,检测客户域DomU中内核的完整性。
2.根据权利要求1所述的基于Xen虚拟化的内核完整性检测方法,其特征在于:内存映射部分获取DomU中内核态逻辑地址空间对应的随机存储器的二进制数据的过程如下:
(1)假设给定的客户域DomU中的内核态逻辑地址为virtAddr;
(2)确定DomU中操作***采用的分页模型:
2.1)通过libxc的库函数,获取客户域DomU中央处理器的CR4寄存器的值;
2.2)取CR4寄存器的PSE允许页扩展标志位的值X,取CR4寄存器的PAE允许物理地址扩展标志位的值Y;
2.3)如果X等于0、Y等于0,则客户域DomU中***采用的是常规分页模型;如果X等于1、Y等于0,则客户域DomU中***采用的是扩展分页模型;如果X等于0、Y等于1,则客户域DomU中***采用的是物理地址扩展模型下的常规分页模型;如果X等于1、Y等于1,则客户域DomU中***采用的是物理地址扩展模型下的扩展分页模型;
(3)利用libxc的库函数获取客户域DomU中CR3寄存器的值作为基地址,模拟步骤2.3)操作******的四种分页模型,将逻辑地址virtAddr转换为物理地址phyAddr;
(4)利用libxc的库函数获取物理地址phyAddr对应的随机存储器中的二进制数据。
3.根据权利要求1所述的基于Xen虚拟化的内核完整性检测方法,其特征在于:所述信息获取部分通过内存映射部分提供的接口获取客户域DomU中***的中断向量表信息、***调用表中每一项表项的信息和安全策略文件中的***调用函数的哈希值的过程如下:
一、获取中断向量表信息
(1)利用libxc库函数获取客户域DomU中的中央处理器的IDTR寄存器的信息;
(2)取IDTR寄存器值的最高32位,得到中断向量表的32位逻辑地址,记作idtBaseAddr;
(3)中断向量表包含256个表项,分别对中断向量表中的每一个表项,进行如下处理:
3.1)假设处理的表项为中断向量表中第N项,其逻辑地址为idtBaseAddr+8*N;
3.2)利用内存映射模块提供的接口获取第N个表项的二进制数据,每一个表项的二进制数据大小为8Byte,取其最高16位与最低16位便得到了对应的中断处理程序的32位逻辑地址;
二、获取***调用表信息
(1)从部署在管理域Dom0的安全策略文件中读取客户域DomU中操作***的***调用表的逻辑地址,记作syscallTableAddr;
(2)分别对***调用表中的每一个表项,进行如下处理:
2.1)假设处理的表项为***调用表中第N项,其逻辑地址为syscallTableAddr+4*N;
2.2)利用内存映射模块提供的接口获取第N个表项的二进制数据,便得到了对应的***调用函数的32位逻辑地址;
三、获取***调用函数
(1)首先,假设给定的是第N号***调用;
(2)从部署在管理域Dom0中的安全策略文件中读取客户域DomU中操作***的***调用表的32位逻辑地址,记作syscallTableAddr;
(3)从部署在管理域Dom0中的安全策略文件中读取第N号***调用号对应的***调用函数指令的长度,记作Len;
(4)对于第N号***调用,进行如下处理:
4.1)对于第N号***调用,其对应的***调用函数的地址存储在***调用表中的第N个表项,其逻辑地址为syscallTableAddr+4*N,利用内存映射模块的接口获取该表项的值,得到对应的***调用函数逻辑地址funcAddr;
4.2)利用内存映射部分的接口获取逻辑地址funcAddr处长度为Len的数据,得到第N个***调用函数指令的数据。
4.根据权利要求1所述的基于Xen虚拟化的内核完整性检测方法,其特征在于:所述安全检测部分从管理域Dom0对客户域DomU的操作***内核进行完整性检测的操作如下:
(1)从部署在管理域Dom0中的安全策略文件读取出以下信息:
1.1)中断向量表中每一个的中断处理函数的逻辑地址;
1.2)***调用表中每个***调用函数的逻辑地址;
1.3)***调用号以及其对应的***调用函数的指令数据的SHA-1哈希值;
(2)以轮询的方式利用信息获取部分提供的接口,获取下列信息:
2.1)客户域DomU中的中断向量表中每个中断处理程序的逻辑地址;
2.2)客户域DomU中的***调用表中的每个***调用函数的逻辑地址;
2.3)客户域DomU中的***调用函数指令的数据,然后利用SHA-1哈希算法计算出***调用函数指令数据的哈希值;
(3)比较从客户域DomU获取的信息与从安全策略文件中读取的信息;
3.1)比较中断向量表中每个中断处理程序的逻辑地址,如果某一项的数据不一致,说明对应的中断处理程序受到恶意软件的中断处理程序重定向攻击,记录下不一致的表项,并向管理域Dom0告警;
3.2)比较***调用表中的每个***调用函数的逻辑地址,如果某一项的数据不一致,说明对应的***调用函数被恶意软件进行了***调用重定向攻击,记录下不一致的表项,并向管理域Dom0告警;
3.3)比较***调用函数指令数据的哈希值,如果不一致,说明相应的***函数受到了恶意软件的代码注入攻击,记录下不一致的***调用号,并向管理域Dom0告警。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410062486.1A CN103793651B (zh) | 2014-02-22 | 2014-02-22 | 基于Xen虚拟化的内核完整性检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410062486.1A CN103793651B (zh) | 2014-02-22 | 2014-02-22 | 基于Xen虚拟化的内核完整性检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103793651A CN103793651A (zh) | 2014-05-14 |
CN103793651B true CN103793651B (zh) | 2016-05-25 |
Family
ID=50669304
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410062486.1A Expired - Fee Related CN103793651B (zh) | 2014-02-22 | 2014-02-22 | 基于Xen虚拟化的内核完整性检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103793651B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104751050A (zh) * | 2015-04-13 | 2015-07-01 | 成都睿峰科技有限公司 | 一种客户端应用程序管理方法 |
CN105279430A (zh) * | 2015-11-19 | 2016-01-27 | 国云科技股份有限公司 | 针对基于Xen的Linux虚拟机恶意代码攻击的内核完整性检测方法 |
WO2017185202A1 (zh) * | 2016-04-25 | 2017-11-02 | 深圳前海达闼云端智能科技有限公司 | 一种虚拟化***监测方法和装置 |
CN106021136B (zh) * | 2016-05-09 | 2019-01-01 | 广州广电运通金融电子股份有限公司 | 一种基于Linux或Unix内核操作***的串口映射方法及装置 |
CN106778257A (zh) * | 2016-12-08 | 2017-05-31 | 北京国电通网络技术有限公司 | 一种虚拟机防逃逸装置 |
CN106650355B (zh) * | 2016-12-08 | 2020-04-10 | 武汉斗鱼网络科技有限公司 | 一种保护函数调用的方法及装置 |
CN111061655B (zh) * | 2017-12-28 | 2022-06-17 | 贵阳忆芯科技有限公司 | 存储设备的地址转换方法与设备 |
CN110688198B (zh) * | 2019-09-24 | 2021-03-02 | 网易(杭州)网络有限公司 | ***调用方法、装置和电子设备 |
CN111400702B (zh) * | 2020-03-24 | 2023-06-27 | 上海瓶钵信息科技有限公司 | 一种虚拟化的操作***内核保护方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544089A (zh) * | 2013-10-13 | 2014-01-29 | 西安电子科技大学 | 基于Xen的操作***识别方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8973144B2 (en) * | 2011-10-13 | 2015-03-03 | Mcafee, Inc. | System and method for kernel rootkit protection in a hypervisor environment |
-
2014
- 2014-02-22 CN CN201410062486.1A patent/CN103793651B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544089A (zh) * | 2013-10-13 | 2014-01-29 | 西安电子科技大学 | 基于Xen的操作***识别方法 |
Non-Patent Citations (2)
Title |
---|
Using an In-kernel Hypervisor to Protect the Integrity of Operating System;Zhi-xian Chen, Jun Cui, Wei Liu and Hao Huang;《2011 International Conference on Computers, Communications, Control and Automation (CCCA)》;20111231;全文 * |
基于Linux内核不变量推测的Rootkit检测;汪清;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130915;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103793651A (zh) | 2014-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103793651B (zh) | 基于Xen虚拟化的内核完整性检测方法 | |
Cheng et al. | ROPecker: A generic and practical approach for defending against ROP attack | |
CN109923546B (zh) | 虚拟机安全性应用程序的事件过滤 | |
Azab et al. | HIMA: A hypervisor-based integrity measurement agent | |
JP4901842B2 (ja) | ソフトウェアコンポーネントをホワイトリストに登録する方法およびシステム | |
CN101964036B (zh) | 漏洞检测方法及装置 | |
Li et al. | Fine-cfi: fine-grained control-flow integrity for operating system kernels | |
Shi et al. | Cardinal pill testing of system virtual machines | |
EP3048550B1 (en) | Measurement method, electronic device and measurement system | |
CN104715202A (zh) | 一种虚拟机中的隐藏进程检测方法和装置 | |
CN109271789B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
JP2021051745A (ja) | コンピュータ装置およびメモリ管理方法 | |
EP3063692B1 (en) | Virtual machine introspection | |
CN106156621A (zh) | 一种检测虚拟机逃逸的方法及装置 | |
Zhou et al. | Hardware-based workload forensics: Process reconstruction via TLB monitoring | |
Zhong et al. | A virtualization based monitoring system for mini-intrusive live forensics | |
US11556645B2 (en) | Monitoring control-flow integrity | |
CN103617391A (zh) | 一种检测恶意程序的方法、装置及虚拟机 | |
Duflot et al. | ACPI: Design principles and concerns | |
Ahmed et al. | Rule-based integrity checking of interrupt descriptor tables in cloud environments | |
Li et al. | Operating system mechanisms for TPM-based lifetime measurement of process integrity | |
Leite et al. | Evasion Techniques for VM-based Black-Box Software Analysis | |
CN108197464A (zh) | 一种面向云环境的环境敏感型恶意软件分析检测方法和*** | |
CN105279430A (zh) | 针对基于Xen的Linux虚拟机恶意代码攻击的内核完整性检测方法 | |
EP4312401A1 (en) | Methods and systems for analyzing environment-sensitive malware with coverage-guided fuzzing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160525 Termination date: 20210222 |