一种基于Append-onlyMemory的远程验证方法及设备与流程
未命名
07-14
阅读:96
评论:0
一种基于append-only memory的远程验证方法及设备
技术领域
1.本发明涉及远程验证领域,尤其涉及一种基于append-only memory的远程验证方法及设备。
背景技术:
2.物联网正在渗透到日常生活的许多方面,例如智能电表、交通红绿灯等设备中。这些设备部署在汽车、医疗、工业、智慧城市、工厂以及一些关键的基础设施中。物联网系统分为前端和后端。前端一般为嵌入式设备,部署在相对开放的环境中,很容易受到攻击。虽然,物联网的后端设备一般通过前端嵌入式设备发出的心跳信息来确认其可用性,但是后端设备仍然无法判断前端设备的完整性。例如,是否有攻击者对前端设备进行攻击以及攻击是否成功。因此,后端设备需要对前端设备进行远程验证,以确定前端设备的完整性。
3.远程验证是一种可以在远程设备中建立信任的机制。即远程设备将该设备的运行过程记录下来,并发送给远程验证者。由远程验证者来判断远程设备的状态是否正常。
技术实现要素:
4.本技术实施例提供了一种基于append-only memory的远程验证方法及设备,通过在内存控制器中增加寄存器及相关逻辑实现了高安全域为低安全域分配append-only memory,保护低安全域保存在append-only memory中数据的完整性,防止攻击者篡改。同时将数据保存在append-only memory中,减少了低安全域和高安全域之间上下文切换的次数,大大提高控制流远程验证的性能。
5.第一方面,本技术实施例提供了一种远程验证方法,该方法由物联网系统中的前端设备执行,前端设备中包括低安全域和高安全域,其中,高安全域比低安全域具有更高的权限,该方法包括:接收远程设备发送的验证请求,该验证请求用于请求对低安全域的目标应用程序进行验证;向高安全域发送内存初始化请求,以使高安全域为低安全域分配第一存储区域,第一存储区域为只可添加数据的存储区域;执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到第一存储区域;基于目标应用程序执行完成或者第一存储区域产生内存满异常,向高安全域发送数据读取请求,以使高安全域从第一存储区域中读取多个控制流跳转路径,并根据多个控制流跳转路径生成验证报告;将验证报告发送给远程设备。
6.本技术实施例提供的远程验证方法,当前端设备接收到对目标应用程序的验证请求以后,低安全域向高安全域申请第一存储区域(append-only memory)。然后在低安全域执行目标应用程序,并将目标应用程序执行过程中产生的控制流跳转路径记录到append-only memory中。由于append-only memory具有只可增加数据的属性,保证了存储在append-only memory中的;路径信息的完整性,防止攻击者篡改。进一步地,将目标应用程序的控制流跳转路径保存到append-only memory中。等到目标应运用程序执行完成或者append-only memory产生满异常时,触发高安全区域从append-only memory中读取地址信
息减少了低安全域和高安全域之间上下文切换的次数,提高控制流远程验证的性能。
7.在一个可能的实现方式中,前端设备包括内存控制器,内存控制器中包括:第一寄存器、第二寄存器和第三寄存器;高安全域为低安全域分配第一存储区域,包括:通过高安全域获取一段连续的物理地址,作为第一存储区域的物理地址;初始化第一寄存器、第二寄存器、第三寄存器,以使第一寄存器的值为物理地址的起始地址、第二寄存器的值为物理地址的终止地址、第三寄存器的值为物理地址的当前可写地址。
8.也就是说,通过在内存控制器中增加寄存器及其相关逻辑来实现高安全域为低安全域分配第一存储区域(append-only memory)。具体地,通过将内存控制器中的寄存器来记录append-only memory的起始地址、终止地址和当前可写地址。当有数据写入到append-only memory时,可以通过改变寄存器的值来更新append-only memory的当前可写地址。避免了攻击者对append-only memory内存储的数据进行篡改。
9.在一个可能的实现方式中,将目标应用程序执行过程中的控制流跳转路径记录到第一存储区域包括:获取所述第一存储区域的起始地址、终止地址和当前可写地址;获取目标应用程序需要写入到第一存储区域的控制流跳转路径的长度、目标应用程序写入到第一存储区域的写入地址;基于写入地址位于所述第一存储区域的起始地址和终止地址之间,判断写入地址是否与第一存储区域的当前可写地址相同;基于写入地址与第一存储区域的当前可写地址不相同,产生写异常,停止将控制流跳转路径写入第一存储区域;基于写入地址与第一存储区域的当前可写地址相同,将控制流跳转路径写入到第一存储区域,并根据控制流跳转路径的长度更新第一存储区域的当前可写地址。
10.也就是说,在将目标应用程序执行过程中产生的控制流跳转路径记录到第一存储区域(append-only memory)时,需要对跳转路径的写入地址进行判断,以确定写入地址位于append-only memory中。进一步地,当写入地址位于append-only memory中时,还需要将写入地址与append-only memory的当前可写入地址进行比较。只有写入地址与append-only memory的当前可写地址相同时,才将该路径写入到append-only memory中。避免了用户对append-only memory中已经写入的数据进行修改(当写入地址小于append-only memory的当前可写地址时,即认为用户需要对append-only memory中的数据进行修改)。
11.在一个可能的实现方式中,在低安全域执行所述目标应用程序之前,该方法还包括:获取目标应用程序的代码文件,该代码文件中包括了多个分支;对代码文件中的多个分支中的每一个分支,将该分支处的源指令替换为跳转指令,该跳转指令用于使得目标应用程序执行跳板代码,跳板代码中包括了分支处的源指令;在跳板代码中执行源指令,以获取下一个需要跳转的指令的路径信息。
12.也就是说,在对目标应用程序进行控制流的完整性验证时,需要获取目标程序的控制流跳转路径。因此需要对目标应用程序进行改造和插桩。通过在目标应用程序的代码文件的分支处跳转指令,将分支处的源指令发到跳板代码中执行,在不改变目标应用程序的代码文件布局的情况下,获取目标应用程序在分支处的跳转地址。
13.在一个可能的实现方式中,高安全域从第一存储区域中读取控制流跳转路径以后,该方法还包括:对第一存储区域进行重新配置,以使第一存储区域能够存储低安全域写入目标应用程序的控制流跳转路径。
14.也就是说,当高安全域从第一存储区域(append-only memory)中读取了控制流跳
转路径以后,还需要对append-only memory进行重新配置。具体地,高安全区域需要对保存append-only memory起始地址、终止地址、当前可写地址的寄存器(第一寄存器、第二寄存器、第三寄存器)的值进行初始化,以使第一寄存器的值为append-only memory的起始地址、第二寄存器的值为append-only memory的终止地址、第三寄存器的值为append-only memory的当前可写地址(重置以后的append-only memory的当前可写地址为append-only memory的起始地址)。
15.在一个可能的实现方式中,根据多个控制流跳转路径生成验证报告,包括:对多个控制流跳转路径中的每一个跳转路径进行哈希计算,得到多个哈希值;其中,对第n个路径进行哈希计算,得到第n条路径的哈希值measurementn为:
16.measurementn=hash(measurment
n-1
||destination address)
17.其中,measurment
n-1
为第n-1条路径的哈希值,destination address为目标应用程序在执行第n条路径时需要跳转的目的地址;对多个哈希值和所述验证请求进行签名,得到验证报告。
18.也就是说,高安全域从第一存储区域(append-only memory)获取的多个控制流跳转路径以后,需要分别对每一个控制流跳转路径进行哈希计算。在对控制流跳转路径进行哈希计算时,需要获取当前跳转路径的上一条跳转路径的哈希值以及当前跳转路径的目的地址。然后对当前跳转路径的上一条跳转路径的哈希值以及当前跳转路径的目的地址进行哈希运算,以得到当前控制流跳转路径的哈希值。
19.第二方面,本技术实施例还提供了一种远程验证方法,该方法由物联网系统中的前端设备执行,前端设备中包括低安全域和高安全域,高安全域比低安全域具有更高的权限,前端设备的内存被划分为多个子区域,该方法包括:接收远程设备发送的多个验证请求,多个验证请求用于请求对低安全域的多个目标应用程序进行验证;为多个目标应用程序中的每一个应用程序分配一个子区域;向高安全域发送内存初始化请求,以使高安全域为每一个子区域分配第一存储区域,第一存储区域为只可添加数据的存储区域;对多个目标应用程序中的每一个目标应用程序,执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到目标应用程序对应的子区域的第一存储区域;基于目标应用程序执行完成或者第一存储区域产生内存满异常,向高安全域发送数据读取请求,以使高安全域从所述第一存储区域中读取多个控制流跳转路径,并根据多个控制流跳转路径生成验证报告;将验证报告发送给远程设备。
20.本技术实施例提供的远程验证方法,通过将前端设备的内存划分为多个子区域。对前端设备系统中的不同目标应用程序分配不同的子区域,并为每个子区域分配对应的第一存储区域(append-only memory)。即在同一个设备系统中提供了多段append-only memory以应对同一个设备系统中多个应用并行进行远程验证的情况。
21.在一个可能的实现方式中,前端设备中包括内存控制器,内存控制器中包括:第三存储器和第四存储器;向高安全域发送内存初始化请求,以使高安全域为每一个子区域分配第一存储区域,包括:对多个目标应用程序中的每一个目标应用程序,获取子区域的第一寄存器和第二寄存器,第一寄存器记录了子区域的起始地址,第二寄存器记录了子区域的终止地址;通过高安全域获取一段连续的物理地址,作为第一存储区域的物理地址;初始化第一寄存器、第二寄存器、第三寄存器和第四寄存器,以使第一寄存器的值为所述物理地址
的起始地址,第二寄存器的值为物理地址的终止地址,第三寄存器的值为物理地址的当前可写地址,第四寄存器用于存储第一存储区域的访问权限信息。
22.也就是说,通过在内存控制器中增加寄存器及其相关逻辑来实现高安全域为低安全域分配第一存储区域(append-only memory)。具体地,通过复用子区域的寄存器来记录append-only memory的起始地址、终止地址,以及需要在内存控制器中增加寄存器来记录append-only memory的当前可写地址和append-only memory的访问权限。保证了只有低安全域中目标应用程序运行所在的核可以对append-only memory进行写以及只有高安全域可以对append-only memory进行读。保证了append-only memory中数据的安全性。
23.在一个可能的实现方式中,为多个目标应用程序中的每一个应用程序分配一个子区域,包括:对多个目标应用程序中的每一个目标应用程序,获取目标应用程序的代码文件;在目标应用程序的代码文件中插入操作代码文件,使得目标应用程序在执行过程中能够对多个子区域中的一个子区域进行读写操作。
24.也就是说,在为目标应用程序分配子区域时,在目标应用程序的代码文件中插入对子区域的操作代码文件。以保证在目标应用程序执行过程中,能够将目标应用程序的控制流跳转路径保存在子区域的append-only memory中。
25.第三方面,本技术实施例提供了一种终端设备,该设备中包括低安全域和高安全域,其中,高安全域比低安全域具有更高的权限,
26.低安全域包括:
27.通讯模块,用于接收远程设备发送的验证请求,验证请求用于请求对低安全域的目标应用程序进行验证;
28.通讯模块,还用于向高安全域发送内存初始化请求;
29.处理模块,用于执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到第一存储区域;
30.异常处理模块,用于向高安全域发送数据读取请求;
31.通讯模块,还用于接收高安全域发送的验证报告,并将该验证报告发送给远程设备;
32.高安全域包括:
33.内存初始化模块,用于根据内存初始化请求,为低安全域分配第一存储区域,第一存储区域为只可添加数据的存储区域;数据收集模块,用于读取第一存储区域中的多个控制流跳转路径;
34.验证模块,用于根据多个控制流跳转路径生成验证报告。
35.在一个可能的实现方式中,前端设备包括内存控制器,内存控制器中包括:第一存储器、第二存储器和第三存储器,该内存初始化模块用于:
36.获取一段连续的物理地址,作为第一存储区域的物理地址;
37.初始化第一寄存器、第二寄存器、第三寄存器,以使第一寄存器的值为物理地址的起始地址、第二寄存器的值为物理地址的终止地址、第三寄存器的值为物理地址的当前物理地址的可写地址。
38.在一个可能的实现方式中,处理模块还用于
39.获取第一存储区域的起始地址、终止地址和当前可写地址;
40.获取目标应用程序需要写入到第一存储区域的控制流跳转路径的长度、目标应用程序写入到第一存储区域的写入地址;
41.基于写入地址位于第一存储区域的起始地址和终止地址之间,判断写入地址是否与第一存储区域的当前可写地址相同;
42.基于写入地址与第一存储区域的当前可写地址不相同,产生写异常,停止将控制流跳转路径写入第一存储区域;
43.基于写入地址与第一存储区域的当前可写地址相同,将控制流跳转路径写入到第一存储区域,并根据控制流跳转路径的长度更新第一存储区域的当前可写地址。
44.在一个可能的实现方式中,在执行所述目标应用程序之前,处理模块还用于:
45.获取目标应用程序的代码文件,该代码文件中包括了多个分支;
46.对代码文件中的多个分支中的每一个分支,将分支处的源指令替换为跳转指令,跳转指令用于使得目标应用程序执行跳板代码,跳板代码中包括了分支处的源指令;
47.在跳板代码中执行源指令,以获取下一个需要跳转的指令的路径信息。
48.在一个可能的实现方式中,读取第一存储区域中的控制流跳转路径以后,数据收集模块还用于:
49.对第一存储区域进行重新配置,以使第一存储区域能够存储低安全域写入目标应用程序的控制流跳转路径。
50.在一个可能的实现方式中,验证模块用于:
51.对多个控制流跳转路径中的每一个跳转路径进行哈希计算,得到多个哈希值;其中,对第n个路径进行哈希计算,得到第n条路径的哈希值measurementn为:
52.measurementn=hash(measurment
n-1
||destination address)
53.其中,measurment
n-1
为第n-1条路径的哈希值,destination address为目标应用程序在执行第n条路径时需要跳转的目的地址;对多个哈希值和所述验证请求进行签名,得到验证报告。
54.第四方面,本技术实施例提供了一种终端设备,该终端设备中包括低安全域和高安全域,高安全域比所述低安全域具有更高的权限,该终端设备的内存被划分为多个子区域,
55.低安全域包括:
56.通讯模块,用于接收远程设备发送的多个验证请求,多个验证请求用于请求对低安全域的多个目标应用程序进行验证;
57.处理模块,用于为多个目标应用程序中的每一个应用程序分配一个子区域;
58.通讯模块,还用于向所述高安全域发送内存初始化请求;
59.处理模块,还用于对多个目标应用程序中的每一个目标应用程序,执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到目标应用程序对应的子区域的第一存储区域;
60.异常处理模块,用于向高安全域发送数据读取请求;
61.所述通讯模块,还用于接收高安全域发送的验证报告,并将验证报告发送给远程设备;
62.所述高安全域包括:
63.内存初始化模块,用于根据内存初始化请求,为每一个子区域分配第一存储区域,第一存储区域为只可添加数据的存储区域;
64.数据收集模块,用于读取所述第一存储区域中的多个控制流跳转路径;
65.验证模块,用于根据多个控制流跳转路径生成验证报告。
66.在一个可能的实现方式中,前端设备包括内存控制器,内存控制器包括:第一存储器、第二存储器和第三存储器,内存初始化模块用于:
67.对多个目标应用程序中的每一个目标应用程序,获取子区域的第一寄存器和第二寄存器,第一寄存器记录了子区域的起始地址,第二寄存器记录了子区域的终止地址;
68.通过高安全域获取一段连续的物理地址,作为第一存储区域的物理地址;
69.初始化所述第一寄存器、第二寄存器、第三寄存器和第四寄存器,以使第一寄存器的值为物理地址的起始地址,第二寄存器的值为物理地址的终止地址,第三寄存器的值为物理地址的当前可写地址,第四寄存器用于存储第一存储区域的访问权限信息。
70.在一个可能的实现方式中,处理模块用于:
71.对多个目标应用程序中的每一个目标应用程序,获取目标应用程序代码文件;
72.在目标应用程序的代码文件中插入操作代码文件,使得目标应用程序在执行过程中能够对多个子区域中的一个子区域进行读写操作。
73.第五方面,本技术实施例提供了一种电子设备,该电子设备包括:至少一个存储器,用于存储目标应用程序;
74.至少一个处理器,可以被分时复用在高安全域和低安全域,当处理器处于低安全域时,处理器用于:
75.接收远程设备发送的验证请求,该验证请求用于请求对低安全域的目标应用程序进行验证;
76.向高安全域发送内存初始化请求,以使高安全域为低安全域分配第一存储区域,第一存储区域为只可添加数据的存储区域;
77.执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到第一存储区域;
78.基于目标应用程序执行完成或者第一存储区域产生内存满异常,向高安全域发送数据读取请求,以使高安全域从所述第一存储区域中读取多个控制流跳转路径,并根据多个控制流跳转路径生成验证报告;
79.将验证报告发送给远程设备。
80.第六方面,本技术实施例提供了一种电子设备,该设备包括:至少一个存储器,用于存储目标应用程序,至少一个存储器中的内存区域被划分为多个子区域;
81.至少一个处理器,可以被分时复用在高安全域和低安全域,当处理器处于低安全域时,处理器用于:
82.接收远程设备发送的多个验证请求,多个验证请求用于请求对低安全域的多个目标应用程序进行验证
83.为多个目标应用程序中的每一个应用程序分配一个子区域;
84.向高安全域发送内存初始化请求,以使高安全域为每一个子区域分配第一存储区域,其中,第一存储区域为只可添加数据的存储区域;
85.对多个目标应用程序中的每一个目标应用程序,执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到目标应用程序对应的子区域的第一存储区域;
86.基于目标应用程序执行完成或者所第一存储区域产生内存满异常,向高安全域发送数据读取请求,以使高安全域从所述第一存储区域中读取多个控制流跳转路径,并根据多个控制流跳转路径生成验证报告;
87.将验证报告发送给远程设备。
88.第七方面,本技术实施例提供了一种计算机可读介质,该计算机存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行第一方面或者第二方面的方法。
89.第八方面,本技术实施例提供了一种包含指令的计算机程序产品,当指令在计算机上运行时,使得计算机执行第一方面或者第二方面的方法。
附图说明
90.为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
91.图1为基于tpm的远程验证示意图;
92.图2为arm trustzone架构的示意图;
93.图3a为基于arm trustzone的控制流完整性远程验证示意图;
94.图3b为基于arm trustzone的控制流完整性远程验证的又一示意图
95.图4为lo_fat系统架构示意图;
96.图5为本技术实施例提供的一种应用场景图;
97.图6为本技术实施例提供的一种前端设备的结构示意图;
98.图7为本技术实施例提供的一种处理器系统架构图;
99.图8为本技术实施例提供的一种基于append-only memory远程验证方法的流程图;
100.图9为本技术实施例提供的一种将数据写入到第一存储区域的流程示意图;
101.图10为本技术实施例提供的又一种基于append-only memory远程验证方法的流程图;
102.图11为tzc-400的region的划分示意图;
103.图12为region的append-only权限配置示意图;
104.图13为本技术实施例提供的一种前端设备的结构示意图。
具体实施方式
105.为了使本技术实施例的目的、技术方案和优点更加清楚,下面将结合附图,对本技术实施例中的技术方案进行描述。
106.在本技术实施例中的描述中,“示例性的”、“例如”或者“举例来说”的任何实施例或设计方案不应该被理解为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”、“例如”或者“举例来说”等词旨在以具体方式呈现相关概念。
107.此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
108.远程验证是一种可以在远程设备中建立信任的机制。即远程设备将该设备的运行过程记录下来,并发送给远程验证者。由远程验证者来判断远程设备的状态是否正常。
109.首先,对远程验证进行介绍。远程验证的一个关键组成部分是可信存储,用来记录被验证设备的运行过程,防止攻击者篡改被验证设备运行过程中产生的数据。如图1所示,在传统的针对服务器和台式机的远程验证方案中,可信存储由可信平台模块(trusted platform module,tpm)提供。但是在低端嵌入式设备上部署tpm过于复杂和昂贵。因此,学术界也会采用一些轻量级的方案来提供可信存储,但也会带来较大的性能开销。进一步地,传统的远程验证只在系统启动时通过度量静态的可执行文件来度量系统的初始状态,无法应对运行时的漏洞利用攻击,典型的如rop攻击。
110.其次,远程验证还存在粒度的选择问题。比如以模块为粒度(粗)进行验证或者以代码跳转的粒度(细)进行验证。其中,验证的粒度越粗,安全性越差,但性能开销会越低。验证粒度越细,安全性越好,但是性能开销会越高。
111.接下来,对远程设备中的arm处理器架构进行介绍。arm是大多数物联网设备使用的一种处理器架构。arm trustzone是基于硬件的安全功能。图2为arm trustzone架构的示意图,如图2所示,arm trustzone通过对原有的硬件架构进行修改,在处理器层次引入了两个不同权限的保护域—安全世界和普通世界,任何时刻处理器仅在其中的一个环境内运行。同时,安全世界和普通世界这两个世界是硬件隔离的,并且具有不同的权限。普通世界中运行的应用程序或操作系统访问安全世界的资源会受到严格的限制。反过来,安全世界中运行的程序可以正常访问普通世界中的资源。安全世界和普通世界这两个世界之间的硬件隔离和不同权限等属性行为为保护应用程序的代码和数据提供了有效的机制。一般情况下,普通世界用于运行商品操作系统(例如,android、ios等)。在普通世界中运行的商品操作系统提供了正常执行环境(rich execution environment,ree)。安全世界则始终使用安全的小内核(tee-kernel)提供可信执行环境(trusted execution environment,tee),机密数据可以在tee中被存储和访问。这样一来,即使普通世界中的操作系统被破坏或入侵(例如,ios已被越狱或android已被root),黑客依旧无法获取存储在tee中的机密数据。因此,安全世界可以为普通世界(非安全世界)提供可信存储,即使ree被入侵,依然能够保证安全世界保存的数据的完整性。
112.目前有几种方案能够对远程设备的控制流完整性进行验证。第一种方案,如图3a和图3b所示。图3a和图3b提供了一种基于arm trustzone的控制流完整性验证架构示意图。
113.步骤1,验证者对远程设备上的目标应用模块的静态分析,获取目标应用的控制流图。该控制流图涵盖了目标应用所有合法的控制流的路径。
114.步骤2,对控制流图中的每一条路径进行度量,即计算哈希值,并将该哈希值保存在measurement db中。
115.步骤3,验证者向远程设备上的目标应用发送验证请求,即challenge c;
116.步骤4,在远程设备上执行目标应用,并记录目标应用在执行过程中的控制流跳转
路径。该跳转路径包括目标应用在执行过程中可能被攻击的分支跳转的地址,包括:前向跳转和反向跳转。
117.由于在目标应用在执行过程中,分支跳转的数量非常多,产生的数据量也非常的大。为了减少网络传输过程的数据量,在具体场景中都是以计算分支跳转地址的哈希值的方式来记录分支挑战地址的。具体地,第n个跳转的分支地址的哈希值measurementn为:
118.measurementn=hash(measurmemt
n-1
||destination address)
119.其中,measurment
n-1
为第n-1条路径的哈希值,destination address为目标应用程序在执行第n条路径时需要跳转的目的地址。
120.步骤5,远程设备对验证者发送的验证请求(challenge c)和measurementn进行签名,生成验证报告,并将该验证报告发送给验证者。
121.在执行目标应用的过程中,目标应用并不能对执行过程中的跳转地址进行记录。因此,还需要对目标应用程序进行改造和插桩。参照图3b,按照目标应用程序的原始逻辑,branch_c指令执行完之后会执行ins_c,但这样就无法记录分支跳转的地址。因此,需要对程序进行插桩,使branch_c指令跳转到trampolines。trampolines将跳转地址发送到armtrustzone提供的可信存储中,然后再跳转到ins_c指令。如图3b所示,首先,对目标应用程序插桩,在分支跳转处插入跳转指令,执行跳板代码,对应图3b中的
②
。然后跳板代码将分支跳转地址发送给安全世界的hash engine,对应图3b中的
③
。
122.安全世界中的hash engine计算分支跳转地址的度量值。如果所有的分支跳转地址都已经执行完毕,者生成验证报告(attestation report),对应图3b中的
④
。否则,返回跳板代码,对应图3b中的
⑤
。跳板代码再跳转到下一条指令,应用程序继续执行,对应图3b中的
⑥
。
123.步骤6,验证接收到的验证报告的签名,然后根据验证报告中measurementn在measurement db中进行检索。如果能够在measurement db中检索到与measurementn相同的哈希值,则表示远程设备上的控制流路径是合法的。否则,该路径则受到了攻击。
124.第一种方案,虽然能够对远程设备的控制流的完整性进行验证。但是在远程设备上执行目标应用程序时,每一次分支跳转相比原始的程序逻辑都要多执行三个操作:(1)跳转到trampolines。(2)普通世界到安全世界的上下文的切换。(3)安全世界中的哈希运算。这三个操作中,普通世界到安全世界的上下文的切换性能开销最高。因此,第一种方案中,系统整体性能开销与需要验证的分支跳转的数量呈线性关系,如果应用程序中需要验证的分支跳转的数量很多,性能开销会非常大。
125.第二种方案,如图4所示,lo_fat是基于硬件的控制流远程验证技术,它修改了处理器的pipeline,利用广泛存在的branch filter来追踪控制流,并提供了片上存储来保存控制流路径的度量值。
126.第二种方案,需要修改处理器的pipeline,是针对控制流完整性远程证明这一应用的深度定制,是基于开源的risc-v的微控制器soc(pulpino)实现的,学术研究是可以的,但对于商业处理器来说,这种改动太大了,无法被商业处理器厂商接受。
127.本发明申请的主要应用场景为对物联网系统中的远程设备的控制流的完整性验证。整体的系统架构主要包括:验证者和证明者。证明者向验证者发送远程验证报告以证明证明者当前的状态是正常的,没有被攻击。验证者通过证明者发送的验证报告确定证明者
的状态为正常后,可以向证明者发送机密数据。图5为本技术实施例提供的一种应用场景图。本技术实施例提供的一种基于append-only memory控制流完整性远程验证方案主要应用于物联网系统。如图5所示的物联网系统架构图包括:服务器10和前端设备11、前端设备12、前端设备13和前端设备14。前端设备11、前端设备12、前端设备13和前端设备14均可以与服务器10进行通信。其中,前端设备11、前端设备12、前端设备13和前端设备14中均存在低安全域和高安全域。高安全域比低安全域具有更高的权限。即高安全域可以管理内存,控制低安全域对内存的访问权限。
128.当服务器10需要与前端设备11进行通信时,服务器10需要验证前端设备11上与服务器10进行通信的目标应用程序的可用性。在服务器10验证前端设备11的可用性的过程中,服务器10作为验证者,被验证的前端设备11作为证明者。在服务器10首先需要获取前端设备11上被验证的目标应用程序的控制流图,该控制流图涵盖了目标应用程序的所有合法的控制流的路径。然后,服务器10对获取的控制流图中的每一条路径计算哈希值,并将该哈希值保存在服务器10的数据库中。然后服务器10向远程设备11上的目标应用程序发起验证请求。远程设备11接收到服务器10发送的验证请求以后,远程设备11中低安全区向高安全域发送内存初始化请求,请求高安全域为低安全域分配只可添加内存的存储区域(append-only memory,aom)。高安全域为低安全域分配append-only memory以后,在低安全域中执行目标应用程序,并将目标应用程序执行过程汇总的控制流路径跳转地址信息记录到append-only memory。当目标应用程序执行完成或者append-only memory产生内存满异常时,由低安全域向高安全域发送数据读取请求。高安全域接收到低安全域发送的数据读取请求以后,从append-only memory中读取目标应用程序的控制流跳转路径,并计算每一条控制流跳转路径的哈希值。然后,基于每一条控制流跳转路径的哈希值和服务器发送的验证请求在高安全域生成验证报告,并将该验证报告发送到低安全域。在低安全域对该验证报告签名以后,发送给服务器10。服务器10接收到验证报告以后,验证验证报告的签名。然后服务器10获取验证报告中的控制流路径的哈希值,并在服务器10的数据库中寻找是否存在与验证报告中的哈希值相同的哈希值。如果存在,则表示远程设备11上的目标应用的控制流路径是合法的。否则,远程设备11上的目标应用程序受到了攻击。
129.图6为本技术实施例提供的一种前端设备的结构示意图。参见图6,该前端设备包括:低安全域61、高安全域62、固件63、只可添加内存区域(append-only memory,aom)64、与低安全域对应的存储区域nw memory、与高安全域对应的存储区域sw。其中,低安全域61用于运行商品操作系统,该操作系统提供了正常执行环境ree。高安全域62使用安全的小内核(tee-kernel)提供可信的执行环境tee,机密数据可以在tee中被存储和访问。
130.低安全域61包括:通讯初始化模块611、异常处理模块612、目标应用程序613。高安全域62包括:内存初始化模块621、数据收集模块622和远程验证模块623。
131.通讯初始化模块611用于接收来自验证者的远程验证请求。当通讯初始化模块611接收到验证请求以后,通讯初始化模块611向高安全域的内存初始化模块621发送内存初始化请求。
132.内存初始化模块621接收通讯初始化模块611发送的内存初始化请求以后为低安全域分配append-only memory。其中,append-only memory为只可添加数据的存储区域。内存初始化模块621在为低安全域61分配append-only memory时,主要包括对处理器中的内
存控制器的修改。
133.图7为本技术实施例提供的一种处理器系统架构图。如图7所示,内存控制器位于cpu core和动态随机存取存储器(dram)之间。内存控制器用于实现cpu core到dram的访问控制。在一个示例中,内存初始化模块621为低安全域61分配append-only memory的过程包括步骤1-步骤2。
134.步骤1:在内存控制器中增加三个寄存器分别为:address_s register,address_e register,cursor register,分别表示起始地址、终止地址和当前可写的位置。新增加的寄存器只有高安全域62可以写,低安全域61不可写。
135.步骤2:内存初始化模块621在内存中获取一段连续的物理地址。然后内存初始化模块将该物理地址的起始地址写入到address_s register中,将该物理地址的终止地址写入到adress_e register中,将该物理地址的当前可写地址写入到cursor register中。在append-only memory初始化完成以后,cursor register的初始地址为该物理地址的起始地址。
136.在内存初始化模块621为低安全域61分配append-only memory以后,在低安全域61中执行目标应用程序613,并通过cpu将目标应用程序613在每个分支进行跳转的跳转地址信息记录到append-only memory中。
137.在一个可能的示例中,为了获取目标应用程序在每个分支进行跳转的信息,需要对目标应用程序进行插桩。包括:步骤1-步骤3。
138.步骤1,获取目标应用程序的代码文件,该代码文件中包括了多个分支。
139.在获取目标应用程序的代码文件时,获取的代码文件可以是目标应用程序的源代码也可以是目标应用程序的二进制代码。
140.步骤2,对代码文件中的多个分支中的每一个分支,将分支处的源指令替换为跳转指令,跳转指令用于使得目标应用程序执行跳板代码,该跳板代码中包括了分支处的源指令。
141.由于跳板代码较长,如果直接使用跳板代码来替换分支处的源指令,会打乱代码文件的布局。因此,在分支处用与源指令相同长度的跳转指令来替换源指令,使得代码文件执行到跳转指令处,便会自动跳转到跳板代码处,在跳板代码中执行源指令。在跳板代码中执行完源指令以后会自动跳转到下一个指令。
142.步骤3,在跳板代码中执行源指令,以获取下一个需要跳转的指令的路径信息。
143.在一个可能的示例中,当目标应用程序613执行完毕,异常处理模块612向数据收集模块622发送数据读取请求,以使数据收集模块622从append-only memory中读取目标应用程序613的分支跳转地址的地址信息。数据收集模块622从向数据收集模块622发送数据读取请求,以使数据收集模块622从append-only memory中读取目标应用程序613的分支跳转地址的地址信息。数据收集模块622从append-only memory中读取目标应用程序613的分支跳转地址的地址信息以后,还需要对append-only memory进行重置,以便低安全域后续可继续存入数据。
144.在另一个可能的示例中,当append-only memory发生异常时,异常处理模块612对append-only memory中发生的异常进行判断。基于append-only memory中发生的异常为内存满异常。异常处理模块612向数据收集模块622发送数据读取请求,以使数据收集模块622
从append-only memory中读取目标应用程序613的分支跳转地址的地址信息。数据收集模块622从append-only memory中读取目标应用程序613的分支跳转地址的地址信息以后,还需要对append-only memory进行重置,以使append-only memory存储目标应用程序的分支跳转地址的地址信息。
145.数据收集模块622从append-only memory中读取目标应用程序613的分支跳转地址的地址信息以后,将获取的分支跳转地址的地址信息发送给远程验证模块623。远程验证模块623对接收的每一条地址信息计算哈希值。然后在目标应用程序613执行完成以后对计算得到哈希值和接收到的远程验证请求进行签名,生成验证报告。然后,远程验证模块623将该验证报告发送给通讯和初始化模块611,以使通讯和初始化模块611将该验证报告发送给远程设备进行验证。
146.在本技术实施例中,通过在内存控制器中增加寄存器及相关逻辑实现了高安全域为低安全域分配append-only memory。由于append-only memory只可添加数据,避免了存储在append-only memory中的数据被攻击者篡改,保证了在低安全域下保存在append-only memory中的数据的完整性。进一步地,在目标应用程序执行过程中,将在低安全域获取的路径信息保存到append-only memory中,使得只有在目标应用程序执行完毕或者append-only memory产生内存满异常时,才将append-only memory中的数据发送到高安全域,减少了低安全域和高安全域之间上下文切换的次数,极大的提高了控制流远程验证的性能。
147.图8为本技术实施例提供的一种基于append-only memory远程验证方法的流程图。该方法由图5所示的物联网系统中的前端设备执行,前端设备中包括低安全域和高安全域,高安全域比所述低安全域具有更高的权限。参见图8,该方法包括步骤s801-步骤s805。
148.步骤s801,接收远程设备发送的验证请求,该验证请求用于请求对低安全域的目标应用程序进行验证。
149.前端设备中的通讯和初始化模块611接收来自远程设备的验证请求。该验证请求中包括了需要验证的目标应用程序的信息。
150.步骤s802,向高安全域发送内存初始化请求,以使高安全域为低安全域分配第一存储区域,其中,第一存储区域为只可添加数据的存储区域。
151.通讯和初始化模块接收到远程设备发送的验证信息以后,通讯和初始化模块向高安全域的内存初始化模块发送内存初始化请求。该内存初始化请求用于请求高安全域的内存初始化模块为低安全域分配第一存储区域,即append-only memory,其中,第一存储区域为只可添加数据的存储区域。
152.在一个可能的示例中,内存初始化模块为低安全域分配第一存储区域,首先,需要在内存控制器中增加三个寄存器。在内存控制器中增加的三个寄存器分别为:address_s register,address_e register,cursor register。其中address_s register用于表示第一存储区域的起始地址,address_e register用于表示第一存储区域的终止地址,cursor register用于表示第一存储区域的当前可写位置。当第一存储区域刚初始完成时,第一存储区域的当前可写位置即为第一存储区域的起始地址。然后,内存初始化模块从前端设备的内存中获取一段连续的物理地址,并将该物理地址写入到内存控制器中新增加的三个寄存器中。具体地,内存初始化模块将该物理地址的起始地址写入到address_s register中,
将该物理地址的终止地址写入到address_e register中,将该物理地址的当前可写入地址写入到cursor register中。其中,cursor register的初始值为该物理地址的起始地址。
153.在另一个可能的实施例中,也可以使用address_s register和memory_size register分别表示append-only memory的起始地址和大小。利用address_s register和memory_size register来替代上述示例中的address_s register,address_e register,以标识append-only memory的地址范围。
154.步骤s803,执行目标应用程序,并将该目标应用程序执行过程中的控制流跳转路径记录到第一存储区域。
155.由于直接在低安全域执行目标应用程序,无法获取目标应用程序执行过程中控制流进行跳转的路径信息。因此需要对目标应用程序进行改造和插桩。即在执行目标应用程序之前,需要获取目标应用程序的代码文件,在目标应用程序的代码文件的各个分支处插入跳转指令。在一个示例中,用跳转指令来替换目标应用程序的第n条指令,并将第n条指令放置到跳板代码中。当目标应用程序执行到第n条指令处,会执行在插入在第n条指令处的跳转指令,并跳转到跳板代码。目标应用程序在跳板代码中执行第n条指令,并在第n条指令执行完成以后,自动跳转到第n+1条指令。此时跳板代码获取第n+1条指令的地址信息,并将该地址信息发送到第一存储区域进行保存。
156.当cpu处于低安全域,且在低安全域将目标应用程序的控制流进行跳转的路径信息写入到第一存储区域的写入过程如图9所示。参照图9,包括步骤s901-步骤s909。
157.步骤s901,获取第一存储区域的起始地址address_s、当前可写入地址cursor、终止地址address_e。
158.步骤s902,获取当前写入地址x以及获取需要写入第一存储区域的地址的数据长度y。
159.步骤s903,判断当前写入地址x是否位于第一存储区域的起始地址address_s和终止地址address_e之间,基于x》=address_s&&x《address_e,执行步骤s905,否则执行步骤s904。
160.步骤s904,执行原内存写入的处理逻辑。
161.步骤s905,判断当前写入地址x是否等于第一存储区域的当前可写入地址cursor,基于x=cursor,执行步骤s907,否则执行步骤s906。
162.步骤s906,产生写入异常,cpu跳转到异常处理模块,由异常处理模块进行处理。
163.当前写入地址x不等于第一存储区域的当前可写入地址cursor包括两种情况。第一种情况,x<cursor,此时可以确定当前操作者想对已经存入第一存储区域的数据进行修改。此时,第一存储区域产生修改异常,cpu跳转到异常处理模块,异常处理模块暂停当前程序对第一储存区域的修改操作。第二种情况,x>cursor,第一存储区域产生非连续写异常,cpu跳转到异常处理模块,异常处理模块暂停当前程序对第一储存区域的写操作。避免了攻击者对已经存入到第一存储区域的数据的修改。
164.步骤s907,向第一存储区域内写入地址信息。并更新第一存储区域的当前可写入地址cursor。更新后的cursor=cursor+y。
165.步骤s908,判断更新后的当前可写入地址cursor是否等于第一存储区域的终止地址address_e,基于更新后的cursor=address_e,执行步骤s909,否则执行步骤s902。
166.步骤s909,产生内存满异常,cpu跳转到异常处理模块,异常处理模块向高安全域发送数据读取请求。
167.步骤s804,基于目标应用程序执行完成或者第一存储区域产生内存满异常,向高安全域发送数据读取请求,以使高安全域从第一存储区域中读取控制流跳转路径,并根据该控制流跳转路径生成验证报告。
168.在本技术实施例中,目标应用程序执行完成和第一存储区域产生内存满异常都会触发异常处理模块向高安全域发送数据读取请求。
169.在一个可能的示例中,如果第一存储区域的存储空间较小,那么存在在目标应用程序执行完成之前,第一存储区域因为内存满异常触发异常处理模块612向高安全域发送数据读取请求。高安全域的数据收集模块622接收到数据读取请求以后,数据收集模块622从第一存储区域读取路径信息。然后,数据收集模块622将该路径信息发送给远程验证模块623,同时数据收集模块622对第一储存区域进行初始化,即重置address_s register,adress_e register,cursor register,以便低安全域后续使用。第一存储区域初始化完成以后,继续执行目标应用程序,并将目标应用程序的控制流跳转路径记录到第一存储区域。当目标应用程序执行完成以后,目标应用程序触发内存处理模块612向数据收集模块622发送数据读取请求。数据收集模块622从第一存储区域读取路径信息,并将该路径信息发送给远程验证模块623。远程验证模块623根据接收的路径信息生成验证报告。
170.在一个可能的示例中,如果第一存储区域的存储空间较大。那么存在在目标应用程序执行完成之前,第一存储区域不会发生内存满异常。此时,只能目标应用程序执行完成以后,目标应用程序触发内存处理模块612向数据收集模块622发送数据读取请求。数据收集模块622从第一存储区域读取路径信息,并将该路径信息发送给远程验证模块623。远程验证模块623根据接收的路径信息生成验证报告。
171.远程验证模块623对接收目标应用程序的每一条控制流跳转路径都计算一次哈希值。然后远程验证模块623对计算得到的多个哈希值和通讯和初始化模块611接收的验证请求进行签名,生成验证报告。然后将该验证报告发送给通讯和初始化模块611。通讯和初始化模块611将该验证报告发送给远程设备。
172.远程验证模块623在对目标应用程序的控制流跳转路径计算哈希值时,可以在每次接到目标应用程序的控制流跳转路径以后,就对该控制流跳转路径计算哈希值。远程验证模块623也可以在接收到目标应用程序的控制流跳转路径以后,先保存接收的控制流跳转路径,等到目标应用程序执行完成以后,再对接收的控制流跳转路径分别计算哈希值。
173.在一个示例中,在计算每一条路径的哈希值时,还需要获取前一条路径的哈希值。以计算第n条路径的哈希值为例,进行说明。对第n个路径进行哈希计算,得到第n条路径的哈希值measurementn为:
174.measurementn=hash(measurment
n-1
||destination address)
175.其中,measurment
n-1
为第n-1条路径的哈希值,destination address为目标应用程序在执行第n条路径时需要跳转的目的地址;
176.步骤s805,将所述验证报告发送给远程设备。
177.在本技术实施例中,高安全域为低安全域分配只可添加数据的第一存储区域(append-only memory),避免了存储在append-only memory中的数据被攻击者篡改,保证
了在低安全域下保存在append-only memory中的数据的完整性。进一步地,在目标应用程序执行过程中,将在低安全域获取的路径信息保存到append-only memory中,使得只有在目标应用程序执行完毕或者append-only memory产生内存满异常时,才将append-only memory中的数据发送到高安全域,减少了低安全域和高安全域之间上下文切换的次数,极大的提高了控制流远程验证的性能。
178.在图8所示的远程验证方案中,前端设备的系统中只存在一段append-only memory。而在本发明申请中并不局限与整个系统中只有一段append-only memory。本技术实施例还提供了一种针对同一个系统中的多个应用并行进行远程验证的方案。在本技术实施例中,可以通过在前端设备的内存控制器中设置多组寄存器以实现在前端设备的系统中提供多段append-only memory给多个进程使用。其中,每一段append-only memory都对应了3个寄存器,分别命名为address_s register,address_e register,cursor register。其中,address_s register记录了append-only memory的起始地址,address_e register记录了append-only memory的终止地址,cursor register记录了append-only memory的当前可写位置。
179.图10为本技术实施例提供的一种基于append-only memory远程验证方法的流程图。该方法可以由图6所示的物联网系统中的前端设备执行,前端设备中包括低安全域和高安全域,高安全域比所述低安全域具有更高的权限,以及该前端设备的内存被划分为多个子区域。参见图10,该方法包括步骤s1001-步骤s1006。
180.步骤s1001,接收远程设备发送的多个验证请求,所述多个验证请求用于请求对所述低安全域的多个目标应用程序进行验证。
181.前端设备中的通讯和初始化模块611接收来自远程设备的验证请求。该验证请求中包括了需要验证的目标应用程序的信息。
182.步骤s1002,为所述多个目标应用程序中的每一个应用程序分配一个子区域。
183.在一个可能的示例中,对多个目标应用程序中的每一个目标应用程序分配一个子区域,需要获取每一个目标应用程序代码文件。然后在获取的代码文件中插入操作代码文件,使得目标应用程序在执行过程中能够对多个子区域中的一个子区域进行读写操作。
184.需要说明的是,目标应用程序和子区域是一一对应的关系。
185.步骤s1003,向高安全域发送内存初始化请求,以使高安全域为每一个子区域分配第一存储区域,第一存储区域为只可添加数据的存储区域。
186.步骤s1004,对多个目标应用程序中的每一个目标应用程序,执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到目标应用程序对应的子区域的第一存储区域。
187.步骤s1005,对多个目标应用程序中的每一个目标应用程序,执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到目标应用程序对应的子区域的第一存储区域。
188.步骤s1006,将验证报告发送给远程设备。
189.在步骤s1003-步骤s1006中针对每一个目标应用程序的执行过程与步骤s802-步骤s805相同,在此不再赘述。
190.进一步地,为了详细说明如何在前端设备的系统中提供多段append-only memory
给多个进程使用。可以以arm corelink tzc-400trustzone address space controller为例进行说明,tzc-400支持多region架构。tzc-400的region的划分如图11所示,它支持9个区域(region),其中region 0是基础region,包含所有的物理地址,其他的region都是在region 0上划分,互不重叠。
191.对于tzc-400中的每一个region都有一组寄存器记录该region的范围及访问权限。可以通过设置base address寄存器记录该region的起始地址。通过设置top address寄存器记录该region的终止地址。通过设置region attribute register寄存器记录高安全域对该region的访问权限。通过设置region id access register寄存器记录当cpu处于低安全域时,cpu中的每一个核对该region的访问权限。
192.在一个示例中,在tzc-400支持的多region架构的处理器实现基于append-only memory的控制流完整性远程验证方案时,以tac-400上的region1为例进行说明。在region1中通过设置base address寄存器记录region1的起始地址。通过设置top address寄存器记录region1的终止地址。通过设置region attribute register寄存器记录高安全域对region1的访问权限。通过设置region id access register寄存器记录当cpu处于低安全域时,cpu中的每一个核对region1的访问权限。该方案的实现流程包括:步骤1-步骤4。
193.步骤1,对于region1,在内存控制器中增加第一寄存器和第二寄存器,其中,第一寄存器用于记录region1的append-only属性,第二寄存器用于记录region1的当前可写位置。
194.在一个可能的示例中,内存控制器中增加第一寄存器region_append《1》register用来记录region1的append-only属性。在内存控制器中增加第二寄存器region_cursor_《1》register用来记录region1的当前可写位置。
195.步骤2,内存初始化模块获取前端设备的内存中的一段连续的物理地址。
196.步骤3,内存初始化模块将region1的起始地址和终止地址替换为内存初始化模块获取的物理地址的起始地址和终止地址,并将region1的当前可写位置设置为该物理地址的起始地址。
197.具体地,内存初始化模块将获取的物理地址的起始地址分别写入到region1的base address寄存器和region_cursor_《1》register中,将该物理地址的终止地址写入到region1的top address中。
198.步骤4,通过内存初始化模块设置region1的属性信息,该属性信息包括region1的访问权限和写入权限以及region1的append-only属性。
199.具体地,内存初始化模块通过对region1的region attribute register进行设置使得高安全域对region1可读,即可设置s_rd_en=1。然后,通过内存初始化模块对cpu中的每一个核对region1的可写权限进行设置,使得在region1中运行的目标应用程序运行所在的核对region1可写,而cpu中的其他核对region1不可写。
200.进一步地,内存初始化模块通过region_append_《1》register对在region1中运行的目标应用程序运行所在的核对region1的append-only memory的append-only权限进行设置。如图12所示,当region1中运行的目标应用程序对region1的append-only memory具有append-only权限时,可以设置append-only权限的参数nsaid_ap_en=1,否则设置nsaid_ap_en=0。虽然,上述实施例只介绍了针对region1的append-only memory的设置。
但是针对tzc-400的其他region上的append-only memory的设置与region1上append-only memory的设置相同。在此,不再重复介绍。
201.当内存初始化模块为每一个region都分配好append-only memory以后。对每一个region上的目标应用程序进行控制流远程验证的过程与步骤s801-步骤s805相同,在此不再赘述。
202.在本技术实施例中,基于支持多region架构的处理器提供了一种针对同一个系统中的多个应用并行进行远程验证的方案。在本技术实施例中,对于不同的目标应用程序分配不同的region,以防止不同目标应用程序的控制流数据发生混淆。进一步地。通过在内存控制器中添加多组寄存器,以实现为每一个region提供一段append-only memory。使得在同一个系统中可分别为不同的应用提供远程验证服务。
203.本技术实施例还提供了一种前端设备,该前端设备可用于实现如图8和图9所示的基于append-only memory远程验证方法。如图13所示,该前端设备包括:处理器1301、网络接口1302、存储器1303。可选地,前端设备还包括输入设备1304。其中,处理器1301、网络接口1302、存储器1303、输入设备1304可以通过总线或者其他方式连接。
204.存储器1303是前端设备的记忆设备,用于存放程序和数据,例如存放服务器发送的验证请求。存储器1303提供存储空间,该存储空间存储了服务器的操作系统和用以实现webshell检测方法的程序指令程序指令。操作系统包括但不限于:windows系统(一种操作系统),linux系统(一种操作系统),鸿蒙系统(一种操作系统)等等,在此不做限定。
205.在本方案中,处理器1301(或称为中央处理器(central processing unit,cpu))是前端设备的计算核心及控制核心。处理器1301读取存储器1303中保存的程序指令和数据,从而执行远程验证方法。处理器1301读取存储器1303中保存的程序指令后对接收的疑似验证请求进行存储,并向高安全域发送内存初始化请求,以使所述高安全域为低安全域分配append-only memory。然后,处理器1301在低安全区域执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到append-only memory。
206.网络接口1302可以包括标准的有线接口、无线接口(如wi-fi,移动通信接口等)。网络接口1302受处理器1301的控制用于收发数据。例如接收服务器发送的验证请求,以及将前端设备生成的验证报告发送给服务器。输入设备1304用于接收用户的输入信息。
207.本技术的实施例中的方法步骤可以通过硬件的方式来实现,也可以由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于随机存取存储器(random access memory,ram)、闪存、只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)、寄存器、硬盘、移动硬盘、cd-rom或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。
208.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计
算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者通过所述计算机可读存储介质进行传输。所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solid state disk,ssd))等。
209.可以理解的是,在本技术的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本技术的实施例的范围。
技术特征:
1.一种远程验证方法,其特征在于,所述方法由物联网系统中的前端设备执行,所述前端设备中包括低安全域和高安全域,所述高安全域比所述低安全域具有更高的权限,所述方法包括:接收远程设备发送的验证请求,所述验证请求用于请求对所述低安全域的目标应用程序进行验证;向所述高安全域发送内存初始化请求,以使所述高安全域为所述低安全域分配第一存储区域,所述第一存储区域为只可添加数据的存储区域;执行所述目标应用程序,并将所述目标应用程序执行过程中的控制流跳转路径记录到所述第一存储区域;基于所述目标应用程序执行完成或者所述第一存储区域产生内存满异常,向所述高安全域发送数据读取请求,以使所述高安全域从所述第一存储区域中读取多个控制流跳转路径,并在所述目标应用程序执行完成以后,根据所述多个控制流跳转路径生成验证报告;将所述验证报告发送给远程设备。2.根据权利要求1所述的方法,其特征在于,所述前端设备包括内存控制器,所述内存控制器中包括:第一寄存器、第二寄存器和第三寄存器;所述高安全域为所述低安全域分配第一存储区域,包括:通过所述高安全域获取一段连续的物理地址,作为第一存储区域的物理地址;初始化所述第一寄存器、第二寄存器、第三寄存器,以使所述第一寄存器的值为所述物理地址的起始地址、所述第二寄存器的值为所述物理地址的终止地址、所述第三寄存器的值为所述物理地址的当前可写地址。3.根据权利要求2所述的方法,其特征在于,所述将所述目标应用程序执行过程中的控制流跳转路径记录到所述第一存储区域包括:获取所述第一存储区域的起始地址、终止地址和当前可写地址;获取目标应用程序需要写入到第一存储区域的控制流跳转路径的长度、目标应用程序写入到第一存储区域的写入地址;基于所述写入地址位于所述第一存储区域的起始地址和终止地址之间,判断所述写入地址是否与第一存储区域的当前可写地址相同;基于所述写入地址与第一存储区域的当前可写地址不相同,产生写异常,停止将控制流跳转路径写入第一存储区域;基于所述写入地址与第一存储区域的当前可写地址相同,将控制流跳转路径写入到第一存储区域,并根据所述控制流跳转路径的长度更新所述第一存储区域的当前可写地址。4.根据权利要求1-3任一项所述的方法,其特征在于,所述在低安全域执行所述目标应用程序之前,所述方法还包括:获取目标应用程序的代码文件,所述代码文件中包括了多个分支;对所述代码文件中的多个分支中的每一个分支,将所述分支处的源指令替换为跳转指令,所述跳转指令用于使得所述目标应用程序执行跳板代码,所述跳板代码中包括了分支处的源指令;在跳板代码中执行所述源指令,以获取下一个需要跳转的指令的路径信息。5.根据权利要求1所述的方法,其特征在于,所述高安全域从所述第一存储区域中读取
所述控制流跳转路径以后,所述方法还包括:对所述第一存储区域进行重新配置,以使所述第一存储区域能够存储所述低安全域写入目标应用程序的控制流跳转路径。6.根据权利要求1所述的方法,其特征在于,所述根据所述多个控制流跳转路径生成验证报告,包括:对所述多个控制流跳转路径中的每一个跳转路径进行哈希计算,得到多个哈希值;其中,对第n个路径进行哈希计算,得到第n条路径的哈希值measurement
n
为:measurement
n
=hash(measurment
n-1
||destination address)其中,measurment
n-1
为第n-1条路径的哈希值,destination address为目标应用程序在执行第n条路径时需要跳转的目的地址;对所述多个哈希值和所述验证请求进行签名,得到验证报告。7.一种远程验证方法,其特征在于,所述方法由物联网系统中的前端设备执行,所述前端设备中包括低安全域和高安全域,所述高安全域比所述低安全域具有更高的权限,所述前端设备的内存被划分为多个子区域,所述方法包括:接收远程设备发送的多个验证请求,所述多个验证请求用于请求对所述低安全域的多个目标应用程序进行验证;为所述多个目标应用程序中的每一个应用程序分配一个子区域;向所述高安全域发送内存初始化请求,以使所述高安全域为每一个子区域分配第一存储区域,所述第一存储区域为只可添加数据的存储区域;对多个目标应用程序中的每一个目标应用程序,执行目标应用程序,并将所述目标应用程序执行过程中的控制流跳转路径记录到所述目标应用程序对应的子区域的第一存储区域;基于所述目标应用程序执行完成或者所述第一存储区域产生内存满异常,向所述高安全域发送数据读取请求,以使所述高安全域从所述第一存储区域中读取多个控制流跳转路径,并根据所述多个控制流跳转路径生成验证报告;将所述验证报告发送给远程设备。8.根据权利要求7所述的方法,其特征在于,所述前端设备中包括内存控制器,所述内存控制器中包括:第三存储器和第四存储器;所述向所述高安全域发送内存初始化请求,以使所述高安全域为每一个子区域分配第一存储区域,包括:对多个目标应用程序中的每一个目标应用程序,获取子区域的第一寄存器和第二寄存器,所述第一寄存器记录了子区域的起始地址,所述第二寄存器记录了子区域的终止地址;通过所述高安全域获取一段连续的物理地址,作为第一存储区域的物理地址;初始化所述第一寄存器、第二寄存器、第三寄存器和第四寄存器,以使所述第一寄存器的值为所述物理地址的起始地址,所述第二寄存器的值为所述物理地址的终止地址,所述第三寄存器的值为所述物理地址的当前可写地址,所述第四寄存器用于存储所述第一存储区域的访问权限信息。9.根据权利要求7或8所述的方法,其特征在于,所述为所述多个目标应用程序中的每一个应用程序分配一个子区域,包括:对多个目标应用程序中的每一个目标应用程序,获取目标应用程序的代码文件;
在所述目标应用程序的代码文件中插入操作代码文件,使得目标应用程序在执行过程中能够对多个子区域中的一个子区域进行读写操作。目标应用程序控制流跳转路径控制流跳转路径。10.一种终端设备,其特征在于,所述设备中包括低安全域和高安全域,所述高安全域比所述低安全域具有更高的权限,所述低安全域包括:通讯模块,用于接收远程设备发送的验证请求,所述验证请求用于请求对所述低安全域的目标应用程序进行验证;所述通讯模块,还用于向高安全域发送内存初始化请求;处理模块,用于执行所述目标应用程序,并将所述目标应用程序执行过程中的控制流跳转路径记录到所述第一存储区域;异常处理模块,用于向所述高安全域发送数据读取请求;所述通讯模块,还用于接收高安全域发送的验证报告,并将所述验证报告发送给远程设备;所述高安全域包括:内存初始化模块,用于根据所述内存初始化请求,为所述低安全域分配第一存储区域,所述第一存储区域为只可添加数据的存储区域;数据收集模块,用于读取所述第一存储区域中的多个控制流跳转路径;验证模块,用于根据所述多个控制流跳转路径生成验证报告。11.根据权利要求10所述的设备,其特征在于,所述前端设备包括内存控制器,所述内存控制器中包括:第一存储器、第二存储器和第三存储器,所述内存初始化模块用于:获取一段连续的物理地址,作为第一存储区域的物理地址;初始化所述第一寄存器、第二寄存器、第三寄存器,以使所述第一寄存器的值为所述物理地址的起始地址、所述第二寄存器的值为所述物理地址的终止地址、所述第三寄存器的值为所述物理地址的当前物理地址的可写地址。12.根据权利要求11所述的设备,其特征在于,所述处理模块还用于获取所述第一存储区域的起始地址、终止地址和当前可写地址;获取目标应用程序需要写入到第一存储区域的控制流跳转路径的长度、目标应用程序写入到第一存储区域的写入地址;基于所述写入地址位于所述第一存储区域的起始地址和终止地址之间,判断所述写入地址是否与第一存储区域的当前可写地址相同;基于所述写入地址与第一存储区域的当前可写地址不相同,产生写异常,停止将控制流跳转路径写入第一存储区域;基于所述写入地址与第一存储区域的当前可写地址相同,将控制流跳转路径写入到第一存储区域,并根据所述控制流跳转路径的长度更新所述第一存储区域的当前可写地址。13.根据权利要求10-12任一项所述的设备,其特征在于,在执行所述目标应用程序之前,所述处理模块还用于:获取目标应用程序的代码文件,所述代码文件中包括了多个分支;对所述代码文件中的多个分支中的每一个分支,将所述分支处的源指令替换为跳转指
令,所述跳转指令用于使得所述目标应用程序执行跳板代码,所述跳板代码中包括了分支处的源指令;在跳板代码中执行所述源指令,以获取下一个需要跳转的指令的路径信息。14.根据权利要求10所述的设备,其特征在于,读取所述第一存储区域中的控制流跳转路径以后,所述数据收集模块还用于:对所述第一存储区域进行重新配置,以使所述第一存储区域能够存储所述低安全域写入目标应用程序的控制流跳转路径。15.根据权利要求10所述的设备,其特征在于,所述验证模块用于:对所述多个控制流跳转路径中的每一个跳转路径进行哈希计算,得到多个哈希值;其中,对第n个路径进行哈希计算,得到第n条路径的哈希值measurement
n
为:measurement
n
=hash(measurment
n-1
||destination address)其中,measurment
n-1
为第n-1条路径的哈希值,destination address为目标应用程序在执行第n条路径时需要跳转的目的地址;对所述多个哈希值和所述验证请求进行签名,得到验证报告。16.一种终端设备,其特征在于,所述终端设备中包括低安全域和高安全域,所述高安全域比所述低安全域具有更高的权限,所述终端设备的内存被划分为多个子区域,所述低安全域包括:通讯模块,用于接收远程设备发送的多个验证请求,所述多个验证请求用于请求对所述低安全域的多个目标应用程序进行验证;处理模块,用于为所述多个目标应用程序中的每一个应用程序分配一个子区域;所述通讯模块,还用于向所述高安全域发送内存初始化请求;所述处理模块,还用于对多个目标应用程序中的每一个目标应用程序,执行目标应用程序,并将所述目标应用程序执行过程中的控制流跳转路径记录到所述目标应用程序对应的子区域的第一存储区域;异常处理模块,用于向所述高安全域发送数据读取请求;所述通讯模块,还用于接收高安全域发送的验证报告,并将所述验证报告发送给远程设备;所述高安全域包括:内存初始化模块,用于根据内存初始化请求,为每一个子区域分配第一存储区域,所述第一存储区域为只可添加数据的存储区域;数据收集模块,用于读取所述第一存储区域中的多个控制流跳转路径;验证模块,用于根据所述多个控制流跳转路径生成验证报告。17.根据权利要求16所述的设备,其特征在于,所述前端设备包括内存控制器,所述内存控制器包括:第一存储器、第二存储器和第三存储器,所述内存初始化模块用于:对多个目标应用程序中的每一个目标应用程序,获取子区域的第一寄存器和第二寄存器,所述第一寄存器记录了子区域的起始地址,所述第二寄存器记录了子区域的终止地址;通过所述高安全域获取一段连续的物理地址,作为第一存储区域的物理地址;初始化所述第一寄存器、第二寄存器、第三寄存器和第四寄存器,以使所述第一寄存器的值为所述物理地址的起始地址,所述第二寄存器的值为所述物理地址的终止地址,所述
第三寄存器的值为所述物理地址的当前可写地址,所述第四寄存器用于存储所述第一存储区域的访问权限信息。18.根据权利要求16或17所述的设备,其特征在于,所述处理模块用于:对多个目标应用程序中的每一个目标应用程序,获取目标应用程序代码文件;在所述目标应用程序的代码文件中插入操作代码文件,使得目标应用程序在执行过程中能够对多个子区域中的一个子区域进行读写操作。19.一种电子设备,其特征在于,包括:至少一个存储器,用于存储目标应用程序;至少一个处理器,可以被分时复用在高安全域和低安全域,当所述处理器处于低安全域时,所述处理器用于:接收远程设备发送的验证请求,所述验证请求用于请求对所述低安全域的目标应用程序进行验证;向所述高安全域发送内存初始化请求,以使所述高安全域为所述低安全域分配第一存储区域,所述第一存储区域为只可添加数据的存储区域;执行所述目标应用程序,并将所述目标应用程序执行过程中的控制流跳转路径记录到所述第一存储区域;基于所述目标应用程序执行完成或者所述第一存储区域产生内存满异常,向所述高安全域发送数据读取请求,以使所述高安全域从所述第一存储区域中读取多个控制流跳转路径,并根据所述多个控制流跳转路径生成验证报告;将所述验证报告发送给远程设备。20.一种电子设备,其特征在于,包括:至少一个存储器,用于存储目标应用程序,所述至少一个存储器中的内存区域被划分为多个子区域;至少一个处理器,可以被分时复用在高安全域和低安全域,当所述处理器处于低安全域时,所述处理器用于:接收远程设备发送的多个验证请求,所述多个验证请求用于请求对所述低安全域的多个目标应用程序进行验证;为所述多个目标应用程序中的每一个应用程序分配一个子区域;向所述高安全域发送内存初始化请求,以使所述高安全域为每一个子区域分配第一存储区域,所述第一存储区域为只可添加数据的存储区域;对多个目标应用程序中的每一个目标应用程序,执行目标应用程序,并将所述目标应用程序执行过程中的控制流跳转路径记录到所述目标应用程序对应的子区域的第一存储区域;基于所述目标应用程序执行完成或者所述第一存储区域产生内存满异常,向所述高安全域发送数据读取请求,以使所述高安全域从所述第一存储区域中读取多个控制流跳转路径,并根据所述多个控制流跳转路径生成验证报告;将所述验证报告发送给远程设备。21.一种计算机可读介质,所述计算机存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行如权利要求1-6或者权利要求7-9任一所述的方法。22.一种包含指令的计算机程序产品,当所述指令在计算机上运行时,使得所述计算机执行如权利要求1-6或者权利要求7-9任一所述的方法。
技术总结
本发明提供一种基于Append-only Memory的远程验证方法及设备。该方法可以包括:根据接收的验证请求向高安全域发送内存初始化请求,以使高安全域为低安全域分配第一存储区域;执行目标应用程序,并将目标应用程序执行过程中的控制流跳转路径记录到第一存储区域;基于目标应用程序执行完成或者第一存储区域产生内存满异常,向高安全域发送数据读取请求,以使高安全域从第一存储区域中读取多个控制流跳转路径并生成验证报告。通过在内存控制器中增加寄存器及相关逻辑实现了高安全域为低安全域分配append-only memory,将数据保存在append-only memory中,不仅保证了数据完整性,防止攻击者篡改,同时减少了低安全域和高安全域之间上下文切换的次数,提高控制流远程验证的性能。验证的性能。验证的性能。
技术研发人员:蔡启申
受保护的技术使用者:华为技术有限公司
技术研发日:2021.12.29
技术公布日:2023/7/13
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:免充气喉罩的制作方法 下一篇:全景漫游方法及装置与流程
