一种基于双看门狗的软件完整性保护方法转让专利

申请号 : CN202210712799.1

文献号 : CN115310055B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张世卓刘琼吴细宝陈雯柏

申请人 : 北京信息科技大学

摘要 :

本发明公开了一种基于双看门狗的软件完整性保护方法,所述方法包括:1)、为目标处理器配置协处理器以及协处理器专用内存,所述协处理器内置ROM中保存有出厂公钥;2)、在目标软件的目标函数中增设若干标识指令;3)、生成随机数并分发给所述目标处理器和协处理器;4)、构建卷积神经网络,基于所生成的随机数确定网络参量;5)、所述目标处理器和协处理器分别从各自的指令源获取待运行的机器指令集,并且将机器指令集以卷积神经网络的输入层尺寸为切片,输入至所述卷积神经网络,并将其输出层进行对比校验。

权利要求 :

1.一种基于双看门狗的软件完整性保护方法,其特征在于,所述方法包括:

1)、为目标处理器配置协处理器以及协处理器专用内存,所述协处理器内置ROM中保存有出厂公钥;

2)、在目标软件的目标函数中增设若干标识指令;

3)、当目标软件运行时,生成随机数并分发给所述目标处理器和协处理器;

4)、构建卷积神经网络,基于所生成的随机数确定网络参量;

5)、所述目标处理器和协处理器分别从各自的指令源获取待运行的机器指令集,并且将机器指令集以卷积神经网络的输入层尺寸为切片,输入至所述卷积神经网络,并将其输出层进行对比校验,其中,所述步骤4)包括:基于所生成的随机数NN和随机数DD构建卷积神经网络模型,神经网络参数量为(NN+1)*NN*(DD‑1)+(NI+1)*NN,NI表示输入层的特征数,且与密钥位数相同,应用处理器和协处理器根据该参量分别进行卷积神经网络生成,所述方法还包括利用所述协处理器将目标数据划分为载荷部分和签名部分,利用公钥解密签名部分得到一个值,计算载荷部分的hash,并且将二者进行校验,调用rand函数预订次数生成相应密钥存储在协处理器的片上专用内存中,并使用该密钥在片上专用内存中完成对机器指令集的对称加密,然后将加密结果存入它的普通专用内存中,并且协处理器向应用处理器发送与上述次数相同的脉冲,应用处理器的rand函数空调用,实现rand函数的同步。

2.根据权利要求1所述的方法,其特征在于,所述目标处理器和所述协处理器的rand函数采用伪随机函数,其输出数值与调用的次数呈现一定规律。

3.根据权利要求1所述的方法,其特征在于,所述方法还包括为目标处理器配置随机数发生器,用于生成所述随机数。

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:调用(NN+1)*NN*(DD‑1)+(NI+1)*NN次rand函数,应用处理器将结果保存到普通内存的随机地址,并使用DMA技术建立神经处理引擎到该内存的映射;协处理器将结果保存到片上专用内存,并使用DMA技术建立神经处理引擎到该内存的映射。

5.根据权利要求1所述的方法,其特征在于,所述神经网络模型中的隐藏层采用全连接的形式,神经元的参数量为(NN+1)*NN*(DD‑1)+(NI+1)*NN,其中,NN和DD分别为神经网络模型的层数和每层神经元数。

6.根据权利要求5所述的方法,其特征在于,在神经网络模型中,

在正向传播到隐藏层第0层以后,调用rand函数,并将其返回值除以DD‑1取余,得到相应id,使得1≤id+1≤DD‑1,id+1为下次正向传播时选择隐藏层的序号。

说明书 :

一种基于双看门狗的软件完整性保护方法

技术领域

[0001] 本发明涉及计算机领域,具体涉及一种基于双看门狗的软件完整性保护方法。

背景技术

[0002] 随着计算机技术的发展,越来越多的安全漏洞被发现和修复,博弈越来越激烈。然而,硬件系统的漏洞,例如出厂时烧写在芯片内的Boot ROM是很难补丁的;此外,主流的民用计算机操作系统默认允许未签名的代码以高权限执行,底层固件经过简单设置也允许未经签名的代码执行,这意味着黑客程序有机会提升至非常高的权限。例如,在操作系统对身份验证的过程简单时,黑客通过对磁盘上相关程序镜像的补丁或者Hook技术就能绕过。补丁主要强调修改磁盘上的软件,Hook则强调软件载入内存后再修改特定内存中的指令。在上例中,如果操作系统内核检查系统组件镜像的数字签名,即使固件允许任意代码的执行,黑客也需要对内核进行补丁(对于非开源的内核通常很复杂)才能允许补丁过的身份验证程序执行;但是如果黑客使用例如登陆屏幕拓展项或者任务计划等方法在身份验证时启动他的程序,则他的程序可以Hook登陆按钮,使其不检验身份就跳转到验证后的处理程序,或者键盘记录登陆密码,此方法就免去反编译内核,只需要部分反编译调试目标程序。事实上,现在很多游戏外挂、盗号木马、收费软件破解都使用Hook技术来实现作弊。除此之外,复杂病毒分析时同样需要Hook操作系统库中的文件读写、权限修改、网络访问相关的API,然后分析传入传出参数的来龙去脉研究病毒的逻辑和行为。因此,不管是正常软件作者还是黑客,出于保护其程序逻辑的目的,很多情况下都会使用加壳技术、反调试技术,使调试变得异常复杂,难以找到Hook位点及构造目标参数。这导致了对软件安全性的分辨困难,不清楚看似安全的软件是否藏有后门。因此本发明要解决的问题就是在软件逻辑透明的情况下保护其完整性,避免遭到篡改。鉴于目前软件静态数字签名检验机制的成熟,本发明主要讨论反Hook技术。

发明内容

[0003] 针对上述问题,本发明提供了一种基于双看门狗的软件完整性保护方法,所述方法包括:
[0004] 1)、为目标处理器配置协处理器以及协处理器专用内存,所述协处理器内置ROM中保存有出厂公钥;
[0005] 2)、在目标软件的目标函数中增设若干标识指令;
[0006] 3)、生成随机数并分发给所述目标处理器和协处理器;
[0007] 4)、构建卷积神经网络,基于所生成的随机数确定网络参量;
[0008] 5)、所述目标处理器和协处理器分别从各自的指令源获取待运行的机器指令集,并且将机器指令集以卷积神经网络的输入层尺寸为切片,输入至所述卷积神经网络,并将其输出层进行对比校验。
[0009] 在一种优选实现方式中,所述目标处理器和所述协处理器的rand函数采用伪随机函数,其输出数值与调用的次数呈现一定规律。
[0010] 在另一种优选实现方式中,所述方法还包括为目标处理器配置随机数发生器,用于生成所述随机数。
[0011] 在另一种优选实现方式中,所述步骤4)包括:基于所生成的随机数NN和随机数DD构建卷积神经网络模型,神经网络参数量为(NN+1)*NN*(DD‑1)+(NI+1)*NN,NI表示输入层,应用处理器和协处理器分别进行随机数生成。
[0012] 在另一种优选实现方式中,所述方法还包括:调用(NN+1)*NN*(DD‑1)+(NI+1)*NN次rand函数,应用处理器将结果保存到普通内存的随机地址,并使用DMA技术建立神经处理引擎到该内存的映射;协处理器将结果保存到片上专用内存,并使用DMA技术建立神经处理引擎到该内存的映射。
[0013] 在另一种优选实现方式中,所述方法还包括利用所述协处理器将目标数据划分为载荷部分和签名部分,利用公钥解密签名部分得到一个值,计算载荷部分的hash,并且将二者进行校验,调用rand函数预订次数生成相应密钥存储在协处理器的片上专用内存中,并使用该密钥在片上专用内存中完成对机器指令集的对称加密,然后将加密结果存入它的普通专用内存中,并且协处理器向应用处理器发送与上述次数相同的脉冲,应用处理器的rand函数空调用,实现rand函数的同步。
[0014] 在另一种优选实现方式中,所述神经网络模型中的隐藏层采用全连接的形式,神经元的参数量为(NN+1)*NN*(DD‑1)+(NI+1)*NN,其中,NN和DD分别为神经网络模型的层数和每层神经元数。
[0015] 在另一种优选实现方式中,在神经网络模型中,在正向传播到隐藏层第0层以后,调用rand函数,并将其返回值除以DD‑1取余,得到相应id,使得1≤id+1≤DD‑1,id+1为下次正向传播时选择隐藏层的序号。
[0016] 本发明假定用户只在检查过目标软件的数字签名时才运行它。黑客如果已经了解目标程序,要想实现Hook,需要找到感兴趣的位点地址,然后备份并修改这里使其跳转到自己的作弊代码,作弊完成后再原封不动的执行刚刚备份了的指令,然后跳转回它的下一条指令,不让目标程序察觉作弊的发生。一般Hook的方法是等待目标程序初始化完毕,然后在目标程序的进程中创建一个新的线程(注入),赋予这个线程调试权限使其能够修改此进程虚拟内存中的可执行页机器指令集。即使是拥有高权限的木马程序,也难做到在目标程序刚启动执行到main函数时就暂停它并修改兴趣位点的代码然后再恢复执行,因为这样做需要监听启动器的每个程序启动事件,这样会带来很大的计算资源开销导致系统卡顿,使木马被用户发现。如果黑客监视用户屏幕,然后手动控制使木马作为调试器,这样更容易被用户发现。因此本发明假定程序在刚启动的短暂时间内不会被Hook。
[0017] 本发明创新性地提出了随机神经网络的概念,采用本发明的方法可以有效地防止软件被木马篡改,提升网络安全,对国家和社会的信息和网络安全问题提供保障。

附图说明

[0018] 图1为本发明的架构示意图;
[0019] 图2为本发明的乱序哈希算法的示意图。

具体实施方式

[0020] 实施例1
[0021] 本实施例以对系统软件进行保护为例来说明如何采用本发明方法如何进行hook防护。
[0022] 首先,在硬件上,本发明在目标应用处理器的同一硅片上增设随机数发生器、协处理器以及协处理器专用内存。系统软件将运行在该改进的架构上。
[0023] 本发明方法的具体执行过程如下:
[0024] 1.对于系统软件,在对系统软件进行编程时,在目标函数(系统软件中的关键函数)内部的Return指令前,通过汇编语言或机器语言手动嵌入若干个NOP指令(标识指令),便于加密备份时识别每个函数机器指令空间的结尾符。
[0025] 2.当系统软件运行时,随机数发生器生成一个随机数R,并将随机数R输入到应用处理器和协处理器的srand函数,srand函数用于对rand函数进行初始设置,选择随机方式,基于随机数R确定rand函数的随机方式。
[0026] 3.两个处理器的rand函数是伪随机函数,其输出数值与调用的次数呈现一定规律。
[0027] 4.应用处理器将断电不易失存储器(通常是固态硬盘)中的数据(系统程序集,其中包括目标函数,系统程序集中包含载荷部分和签名部分)通过串行总线直接转发给协处理器。
[0028] 5.协处理器内置ROM中保存了出厂公钥。将接收到的数据(指令集)划分为载荷部分和签名部分,使用sha256算法计算载荷部分的hash,然后利用公钥解密签名部分得到一个值,将这个值和hash对比,如果一致则验证成功。验证数字签名后,调用rand函数128次生成128字节的密钥存储在协处理器的片上专用内存中,并使用这个密钥在片上专用内存(其集成在与协处理器相同的一个芯片上,用于对密钥进行存储,该密钥由于存储在芯片内部,所以,除非采用暴力破拆等手段,无法获得)中完成对机器指令集的对称加密,然后将加密结果存入它的普通专用内存(其容量大于片上专用内存,小于应用处理器普通内存)中。然后,协处理器向应用处理器发送128个脉冲,应用处理器的rand函数空调用128次,实现rand函数的同步。这样做的目的是防止黑客从应用处理器的普通内存中截获密钥来破解加密备份。现有方法都是将时间输入到哈希函数来同步密钥(比如支付宝的离线付款码),但缺陷是接触到硬件的情况下时钟可被修改,因此密钥的生成可重放造成安全性差。
[0029] 6.应用处理器以明文方式将断电不易失存储器中的机器指令集载入到它的普通内存中。
[0030] 7.应用处理器和协处理器异步:应用处理器和协处理器分别调用若干次rand函数,直到生成介于MaxN和MinN之间的随机数NN、介于MaxD和MinD之间的随机数DD。MaxN表示神经层最大深度,MaxD表示各个神经层的神经元最大个数,由人工设定。
[0031] 8.应用处理器和协处理器在完成随机数生成后将自身状态位置设置成为高电平,并监听对方状态位等待对方,直到两处理器同步。
[0032] 9.基于所生成的随机数NN和随机数DD构建神经网络模型,神经网络参数量为(NN+1)*NN*(DD‑1)+(NI+1)*NN,NI表示输入层的特征数(其与前述所生成的密钥的位数相同)。
应用处理器和协处理器分别进行随机数生成:调用(NN+1)*NN*(DD‑1)+(NI+1)*NN次rand函数,获得(NN+1)*NN*(DD‑1)+(NI+1)*NN个随机数,作为参数。应用处理器将所生成的随机数保存到普通内存的随机地址,并使用DMA技术建立神经处理引擎到该内存的映射;协处理器将结果保存到片上专用内存,并使用DMA技术建立神经处理引擎到该内存的映射,以使得能够分别对各自生成的随机数进行访问。
[0033] 10.应用处理器和协处理器在完成随机数生成后将自身状态位置为高电平,并监听对方状态位等待对方,直到两处理器同步。
[0034] 11.两个看门狗分别设置在应用处理器和协处理器上,使用定时器触发。应用处理器上的看门狗触发后,对机器指令集以NI大小切片,将所有切片依次输入神经hash算法得到测量值。协处理器上的看门狗触发后,先以片上剩余容量大小对普通专用内存中的数据切片,然后在片上专用内存使用密钥解密普通专用内存中的数据,然后以NI大小切片,将所有NI切片依次输入神经hash算法得到测量值。两个看门狗对比测量值,一致则互相喂狗,否则认为程序遭到篡改,终止程序。
[0035] 12.如果任意处理器在规定时间内不喂狗超过3次,就终止程序。
[0036] 13.其他类型的重要数据也可按上述处理机器指令集的方法处理。
[0037] 其中,步骤9中,神经hash模型的制作方法是:
[0038] 1.定义输入层神经元数量NI、隐藏层的每层神经元最大数量MaxN、最少数量MinN,隐藏层的最大深度MaxD,最小深度MinD。对于每一层的每一个神经元,使用Y=X作为激活函数。
[0039] 2.生成介于MaxN和MinN之间的随机数NN,介于MaxD和MinD之间的随机数DD。基于NN和DD构建以NN为层数,DD1、DD2、……DDNN为每层的神经元数的神经网络模型。
[0040] 3.神经网络隐藏层采用全连接的形式。神经元的参数量为
[0041] (NN+1)*NN*(DD‑1)+(NI+1)*NN。
[0042] 4.任意两个隐藏层之间,采用全连接方式进行计算,在全连接计算中,每个神经元的加权求和过程,使用signed char(1字节)类型的类加变量,无视溢出(127+1=‑128).[0043] 5.神经引擎具有独立的伪随机函数。使用NN作为种子输入srand函数。
[0044] 6.从正向传播到隐藏层第0层开始(从0开始数),调用rand函数,并将其返回值除以DD‑1取余,得到相应id,使得1≤id+1≤DD‑1,id+1即为下次正向传播时选择隐藏层的序号。
[0045] 7.重复第6步DD‑1次,最后得到的id号对应的隐藏层即作为输出层。
[0046] 采用本发明的方法,可以有效地保护系统软件和应用软件,使其不受外部木马软件的篡改,并且对于发生程序篡改的情况,能够及时发现并发出警报。
[0047] 需要说明的是,虽然上述方法是针对系统或应用程序中函数内部的机器指令集进行的防篡改保护,但同样的思想可以应用到任何数据结构中用来防止篡改。