一种基于Xen的操作系统内核监控方法
【专利摘要】本发明公开了一种基于Xen的操作系统内核监控方法,包括:采用Xen虚拟化技术搭建操作系统内核的安全监控框架,从而使各个扩展模块运行在各自独立的非权限域中;通过Xen的事件通道和授权表通信机制模拟各个扩展模块跨域间的函数调用过程,并在跨域间的函数调用过程中插入用于安全性检查的监控接口。本发明采用Xen虚拟化技术让各个扩展模块被隔离在各自独立的低权限域上运行,然后利用Xen虚拟机的事件通道和授权表通信机制模扩展模块的域间函数调用过程,使各个扩展模块在各自非权限域中被完全隔离的状态运行,从而使任何跨域操作都被监控到,更加全面而有效,且十分方便和快捷。本发明可广泛应用于计算机软件安全领域。
【专利说明】—种基于Xen的操作系统内核监控方法
【技术领域】
[0001]本发明涉及计算机软件安全领域,尤其是一种基于Xen的操作系统内核监控方法。
【背景技术】
[0002]名词解释:
LKM: Loadable Kernel Module,可载入内核模块,用于动态扩充内核功能的机制。
[0003]Kernel Rootkit:内核Rootkit,是破坏内核完整性的主要恶意软件。
[0004]宏内核:又称单核心,是操作系统核心架构的一种。
[0005]Xen: 一种微内核结构的虚拟机。
[0006]Event Channel:事件通道,Xen的通信机制之一。
[0007]Grant Tabbles:授权表,Xen的通信机制之一。
[0008]Core Kernel:核心内核,是操作系统内核的非扩展部分。
[0009]Module:模块。
[0010]struct IMD_info:1MD_info结构体,用于封装IMD_info的属性来组成新的类型。
[0011]Dom:Domain, Xen提供的域,操作系统内核将运行在独立的域中。
[0012]VCPU:虚拟处理器,Xen对处理器的抽象。
[0013]IP:寄存器,用于存储当前执行地址。
[0014]SP:Stack Pointer,栈顶寄存器。
[0015]BP:Base Pointer,栈底寄存器。
[0016]AX:通用寄存器,通常用于保存函数返回值。
[0017]DX:通用寄存器,通常用于保存函数返回值。
[0018]CR2:异常处理寄存器,用于存储异常处理函数的返回值。
[0019]DomO:Xen 的权限域。
[0020]DomU =Xen的非权限域。
[0021]IMD:Isolated Module Domain,隔离模块域(简称隔离域),用于让Module隔离运行所在的DomU。
[0022]evtchn_port_req_0:由DomO到DomU访问请求方向所用的通信端口 ; evtchn_port_prov_0:由DomU到DomO访问请求方向所用的通信端口 ;EVTCHN_P0RT_
REQ_U: IDM 端与 evtchn_port_prov_0 端口 绑定的一个固定端口,用于与 evtchn_port_prov_0端口进行事件通信,其端口号为一预先设定的常数;
EVTCHN_P0RT_PR0V_U: IDM 端与 evtchn_port_req_0 端 口 绑定的一个固定端 口,用于与evtchn_port_req_0端口进行事件通信,其端口号为一预先设定的常数;
模块栈=IMD中执行模块代码所用栈。
[0023]控制栈:MD中执行控制代码所用栈。
[0024]Hypervisor call:超级调用,Xen提供的编程控制接口。[0025]现代的商业操作系统大多采用宏内核架构作为其内核架构,这种架构的特点是整个核心程序都是以核心空间的身份及监管者模式来运行,并且通过LKM方案来对内核功能进行动态扩展。但黑客可以利用这种LKM扩展功能,通过修改内核中的关键数据结构和代码而向内核植入Rootki,然后利用隐藏的恶意进程和文件,窃取私密数据,甚至作为后门程序而存在,破坏了操作系统内核的完整性,影响了操作系统的安全。
[0026]运行在内核里的安全工具不足以反制这种Rootkit,根本原因在于,内核和通过LKM载入的Rootkit运行在相同的权限空间里,如果安全工具能够关闭Rootkit,反过来,Rootkit也能关闭安全工具。因此,必须让运行在内核里的安全工具和通过LKM载入的Rootkit运行在不同的权限里,更准备地说,不能让Rootkit运行在最高权限里,这就必须对被恶意利用的LKM机制进行改变,从而对操作系统内核的完整性进行有效的监控。
[0027]Xen是一种半虚拟化技术的微内核架构虚拟机,其下可以有多个运行域,可以拥有一个DomO域和多个DomU域,其中DomO域为权限域,具有整个操作系统的最高权限,而DomU为非权限域。Xen虚拟机下的域与域之间处于隔离状态,域与域之间通信通过Xen虚拟机提供的Event Channel和Grant Table来实现。Xen虚拟机的微内核架构与传统操作系统的宏内核架构的不同,为通过虚拟化技术实现对操作系统内核运行时的完整性监控提供了可倉泛。
[0028]但是,目前还没有关于将Xen虚拟机应用于监控操作系统内核完整性方面的报道。当前,业内针对操作系统内核运行时的完整性监控方案,主要包括:
a.通过虚拟机来保护内存页表,然后把包含关键数据的内存页标记为只读,当试图修改这些页面所包含的内容时将触发页面错误进而启动监控机对操作进行监控。这种方式只是为了保护关键数据而忽略了其他数据的保护,并不是全面的保护方案。
[0029]b.通过禁止对内核模块代码和模块代码的修改防止恶意代码注入型攻击,但其缺乏对数据区和栈的有效保护,也无法阻止“Return-to-libc”风格的恶意代码的攻击。
[0030]C.通过将非可信扩展模块从核心内核中隔离出来,有效监控了恶意扩展对核心内核完整性的任务操作,但是,对于非恶意扩展外的其它需保护扩展并没有得到应有的保护。
[0031]综上所述,业内针亟需一种全面而有效的,针对操作系统内核运行时的完整性的监控方案。
【发明内容】
[0032]为了解决上述技术问题,本发明的目的是:提供一种全面而有效的,基于Xen的操作系统内核监控方法。
[0033]本发明解决其技术问题所采用的技术方案是:一种基于Xen的操作系统内核监控方法,包括:
A.采用Xen虚拟化技术搭建操作系统内核的安全监控框架,从而使各个扩展模块运行在各自独立的非权限域中;
B.通过Xen的事件通道和授权表通信机制模拟各个扩展模块跨域间的函数调用过程,并在跨域间的函数调用过程中插入用于安全性检查的监控接口。
[0034]进一步,所述步骤A,其包括:
Al.载入 module ; A2.创建非权限域IMD,并对其进行初始化;
A3.将module插入到内核的链表中,并创建struct IMD_info,然后将struct IMD_info链入MD链表中;
A4.将DomO域中模块域初始化代码和控制代码所在的内存页映射到MD的线性地址空间中;
A5.将module本身的代码和数据所在的内存页映射到MD地址空间中,并将MD域里module所占内存页的页表项读、写和执行权限设置为与DomO域相同的权限;然后,再将DomO域中module所占内存页的页表项设置为不可执行;
A6.调用内核函数在DomO中分配包括MD域控制栈在内的内存页,并将内存页信息保存在MD_info相应的属性里;
A7.在DomO域内为IMD分配2个事件通道的端口 evtchn_port_req_0和evtchn_port_prov_0,然后把端 口 号 evtchn_port_req_0 和 evtchn_port_prov_0 写入为 IMD 域分配的栈的栈底,并将两个端口号 evtchn_port_req_0 和 evtchn_port_prov_0 保存到 IMD_info 相应的属性里;
A8.将MD域虚拟处理器的IP寄存器设置为MD初始化代码的函数入口,并调整SP和BP寄存器,以预留MD和DomO传递信息的空间;
A9.启动MD的域虚拟处理器执行初始化代码,以对MD进行初始化;
A10.调用Xen的调度指令进入等待状态,直到从事件通道端口 evtchn_port_prov_0接收到事件才被重新唤醒;
All.调用module->init函数对module进行初始化,从而首次触发从DomO到IMD的域间函数调用;
A12.初始化完成后释放初始化数据或代码所占用的区域。
[0035]进一步,所述各个扩展模块跨域间的函数调用过程包括权限域调用隔离域函数过程、由隔离域到权限域方向的访问异常处理过程、隔离域调用权限域函数的一般处理过程、隔离域调用权限域内存分配函数的处理过程、隔离域调用权限域内存释放函数的处理过程和隔离域对权限域数据区的读写过程。
[0036]进一步,所述权限域调用隔离域函数的过程,其包括:
Gl.DomO发出调用module函数的请求,从而触发页面异常;
G2.通过MD链表上的信息判断页面异常是否由module所在内存页的代码而引起,若是,则执行步骤G3,反之,则保持操作系统自身的异常处理方式;
G3.根据DomO中当前栈顶的位置将当前栈内容复制到MD的模块栈,并将DomO中的CR2、BP和SP寄存器值,一起保存到MD的控制栈;
G4.DomO向事件通道的evtchn_port_req_0端口发送事件;
G5.将MD的模块栈映射到MD中与DomO中当前栈的线性地址相同的地址空间;
G6.1MD检测到在EVTCHN_P0RT_PR0V_U端上接收到事件后从等待状态恢复,并从控制栈获取DomO中CR2、BP和SP寄存器的值;
G7.用当前函数的地址代替模块栈上的返回地址,同时保存MD的BP和SP值到变量IMD_bp和MD_sp里,并根据所取出的DomO中BP和SP寄存器的值切换到模块栈;
G8.跳转到DomO中CR2寄存器所指示的地址执行函数进行处理,待执行完成后返回步骤G7中替换后的返回地址;
G9.将IMD当前的AX和DX寄存器内容写入控制栈栈底,然后根据保存的IMD_bp和IMD_sp将栈切换回控制栈;
Gl0.1MD向事件通道端口 EVTCHN_PORT_PROV_U发送事件,并进入等待状态;
Gil.DomO从evtchn_port_req_0端口接收到事件后恢复执行,将IMD控制栈底部的AX和DX值取出保存到相应的ax和dx变量里;
G12.根据当前栈的栈帧情况,把IMD中的数据栈复制到当前栈,接着根据ax、dx变量修改异常处理现场保存的AX和DX寄存器值,并将现场保存的BP和SP值修改成退出一个栈桢后的BP和SP值,然后结束调用过程。
[0037]进一步,所述由隔离域到权限域方向的访问异常处理过程,其包括:
H1.1MD的代码访问属于DomO而不属于模块本身的内存地址,从而在触发内存异常中断后执行预先绑定好的回调函数;
H2.保存包含CR2寄存器在内的寄存器现场到栈底,并向MD中的事件通道端口EVTCHN_PORT_REQ_U 发送事件以通知 DomO ;
H3.DomO收到从端口 evtchn_port_req_0传来的事件后重新被唤醒,调用相应的处理函数;
H4.DomO从保存的寄存器现场信息提取出异常出现的地址和访问类型;
H5.检查MD访问的地址和访问类型是否超出DomO的访问能力,若是,则调用操作系统自身的异常处理函数,反之,则执行步骤H6 ;
H6.调用安全检查函数根据模块地址和访问类型信息判断该模块是否具有访问的权限,若是,则执行步骤H7,反之,则执行操作系统相应的安全处理程序对该模块进行处理;H7.判断该模块的访问类型是属于读写还是属于执行,若为读写,则转至隔离域对权限域数据区的读写过程,若为执行,则执行步骤HS ;
HS.判断DomO识别出的MD所要调用的函数是否为内存分配函数,若是,则转至隔离域调用权限域内存分配函数的处理过程,反之,则执行步骤H9 ;
H9.判断DomO识别出的MD所要调用的函数是否为内存释放函数,若是,则转至隔离域调用权限域内存释放函数的处理过程,反之,则执行隔离域调用权限域函数的一般处理过程。
[0038]进一步,所述隔离域调用权限域函数的一般处理过程,其包括:
Pl.保存MD的模块栈上一栈桢中的返回地址,并用待返回的目标地址对该返回地址进行替换;
P2.将当前栈切换为MD的模块栈,并转至操作系统自身的异常地址执行处理过程;P3.执行完毕后返回待返回的目标地址,并用当前虚拟处理器各通用寄存器的执行现场覆盖步骤H2中保存在控制栈的现场信息,然后将当前栈切换回DomO原来的栈;
P4.DomO将步骤Pl保存的返回地址写入MD控制栈底中步骤A8所预留的MD和DomO传递信息空间里,然后通过事件通道端口 evtchn_port_prov_0向IMD发送事件,并进入等待状态;
P5.1MD在收到EVTCHN_PORT_REQ_U端口传来的事件后重新被唤醒;
P6.1MD切换到模块栈,恢复现场,并跳到步骤P4所保存的返回地址,以继续执行操作系统自身的正常处理过程。
[0039]进一步,所述隔离域调用权限域内存分配函数的处理过程,其包括:
51.DomO为被调用的内存分配函数分配内存;
52.DomO将所分配的内存页以与DomO相同的逻辑地址和相同的访问权限映射至MD的地址空间;
53.DomO将所分配的内存页在DomO的页表项中设置为不可执行;
54.DomO对MD中模块栈作出相应的修改并将对MD的虚拟处理器中的SP和BP指针作出相应的调整,以模拟出函数调用完成的过程;
55.DomO向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事件。
[0040]进一步,所述隔离域调用权限域内存释放函数的处理过程,其包括:
Fl.1MD将待释放的内存页从MD页表的地址空间上移除;
F2.1MD调用DomO中的释放函数,以释放内存页;
F3.1MD将返回结果写入MD模块栈;
F4.将现场寄存器的状态和原返回函数地址写入MD控制栈的栈底;
F5.DomO向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事
件;
F6.1MD切换到模块栈,恢复现场,并跳到控制栈所保存的返回地址以继续执行操作系统自身的正常处理过程。
[0041]进一步,所述隔离域对权限域数据区的读写过程,其包括:
Wl.根据IMD中的IP寄存器的值取出其所指向的命令,并将取出的指令写入预先预留好的位置V,然后在下一条命令中写入无条件跳转指令,所述无条件跳转指令的地址值为步骤W3的值;
W2.保存DomO的当前现场,切换栈到IMD的模块栈,并恢复IMD中的现场,然后跳转到步骤Wl中的位置V ;
W3.将当前状态和MD的当前IP地址的下一条地址一起存入MD控制栈,然后切换回原来的栈,并恢复现场;
W4.向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事件;W5.1MD切换到模块栈,恢复现场,并跳到控制栈中保存的返回地址以继续执行操作系统的正常处理过程。
[0042]本发明的有益效果是:采用Xen虚拟化技术让各个扩展模块被隔离在各自独立的低权限域上运行,然后利用Xen虚拟机的事件通道和授权表通信机制模扩展模块的域间函数调用过程,使各个扩展模块在各自非权限域中被完全隔离的状态运行,从而使任何跨域操作都被监控到,更加全面而有效,且只需在跨域间的函数调用过程中插入监控接口即可进行监控,十分方便和快捷。
【专利附图】
【附图说明】
[0043]下面结合附图和实施例对本发明作进一步说明。
[0044]图1为本发明一种基于Xen的操作系统内核监控方法的步骤流程图; 图2为本发明步骤A的流程图;
图3为发明权限域调用隔离域函数的过程的步骤流程图;
图4为由隔离域到权限域方向的访问异常处理过程的步骤流程图;
图5为隔离域调用权限域函数的一般处理过程的步骤流程图;
图6为隔离域调用权限域内存分配函数的处理过程的步骤流程图;
图7为隔离域调用权限域内存释放函数的处理过程的步骤流程图;
图8为隔离域对权限域数据区的读写过程的步骤流程图;
图9为本发明所搭建操作系统内核的安全监控框架结构示意图。
【具体实施方式】
[0045]参照图1,一种基于Xen的操作系统内核监控方法,包括:
A.采用Xen虚拟化技术搭建操作系统内核的安全监控框架,从而使各个扩展模块运行在各自独立的非权限域中;
B.通过Xen的事件通道和授权表通信机制模拟各个扩展模块跨域间的函数调用过程,并在跨域间的函数调用过程中插入用于安全性检查的监控接口。
[0046]参照图2,进一步作为优选的实施方式,所述步骤A,其包括:
Al.载入 module ;
A2.创建非权限域IMD,并对其进行初始化;
A3.将module插入到内核的链表中,并创建struct IMD_info,然后将struct IMD_info链入MD链表中;
A4.将DomO域中模块域初始化代码和控制代码所在的内存页映射到MD的线性地址空间中;
A5.将module本身的代码和数据所在的内存页映射到MD地址空间中,并将MD域里module所占内存页的页表项读、写和执行权限设置为与DomO域相同的权限;然后,再将DomO域中module所占内存页的页表项设置为不可执行;
A6.调用内核函数在DomO中分配包括MD域控制栈在内的内存页,并将内存页信息保存在MD_info相应的属性里;
A7.在DomO域内为IMD分配2个事件通道的端口 evtchn_port_req_0和evtchn_port_prov_0,然后把端 口 号 evtchn_port_req_0 和 evtchn_port_prov_0 写入为 IMD 域分配的栈的栈底,并将两个端口号 evtchn_port_req_0 和 evtchn_port_prov_0 保存到 IMD_info 相应的属性里;
A8.将MD域虚拟处理器的IP寄存器设置为MD初始化代码的函数入口,并调整SP和BP寄存器,以预留MD和DomO传递信息的空间;
A9.启动MD的域虚拟处理器执行初始化代码,以对MD进行初始化;
A10.调用Xen的调度指令进入等待状态,直到从事件通道端口 evtchn_port_prov_0接收到事件才被重新唤醒;
All.调用module->init函数对module进行初始化,从而首次触发从DomO到IMD的域间函数调用;
A12.初始化完成后释放初始化数据或代码所占用的区域。[0047]其中,步骤A7 中将把端 口 号 evtchn_port_req_0 和 evtchn_port_prov_0 写入为MD域分配的栈的栈底,用于为MD初始化提供信息,且最先写入为MD域分配的栈的栈底的端口为 evtchn_port_req_0。
[0048]步骤All中调用module_>init函数对module进行初始化时,因为DomO中该module所在的内存页表项已在步骤A5中被设置成了不可执行,且MD域也已初始化好,所以将首次触发DomO到MD的域间调用。
[0049]进一步作为优选的实施方式,所述各个扩展模块跨域间的函数调用过程包括权限域调用隔离域函数过程、由隔离域到权限域方向的访问异常处理过程、隔离域调用权限域函数的一般处理过程、隔离域调用权限域内存分配函数的处理过程、隔离域调用权限域内存释放函数的处理过程和隔离域对权限域数据区的读写过程。
[0050]参照图3,进一步作为优选的实施方式,所述权限域调用隔离域函数的过程,其包括:
Gl.DomO发出调用module函数的请求,从而触发页面异常;
G2.通过MD链表上的信息判断页面异常是否由module所在内存页的代码而引起,若是,则执行步骤G3,反之,则保持操作系统自身的异常处理方式;
G3.根据DomO中当前栈顶的位置将当前栈内容复制到MD的模块栈,并将DomO中的CR2、BP和SP寄存器值,一起保存到MD的控制栈;
G4.DomO向事件通道的evtchn_port_req_0端口发送事件;
G5.将MD的模块栈映射到MD中与DomO中当前栈的线性地址相同的地址空间;
G6.1MD检测到在EVTCHN_P0RT_PR0V_U端上接收到事件后从等待状态恢复,并从控制栈获取DomO中CR2、BP和SP寄存器的值;
G7.用当前函数的地址代替模块栈上的返回地址,同时保存MD的BP和SP值到变量IMD_bp和MD_sp里,并根据所取出的DomO中BP和SP寄存器的值切换到模块栈;
G8.跳转到DomO中CR2寄存器所指示的地址执行函数进行处理,待执行完成后返回步骤G7中替换后的返回地址;
G9.将IMD当前的AX和DX寄存器内容写入控制栈栈底,然后根据保存的IMD_bp和IMD_sp将栈切换回控制栈;
G10.1MD向事件通道端口 EVTCHN_P0RT_PR0V_U发送事件,并进入等待状态;
Gil.DomO从evtchn_port_req_0端口接收到事件后恢复执行,将IMD控制栈底部的AX和DX值取出保存到相应的ax和dx变量里;
G12.根据当前栈的栈帧情况,把IMD中的数据栈复制到当前栈,接着根据ax、dx变量修改异常处理现场保存的AX和DX寄存器值,并将现场保存的BP和SP值修改成退出一个栈桢后的BP和SP值,然后结束调用过程。
[0051]步骤Gl中,当DomO发出调用module函数的请求时,因为在步骤A5中已经将module所在DomO的所有页表项设为不可执行,因此将触发页面异常。
[0052]参照图4,进一步作为优选的实施方式,所述由隔离域到权限域方向的访问异常处理过程,其包括:
H1.1MD的代码访问属于DomO而不属于模块本身的内存地址,从而在触发内存异常中断后执行预先绑定好的回调函数; H2.保存包含CR2寄存器在内的寄存器现场到栈底,并向MD中的事件通道端口EVTCHN_PORT_REQ_U 发送事件以通知 DomO ;
H3.DomO收到从端口 evtchn_port_req_0传来的事件后重新被唤醒,调用相应的处理函数;
H4.DomO从保存的寄存器现场信息提取出异常出现的地址和访问类型;
H5.检查MD访问的地址和访问类型是否超出DomO的访问能力,若是,则调用操作系统自身的异常处理函数,反之,则执行步骤H6 ;
H6.调用安全检查函数根据模块地址和访问类型信息判断该模块是否具有访问的权限,若是,则执行步骤H7,反之,则执行操作系统相应的安全处理程序对该模块进行处理;H7.判断该模块的访问类型是属于读写还是属于执行,若为读写,则转至隔离域对权限域数据区的读写过程,若为执行,则执行步骤HS ;
HS.判断DomO识别出的MD所要调用的函数是否为内存分配函数,若是,则转至隔离域调用权限域内存分配函数的处理过程,反之,则执行步骤H9 ;
H9.判断DomO识别出的MD所要调用的函数是否为内存释放函数,若是,则转至隔离域调用权限域内存释放函数的处理过程,反之,则执行隔离域调用权限域函数的一般处理过程。
[0053]其中,步骤Hl中预先绑定好的回调函数,是指搭建操作系统内核的安全监控框架过程中,由步骤A9绑定好的异常处理回调函数。
[0054]步骤Hl中MD的代码访问属于DomO而不属于模块本身的内存地址时,由于这些地址所在页在页表中已被标记为无效,因此会触发内存异常中断,然后执行预先绑定好的回调函数。
[0055]参照图5,进一步作为优选的实施方式,所述隔离域调用权限域函数的一般处理过程,其包括:
Pl.保存MD的模块栈上一栈桢中的返回地址,并用待返回的目标地址对该返回地址进行替换;
P2.将当前栈切换为MD的模块栈,并转至操作系统自身的异常地址执行处理过程;P3.执行完毕后返回待返回的目标地址,并用当前虚拟处理器各通用寄存器的执行现场覆盖步骤H2中保存在控制栈的现场信息,然后将当前栈切换回DomO原来的栈;
P4.DomO将步骤Pl保存的返回地址写入MD控制栈底中步骤A8所预留的MD和DomO传递信息空间里,然后通过事件通道端口 evtchn_port_prov_0向IMD发送事件,并进入等待状态;
P5.1MD在收到EVTCHN_PORT_REQ_U端口传来的事件后重新被唤醒;
P6.1MD切换到模块栈,恢复现场,并跳到步骤P4所保存的返回地址,以继续执行操作系统自身的正常处理过程。
[0056]参照图6,进一步作为优选的实施方式,所述隔离域调用权限域内存分配函数的处理过程,其包括:
51.DomO为被调用的内存分配函数分配内存;
52.DomO将所分配的内存页以与DomO相同的逻辑地址和相同的访问权限映射至MD的地址空间;53. DomO将所分配的内存页在DomO的页表项中设置为不可执行;
54.DomO对MD中模块栈作出相应的修改并将对MD的虚拟处理器中的SP和BP指针作出相应的调整,以模拟出函数调用完成的过程;
55.DomO向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事件。
[0057]参照图7,进一步作为优选的实施方式,所述隔离域调用权限域内存释放函数的处理过程,其包括:
Fl.1MD将待释放的内存页从MD页表的地址空间上移除;
F2.1MD调用DomO中的释放函数,以释放内存页;
F3.1MD将返回结果写入MD模块栈;
F4.将现场寄存器的状态和原返回函数地址写入MD控制栈的栈底;
F5.DomO向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事
件;
F6.1MD切换到模块栈,恢复现场,并跳到控制栈所保存的返回地址以继续执行操作系统自身的正常处理过程。
[0058]参照图8,进一步作为优选的实施方式,所述隔离域对权限域数据区的读写过程,其包括:
Wl.根据IMD中的IP寄存器的值取出其所指向的命令,并将取出的指令写入预先预留好的位置V,然后在下一条命令中写入无条件跳转指令,所述无条件跳转指令的地址值为步骤W3的值;
W2.保存DomO的当前现场,切换栈到IMD的模块栈,并恢复IMD中的现场,然后跳转到步骤Wl中的位置V;
W3.将当前状态和MD的当前IP地址的下一条地址一起存入MD控制栈,然后切换回原来的栈,并恢复现场;
W4.向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事件;W5.1MD切换到模块栈,恢复现场,并跳到控制栈中保存的返回地址以继续执行操作系统的正常处理过程。
[0059]下面结合具体的实施例对本发明作进一步详细说明。
[0060]实施例一
本实施例对步骤A的A2、A3、A9步骤和步骤Hl进行说明。
[0061]步骤A2中的struct IMD_info数据结构的定义为: struct IMD_info {
unsigned int domid ; struct module* module ; struct page氺 ctl_stack ; struct page木 mod—stack[2]; evtchn—port_t evtchn—port—req—0 ; evtchn—port_t evtchn—port—prov_0 ;
};而步骤A3则包括以下步骤:
A31.创建一个新的非权限域MD ;
A32.设置MD的最大内存使用数;
A33.设置MD的虚拟处理器数量(本发明设置其为I);
A34.初始化MD的虚拟处理器。
[0062]步骤A9则可进一步划分为以下步骤;
A91.将DomO存放在MD控制栈(即MD当前运行的栈)里的事件通道的端口号evtchn_port_req_0> evtchn_port_prov_0 取出;
A92.建立MD和DomO之间的Event Channel通信,将MD端的端口号EVTCHN_P0RT_REQ_U 和 EVTCHN_P0RT_PR0V_U 分别与 DomO 端的 evtchn_port_prov_0 和 evtchn_port_req_0建立起绑定关系,其中EVTCHN_PORT_REQ_U和EVTCHN_P0RT_PR0V_U为事先预定值;A93.为IMD分配一个Event Channel端口 evtchn_port_mmfalt,并将其与页面异常中断(即14号中断)绑定;
A94.为 IMD 中的 Event Channel 端口 evtchn_port_mmfalt 设置回调函数;
A95.通过向MD的端口 EVTCHN_PORT_REQ_U发送事件消息,表示初始化完成;
A96.1MD进入等待状态,等待重新接收到从事件端口 EVTCHN_P0RT_U发过来的事件。
[0063]步骤Hl中MD的代码访问属于DomO的内存地址时,所需传递事件信息的数据结构为:
struct access {
int flag -J/ 读 READ、写 WRITE 和 EXEC 调用 //
unsigned long address ;
};
实施例二
本实施例对调用结束后的模块卸载过程进行说明。
[0064]调用结束后,需要对模块进行卸载,与模块载入过程(即搭建操作系统内核的安全监控框架过程)相对应,本发明的模块卸载过程包括以下步骤:
Ql.执行Xen系统自带的mod_>exit函数,从而对模块进行卸载;
Q2.销毁函数调用过程所用到的MD ;
Q3.释放模块。
[0065]实施例三
参照图9,本发明的第三实施例:
本发明利用Xen虚拟机Domain的相互隔离特性,让module隔离在IMD域上运行,通过Xen下的事件通道和授权表通信机制模拟域间函数调用过程。在域间函数调用的过程中就可以插入供域间调用的安全性进行检查的模块进程监控器或模块进程监控接口,从而对操作系统内核的完整性进行全面而有效的监控。
[0066]Xen的超级调用是本发明搭建操作系统内核的安全监控框架的关键,本发明各个步骤所涉及的超级调用包括: (0.创建域
实施例一步骤A31创建非权限域IMD所采用的代码为:HYPERVISOR_domctI(XEN_DOMCTL_createdomain,
struct struct xen_domctl 氺 xen_domctl)。
[0067](2).设置步骤A32中指定域的最大内存页数
实施例一步骤A32设置指定域的最大内存页数所采用的代码为:
HYPERVIS0R_memory_oP(XENMEM_maximum_ram_page,
struct xen_domctl_max_mem * max_mem)。
[0068](3).设置指定域的最大VCPU数 实施例一步骤A33设置指定域的最大VCPU数所采用的代码为:HYPERVIS0R_dometI(XEN_DOMCTL_max_vcpus,
struct struct xen_domctl 氺 xen_domctl)。
[0069](4).初始化虚拟处理器
实施例一步骤A34初始化MD的虚拟处理器所采用的代码为:HYPERVISOR_vCpu_op (VCPUOP_initialise,
struct vcpu_guest_context * ctxt)。
[0070](5).设置步骤A4、A5和A6中指定域的最大内存页数
设置步骤A4、A5和A6中指定域的最大内存页数所采用的代码为:
HYPERVISOR_update_va_mapping_otherdomain(unsigned longva, u64 val64,
unsigned long flags, domid_t domid)。
[0071](6).分配一个未绑定的事件通道端口
步骤A7中分配一个未绑定的事件通道端口所采用的代码为:
HYPERVIS0R_event_channel_op(EVTCHN0P_alloc_unbound,
struct evtchn_alloc_unbound * alloc_unbound)。
[0072](7).启动虚拟寄存器
步骤A9中启动虚拟寄存器所采用的代码为:
HYPERVIS0R_vcpu_op(VCPU0P_up, NULL)。
[0073](8).分配一个事件通道端口并与指定域的指定端口绑定
实施例一步骤A92中分配一个事件通道端口并与指定域的指定端口绑定所采用的代码为:
HYPERVIS0R_event_channel_op(EVTCHNOP_bind_interdomain,
struct evtchn_bind_interdomain 氺 bind_interdomain)。
[0074](9).设置步骤A93中指定域的最大内存页数
实施例一步骤A93中指定域的最大内存页数所采用的代码为:
HYPERVIS0R_event_channel_op(EVTCHN0P_bind_virq,
struct evtchn_bind_virq 氺 bind_virq)。
[0075](10).为指定事件通道端口设置回调函数
实施例一步骤A94中为指定Event Channel端口设置回调函数所采用的代码为: HYPERVIS0R_set_callbacks(evtchn_port, unsigned long failsafe_address, unsigned long syscall_address)。[0076](11).向指定事件通道端口发送事件
实施例一步骤A94和步骤G5中向指定事件通道端口发送事件所采用的代码为: HYPERVISOR_event_channel_op(EVTCHN0P_send, struct evtchn_send 氺 send)。
[0077](12).进入等待状态,等待指定Event Channel端口收到事件时重新唤醒 实施例一步骤A96、步骤AlO和步骤S5中进入等待状态,等待指定Event Channel端口
收到事件时重新唤醒所采用的代码为:
HYPERVIS0R_sched_op(SCHED0P_poll, sched_poll_t * arg)。
[0078](13).切换栈
步骤G7中切换栈所采用的代码为:
HYPERVISOR_stack_switch(unsigned long ss, unsigned long esp)。
[0079]与现有技术相比,本发明采用Xen虚拟化技术让各个扩展模块被隔离在各自独立的低权限域上运行,然后利用Xen虚拟机的事件通道和授权表通信机制模扩展模块的域间函数调用过程,使各个扩展模块在各自非权限域中被完全隔离的状态运行,从而使任何跨域操作都被监控到,更加全面而有效,且只需在跨域间的函数调用过程中插入监控接口即可进行监控,十分方便和快捷。 [0080]以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
【权利要求】
1.一种基于Xen的操作系统内核监控方法,其特征在于:包括: A. 采用Xen虚拟化技术搭建操作系统内核的安全监控框架,从而使各个扩展模块运行在各自独立的非权限域中; B.通过Xen的事件通道和授权表通信机制模拟各个扩展模块跨域间的函数调用过程,并在跨域间的函数调用过程中插入用于安全性检查的监控接口。
2.根据权利要求1所述的一种基于Xen的操作系统内核监控方法,其特征在于:所述步骤A,其包括: Al.载入 module ; A2.创建非权限域IMD,并对其进行初始化; A3.将module插入到内核的链表中,并创建struct IMD_info,然后将struct IMD_info链入MD链表中; A4.将DomO域中模块域初始化代码和控制代码所在的内存页映射到MD的线性地址空间中; A5.将module本身的代码和数据所在的内存页映射到MD地址空间中,并将MD域里module所占内存页的页表项读、写和执行权限设置为与DomO域相同的权限;然后,再将DomO域中module所占内存页的页表项设置为不可执行; A6.调用内核函数在DomO中分配包括MD域控制栈在内的内存页,并将内存页信息保存在MD_info相应的属性里; A7.在DomO域内为IMD分配2个事件通道的端口 evtchn_port_req_0和evtchn_port_prov_0,然后把端口 号 evtchn_port_req_0 和 evtchn_port_prov_0 写入为 IMD 域分配的栈的栈底,并将两个端口号 evtchn_port_req_0 和 evtchn_port_prov_0 保存到 IMD_info 相应的属性里; A8.将MD域虚拟处理器的IP寄存器设置为MD初始化代码的函数入口,并调整SP和BP寄存器,以预留MD和DomO传递信息的空间; A9.启动MD的域虚拟处理器执行初始化代码,以对MD进行初始化; A10.调用Xen的调度指令进入等待状态,直到从事件通道端口 evtchn_port_prov_0接收到事件才被重新唤醒; All.调用module->init函数对module进行初始化,从而首次触发从DomO到IMD的域间函数调用; A12.初始化完成后释放初始化数据或代码所占用的区域。
3.根据权利要求1或2所述的一种基于Xen的操作系统内核监控方法,其特征在于:所述各个扩展模块跨域间的函数调用过程包括权限域调用隔离域函数过程、由隔离域到权限域方向的访问异常处理过程、隔离域调用权限域函数的一般处理过程、隔离域调用权限域内存分配函数的处理过程、隔离域调用权限域内存释放函数的处理过程和隔离域对权限域数据区的读写过程。
4.根据权利要求3所述的一种基于Xen的操作系统内核监控方法,其特征在于:所述权限域调用隔离域函数的过程,其包括: Gl.DomO发出调用module函数的请求,从而触发页面异常; G2.通过MD链表上的信息判断页面异常是否由module所在内存页的代码而引起,若是,则执行步骤G3,反之,则保持操作系统自身的异常处理方式; G3.根据DomO中当前栈顶的位置将当前栈内容复制到MD的模块栈,并将DomO中的CR2、BP和SP寄存器值,一起保存到MD的控制栈; G4.DomO向事件通道的evtchn_port_req_0端口发送事件; G5.将MD的模块栈映射到MD中与DomO中当前栈的线性地址相同的地址空间; G6.1MD检测到在EVTCHN_PORT_PROV_U端上接收到事件后从等待状态恢复,并从控制栈获取DomO中CR2、BP和SP寄存器的值; G7.用当前函数的地址代替模块栈上的返回地址,同时保存MD的BP和SP值到变量IMD_bp和MD_sp里,并根据所取出的DomO中BP和SP寄存器的值切换到模块栈; G8.跳转到DomO中CR2寄存器所指示的地址执行函数进行处理,待执行完成后返回步骤G7中替换后的返回地址; G9.将IMD当前的AX和DX寄存器内容写入控制栈栈底,然后根据保存的IMD_bp和IMD_sp将栈切换回控制栈; G10.1MD向事件通道端 口 EVTCHN_PORT_PROV_U发送事件,并进入等待状态; Gil.DomO从evtchn_port_req_0端口接收到事件后恢复执行,将IMD控制栈底部的AX和DX值取出保存到相应的ax和dx变量里; G12.根据当前栈的栈帧情况,把IMD中的数据栈复制到当前栈,接着根据ax、dx变量修改异常处理现场保存的AX和DX寄存器值,并将现场保存的BP和SP值修改成退出一个栈桢后的BP和SP值,然后结束调用过程。
5.根据权利要求4所述的一种基于Xen的操作系统内核监控方法,其特征在于:所述由隔离域到权限域方向的访问异常处理过程,其包括: H1.1MD的代码访问属于DomO而不属于模块本身的内存地址,从而在触发内存异常中断后执行预先绑定好的回调函数; H2.保存包含CR2寄存器在内的寄存器现场到栈底,并向MD中的事件通道端口EVTCHN_PORT_REQ_U 发送事件以通知 DomO ; H3.DomO收到从端口 evtchn_port_req_0传来的事件后重新被唤醒,调用相应的处理函数; H4.DomO从保存的寄存器现场信息提取出异常出现的地址和访问类型; H5.检查MD访问的地址和访问类型是否超出DomO的访问能力,若是,则调用操作系统自身的异常处理函数,反之,则执行步骤H6 ; H6.调用安全检查函数根据模块地址和访问类型信息判断该模块是否具有访问的权限,若是,则执行步骤H7,反之,则执行操作系统相应的安全处理程序对该模块进行处理;H7.判断该模块的访问类型是属于读写还是属于执行,若为读写,则转至隔离域对权限域数据区的读写过程,若为执行,则执行步骤HS ; HS.判断DomO识别出的MD所要调用的函数是否为内存分配函数,若是,则转至隔离域调用权限域内存分配函数的处理过程,反之,则执行步骤H9 ; H9.判断DomO识别出的MD所要调用的函数是否为内存释放函数,若是,则转至隔离域调用权限域内存释放函数的处理过程,反之,则执行隔离域调用权限域函数的一般处理过程。
6.根据权利要求5所述的一种基于Xen的操作系统内核监控方法,其特征在于:所述隔离域调用权限域函数的一般处理过程,其包括: Pl.保存MD的模块栈上一栈桢中的返回地址,并用待返回的目标地址对该返回地址进行替换; P2.将当前栈切换为MD的模块栈,并转至操作系统自身的异常地址执行处理过程;P3.执行完毕后返回待返回的目标地址,并用当前虚拟处理器各通用寄存器的执行现场覆盖步骤H2中保存在控制栈的现场信息,然后将当前栈切换回DomO原来的栈; P4.DomO将步骤Pl保存的返回地址写入MD控制栈底中步骤A8所预留的MD和DomO传递信息空间里,然后通过事件通道端口 evtchn_port_prov_0向IMD发送事件,并进入等待状态; P5.1MD在收到EVTCHN_PORT_REQ_U端口传来的事件后重新被唤醒; P6.1MD切换到模块栈,恢复现场,并跳到步骤P4所保存的返回地址,以继续执行操作系统自身的正常处理过程。
7.根据权利要求6所述的一种基于Xen的操作系统内核监控方法,其特征在于: 所述隔离域调用权限域内存分配函数的处理过程,其包括: 51.DomO为被调用的内存分配函数分配内存; 52.DomO将所分配的内存页以与DomO相同的逻辑地址和相同的访问权限映射至MD的地址空间; 53.DomO将所分配的内存页在DomO的页表项中设置为不可执行; 54.DomO对MD中模块栈作出相应的修改并将对MD的虚拟处理器中的SP和BP指针作出相应的调整,以模拟出函数调用完成的过程; 55.DomO向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事件。
8.根据权利要求7所述的一种基于Xen的操作系统内核监控方法,其特征在于:所述隔离域调用权限域内存释放函数的处理过程,其包括: Fl.1MD将待释放的内存页从MD页表的地址空间上移除; F2.1MD调用DomO中的释放函数,以释放内存页; F3.1MD将返回结果写入MD模块栈; F4.将现场寄存器的状态和原返回函数地址写入MD控制栈的栈底; F5.DomO向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事件; F6.1MD切换到模块栈,恢复现场,并跳到控制栈所保存的返回地址以继续执行操作系统自身的正常处理过程。
9.根据权利要求8所述的一种基于Xen的操作系统内核监控方法,其特征在于: 所述隔离域对权限域数据区的读写过程,其包括: Wl.根据IMD中的IP寄存器的值取出其所指向的命令,并将取出的指令写入预先预留好的位置V,然后在下一条命令中写入无条件跳转指令,所述无条件跳转指令的地址值为步骤W3的值; W2.保存DomO的当前现场,切换栈到IMD的模块栈,并恢复IMD中的现场,然后跳转到步骤Wl中的位置V ; W3.将当前状态和MD的当前IP地址的下一条地址一起存入MD控制栈,然后切换回原来的栈,并恢复现场; W4.向MD发送事件通道信号,唤醒MD,并重新回到等待状态,等待再次接收到事件;W5.1MD切换到模块栈,恢复现场,并跳到控制栈中保存的返回地址以继续执行操作系统的正常 处理过程。
【文档编号】G06F9/455GK103955362SQ201410133955
【公开日】2014年7月30日 申请日期:2014年4月3日 优先权日:2014年4月3日
【发明者】徐靖, 徐海水 申请人:广东工业大学