基于Windows平台的强制访问控制装置及控制方法

文档序号:6338615阅读:431来源:国知局
专利名称:基于Windows平台的强制访问控制装置及控制方法
技术领域
本发明属于安全操作系统领域,涉及一种Windows系统的安全加固方法,具体涉及一种基于Windows平台的强制访问控制系统及控制方法,可以实现对Windows系统的强制访问控制。
背景技术
是现今广泛使用的操作系统之一,它的安全性也成为广大用户所关心和担忧的问题。Windows操作系统自带的自主访问控制功能是Windows系统安全保障机制的核心内容, 它通过安全子系统关键组件来对系统敏感资源进行访问控制。自主访问控制机制的基本思想是拥有客体的主体能够随意为其他主体分配对该客体的访问控制权限。这种机制对于主体用户而言有极大的自主性和灵活性,但是提供的安全防护相对比较低,因此无法抵御特洛伊木马之类的攻击。通过对目前市场上流行的安全产品进行统计和分析发现,目前专门针对Windows系统的安全产品如防火墙和杀毒软件,大都是以用户层的应用程序来运行, 可以对系统外围的环境起到防御的作用,但是对提高系统自身的安全性作用非常有限。所以从内核态对Windows系统进行监控有着非常重要的意义。

发明内容
本发明目的在于提供一种基于Windows平台的强制访问控制系统,解决了 Windows操作系统自主访问控制机制监控力度不足所导致的安全问题。为了解决现有技术中的这些问题,本发明提供的技术方案是
一种基于Windows平台的强制访问控制装置,包括用于截获Windows应用程序通过系统调用访问Windows系统内核对象的请求的监控模块和用于判断请求合法性与否的核心安全服务器,其特征在于所述监控模块和核心安全服务器均设置在Windows系统内核层,监控模块截获操作系统进程对内核对象的访问请求,并提供给核心安全服务器进行策略判断;核心安全服务器进行权限判定后,监控模块根据安全服务器的判断结果许可访问 Windows系统内核对象请求与否,若允许,则执行原来的系统调用;若拒绝,则直接返回。优选的,监控模块截获的请求对象选自Windows应用程序通过系统调用访问的文件对象、进程对象、线程对象或注册表对象的任何一种或两种以上的任意组合。优选的,所述监控模块包括进程监控子模块,文件监控子模块和注册表监控子模块;所述进程监控子模块用于独立地处理对进程对象或线程对象访问的控制,所述文件监控子模块和注册表监控子模块均需要调用进程监控子模块来完成对文件对象和注册表对象访问的控制。优选的,所述监控模块为采用内核级Hook技术的内核SSDT-H00K模块,所述进程监控子模块的Hook集用于监控创建进程、打开进程、终止进程、创建线程、打开线程、终止线程;所述文件监控子模块的Hook集用于监控创建或打开文件、打开文件、删除或重命名文件、设置文件的扩展属性;所述注册表监控子模块的Hook集用于监控创建或打开注册表项、打开注册表项、删除注册表项、添加或设置注册表键、删除注册表键。优选的,所述核心安全服务器用于管理内核对象的安全上下文,处理进程强制访问控制系统的判定请求并返回决策的结果。优选的,所述核心安全服务器根据访问对象的不同按照DTE安全模型形成用于不同对象的策略判断的二进制文件。本发明还提供了一种基于Windows平台的强制访问控制方法,其特征在于所述方法由在Windows系统内核层设置的监控模块和核心安全服务器控制,所述方法包括以下步骤
(1)Windows应用程序通过系统调用向Windows系统内核对象发送访问请求;
(2)监控模块截获Windows操作系统进程对内核对象的访问请求,并提供给核心安全服务器进行策略判断;
(3)核心安全服务器进行权限判定后,监控模块根据安全服务器的判断结果许可访问对象请求与否,若允许,则执行原来的系统调用,若拒绝,则直接返回。 优选的,当访问的内核对象为进程对象或线程对象时,监控模块对进程对象或线程对象添加安全标识符,并通过读取核心安全服务器根据进程对象或线程对象的规则创建的二进制文件对安全标识符进行设置。优选的,所述监控模块为采用内核级Hook技术的内核SSDT-H00K模块,用于监控生命周期内的访问对象。本发明强制访问控制装置的总体框架如图1所示,包含核心安全服务器和监控模块。总体的执行流程如图2,分为三个步骤
(1)用户级进程通过系统调用向Windows内核模块发送访问请求;
(2)监控模块截获操作系统进程对内核对象的访问请求,并提供给核心安全服务器进行策略判断;
(3)核心安全服务器进行权限判定后,监控模块根据安全服务器的判断结果许可访问对象请求与否,若允许,则执行原来的系统调用,若拒绝,则直接返回。核心安全服务器的主要任务是管理内核对象的安全上下文,处理进程强制访问控制系统的判定请求并返回决策的结果。监控模块包括三个子模块进程监控子模块,文件监控子模块和注册表监控子模块,分别完成对进程,文件,注册表访问的强制访问控制功能。进程监控子模块可以独立地处理对进程访问的控制,文件监控子模块和注册表监控子模块则需要调用进程监控子模块来完成对文件和注册表访问的控制。这三个子模块的实现都可以分为管理内核对象的安全标识符与设置Η00Κ函数监控内核操作函数两个部分来完成。核心安全服务器可以根据进程对象或线程对象的安全标识符以及安全标识符的赋予规则、域转移规则以及其他规则形成策略判断的二进制文件;核心安全服务器根据DTE安全模型确定注册表对象的安全标识符的内容。一管理内核对象的安全标识符 a. 进程对象
(1)安全标识符内容的确定
安全标识符是访问控制机制中的主要安全特性之一。安全标识符,也称作安全属性,是对系统对象的安全性的描述。安全标识符的内容是由DTE (Domain and Type Enforcement)模型的策略来决定的。DTE模型赋予了主体不同的域(Domain),客体不同的型(Type)来进行访问控制,从一个域访问另一个域或是从一个域访问不同的型都需要DTE 策略的判断。对于进程对象来说,安全标识符的内容即是域的内容,是由一个整型的非负数来代表的。存放安全标识符的策略或文件的获取
安全标识符的内容是有核心安全服务器CSS的策略来决定的,所有主客体对象的安全标识符也都是由CSS提供一个文件来获取的。CSS将进程的安全标识符以及安全标识符的赋予规则,域转移规则以及其他的规则写进一个二进制的策略文件policy, db,然后提供给进程强制访问控制系统。当需要获取这个文件时,进程强制访问控制系统会加载这个二进制的策略文件policy, db来得到0号进程的安全标识符,之后每次新创建的进程的安全标识符都是根据这个策略文件的策略规则来自动生成的。安全标识符存储方案的描述与确定
在进程监控子模块里需要对进程对象和线程对象添加安全标识符。在Windows系统中,线程不仅是系统实际的调度单位,而且是轻量级的操作,又因为属于同一进程的所有线程都拥有同样的进程环境块,所以线程对象完全可以继承所属的进程的安全标识符。对进程的安全标识符的存储是通过维护一个双向链表来实现的。这个双向链表的结点是一个自定义的数据结构,里面存储了安全标识符与对应的进程的名字,这个数据结构被作为安全标识符与进程的对应关系挂接到链表中。对于线程对象的安全标识符而言,线程的安全标识符是继承了所属进程的安全标识符。安全标识符设置
对于进程对象来说,在每个进程(系统进程或是用户进程)被创建成功之后就设置相对应的安全标识符,之后所有与进程有关的操作,如打开一个进程,终止一个进程,或是其他只要以进程为主体的操作,就可以按照强制访问控制机制的策略进行控制。进程的安全标识符的设置即是将一个含有该进程和对应的安全标识符以及其他信息的数据结构插入到一个全局的双向链表中。对于线程对象的安全标识符,则不需要设置,同属于一个进程的所有线程也共同使用该进程的安全标识符。安全标识符的查询
由于进程的安全标识符是存储在双向链表中,所以对于进程的安全标识符的查询就转化成了对双向链表的查询。查询的索引可以是进程的句柄PID或是进程的名字。但是由于PID不固定的特点,所以选定为进程的名字。线程的安全标识符的查询需要在线程的内核数据结构_ETHREAD中找到一个指向该线程所属的进程的指针域—EPROCESS,之后便可以根据_EPR0CESS获取进程的安全标识符,也即是该线程的安全标识符。安全标识符的删除
当系统终止一个进程的时候,除了终止该进程拥有的全部系统资源,还需要释放该进程的安全标识符。删除安全标识符的过程便是在双向链表中根据索引值(为进程的名字)遍历来查找到包含该进程的安全标识符的结点,然后进行链表的删除操作。对线程的任何操作不会影响所属的进程的安全标识符。当一个进程被终止后,该进程内部的所有线程也同时被终止,拥有的资源也都被释放。其他的问题(如对未设置安全标识符的对象的处理)
对于系统中所有的进程而言,Windows系统并没有强制的保护措施,所以系统中的所有进程都可以被添加上安全标识符。如果进程是在进程强制访问控制系统启动前就已经被创建,那么在第一次引用到该进程的时候需要设置该进程的安全标识符,具体的方法与在创建的时候设置安全标识符是相同的。文件对象
需要强制访问控制的文件的安全标识符存储在该文件的扩展属性中,目前实现了对NTFS文件系统的支持。注册表对象
(1)安全标识符内容的确定
注册表的安全标识符的内容的确定是由核心安全服务器CSS来决定的。在与进程强制访问控制系统交互的CSS系统中,采用的是DTE安全模型,所以DTE模型赋予客体何种类型的安全标识符是由具体的安全策略来确定。在本系统中,注册表的安全标识符不同于进程的整型数安全标识符,而是采用了一个字符串的类型。存放安全标识符的策略或文件的获取
由于所有主客体对象的安全标识符的内容都是由核心安全服务器CSS的策略来决定的,所以所有主客体对象的安全标识符也都是由CSS提供一个文件来获取的。同进程主模块获取这个策略文件的方法完全相同,在第一次加载了这个策略文件后,当需要给注册表设置安全标识符时,就会调用注册表模块,从而读取这个策略文件,给注册表设置相应的安全标识符。安全标识符存储方案的描述与确定
对注册表项设置安全标识符是使用操作系统的内部结构。在注册表项所属的目录树的层次下建立一个键值,作为安全标识符的存储空间。安全标识符设置
对于可以访问的注册表项,在监控系统启动之前采用遍历的方法设置对应的安全标识符。对于系统保护的注册表项,存放在核心安全服务器中来维护。安全标识符的查询
以键值的形式存放在注册表项下的安全标识符,可以通过内核提供的API函数读取键值,从而获取安全标识符。而对于存放在安全服务器中的安全标识符,只能通过发送请求来获取安全标识符的值。安全标识符的删除
当一个注册表项被删除,那么这个注册表项本身再加上它所包含的所有键值(也包括存放安全标识符的键值)都将被删除。二设置HOOK函数监控内核操作函数 a. 被Hook的函数的选取
Hook集的选取需要涵盖内核对象的整个生命周期,同时不会影响到系统的稳定。进程监控子模块的Hook集为创建进程函数,打开进程函数,终止进程函数,创建线程函数,打开线程函数和终止线程函数。
文件监控子模块的Hook集为创建或打开文件函数,打开文件函数,删除或重命名文件函数,设置文件的扩展属性函数。注册表监控子模块的Hook集为创建或打开注册表项函数,打开注册表项函数,删除注册表项函数,添加或设置注册表键函数,删除注册表键函数。的技术
采用比较稳定的,内核级Hook技术SSDT-H00K,修改或是替换SSDT表
中存储的系统函数调用地址来实现。


下面结合附图及实施例对本发明作进一步描述
图1为本发明实施例基于Windows平台的强制访问控制装置的系统架构图; 图2为本发明实施例基于Windows平台的强制访问控制装置的运行流程示意图; 图3为本发明实施例基于Windows平台的强制访问控制装置的具体监控工作流程示意图。
具体实施例方式以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。实施例Windows的强制访问控制实现
以下实施例具体实现了基于Windows平台的安全加固过程,其采用的基本技术方案如上所述,包括监控模块和核心安全服务器,控制装置的框架图如图1所示。基于Windows平台的强制访问控制装置是以驱动程序的形式来实现的,这个驱动程序一旦被加载成功,类似于Linux系统中补丁的概念,驱动程序就成为了 Windows内核的组成部分,在内核中的内存空间是可以被所有进程所共享的,也就能够达到监控所有对内核对象访问控制的目的。下面以监控创建进程函数为例来介绍对进程的监控
进程启动模块主要是对创建进程的两个内核函数ZwCreateftOcess和 ZwCreateProcessEx进行Hook,用我们自定义并且实现的函数HookedNtCreateProcess和 HookedNtCreateProcessEx来分别替换这两个系统调用的功能。由于ZwCreateProcess和 ZwCreatel^ocessEx只是存在的操作系统版本不同,具体实现的细节仍然是相同的,所以下面我们将会以ZwCreateftOcess为例来进行细致地讨论。用来替换 ZwCreateProcess 的自定义函数是 HookedNtCreateProcess。 HookedNtCreateProcess函数接受了 ZwCreateProcess的所有参数作为自己的输入参数。 下面是HookedNtCreateProcess函数的原型
NTSTATUS NTAPI
HookedNtCreateProcess (OUT PHANDLEProcessHandle,
IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes
IN HANDLE IN BOOLEAN IN HANDLE IN HANDLE IN HANDLE );
InheritFromProcessHandle InheritHandles,
SectionHandle OPTIONAL, DebugPort OPTIONAL, ExceptionPort OPTIONAL,
第一个参数是进程被创建成功之后返回的句柄的指针,注意这里代表的不是句柄值;第二个参数代表访问的权限,对这个参数一般不做处理;第四个参数其实就是被创建进程的父进程的句柄,这个参数非常重要,因为可以通过它获取主体的安全标识符;第六个参数是代表了被创建的子进程的一些关键信息,通过它我们可以获取到客体对象(也即是进程的可执行文件)的全路径,之后根据全路径就可以查询到客体的安全标识符;其他的参数可以不做任何处理。在分析了函数的原型之后,下面将介绍函数的整个执行流程
(1)在用户态下打开一个可执行文件,系统自动调用应用层的API,为CreateftOcess
(2)CreateProcess函数的调用请求进入内核后,通过inUe指令或SYSENTER指令将请求转发到SSDT表,目的是从SSDT表中查询到CreateftOcess函数对应的内核函数 ZwCreateProcess0而在这个时机,进程强制访问控制系统通过SSDT-Hook技术将首先截获ZwCreateProcess函数的地址,用一个全局变量OriginalNtCreateProcess来暂时储存这个函数地址,然后将自定义的函数HookedNtCreateftOcess的地址替换SSDT表中 ZwCreateProcess的位置。这样系统将自动调用HookedNtCreateProcess函数的执行。在HookedNtCreateftOcess函数中需要先完成下列步骤
首先,需要获取主体的安全标识符。根据函数的第四个参数获取父进程的_EPR0CESS 的指针,然后以这个指针为索引查询双向链表中父进程的安全标识符,用一个整型数sSid 来保存;
其次,需要获取客体的安全标识符。根据第六个参数获取子进程的可执行文件的全路径,通过全路径可以查询到可执行文件的安全标识符。由于文件的安全标识符是一个字符串STRING类型,所以需要两次查询方能完成。第一次查询安全标识符的大小,然后动态地分配空间来存储这个安全标识符,第二次正式来查询安全标识符并放入预备的空间中。至此,主客体的安全标识符全部获取。这一步需要注意的问题是,如果先执行创建进程的系统调用,等子进程创建成功后,再查询子进程的安全标识符,若安全服务器返回拒绝的结果,就终止这个子进程。这种方案是把进程也作为客体对象,而不是把可执行文件作为客体对象,这种事后处理的方法明显不如事先预防的方案。可执行文件是创建一个进程的第一个需要访问的对象,监控的时机越早,就越能抢占先机,也就能更有效的预防。最后,把主客体的安全标识符通过函数调用SEWindowsftOcessCreate送入安全服务器中,安全服务器会返回一个NTSTATUS类型的变量表示结果。若为拒绝,则不再调用ZwCreateftOcess函数,直接返回失败。若结果为允许,则转入ZwCreateftOcess O 函数,通过存储ZwCreateProcess O函数的全局变量OriginalNtCreateProcess来调用 ZwCreateProcess函数,完成对子进程的创建。若上一步的子进程创建失败,则又返回失败的结果;若创建成功,则需要进行对子进程域转移的操作。域转移需要调用安全服务器的接口函数pfacjransitiorusid,输入参数为主体进程和客体可执行文件的安全标识符,输出参数为子进程新的安全标识符。接下来需要将这个新生成的进程的安全标识符存入双向链表中,以备以后的使用。调用安全标识符的接口函数ktProcessSid设置子进程的安全标识符。为了检验安全标识符是否成功的设置,通过查询函数QueryProcessSid来查询这个安全标识符是否正确地添加。至此,HookedNtCreateftOcess函数执行完成。具体的执行流如图3。上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。
权利要求
1.一种基于Windows平台的强制访问控制装置,包括用于截获Windows应用程序通过系统调用访问Windows系统内核对象的请求的监控模块和用于判断请求合法性与否的核心安全服务器,其特征在于所述监控模块和核心安全服务器均设置在Windows系统内核层,监控模块截获操作系统进程对内核对象的访问请求,并提供给核心安全服务器进行策略判断;核心安全服务器进行权限判定后,监控模块根据安全服务器的判断结果许可访问 Windows系统内核对象请求与否,若允许,则执行原来的系统调用;若拒绝,则直接返回。
2.根据权利要求1所述的基于Windows平台的强制访问控制装置,其特征在于监控模块截获的请求对象选自Windows应用程序通过系统调用访问的文件对象、进程对象、线程对象或注册表对象的任何一种或两种以上的任意组合。
3.根据权利要求1所述的基于Windows平台的强制访问控制装置,其特征在于所述监控模块包括进程监控子模块,文件监控子模块和注册表监控子模块;所述进程监控子模块用于独立地处理对进程对象或线程对象访问的控制,所述文件监控子模块和注册表监控子模块均需要调用进程监控子模块来完成对文件对象和注册表对象访问的控制。
4.根据权利要求3所述的基于Windows平台的强制访问控制装置,其特征在于所述监控模块为采用内核级Hook技术的内核SSDT-H00K模块,所述进程监控子模块的Hook集用于监控创建进程、打开进程、终止进程、创建线程、打开线程、终止线程;所述文件监控子模块的Hook集用于监控创建或打开文件、打开文件、删除或重命名文件、设置文件的扩展属性;所述注册表监控子模块的Hook集用于监控创建或打开注册表项、打开注册表项、删除注册表项、添加或设置注册表键、删除注册表键。
5.根据权利要求1所述的基于Windows平台的强制访问控制装置,其特征在于所述核心安全服务器用于管理内核对象的安全上下文,处理进程强制访问控制系统的判定请求并返回决策的结果。
6.根据权利要求1所述的基于Windows平台的强制访问控制装置,其特征在于所述核心安全服务器根据访问对象的不同按照DTE安全模型形成用于不同对象的策略判断的二进制文件。
7.一种基于Windows平台的强制访问控制方法,其特征在于所述方法由在Windows系统内核层设置的监控模块和核心安全服务器控制,所述方法包括以下步骤(1)Windows应用程序通过系统调用向Windows系统内核对象发送访问请求;(2)监控模块截获Windows操作系统进程对内核对象的访问请求,并提供给核心安全服务器进行策略判断;(3)核心安全服务器进行权限判定后,监控模块根据安全服务器的判断结果许可访问对象请求与否,若允许,则执行原来的系统调用,若拒绝,则直接返回。
8.根据权利要求7所述的方法,其特征在于当访问的内核对象为进程对象或线程对象时,监控模块对进程对象或线程对象添加安全标识符,并通过读取核心安全服务器根据进程对象或线程对象的规则创建的二进制文件对安全标识符进行设置。
9.根据权利要求7所述的方法,其特征在于所述监控模块为采用内核级Hook技术的内核SSDT-H00K模块,用于监控生命周期内的访问对象。
全文摘要
本发明公开了一种基于Windows平台的强制访问控制装置及控制方法,所述系统包括监控模块,其特征在于在Windows平台上能够实现对进程,文件,注册表的访问控制,通过拦截访问控制的主体对客体的访问请求,并提供给核心安全服务器用于安全判断;所述核心安全服务器根据强制访问控制的安全规则进行权限的判断,并返回结果给监控模块来实现。本发明使windows系统访问控制的决策不依赖于主体,而是通过安全策略比较主体和客体的安全标识符来确定是否允许访问。兼容了Windows自带的自主访问控制机制,同时比原有的这种机制具有更高的安全等级。
文档编号G06F21/00GK102542182SQ20101058758
公开日2012年7月4日 申请日期2010年12月15日 优先权日2010年12月15日
发明者李桄宇, 杨峰, 陶园 申请人:苏州凌霄科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1