掌桥专利:专业的专利平台
掌桥专利
首页

一种硬件辅助的物联网边缘设备控制流完整性方法

文献发布时间:2024-04-18 20:02:18


一种硬件辅助的物联网边缘设备控制流完整性方法

技术领域

本发明属于物联网控制流技术领域,具体涉及一种硬件辅助的物联网边缘设备控制流完整性方法。

背景技术

物联网边缘设备为现代社会提供了极大的便利,已经广泛应用于医疗,交通运输,生产制造,智能家居等各个方面。但与此同时,不安全的开发环境以及简单低成本的硬件架构使得边缘设备极易受到攻击。如果不对边缘设备进行有效的保护,这将对现代社会带来不可估量的影响。其中代码复用攻击已经成为物联网系统的一个重要威胁。代码复用攻击例如返回导向编程,跳转导向编程等等不需要植入恶意代码,只需要利用程序中现有的代码段即可恶意篡改程序的控制流,实现不法目的。

控制流完整性是目前针对代码复用攻击的最有效的对策之一。为了严格限制程序的控制流,控制流完整性在程序运行时确保程序的控制流是按照一个提前计算出的控制流图变化的,因此其能够检测到程序预期之外的行为并立即中止程序运行。

传统的控制流完整性方法普遍在软件上实现。但是编译器所做的优化可能会导致一些敏感数据泄漏到不安全的内存中,并且软件的方法的精度提升,会导致程序运行性能的极大的损失。部分的软件方法以牺牲安全性来换取微弱的性能提升,然而这些都已经被证明是无效的。也有部分基于硬件的控制流完整性方案,它们利用硬件处理的便捷性在一定程度上解决了软件方法中的矛盾,程序运行性能损失问题得到一定的缓解,但依然存在。另外,基于硬件的方法还会带来额外的硬件面积开销和功耗开销,在成本敏感的边缘端,过高的硬件开销和功耗开销是无法接受的。最为重要的是,之前的方案中,无论是软件或者硬件的方案,他们都以一个完美精度的控制流图作为方案的前提条件,然而离线的高精度控制流图生成算法仍然是一个有待业界攻克的难题。这就意味之前的方案并不能应用到实际的场景中。

非专利文献1(De, Asmit, et al. “FIXER: Flow integrity extensions forembedded RISC-V.”DATE,2019)中提出了一种利用Rocket Chip中的协处理器进行控制流完整性验证的方法,通过拓展RISC-V指令集,将控制流完整性的验证转移到协处理器中,从而不需要对主硬件架构做任何修改。与传统软件方法相比,其程序性能开销有显著降低,但是硬件开销无法忽略,更重要的是该方法依赖高精度的控制流图,因此在实际场景中仍无法应用。

发明内容

为了弥补现有技术的不足,本发明提供一种硬件辅助的物联网边缘设备控制流完整性方法,利用物联网边缘设备的互联性解决对高精度控制流图的高度依赖问题。

一种硬件辅助的物联网边缘设备控制流完整性方法,所述方法的实施装置包括服务器和边缘设备,边缘设备包括CPU和控制流监视器,具体实施步骤包括:

S1.控制流图生成:当一个边缘设备连接到物联网系统中时,该边缘设备的服务器马上通过动态分析技术生成该设备的控制流图并发送至该边缘设备,初始的控制流图存放在该边缘设备的控制流监视器中;

S2.本地控制流校验:如果边缘设备的CPU执行到了一条跳转指令,CPU向控制流监视器发出一次校验请求,该请求包含本次跳转的地址信息;

S3.控制流广播查询:如果本地控制流校验失败,则控制流监视器阻塞CPU流水线,并通过网络将此次跳转的地址信息分享给物联网中所有执行相同程序的设备,发起广播查询;

S4.远端控制流验证:如果控制流广播查询失败,则控制流监视器向服务器发出该设备的包含此次跳转的运行日志,服务器对运行日志进行处理之后,将数据输入一个训练好的模型进行分类;如果分类结果显示此次跳转是一个合法的跳转,则该设备把此次跳转信息更新到自己的控制流监视器中,并且恢复CPU的运行,否则会发出警告以提示需要更进一步的人工介入调查。

进一步地,所述步骤S1中动态分析是指将带有测试输入的程序放在NEMU开源行为级架构模拟器上运行,使其能在模拟运行期间记录每一次程序间接跳转的源地址和目的地址,并在模拟器执行完毕程序后将每一对源地址和目的地址发送至对应的边缘设备。

进一步地,所述步骤S4中模型为二分类器,包括数据集建立和模型训练。

进一步地,对于一个给定的边缘设备要运行的程序,将带有测试输入的程序放在NEMU开源行为级架构模拟器上运行,并记录对应的地址和指令机器码,对应的地址和指令机器码范围内的灰度图则为数据集。

进一步地,所述模型训练采用32×16×8×4×2的深度神经网络进行训练,所述深度神经网络采用ReLU作为激活函数;采用softmax在最后一层来产生0~1之间的概率;优化策略选择Adam,初始学习率设置为0.001。

进一步地,所述控制流监视器包括影子栈、控制流完整性控制器、控制流图索引表、控制流图数据表、源地址译码器和计时器,所述控制流图索引表和所述控制流图数据表通过SRAM来实现,用于存储设备程序的控制流信息,负责校验每一次间接跳转的合法性;所述译码器用于对控制流完整性控制器发送来的地址信息中的源地址进行编号,编号的结果即为读写控制流索引表的索引;所述计时器用于控制流完整性控制器向物联网边缘设备进行广播查询时的计时。

进一步地,所述控制流监视器的工作流程如下:

Q1.接收来自CPU的控制流完整性请求,该请求包含跳转的源地址和目的地址信息以及跳转种类信息;

Q2.根据来自CPU的控制流完整性请求,产生控制流监视器内部所有的控制逻辑,包括影子栈的出入栈指令,控制流索引表和控制流数据表的读写指令;

Q3.根据影子栈和控制流索引表和控制流数据表返回的信息,判断来自CPU的控制流完整性请求是否合法,如果判断为可能的非法控制流,则通过阻塞线来阻塞CPU流水线的运行;

Q4.根据影子栈和控制流索引表、控制流数据表返回的信息,判断来自CPU的控制流完整性请求是否合法,如果判断为可能的非法控制流,则在第三步的同时,向物联网系统发出此次控制流完整性请求,并附带上该边缘设备的编号;

Q5.接收来自物联网上其他边缘设备的控制流完整性请求,根据请求产生对控制流索引表和控制流数据表的读写指令,并根据索引表和数据表的结果,通过物联网向其他边缘设备进行回复。

具体的,所述步骤Q4中阻塞线默认为低电平,防止SRAM读写延迟带来的流水线阻塞,阻塞线只在出现可能的控制流冲突时才会拉高。

与现有技术相比,本发明有以下优点:

(1)本发明利用边缘端(即边缘设备)较少的硬件资源和物联网设备之间的互联性,使得各个设备的控制流图不再是一成不变的,得益于物联网设备的协调机制和深度神经网络的强大的表征能力;

(2)本申请的控制流完整性方法不再有任何程序性能上的开销,以极低的硬件开销和功耗开销为代价彻底摆脱了对完美精度的离线控制流图生成算法的依赖,使控制流完整性能实际应用于物联网边缘端场景。

附图说明

图1为本发明的系统框图;

图2为本发明的控制流监视器的流程框图;

图3为本发明的数据集的获取;

图4为本发明的控制流图索引表和控制流图内容表工作流程实例简图;

图5为本发明的影子栈工作流程实例简图。

具体实施方式

下面结合附图对本发明一种硬件辅助的物联网边缘设备控制流完整性方法作进一步说明。

如图1所示,一种硬件辅助的物联网边缘设备控制流完整性方法,包括四个步骤,分别是控制流图生成,本地控制流校验,控制流广播查询以及远端控制流验证。

步骤一:控制流图生成。当一个物联网边缘设备连接到物联网系统中时,服务器马上通过动态分析技术生成该设备的控制流图并发送至该设备;初始的控制流图存放在该设备的控制流监视器中。

对于一个给定的物联网的边缘设备将要执行的程序,在服务器端利用动态分析而非传统的静态分析方法得到其初始控制流图。具体的,动态分析是指将带有测试输入的程序放在NEMU开源行为级架构模拟器上运行,本发明修改了部分NEMU代码,使其能在模拟运行期间记录每一次程序间接跳转的源地址和目的地址。服务器上的模拟器执行完毕程序后,将每一对(源,目的)地址对发送至对应的边缘设备。之所以用动态分析取代静态分析是因为动态分析能提高初始控制流图的精度,但是动态分析仍然不是完美的,当跳转的目的地址取决于程序的输入时,理论上不可能在模拟器中遍历每一个潜在的输入来获得所有的目的地址,因此在不存在于初始控制流中的地址对也可能是合法的,因此需要优先级最高的服务器端的控制流验证。

步骤二:本地控制流校验。如果CPU执行到了一条跳转指令,CPU向控制流监视器发出一次校验请求,该请求包含本次跳转的地址信息。

步骤三:控制流广播查询。如果本地控制流校验失败,则控制流监视器阻塞CPU流水线,并通过网络将此次跳转的地址信息分享给物联网中所有执行相同程序的设备,发起广播查询。

步骤四:远端控制流验证。如果控制流广播查询失败,则控制流监视器向服务器发出该设备的包含此次跳转的运行日志,服务器对运行日志进行处理之后,将数据输入一个训练好的神经网络进行分类;如果分类结果显示此次跳转是一个合法的跳转,则该设备把此次跳转信息更新到自己的控制流监视器中,并且恢复CPU的运行,否则会发出警告以提示需要更进一步的人工介入调查。

在服务器端建立一个控制流二分类器,包括数据集建立和模型训练两个部分:

数据集建立:对于一个给定的物联网边缘设备将要运行的程序,将带有测试输入的程序放在NEMU开源行为级架构模拟器上运行。为了增加样本的信息量,如图3,在第一步修改的NEMU代码的基础上,在记录每一次跳转的(源,目的)地址对时,同时记录源地址的前两个地址以及这四个地址所对应的指令机器码。因为直接跳转和间接跳转具有一定的相似性,因此把直接跳转和间接跳转都归为正样本。至于负样本,则保持每一个正样本中的四个地址中的前三个地址不变,随机从程序中选择一个地址作为第四个地址,并记录这四个地址所对应的指令机器码。将正负样本的四个地址和四条指令机器码合计32个字节看作是一个8×4的0~255范围内的灰度图,以此灰度图作为数据集。

模型训练:受样本大小和数据集大小限制,本发明采用32×16×8×4×2的深度神经网络进行训练。该神经网络采用ReLU作为激活函数,采用softmax在最后一层来产生0~1之间的概率。优化策略选择Adam,初始学习率设置为0.001。

如图2所示,控制流监视器包括影子栈、控制流完整性控制器、控制流图索引表、控制流图数据表、源地址译码器和计时器,控制流图索引表和所述控制流图数据表通过SRAM来实现,用于存储设备程序的控制流信息,负责校验每一次间接跳转的合法性。

原地址译码器用于对控制流完整性控制器发送来的地址信息中的源地址进行编号,编号的结果即为读写控制流索引表的索引。当需要对控制流索引表和控制流数据表进行读写时,需要通过源地址译码器来进行索引。控制流完整性控制器发送来的地址信息中的源地址,由该译码器进行编号,编号的结果即为读写控制流索引表的索引,然后通过控制流索引表中的信息,再对控制流数据表进行索引。

计时器用于控制流完整性控制器向物联网边缘设备进行广播查询时的计时。当控制流完整性控制器向物联网边缘设备进行广播查询时,该计时器开始计时。如果到了计时器设定的时间还没有其他设备给出肯定回复时,控制流完整性控制器就认为广播查询失败,需要请求服务器来做更进一步的控制流完整性验证。

控制流监视器的具体工作流程如下:

Q1.接收来自CPU的控制流完整性请求,该请求包含跳转的源地址和目的地址信息以及跳转种类信息;

Q2.根据来自CPU的控制流完整性请求,产生控制流监视器内部所有的控制逻辑,包括影子栈的出入栈指令,控制流索引表和控制流数据表的读写指令;

Q3.根据影子栈和控制流索引表和控制流数据表返回的信息,判断来自CPU的控制流完整性请求是否合法,如果判断为可能的非法控制流,则通过阻塞线来阻塞CPU流水线的运行;

Q4.根据影子栈和控制流索引表、控制流数据表返回的信息,判断来自CPU的控制流完整性请求是否合法,如果判断为可能的非法控制流,则在第三步的同时,向物联网系统发出此次控制流完整性请求,并附带上该边缘设备的编号;阻塞线默认为低电平,防止SRAM读写延迟带来的流水线阻塞,阻塞线只在出现可能的控制流冲突时才会拉高;

Q5.接收来自物联网上其他边缘设备的控制流完整性请求,根据请求产生对控制流索引表和控制流数据表的读写指令,并根据索引表和数据表的结果,通过物联网向其他边缘设备进行回复。

在具体实施中,当一个边缘设备连接到物联网系统中时,服务器马上执行第一步并将每一对(源,目的)地址对发送至该设备,所有的地址对存放在设备的控制流监视器中的控制流图索引表和控制流图数据表中。本申请采用一种间接映射访问的方式来存储所有的地址对,以源地址译码器的输出作为访问控制流图索引表的“索引”,控制流图索引表中表中的每一行都包括起始位置索引和结束位置索引两大块,同时每大块又可以分为“头”、“尾”两个小块,两个大块中的“头”小块指示了某一源地址对应的所有起始地址在控制流图数据表中从头开始数的索引边界。同理,两个大块中的“尾”小块指示了某一源地址对应的所有起始地址在控制流图数据表中从尾部开始数的索引边界。以图4(c)为例,假设一个跳转源地址经过译码后结果为56,则控制流图索引表第56行指示该源地址对应的所有可能的合法目的地址在控制流图数据表的从头开始数第103-108项,以及从尾部开始数第1-3项,即{0x588c, 0xabd8, 0xef10, 0x16d8, 0x3680, 0x766c, 0xaae8};尾部计数指针指示控制流图数据表尾部已有多少数据项;当收到服务器发送的所有的(源,目的)地址对后,边缘设备开始工作。

以图4为例说明本发明中的控制流图索引表和控制流图数据表的工作流程。

(1)当设备CPU流水线在写回阶段执行到一条间接跳转指令时,CPU内核通过控制流数据总线向控制流监视器中的控制流控制器发送一个验证请求,以请求验证当前间接跳转的(源,目的)地址对是否合法。见图4(a),假设源地址经过图2中的源地址译码后,其对应的行数为1,则其可能的合法的目的地址在控制流图数据表的4-6位置。控制流图数据表取出这些目的地址,如图4中,为0xbfd4和0xbc74。控制流控制器将当前间接跳转的目的地址与这些目的地址进行逐一对比,如果对比通过则给出合法答复,CPU流水线照常运行如同无事发生。

(2)如果上一步中最后的对比没通过,则控制流控制区会向CPU给出一个阻塞信号,同时向物联网网络广播请求验证该地址对。具体的:

如果其他执行相同程序的设备的控制流监视器中有此地址对,则会回复一个合法信号,该设备于是将该地址对补充进其控制流数据表中,见图4(b)灰色块0x4550,同时尾部计数指针加一,并向CPU给出合法信号,CPU流水线恢复运行。

如果其他执行相同程序的设备的控制流监视器中都无此地址对,则该设备会向物联网系统的服务器发送一个包含此次跳转的运行日志数据包以请求服务器来做最高级的控制流验证,如果服务器对该地址对给出合法回复,则该设备将地址对补充进其控制流数据表中,见图4(b)灰色块0x4550,同时尾部计数指针加一,并向CPU给出合法信号,CPU流水线恢复运行。

如果边缘设备需要向服务器来请求最高级的控制流验证,则设备需要向服务器发送一个运行日志数据包。该数据包为(源,目的)地址对以及源地址前的两个地址,服务器受到该数据包中的四个地址后,从程序的二进制文件中取出对应的四条指令的机器码,然后如图3所示,形成一个8×4的灰度图测试样本,服务器将该样本输入训练好的分类器中,将分类结果反馈给边缘设备。

(3)当其他设备在执行过中遇到相同的跳转地址对时,便能在广播请求阶段很快从前两步经过补充的设备处得到肯定回复并补充自己的控制流数据表,恢复运行。

以图5为例说明本发明中的影子栈的工作流程。影子栈的工作流程基于一个程序运行的基本原则:函数的返回一定有一个对应的函数调用,函数返回的地址为函数调用地址的下一个地址。影子栈为一块非地址映射的寄存器堆,专门用于存放函数的返回地址。当发生一次函数调用时,程序从地址0x1004跳转到地址0x3000的func_a处,函数的返回地址0x1008会压入分配给该进程的栈上,进程的栈在物理上属于内存,极易受到攻击。因此,与此同时,影子栈会将该函数的返回地址0x1008压入栈中,栈指针同时加一以指向栈顶。当函数返回时,返回地址同时从进程栈和影子栈中弹出,二者进行比较;如果相同则程序继续运行,如果不同说明返回地址已经被恶意篡改,设备此时中止程序运行并发出警告。

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

相关技术
  • 一种高精度的工程测量用全站仪
  • 一种高精度的工程测量用全站仪
技术分类

06120116576482