一种实时度量方法及装置与流程

文档序号:11545453阅读:259来源:国知局
一种实时度量方法及装置与流程

本发明涉及it(informationtechnology,信息技术)与信息安全领域,尤其涉及一种实时度量方法及装置。



背景技术:

嵌入式系统广泛的应用于通信、工控、交通等行业,但是对传统it系统而言,嵌入式系统的处理器性能普遍低于服务器和pc(personalcomputer,个人计算机)的处理器性能,并且嵌入式系统常常处于无人值守的状态,不同于it系统可以专门的管理员角色并可以经常对系统安全进行持续维护或升级版本,所以在嵌入式系统的安全问题不能照搬it系统的使用杀毒软件、持续更新补丁等思路,需要考虑适合嵌入式系统的主动安全机制实现安全自动化。

在现有技术中,可信计算利用tpm/tcm可信芯片在启动时对操作系统、业务系统等逐级进行完整性度量,可以确保系统启动时系统是可信的、未被篡改的。ibm在此基础上开发ima/prima采用基于linux的lsm(linuxsecuritymodule)钩子机制,在文件读写、关键函数调用的过程中对当前函数行为的主体、客体或强制访问控制策略进行完整性度量,保证系统运行时可信并且未被篡改。采用这种动态完整性度量方法,其度量时机依赖linux的lsm注册钩子函数点,度量时机是否完整依赖lsm钩子是否完整。而在具体执行时,动态度量的时机来源于固定的事件、或周期性的定时度量、或者由用户或外部系统决定,这样就存在toctou(timeofcheck,timeofuse)攻击的风险,也即当度量时系统完整性未被攻击,但在使用时却被攻击注入黑客代码。



技术实现要素:

本发明要解决的主要技术问题是,提供一种度量方法及装置,避免现有技 术中由于不能实时的度量而导致的存在toctou攻击风险的问题。

为解决上述问题,本发明提供一种实时度量方法,包括:

实时监控被监控区域上的操作;所述被监控区域为敏感信息对应的存储地址,所述敏感信息为预先定义的需要进行度量的信息;

当监控到所述被监控区域上针对被监控区域发起的敏感操作,判断所述敏感操作是否合法;

若判断结果为所述敏感操作为合法,允许所述敏感操作继续执行;

若判断结果为所述敏感操作为非法,阻止所述敏感操作继续执行。

本发明一种实施例中,在实时监控被监控区域上的操作之前还包括:确定敏感信息,并判断所述敏感信息是否已在系统中被创建,若是,则读取所述敏感信息对应的存储地址,并将所述存储地址设置为被监控区域。

本发明一种实施例中,判断所述操作是否合法包括:判断所述敏感操作是否合法包括:通过判断所述敏感操作或执行所述敏感操作的主体是否满足对应的度量规则来判断所述敏感操作是否合法,若满足,则所述敏感操作是合法的;若不满足,则所述敏感操作是非法的。

本发明一种实施例中,所述敏感信息包括栈、堆、进程和内核关键数据;

当所述敏感信息为栈时,所述度量规则包括:当前操作地址属于所述栈的有效范围、访问所述栈的主体为所述栈的所有者、所述栈符合应用程序二进制接口规范约定;

当所述敏感信息为堆时,所述度量规则包括:当前操作的地址不属于空闲堆空间范围、当前操作区间不得跨越不同的堆空间对象、当前操作线程为合法线程;

当所述敏感信息为进程时,所述度量规则包括:当前进程对应的代码段可被操作、当前进程的栈区间可执行;

当所述敏感信息为内核关键数据时,所述度量规则包括:关键数据的访问 线程属于合法线程、执行操作的程序的地址属于合法可信的代码区间。

本发明一种实施例中,当所述敏感操作为非法时,通知用户。

本发明一种实施例中,在监控到所述被监控区域上针对被监控区域发起的敏感操作之后,判断所述敏感操作是否合法之前还包括:产生异常,使所述敏感操作过程被中断。

本发明一种实施例中,当所述敏感操作为非法的,若所敏感述操作处于内核态,则调用系统异常接口触发系统异常;若所述敏感操作处于用户态,则系统不再为所述操作的执行分配资源。

本发明一种实施例中,实时监控被监控区域上的操作包括:通过内存管理单元实时监控对内存的操作,并判断所述操作是否是针对被监控区域发起的敏感操作。

本发明还提供一种实时度量装置,包括:

监控模块:用于实时监控被监控区域上的操作,所述被监控区域为敏感信息对应的存储地址,所述敏感信息为预先定义的需要进行度量的信息;

判断模块:用于当监控到所述被监控区上针对被监控区域发起的敏感操作,判断所述敏感操作是否合法;

第一执行模块:用于当判断结果为所述敏感操作为合法,允许所述敏感操作继续执行;

第二执行模块:用于判断结果为所述敏感操作为非法,阻止所述敏感操作

继续执行。

本发明一种实施例中,还包括设置模块,用于在实时监控被监控区域上的操作之前,确定敏感信息,并判断所述敏感信息是否已在系统中被创建,若是,则读取所述敏感信息对应的存储地址,并将所述存储地址设置为被监控区域。

本发明一种实施例中,还包括通知模块,用于当所述敏感操作为非法时, 通知用户。

本发明一种实施例中,还包括异常产生模块,用于在监控到所述被监控区域上针对被监控区域发起的敏感操作之后,判断所述敏感操作是否合法之前产生异常,使所述敏感操作过程被中断。

本发明一种实施例中,所述监控模块包括内存管理单元,内存管理单元实时监控对内存的操作,并判断所述操作是否是针对被监控区域发起的敏感操作。

本发明的有益效果是:本发明提供了一种实时度量方法及装置,实时度量装置实时地监控被监控区域上的操作,该被监控区域是敏感信息对应的存储地址,而该敏感信息是预先定义的需要进行度量的信息;当监控到被监控区域上有针对被监控区域发起的敏感操作的时候,判断该操作是否合法,如果合法就允许继续执行,而如果不合法的话,便阻止其继续运行。每当被监控区域上有针对被监控区域发起的敏感操作,就会进行判断,看该操作是否合法,通过判断敏感操作的合法性实现实时度量;而不需要等到某一固定时间或固定周期通过判断数据的合法性进行度量,解决现有技术中存在toctou攻击风险的问题,达到降低toctou攻击风险的效果。

附图说明

图1为本发明实施例一中实施实时度量方法的流程图;

图2为本发明实施例一中实施实时度量方法中设置被监控区域的流程图;

图3为本发明实施例一中实时度量装置的结构示意图。

具体实施方式

下面通过具体实施方式结合附图对本发明作进一步详细说明。

实施例一:

本实施例提供一种实时度量方法,该方法尤其适用于但不限于嵌入式系统,其与现有技术相比具有可以避免toctou攻击风险的优点,请参见图1,包括:

s101:实时监控被监控区域上的操作;

s102:当监控到所述被监控区上针对被监控区域发起的敏感的操作,判断所述敏感操作是否合法,若是,则执行s103,否则,执行s104;

s103:允许该敏感操作继续执行;

s104:阻止该敏感操作继续执行。

在执行步骤s101之前,通常还需要设置敏感信息对应的被监控区域。在一种具体实施方式中,通常会设置有数据库,在设置被监控区域的过程中,若检测到敏感信息正在被系统创建,此时会计算该敏感信息的运行地址,并将所述运行地址设置为被监控区域;并将其对应关系存储到数据库中,该数据库专门用于存放敏感信息的相关信息,该数据库可以使用数组、链表、树等数据结构进行存储,并且可以提供相应检索。通常该敏感信息是由用户来选择确定的,根据需求和实际使用场景的综合考量,将那些对安全性要求比较高或者容易遭受攻击的对象确定为敏感信息。所以,事实上被监控区域就是敏感信息对应的存储地址,而这些敏感信息就是预先定义的需要进行度量的信息,设置被监控区域的具体设置过程请参考图2,包括:

s201:确定敏感信息;

s202:判断该敏感信息是否已在系统中创建,若是,则执行s203;否则,执行s204;

s203:读取该敏感信息对应的地址,并将该地址设置为被监控区域;

s204:结束本次对被监控区域的设置。

设置好被监控区域后,执行s101,实时地监控被监控区域上的操作,当监控到被监控区域上有针对被监控区域发起的敏感操作时,就需要判断该敏感操作是否合法,当合法的时候,允许该敏感操作继续执行,否则阻止该敏感操作继续执行。在监控到被监控区上针对被监控区域发起的敏感操作之后,判断该敏感操作是否合法之前,通常要产生异常,使正在进行的操作中断,以便于后续根据判断结果采取不同的措施。

在一种具体实施例中,判断该敏感操作是否合法,可以通过判断该敏感操作或者执行该敏感操作的执行主体是否满足度量规则来实现的,当满足时为合法,否则为非法。关于度量规则,是根据敏感信息及其操作权限来进行设置的,根据实际情况,敏感信息通常会包括,栈、堆、进程和内核关键数据。当敏感信息为栈时,度量规则包括:当前操作地址属于该栈的有效范围、访问该栈的主体为该栈的所有者、该栈符合应用程序二进制接口规范约定;当敏感信息为堆时,度量规则包括:当前操作的地址不属于空闲堆空间范围、当前操作区间不得跨越不同的堆空间对象、当前操作线程为合法线程;当敏感信息为进程时,度量规则包括:当前进程对应的代码段可被操作、当前进程的栈区间可执行;当敏感信息为内核关键数据时,度量规则包括:关键数据的访问线程属于合法线程、执行操作的程序的地址属于合法可信的代码区间。本实施例中的“敏感操作”通常包括“读”、“写”或“执行”,进行判断时,该敏感操作或敏感操作的主体应当同时满足对应的所有度量规则,例如,当敏感信息为堆,对应的敏感操作为读,此时要判断对该堆进行读的敏感操作是否合法,就需要判断当前访问地址是否不属于空闲堆空间范围,还要判断函数访问区间是否没有跨越不同堆空间对象,还要判断当前访问线程是否是合法线程;当上述几个判断结果都为“是”,那么证明,对该“堆”进行的“读”敏感操作是合法的,就允许对 该“堆”进行“读”敏感操作;但是若上述判断结果中有任意一个判断的结果为“否”,也就是不满足度量规则,此时将组织对该“堆”进行“读”敏感操作。

当判断为某一敏感操作为非法的之后,需要阻止该敏感操作的继续运行,一种常用的方式是,判断该敏感操作是处于内核态还是用户态,如果是处于内核态的话,则调用系统异常接口触发系统异常,而如果是处于用户态的话,系统将执行该敏感操作的程序挂起,不在为该敏感操作的执行分配资源。在阻止该敏感操作继续执行时,还会向用户通知,通知的方式可以是以提示框的形式,也可以以其他方式。

若用户觉得没有必要再进行度量,也可以取消度量,或者检测到敏感信息已经消亡,不存在系统中也会自动取消度量。只需要从数据中删除敏感信息,被监控区域,以及对应的度量规则。如果是用户主动取消的度量,那么在取消度量后,之前被阻止的敏感操作现在可以被允许执行。

在一种具体实施方式中,可以通过内存管理单元实时监控被监控区域上的操作。实时监控被监控区域上的操作包括:通过内存管理单元实时监控对内存的操作,并判断所述操作是否是针对被监控区域发起的敏感操作。内存管理单元位于cpu内部,用于管理虚拟地址和物理内存的硬件。用户先设置敏感信息,并确定被监控区域,以及对应的度量规则。将设置好的数据信息保存到数据库中,内存管理单元会监控数据库中的被监控区域上的敏感操作,当有任何程序(包括合法程序和黑客攻击程序)访问被监控设备时,内存管理单元都会产生异常,并自动保存当前访问现场(包括当前访问地址、当前程序地址寄存器、当前栈帧寄存器等)。由于内存管理单元的属性,现在市面上的内存管理单元管理通常都是通过分页的方式进行内存管理的,程序访问敏感信息的时候,内存 管理单元可以获得监控页面,该监控页面是该程序对敏感信息执行实际敏感操作时采用的地址。将该控制页面与被监控区域的地址进行对比看其是否一致,若不一致,则可能是程序运行时地址错误等错误,此时只需要按照敏感操作系统原本设置的异常处理规则进行处理即可;若是一致,则证明当前程序访问的确实可能是敏感信息,由于前面已经说过内存管理单元关心的只是地址,而且是分页进行管理,在一页上可能有敏感信息,也可能有非敏感信息,所以还要看敏感信息是不是被该程序敏感操作,如果不是,那么该程序访问的对象并不是隐私信息,则允许该敏感操作继续执行;如果是,就需要按照度量规则对该程序针对该隐私信息进行的敏感操作进行度量,具体度量过程包括看该敏感操作或执行该敏感操作的主体是否满足对应的度量规则,当满足时,则通过了度量,证明其是合法的;若不满足,则其不合法。

下面以几个具体示例对本实施例中的实时度量方法进行说明:

示例一:当隐私信息为栈时。用户先设置敏感信息,也即线程或进程的栈;然后将该栈以及其地址、对应的度量规则添加到数据库中;由于后续需要看针对该隐私信息的敏感操作是否满足度量规则,所以此时还需要获取一些度量基准值,因为栈的度量规则是要求当前敏感操作地址属于该栈的有效范围、访问该栈的主体为该栈的所有者、该栈符合应用程序二进制接口规范约定,所以还需要获取该栈的线程或进程所有者、栈对应线程或进程有效代码段区间;并在内存管理单元中取消相应地址空间对应页表的敏感操作访问权限,监控该栈对应的地址上的敏感操作。

若此时黑客试图从外部对此栈发起非法篡改的攻击,达到控制流程或破坏执行流程的目的。由于内存管理单元已对栈的敏感操作进行实时监控,此时针对该栈的敏感操作被内存管理单元监控并产生异常;实时度量模块根据之前获 取的该栈的地址与动态度量的监控页面进行匹配,找到该栈并确认当前正在被敏感操作;然后根据栈对应的度量规则对该敏感操作进行度量,具体包括:确认当前访问地址是否属于当前栈帧的有效范围、访问栈帧的主体是否为栈的所有者、当前栈帧是否符合abi规定的栈帧结构。由于此时黑客访问线程并非栈的所有者线程,因此不符合第二条规则约束。此时通过异常处理模块进行后续处理:首先通过信号等机制通知用户;其次由于当前处于用户态因此修改线程的运行标志,挂起已被攻击的非法访问线程。

示例二:当隐私信息为内核关键数据时。敏感操作系统的内核是整个系统的根基,尤其是内核的关键数据是安全性保障的基础。

用户先设置敏感信息,也即内核的关键数据,例如系统所有线程的线程控制块;然后将该栈以及其地址、对应的度量规则添加到数据库中;由于后续需要看针对该隐私信息的敏感操作是否满足度量规则,所以此时还需要获取一些度量基准值,因为针对内核关键数据的度量规则是要求关键数据的访问线程属于合法线程、当前程序地址属于合法可信的代码区间,所以还需要获取该内核关键数据的合法访问线程组、合法访问代码区间;并在内存管理单元中取消相应地址空间对应页表的敏感操作访问权限,监控该内核关键数据对应的地址上的敏感操作。

当黑客程序试图通过插入外部内核模块,在内核模块中对线程控制块进行访问,以便达到控制线程执行的目的。由于内存管理单元已对内核关键数据的敏感操作进行实时监控,此时针对该内核关键数据的敏感操作被内存管理单元监控并产生异常;实时度量模块根据之前获取的该内核关键数据的地址与动态度量的监控页面进行匹配,找到该内核关键数据并确认当前正在被敏感操作;然后根据内核关键数据对应的度量规则对该敏感操作进行度量,具体包括:关 键数据的访问线程是否为合法的线程、当前程序地址是否属于合法可信的代码区间。由于此时程序地址为模块地址而不在内核镜像代码区间范围内,不符合第二条规则约束。此时通过异常处理模块进行后续处理:首先通过信号等机制通知用户;其次由于当前处于内核态因此直接调用系统异常接口挂起当前访问上下文。

本实施例还提供一种实时度量装置3,包括监控模块31用于实时监控被监控区域上的操作,该被监控区域为敏感信息对应的存储地址,该敏感信息为预先定义的需要进行度量的信息;判断模块32用于当监控到所述被监控区上针对被监控区域发起的敏感操作,判断所述敏感操作是否合法;第一执行模块33用于当判断结果为所述敏感操作为合法,允许所述敏感操作继续执行;第二执行模块34用于判断结果为所述敏感操作为非法,阻止所述敏感操作继续执行。在一种具体实施方式中,实时度量装置3还包括设置模块35,用于在实时监控被监控区域上的操作之前,确定敏感信息,并判断所述敏感信息是否已在系统中被创建,若是,则读取所述敏感信息对应的存储地址,并将所述存储地址设置为被监控区域;还包括通知模块36用于当所述敏感操作为非法时,通知用户;还包括异常产生模块37于在监控到所述被监控区域上针对被监控区域发起的敏感操作之后,判断所述敏感操作是否合法之前产生异常,使所述敏感操作过程被中断。在本发明一种具体实施方式中,监控模块为内存管理单元,内存管理单元实时监控对内存的操作,并判断所述操作是否是针对被监控区域发起的敏感操作。

在一种具体实施方式中,第一执行模块33允许敏感操作继续执行时,先设置cpu的单步寄存器或在下一条指令处插入断点指令,恢复被监控区域上相关敏感操作的权限设置,允许相应敏感操作执行;异常返回后被程序继续执行, 并在下一条指令中发生单步异常或断点异常,在单步异常或断点异常中重新取消相应页表的行为权限标志,并取消单步寄存标志或恢复断点处的原始指令。

在一种具体实施方式中,第二执行模块34,判断非法访问处于内核态还是用户态,对于如果异常访问发生在内核态,调用系统的异常接口,触发系统异常;如果异常访问发生在用户态,设置用户态线程的运行标志位,挂起非法访问线程。

采用本实施例中方案,实时度量装置实时度量装置实时地监控被监控区域上的操作,该被监控区域是敏感信息对应的存储地址,而该敏感信息是预先定义的需要进行度量的信息;当实时度量装置监控到被监控区域上针对被监控区域发起的敏感操作时候,判断该敏感操作是否合法,如果合法就允许继续执行,而如果不合法的话,便阻止其继续运行。每当被监控区域上有敏感操作,就会进行判断,看该敏感操作是否合法,避免出现tocto攻击,达到降低toctou攻击风险的效果。另一方面,本实施例中的方案根据度量规则对被监控区域上的敏感操作进行合法性判断,整个过程在执行程序的时候实时进行,因此在进行度量时,只需要获取度量需要的相关信息,不需要获取整个软件的所有信息,因此与现有技术相比,还具有性能开销小,同时耗时较短的优点。

显然,本领域的技术人员应该明白,上述本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储介质(rom/ram、磁碟、光盘)中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。所以,本发明不限制于任何特定的硬 件和软件结合。

以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1