一种程序完整性的动态度量方法和装置与流程

文档序号:21888916发布日期:2020-08-18 17:38阅读:271来源:国知局
一种程序完整性的动态度量方法和装置与流程

本发明涉及程序完整性度量技术领域,尤其涉及一种程序完整性的动态度量方法和装置。



背景技术:

程序软件的安全性是目前安全技术研究的重点之一,可信计算重点解决的就是程序软件的可信性。程序在运行前,需要进行可信检查,检查程序是否遭到篡改,以确保所运行的程序是预期的程序。程序在运行过程中,同样需要进行可信检查,确保程序运行的行为与预期行为一致。

现有技术中,多采用程序签名的方法检查程序是否遭到篡改,但这种方法仅适用于程序运行前的检查。在程序运行过程中,由于程序已经被打散在内存中,指令部分、数据部分、堆栈部分都有所不同,数据部分会时刻变化,因此难以在程序运行过程中对程序的完整性进行动态度量以检查程序是否遭到篡改。



技术实现要素:

本发明提供了一种程序完整性的动态度量方法和装置,解决了现有技术难以检查运行中的程序是否遭到篡改的问题。

本发明提供的一种程序完整性的动态度量方法,所述程序包括多条程序指令;所述的方法包括:

当所述程序运行时,在所述多条程序指令中确定当前执行程序指令;

判断所述当前执行程序指令的指令类型;

当所述指令类型为跳转类指令时,生成所述当前执行程序指令的第一跳转关系数字对;

采用预设的程序特征序列度量所述第一跳转关系数字对;

当度量失败时,生成度量失败信息,并中断所述程序的运行。

可选地,所述当前执行程序指令具有对应的指令地址;所述当所述指令类型为跳转类指令时,生成所述当前执行程序指令的第一跳转关系数字对的步骤,包括:

当所述指令类型为跳转类指令时,在所述当前执行程序指令中提取跳转地址;

求取所述跳转地址与所述指令地址之间的差值;

获取所述当前执行程序指令对应的指令执行数;

采用所述指令执行数和所述差值生成所述当前执行程序指令的第一跳转关系数字对。

可选地,所述多条程序指令分别具有对应的指令序号;所述采用预设的程序特征序列度量所述第一跳转关系数字对的步骤,包括:

在预设的程序特征序列中提取包含所述当前执行程序指令的指令序号的第二跳转关系数字对;

基于所述当前执行程序指令的指令序号与所述指令执行数之间的预设关系,将所述第二跳转关系数字对转化为包含所述指令执行数的第三跳转关系数字对;

对比所述第一跳转关系数字对和所述第三跳转关系数字对进行度量。

可选地,所述当度量失败时,生成度量失败信息,并中断所述程序的运行的步骤,包括:

当所述第一跳转关系数字对与所述第三跳转关系数字对不相同时,判定度量失败,生成度量失败信息,并中断所述程序的运行。

可选地,所述的方法还包括:

当所述指令类型为非跳转类指令时,按照所述指令序号顺序执行下一条程序指令。

本发明提供的一种程序完整性的动态度量装置,所述程序包括多条程序指令;所述的装置包括:

当前执行程序指令确定模块,用于当所述程序运行时,在所述多条程序指令中确定当前执行程序指令;

指令类型判断模块,用于判断所述当前执行程序指令的指令类型;

第一跳转关系数字对生成模块,用于当所述指令类型为跳转类指令时,生成所述当前执行程序指令的第一跳转关系数字对;

度量模块,用于采用预设的程序特征序列度量所述第一跳转关系数字对;

运行中断模块,用于当度量失败时,生成度量失败信息,并中断所述程序的运行。

可选地,所述当前执行程序指令具有对应的指令地址;所述第一跳转关系数字对生成模块,包括:

跳转地址提取子模块,用于当所述指令类型为跳转类指令时,在所述当前执行程序指令中提取跳转地址;

差值求取子模块,用于求取所述跳转地址与所述指令地址之间的差值;

指令执行数获取子模块,用于获取所述当前执行程序指令对应的指令执行数;

第一跳转关系数字对生成子模块,用于采用所述指令执行数和所述差值生成所述当前执行程序指令的第一跳转关系数字对。

可选地,所述多条程序指令分别具有对应的指令序号;所述度量模块,包括:

第二跳转关系数字对提取子模块,用于在预设的程序特征序列中提取包含所述当前执行程序指令的指令序号的第二跳转关系数字对;

第三跳转关系数字对转化子模块,用于基于所述当前执行程序指令的指令序号与所述指令执行数之间的预设关系,将所述第二跳转关系数字对转化为包含所述指令执行数的第三跳转关系数字对;

对比子模块,用于对比所述第一跳转关系数字对和所述第三跳转关系数字对进行度量。

可选地,所述运行中断模块,包括:

运行中断子模块,用于当所述第一跳转关系数字对与所述第三跳转关系数字对不相同时,判定度量失败,生成度量失败信息,并中断所述程序的运行。

可选地,所述的装置还包括:

顺序执行模块,用于当所述指令类型为非跳转类指令时,按照所述指令序号顺序执行下一条程序指令。

从以上技术方案可以看出,本发明具有以下优点:本发明在程序运行时,在多条程序指令中确定当前执行程序指令,当当前执行程序指令为跳转类指令时,生成当前执行指令的第一跳转关系数字对;采用预设的程序特征序列对第一跳转关系数字对进行度量,以判断该程序是否被篡改;若度量失败,证明该程序被篡改,此时应该中断程序的运行。通过本发明实施例,能够有效判断运行中的程序是否被篡改,从而及时中断程序的运行,避免因运行被篡改的程序而造成损失。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。

图1为本发明实施例提供的一种程序完整性的动态度量方法的步骤流程图;

图2为本发明实施例提供的一种用于实现程序完整性的动态度量方法的电路的输入输出示意图;

图3为本发明实施例提供的一种程序完整性的动态度量装置的结构框图。

具体实施方式

本发明实施例提供了一种程序完整性的动态度量方法和装置,用于解决现有技术难以检查运行中的程序是否遭到篡改的技术问题。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在实际应用中,出于保证信息安全的目的,在运行程序时,需要检测程序是否被篡改。而在程序运行过程中,由于程序已经被打散在内存中,指令部分、数据部分、堆栈部分都有所不同,数据部分会时刻变化,因此难以检测程序是否被篡改。因此,本发明的核心构思在于,通过预设的程序特征序列来对在程序运行过程中获取的跳转类指令的跳转关系进行度量,以判断程序是否被篡改。具体通过以下实施例进行说明。

请参阅图1,图1为本发明实施例提供的一种程序完整性的动态度量方法的步骤流程图。

本发明提供的一种程序完整性的动态度量方法,所述程序包括多条程序指令;所述的方法包括:

步骤101,当所述程序运行时,在所述多条程序指令中确定当前执行程序指令;

程序是由程序指令组成的,程序指令是指挥计算机执行各种操作的命令。在本发明实施例中,程序指令包括跳转类指令和非跳转类指令。跳转类指令可在该指令执行完毕的时候跳转至对应的程序指令并执行。非跳转类指令则会按程序指令的顺序顺次执行下一条程序指令。

在程序运行的过程中,首先确定当前正在执行的程序指令,以便于对正在执行的程序指令进行分析。

步骤102,判断所述当前执行程序指令的指令类型;

接着,需要确定当前执行程序指令的指令类型。以判断该程序指令是否具有跳转关系。

程序指令可以包括跳转类指令和非跳转类指令,其中跳转类指令记录了该条程序指令执行完毕后需要跳转执行的程序指令的指令地址,用于在该条程序指令执行完毕后进行相应的跳转。

步骤103,当所述指令类型为跳转类指令时,生成所述当前执行程序指令的第一跳转关系数字对;

在本发明实施例中,当前正在执行的程序指令为跳转类指令时,可以提取当前执行的跳转类指令的跳转关系,生成第一跳转关系数字对,用于表征当前执行的跳转类指令的跳转关系。

在本发明实施例中,步骤103可以包括以下子步骤:

s1,当所述指令类型为跳转类指令时,在所述当前执行程序指令中提取跳转地址;

在本发明实施例中,当前正在执行的程序指令为跳转类指令时,提取该正在执行的程序指令的跳转地址,执行跳转操作,并记录当前正在执行的程序指令为第几条被执行指令。用于标识该程序指令的执行顺序是否被篡改。

s2,求取所述跳转地址与所述指令地址之间的差值;

在获取到正在执行的程序指令的跳转地址和自身的指令地址后,可以计算该程序指令的跳转地址与指令地址之间的差值,用于确定该程序指令的跳转内容是否被篡改。

在一个示例中,当正在执行的程序指令的指令地址为n1,跳转地址为n5时,跳转地址和指令地址之间的差值为(n5-n1)。

s3,获取所述当前执行程序指令对应的指令执行数;

在本发明实施例中,可以通过设置计数器来统计当前执行程序对应的指令执行数。具体地,当程序开始执行时,首先将计数器数值置为0,此后每执行一条程序指令,计数器的数值便加1,以此来统计程序指令的执行数。其中,指令执行数用于表征当前正在执行的程序指令为程序的所有程序指令中,第几条被执行的程序指令。

s4,采用所述指令执行数和所述差值生成所述当前执行程序指令的第一跳转关系数字对。

在获取到当前执行程序指令的指令执行数和当前执行程序指令的指令地址与跳转地址之间的差值后,可以生成用于表征当前执行程序指令的跳转情况的第一跳转关系数字对。

步骤104,采用预设的程序特征序列度量所述第一跳转关系数字对;

在本发明实施例中,当获取到当前执行程序序列的第一跳转关系数字对后,可以采用预设的程序特征序列度量当前执行程序指令的第一跳转关系数字对。

其中,程序特征序列用以表征程序各指令的跳转关系。由多个数字对组成。该数字对为程序指令的指令序号与相应的指令地址与跳转地址之间的差值组成。而第一跳转关系数字对是由指令执行数、当前执行程序指令的指令地址与跳转地址之间的差值组成。而根据程序指令的预期执行情况,可生成指令序号与指令执行数之间的关联关系,使指令序号和指令执行数之间存在对应关系。因此,在这种基础下,采用程序特征序列能对第一跳转关系数字对进行度量,以判断当前执行程序指令是否遭到篡改。

基于上述教导,在本发明实施例中,步骤104包括以下子步骤:

s21,在预设的程序特征序列中提取包含所述当前执行程序指令的指令序号的第二跳转关系数字对;

s22,基于所述当前执行程序指令的指令序号与所述指令执行数之间的预设关系,将所述第二跳转关系数字对转化为包含所述指令执行数的第三跳转关系数字对;

s23,对比所述第一跳转关系数字对和所述第三跳转关系数字对进行度量。

由于程序特征序列的组成成分是多个由指令序号、指令序号对应的程序指令的指令地址与跳转地址之间的差值组成的数字对,因此,在获取了当前执行程序指令的第一跳转数字对后,可以根据当前执行程序指令的指令序号在程序特征序列中提取具有相同指令序号的第二跳转关系数字对。然后根据指令序号与执行执行数之间的关联关系将第二跳转关系数字对转换为包含指令执行数的第三跳转关系数字对。并通过对比第一跳转关系数字对和第三跳转关系数字对完成对当前执行程序指令的度量。

需要说明的是,在本发明实施例中,当所述指令类型为非跳转类指令时,按照所述指令序号顺序执行下一条程序指令。

具体地,当当前执行程序指令的指令类型为非跳转类指令时,表征该程序指令没有对应的跳转关系,因此不需要对该程序指令进行完整性动态度量,直接按程序指令的指令顺序执行下一条程序指令即可。

例如,当当前执行的程序指令为指令序号为5的程序指令,且该程序指令是非跳转类指令时,直接跳转执行指令序号为6的程序指令即可。

步骤105,当度量失败时,生成度量失败信息,并中断所述程序的运行。

在本发明实施例中,当度量失败时,表明当前执行程序指令被篡改,此时可以生成度量失败信息并发出预警,同时中断程序的运行,以避免运行被篡改的程序产生不良影响。

具体地,当第一跳转关系数字对与第三跳转关系数字对不相同时,证明当前执行程序指令被篡改,此时可以生成度量失败信息并发出预警,同时中断程序运行,以避免运行被篡改的程序产生不良影响。

本发明在程序运行时,在多条程序指令中确定当前执行程序指令,当当前执行程序指令为跳转类指令时,生成当前执行指令的第一跳转关系数字对;采用预设的程序特征序列对第一跳转关系数字对进行度量,以判断该程序是否被篡改;若度量失败,证明该程序被篡改,此时应该程序的运行。通过本发明实施例,能够有效判断运行中的程序是否被篡改,从而及时中断程序的运行,避免因运行被篡改的程序而造成损失。

为便于本领域技术人员理解本发明实施例,下面通过具体示例对本发明实施例进行说明。

请参阅图2,图2为本发明实施例提供的一种用于实现程序完整性的动态度量方法的电路的输入输出示意图。

如图2所示,该电路由两个cpu组成,包括a、b两个cpu,其中a为运行cpu,用于运行程序的业务代码,b为监控cpu,用于对运行cpu所运行的代码的完整性进行动态度量。当然,在另一种选择中,还可以选择使用多核cpu来进行程序完整性的动态度量,由其中一个内核运行业务代码,另一个内核进行完整性度量,本发明对此不作限制。

a具有提取程序运行特征的电路模块,当某一程序开始运行时,向a输入程序指令ins及其地址pc和控制信号ctrl后,a会判断该程序指令ins是否为跳转指令,若是,则会计算地址pc与跳转地址之间的差值delta,并向b输出delta和该程序指令ins的指令执行数n。b会根据预先生成的特征序列[(n1,d1)]对(n,delta)进行动态度量。具体的过程是,判断[(n1,d1)]中是否存在能转换为与(n,delta)形式完全相同的数字对,若存在,则可以判定该程序指令并未被篡改,输出r置0。若不存在,则说明程序疑似被篡改,输出r置1预警。在一个示例中,可以通过将b的输出r与a的输入ctrl相连来中断运行cpu的执行。

请参阅图3,图3为本发明实施例提供的一种程序完整性的动态度量装置的结构框图。

本发明提供的一种程序完整性的动态度量装置,所述程序包括多条程序指令;所述的装置包括:

当前执行程序指令确定模块301,用于当所述程序运行时,在所述多条程序指令中确定当前执行程序指令;

指令类型判断模块302,用于判断所述当前执行程序指令的指令类型;

第一跳转关系数字对生成模块303,用于当所述指令类型为跳转类指令时,生成所述当前执行程序指令的第一跳转关系数字对;

度量模块304,用于采用预设的程序特征序列度量所述第一跳转关系数字对;

运行中断模块305,用于当度量失败时,生成度量失败信息,并中断所述程序的运行。

在本发明实施例中,所述当前执行程序指令具有对应的指令地址;所述第一跳转关系数字对生成模块303,包括:

跳转地址提取子模块,用于当所述指令类型为跳转类指令时,在所述当前执行程序指令中提取跳转地址;

差值求取子模块,用于求取所述跳转地址与所述指令地址之间的差值;

指令执行数获取子模块,用于获取所述当前执行程序指令对应的指令执行数;

第一跳转关系数字对生成子模块,用于采用所述指令执行数和所述差值生成所述当前执行程序指令的第一跳转关系数字对。

在本发明实施例中,所述多条程序指令分别具有对应的指令序号;所述度量模块304,包括:

第二跳转关系数字对提取子模块,用于在预设的程序特征序列中提取包含所述当前执行程序指令的指令序号的第二跳转关系数字对;

第三跳转关系数字对转化子模块,用于基于所述当前执行程序指令的指令序号与所述指令执行数之间的预设关系,将所述第二跳转关系数字对转化为包含所述指令执行数的第三跳转关系数字对;

对比子模块,用于对比所述第一跳转关系数字对和所述第三跳转关系数字对进行度量。

在本发明实施例中,所述运行中断模块305,包括:

运行中断子模块,用于当所述第一跳转关系数字对与所述第三跳转关系数字对不相同时,判定度量失败,生成度量失败信息,并中断所述程序的运行。

在本发明实施例中,所述的装置还包括:

顺序执行模块,用于当所述指令类型为非跳转类指令时,按照所述指令序号顺序执行下一条程序指令。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

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