代码段校验方法、装置及存储介质制造方法及图纸

技术编号:35278665 阅读:21 留言:0更新日期:2022-10-22 12:20
本申请实施例公开了一种代码段校验方法、装置及存储介质,属于网络安全技术领域。在本申请实施例中,在目标软件的二进制镜像文件中为多个补丁的补丁函数预留了PLT表项和GOT表项。其中,PLT表项中存放的指示跳转至GOT表项的指示信息在目标软件离线时和运行时是不变的,而软件在线打补丁时从补丁原函数相对跳转至PLT表项后进程代码段的变化在离线状态下能够通过重放打补丁的方式预测得到。基于此,在离线状态下通过重放打补丁确定的代码段基线值和软件运行过程中确定的代码段动态值将不会因为打补丁的原因而不同,这样,就能够通过对比代码段基线值和代码段动态值来对软件运行过程中的用户态进程进行校验,保证了系统的安全性。安全性。安全性。

【技术实现步骤摘要】
代码段校验方法、装置及存储介质


[0001]本申请实施例涉及网络安全
,特别涉及一种代码段校验方法、装置及存储介质。

技术介绍

[0002]随着网络技术的发展和广泛应用,网络安全变得越来越重要。目前,网络攻击的攻击目标不仅包括程序文件,还包括软件运行时的内核和用户态进程。其中,通常采用动态完整性度量(dynamic intergrity measurement,DIM)机制对软件运行过程中用户态进程运行的代码段进行动态校验,以此来防止用户态进程受到攻击,提升系统安全性。
[0003]当前,对软件运行过程中的用户态进程运行的代码段进行动态校验的实现思路是:首先在离线状态下计算软件的代码段的基线值。后续,在软件运行过程中,计算内存中用户态进程的代码段的动态值。将该动态值和基线值进行比较,如果二者相同,则确定校验通过,否则,则确定校验未通过。
[0004]然而,软件在运行过程中可能会由于存在程序漏洞而需要打补丁。在这种情况下,需要在软件运行时修改代码段信息,以便跳转到补丁代码区继续运行,实现热修复能力。由此可见,由于代码段信息被修改,因此,在软件运行过程中在线计算得到的代码段的动态值与离线状态下计算的代码段的基线值将无法一致。也即,在这种情况下,将无法再采用DIM机制对运行中的用户态进程进行校验。基于此,亟需提供一种代码段校验方法,以对软件运行过程中打补丁情况下的用户态进程进行校验,从而保证系统安全性。

技术实现思路

[0005]本申请实施例提供了一种代码段校验方法、装置及存储介质,用于对软件运行过程中打补丁情况下的用户态进程进行校验,以保证系统安全性。所述技术方案如下:
[0006]第一方面,提供了一种代码段校验方法,所述方法包括:
[0007]在目标软件的运行过程中,根据打完多个补丁后第一文件内的进程代码段和多个过程链接表(procedure linkage table,PLT)表项,确定所述第一文件的代码段动态值,所述第一文件为所述目标软件的二进制镜像文件,所述第一文件还包括多个全局偏移表(global offset table,GOT)表项,每个PLT表项用于存放指示跳转至GOT表项的指示信息,每个GOT表项用于存放所述多个补丁中的一个补丁函数的地址;存储所述第一文件的代码段动态值,以便证明设备根据所述第一文件的代码段动态值和代码段基线值,对所述目标软件运行过程中打完所述多个补丁后的第一文件的代码段进行校验,所述第一文件的代码段基线值为离线状态下根据重放打补丁后的进程代码段和所述多个PLT表项预测得到。
[0008]在本申请实施例中,在目标软件的二进制镜像文件中为多个补丁函数预留了PLT表项和GOT表项。其中,PLT表项存放有指示跳转至GOT表项的指示信息,该指示信息在目标软件离线时和运行时是不变的,而软件在线打补丁时相对跳转至PLT表项后进程代码段的变化在离线状态下能够通过重放打补丁的方式预测得到。基于此,在离线状态下基于重放
打补丁后的进程代码段和多个PLT表项确定的代码段基线值,和软件运行过程中基于打完补丁后的二进制镜像文件的进程代码段和多个PLT表项确定的代码段动态值将不会因为打补丁的原因而不同,这样,就能够通过对比二进制镜像文件的代码段基线值和代码段动态值来对软件运行过程中的内核和用户态进程进行校验,保证了系统的安全性。
[0009]在一种可能的实现方式中,所述第一文件内的进程代码段中包括多个第一补丁原函数,所述方法还包括:在离线状态下,按照所述多个第一补丁原函数的执行顺序,从所述多个PLT表项和所述多个GOT表项中依次为每个第一补丁原函数分配对应的PLT表项以及GOT表项;确定从每个第一补丁原函数相对跳转至对应的PLT表项的跳转指令;根据每个第一补丁原函数对应的跳转指令预测变化后的进程代码段;确定预测的变化后的进程代码段和所述多个PLT表项的哈希值,得到所述第一文件的代码段基线值;将所述第一文件的代码段基线值发送至所述证明设备。
[0010]也即,在本申请实施例中,终端设备可以在离线状态下在二进制镜像文件中插入第一补丁原函数对应的PLT表项和GOT表项,其中,该PLT表项和GOT表项是为第一补丁原函数对应的同名补丁函数预留的。在这种情况下,终端设备可以预先估计从第一补丁原函数相对跳转至PLT表项的跳转指令对进程代码段的影响,从而确定出变化后的进程代码段,进而根据变化后的进程代码段和PLT表项计算得到代码段基线值。这样,计算得到的代码段基线值和后续软件运行过程中基于打完补丁后的二进制镜像文件的进程代码段和多个PLT表项确定的代码段动态值将不会因为打补丁的原因而不同。
[0011]在一种可能的实现方式中,所述方法还包括:生成所述多个第一补丁原函数、所述多个PLT表项和所述多个GOT表项之间的映射关系。
[0012]在一种可能的实现方式中,所述方法还包括:在离线状态下,根据所述第一补丁中的补丁函数中的全局变量调用,在所述第一补丁中插入所述全局变量调用对应的第一类GOT表项,根据所述第一补丁中的补丁函数中的函数调用,在所述第一补丁中插入所述函数调用对应的第一类PLT表项和第一类GOT表项,所述第一补丁为所述多个补丁中的任一补丁;当所述第一补丁中不包含有补丁新增函数时,根据所述第一补丁中的补丁代码段和所述第一类PLT表项,确定所述第一补丁的代码段基线值,并将所述第一补丁的代码段基线值发送至所述证明设备。
[0013]在本申请实施例中,通过在补丁代码段引入第一类PLT表项和第一类GOT表项,从而将全局变量调用和函数调用中的所有可变信息均存放在了GOT表项中,这样,对于补丁中不存在再打补丁的情况,该补丁中的补丁代码段内的所有可变信息均存放在了GOT表项中,如此,终端设备即可以在离线状态下通过计算补丁代码段和第一类PLT表项的哈希值来作为补丁的代码段动态值,以此来实现对目标软件运行过程中的补丁代码段的校验。
[0014]在一种可能的实现方式中,所述方法还包括:当所述第一补丁中包含有所述补丁新增函数时,在所述第一补丁中插入所述补丁新增函数对应的第二类PLT表项和第二类GOT表项;根据所述第一补丁中的补丁代码段、所述第一类PLT表项和所述第二类PLT表项,确定所述第一补丁的代码段基线值;将所述第一补丁的代码段基线值发送至所述证明设备。
[0015]在一种可能的实现方式中,存储所述第一文件的代码段动态值之后,后续,在所述目标软件运行过程中,确定加载所述第一补丁后所述第一补丁的代码段动态值;存储所述第一补丁的代码段动态值,以便所述证明设备根据所述第一补丁的代码段动态值和代码段
基线值,对所述第一补丁进行校验。
[0016]也即,对于补丁中再次打补丁的情况,同样可以在补丁代码段引入自定义的第二类PLT表项和第二类GOT表项,这样,在离线状态下通过重放打补丁的方式预测得到补丁的代码段基线值,该代码段基线值和在线根据打完补丁的补丁代码段和PLT表项计算得到的补丁的代码段动态值同样不会因为打补丁的原因而不同。如此,就能够通过对本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码段校验方法,其特征在于,所述方法包括:在目标软件的运行过程中,根据打完多个补丁后第一文件内的进程代码段和多个过程链接表PLT表项,确定所述第一文件的代码段动态值,所述第一文件为所述目标软件的二进制镜像文件,所述第一文件还包括多个全局偏移表GOT表项,每个PLT表项用于存放指示跳转至GOT表项的指示信息,每个GOT表项用于存放所述多个补丁中的一个补丁函数的地址;存储所述第一文件的代码段动态值,以便证明设备根据所述第一文件的代码段动态值和代码段基线值,对所述目标软件运行过程中打完所述多个补丁后的第一文件的代码段进行校验,所述第一文件的代码段基线值为离线状态下根据重放打补丁后的进程代码段和所述多个PLT表项预测得到。2.根据权利要求1所述的方法,其特征在于,所述第一文件内的进程代码段中包括多个第一补丁原函数,所述方法还包括:在离线状态下,按照所述多个第一补丁原函数的执行顺序,从所述多个PLT表项和所述多个GOT表项中依次为每个第一补丁原函数分配对应的PLT表项以及GOT表项;确定从每个第一补丁原函数相对跳转至对应的PLT表项的跳转指令;根据每个第一补丁原函数对应的跳转指令预测变化后的进程代码段;确定预测的变化后的进程代码段和所述多个PLT表项的哈希值,得到所述第一文件的代码段基线值;将所述第一文件的代码段基线值发送至所述证明设备。3.根据权利要求2所述的方法,其特征在于,所述方法还包括:生成所述多个第一补丁原函数、所述多个PLT表项和所述多个GOT表项之间的映射关系。4.根据权利要求1

3任一所述的方法,其特征在于,所述方法还包括:在离线状态下,根据所述第一补丁中的补丁函数中的全局变量调用,在所述第一补丁中插入所述全局变量调用对应的第一类GOT表项,根据所述第一补丁中的补丁函数中的函数调用,在所述第一补丁中插入所述函数调用对应的第一类PLT表项和第一类GOT表项,所述第一补丁为所述多个补丁中的任一补丁;当所述第一补丁中不包含有补丁新增函数时,根据所述第一补丁中的补丁代码段和所述第一类PLT表项,确定所述第一补丁的代码段基线值,并将所述第一补丁的代码段基线值发送至所述证明设备。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:当所述第一补丁中包含有所述补丁新增函数时,在所述第一补丁中插入所述补丁新增函数对应的第二类PLT表项和第二类GOT表项;根据所述第一补丁中的补丁代码段、所述第一类PLT表项和所述第二类PLT表项,确定所述第一补丁的代码段基线值;将所述第一补丁的代码段基线值发送至所述证明设备。6.根据权利要求4或5所述的方法,其特征在于,所述存储所述第一文件的代码段动态值之后,还包括:在所述目标软件运行过程中,确定加载所述第一补丁后所述第一补丁的代码段动态值;
存储所述第一补丁的代码段动态值,以便所述证明设备根据所述第一补丁的代码段动态值和代码段基线值,对所述第一补丁进行校验。7.根据权利要求1

6任一所述的方法,其特征在于,所述存储所述第一文件的代码段动态值,包括:生成包含有所述第一文件的代码段动态值的第一度量日志,并将所述第一度量日志存储至内核模块的内存中。8.根据权利要求7所述的方法,其特征在于,所述方法还包括:根据存储的各个度量日志中的代码段动态值,确定综合校验值;将所述综合校验值存储至可信平台模块TPM的平台配置寄存器PCR中,以便所述证明设备根据所述综合校验值、所述第一度量日志中的第一文件的代码段动态值和第一文件的代码段基线值,对所述第一文件的代码段进行校验。9.根据权利要求1

8任一所述的方法,其特征在于,所述根据打完多个补丁后第一文件内的进程代码段和多个过程链接表PLT表项,确定所述第一文件的代码段动态值之前,还包括:当检测到打补丁进程打完所述多个补丁后,通过管理进程对所述打补丁进程进行认证;如果对所述打补丁进程的认证通过,则执行根据打完多个补丁后第一文件内的进程代码段和多个过程链接表PLT表项,确定所述第一文件的代码段动态值的步骤。10.根据权利要求9所述的方法,其特征在于,所述如果对所述打补丁进程的认证通过,所述方法还包括:通过内核模块对所述管理进程进行认证;如果对所述管理进程的认证通过,则执行根据打完多个补丁后第一文件内的进程代码段和多个过程链接表PLT表项,确定所述第一文件的代码段动态值的步骤。11.一种代码段校验装置,其特征在于,所述装置包括:第一确定模块,用于在目标软件的运行过程中,根据打完多个补丁后第一文件内的进程代码段和多个过程链接表PLT表项,确定所述第一文件的代码段动态值,所述第一文件为所述目标软件的二进...

【专利技术属性】
技术研发人员:陈欣佳王超
申请(专利权)人:北京华为数字技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1