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

加固方法、注册方法、运行方法、电子设备和存储介质

文献发布时间:2023-06-19 19:07:35


加固方法、注册方法、运行方法、电子设备和存储介质

技术领域

本申请实施例涉及计算机领域,特别涉及一种加固方法、注册方法、运行方法、电子设备和存储介质。

背景技术

随着移动互联网的高速发展以及手机移动终端设备数量的大量增长,市场中涌现出无数应用,极大地丰富了人们的生活。在移动应用愈发重要的趋势下,催生了大量对应用加固保护的方法,这其中以软件加壳技术为典型代表,例如加密壳、压缩壳、虚拟执行壳等。然而,与加壳保护相对应的出现了各种脱壳攻击手段,如针对加密壳和压缩壳的内存重组脱壳法、Hook脱壳法以及系统定制脱壳法。以虚拟执行壳为代表的第三代壳极大地增加了脱壳破解的难度,但经过较长时间的研究后,三代壳还是无法避免被脱壳的结果。由此看来,无论软件壳设计得多么复杂精巧,经过长时间的研究,还是会被破解而失效,即壳程序保护的安全性较低。

发明内容

本申请实施例的主要目的在于提出一种加固方法、注册方法、运行方法、电子设备和存储介质,使得可以提高壳程序保护的安全性。

为至少实现上述目的,本申请实施例提供了一种加固方法,应用于服务端,包括:确定受保护应用的第一壳程序中的待隐藏对象;确定与待隐藏对象对应的安全监控模式调用smc指令;将待隐藏对象替换为与待隐藏对象对应的smc指令,得到加固后的第二壳程序;根据加固后的第二壳程序,对受保护应用的应用程序包APK进行加固,得到加固后的APK。

为实现上述目的,本申请实施例还提供了一种注册方法,应用于终端,包括:当检测到一APK被安装后,确定APK对应的受保护应用是否在安全世界SW的可信应用TA中被注册;其中,APK为上述任一项的加固方法得到的加固后的APK;若受保护应用未在安全世界SW的可信应用TA中被注册,在SW的TA中注册受保护应用。

为至少实现上述目的,本申请实施例还提供了一种运行方法,用于运行上述的注册方法注册的受保护应用,方法包括:在运行受保护应用的过程中,当在安全世界SW的TA中接收到受保护应用的smc指令时,确定smc指令对应的待隐藏对象;根据待隐藏对象所表征的语义,在安全世界SW的TA中执行待隐藏对象。

为实现上述目的,本申请实施例还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,在所述电子设备为服务器的情况下,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的加固方法;在所述电子设备为终端的情况下,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的注册方法,或者执行上述的运行方法。

为实现上述目的,本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时实现上述的加固方法,或者实现上述任一的注册方法,或者实现上述的运行方法。

本申请实施例提供的加固方法,先确定受保护应用的第一壳程序中的待隐藏对象;确定与待隐藏对象对应的smc指令;将待隐藏对象替换为与待隐藏对象对应的smc指令,得到加固后的第二壳程序;壳程序中待隐藏对象被替换,即壳程序中待隐藏对象被隐藏,不存在完整的语义信息,可以完全阻止攻击者对壳程序的静态分析。而且,本申请实施例还可以极大地增加攻击者对壳程序的动态分析的难度,由于攻击者只能在NW中调试壳程序,在smc指令前后分析整个处理器状态以及内存空间的变化,在当前终端的处理器复杂度以及超大内存空间的前提下,这个搜索空间是非常大的,后续的逻辑分析则更加艰难。因此,本申请实施例中得到的加固后的第二壳程序被攻击的难度极大,可以提高壳程序保护的安全性。采用加固后的第二壳程序,对受保护应用的APK进行加固,得到加固后的APK,从而可以提高利用该加固后的第二壳程序保护APK的安全性。

附图说明

图1是本发明一个实施例的加固方法流程图。

图2是本发明一个实施例的加固方法中调用smc指令流程图。

图3是本发明一个实施例隐藏方式示意图;

图4是本发明一个实施例服务端加固过程示意图;

图5是本发明一个实施例中终端系统结构的示意图:

图6是本发明另一个实施例中注册方法流程图;

图7是本发明另一个实施例中运行方法流程图;

图8是本发明另一个实施例中电子设备的示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本申请各实施例中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本申请所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本申请的具体实现方式构成任何限定,各个实施例在不矛盾的前提下可以相互结合相互引用。

为便于对本申请实施例的理解,下面首先对本申请中所涉及的相关技术进行简要说明:

移动终端设备大量使用高级精简指令集(Advanced RISC Machines,ARM)处理器,ARM提出的TrustZone将处理器资源分为普通世界(Normal World,NW)与安全世界(SecureWorld,SW)两部分,这种硬件隔离机制为可信执行环境(Trust Execution Environment,TEE)的开发提供了坚实的硬件基础。在纯软件保护面临攻击威胁的情况下,有必要对TEE的壳程序进行保护,主要保护的目标是壳程序的原生代码(native代码),即so文件(也称shell.so文件)。

本申请的一个实施例中提供了一种加固方法,应用于服务端,下面对本实施例的加固方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。本发明的实施例的应用场景可以包括但不限于TEE的软件壳程序保护,加固方法包括:确定受保护应用的第一壳程序中的待隐藏对象;确定与待隐藏对象对应的安全监控模式调用smc指令;将待隐藏对象替换为与待隐藏对象对应的smc指令,得到加固后的第二壳程序;根据加固后的第二壳程序,对受保护应用的应用程序包APK进行加固,得到加固后的APK。其中,第一壳程序可以理解为原始的壳程序,第二壳程序可以理解为对原始的壳程序加固后的壳程序。

本实施例的加固方法的具体流程可以如图1所示。

步骤101:确定受保护应用的第一壳程序中的待隐藏对象;

具体而言,可以根据用户期望的安全性以及性能消耗评估,确定第一壳程序中所有逻辑隐藏对象。用户期望的安全性越高,确定的待隐藏对象的数量就越多,对应的性能消耗也就越大。因此,可以结合用户期望的安全性以及性能消耗评估,合理的确定出待隐藏对象的数量。

其中,待隐藏对象可以为受保护应用的第一壳程序shell.so文件中的逻辑隐藏对象,待隐藏对象可以理解为:第一壳程序攻击者在攻击第一壳程序的时候,如果把这些待隐藏对象都破解分析清楚的话,第一壳程序就可能被完全破解,即待隐藏对象为对第一壳程序至关重要的且可以通过隐藏保护避免被破解的对象。

在一个例子中,待隐藏对象包括以下任意之一或其组合,比如说第一壳程序中的关键指令、关键代码片段、关键函数。其中,关键指令包括内存读写指令、控制流转移指令、通用寄存器操作指令等具有较为明确语义的指令;关键代码片段可以是一小段汇编代码,比如说是几行代码,几条指令,这一小段汇编代码可以让CPU寄存器变换较为明确,即关键代码片段可以理解为具有明确语义的代码片段;关键函数相对规模最大,可以包括上千条指令代码片段。

在一个例子中,待隐藏对象也可以为本领域技术人员根据实际需要预设的希望保护的壳程序中的指令、代码片段、函数等。其中,预设的希望保护的壳程序中的指令、代码片段、函数可以分别作为上述的关键指令、关键代码片段、关键函数。

步骤102:确定与待隐藏对象对应的安全监控模式调用smc指令;

在一个例子中,服务端可以根据预存的待隐藏对象与安全监控模式调用指令(Secure Monitor Call,smc)之间的映射关系,得到受保护应用的第一壳程序中的待隐藏对象对应的smc指令。

在另一个例子中,确定与待隐藏对象对应的安全监控模式调用smc指令可以由如图2所示的各子步骤实现,具体包括:

步骤1021:获取受保护应用的特征信息和待隐藏对象的身份标识;

具体而言,受保护应用的特征信息可以是包名pkg_name、应用版本号等。选定受保护应用的第一壳程序shell.so文件中的所有待隐藏对象。服务端可根据所有待隐藏对象的类型以及偏移信息,为待隐藏对象计算哈希值,并将其转化为十六进制作为隐藏点标号,各隐藏点标号即为每个待隐藏对象的唯一身份标识,其中,待隐藏对象的偏移信息是相对于壳程序首行原生代码的偏移量。待隐藏对象的类型可以包括:关键指令、关键代码片段和关键函数,比如,图4中关键指令包括:str x1,x2、ldr x3,x4;关键代码片段包括:mov x0,x7str x1,[x0]ldr x2,x3关键函数包括:key_func()。

步骤1022:根据特征信息,生成待隐藏对象的身份标识与混淆参数的第一映射关系;

具体而言,服务端可以将受保护应用的特征信息(如包名pkg_name、应用版本号)作为随机因子输入随机算法,对每个待隐藏对象分别生成一个随机的混淆参数a,用来掩盖真实的标号。所有待隐藏对象的身份标识对应的混淆参数集合为映射A,这个集合为单射集合,即一个待隐藏对象的身份标识唯一对应一个混淆参数,待隐藏对象的身份标识与混淆参数的映射为第一映射关系。举例来说,如图4所示,在受保护应用的特征信息输入随机算法后,待隐藏对象的身份标识即各隐藏点标号为Ox3D456F7B、0x2AB35732、0x3F5F7AOCD,0x80848EAF、0Xea206721,混淆参数集合A为{76,24,12,33,89},各隐藏点标号与混淆参数集合A的元素的映射为一一对应关系,一个隐藏点标号对应一个混淆参数,比如说Ox3D456F7B的映射为76。

可选的,在步骤1022之后,根据特征信息生成待隐藏对象的身份标识与混淆参数的第一映射关系之后,还可以根据第一映射关系生成第二映射关系;其中,第二映射关系与第一映射关系互为反向映射;生成可信应用TA模拟执行待隐藏对象的逻辑代码即handler代码;当编译安全世界SW的可信应用TA时,根据第二映射关系、非隐藏代码区间的哈希值和逻辑代码,生成受保护应用对应的可信应用TA镜像,并将TA镜像编译到终端的操作系统中。生成TA镜像的一个输入可以当作是第二映射关系。

在安全世界SW中编译可信应用TA后,生成的TA镜像,将TA镜像编译到终端操作系统中,有利于避免受保护应用对应的TA镜像被攻击,保证TA镜像中包含的相关信息(第二映射关系、非隐藏代码区间的哈希值和逻辑代码)的安全性。操作系统中的TA镜像方便了后续在TA中注册受保护应用或是运行受保护应用时,得到需要的相关信息,比如:注册受保护应用会用到非隐藏代码区间的哈希值(共享信息),验证加固后的第二壳程序shell.so未被篡改。运行受保护应用的过程中会用到第二映射关系,得到混淆参数对应的待隐藏对象。

步骤1023:根据第一映射关系,确定待隐藏对象的身份标识映射出的混淆参数对应的smc指令。

具体而言,在步骤1022得到隐藏点标号和混淆参数的映射关系后,将shell.so中选定的待隐藏对象分别使用smc指令进行替换,替换的smc指令格式为:[smc hash(pkg_name),a]。其中,hash(pkg_name)为受保护应用的特征信息的哈希值,也就是包名哈希值,取通用寄存器大小的片段(如arm64-v8a架构处理器取前64bit)作为smc指令的一个参数,a是混淆参数,作为smc指令另一个参数。这两个参数在运行时让TA能够确定smc指令对应的逻辑隐藏对象。通过生成混淆参数,使得待隐藏对象与smc指令之间的对应关系并不唯一,有利于增加待隐藏对象与smc指令之间的对应关系被破解的难度,提高加固后的第二壳程序的安全性。

需要说明的是,由于包名长度不同、长短不一,但smc指令的参数是固定的64位,如果不计算哈希值可能一个app包名特别长,和smc指令的参数长度不匹配。因此需要取通用寄存器大小的片段(如arm64-v8a架构处理器取前64bit),应用哈希值把长短不一的app包名转换为固定长度,比如说从固定长度里取64位,作为hash(pkg_name)。

在具体实现中,如果受保护应用升级,可以采用图2中的方式确定与待隐藏对象对应的smc指令,可以理解的是,APP升级一定会导致受保护应用的特征信息变化,至少版本号变了,所以每次输出的混淆参数理论上一定不同。因此,有利于增加待隐藏对象与smc指令之间的对应关系被破解的难度,提高加固后的第二壳程序的安全性。

步骤103:将待隐藏对象替换为与待隐藏对象对应的smc指令,得到加固后的第二壳程序;

在一个例子中,如图3所示,若待隐藏对象为第一壳程序shell.so文件中的关键指令,原始shell.so文件中的关键指令为[str x1,x2],则替换后的smc指令为[smc app,76];若待隐藏对象为第一壳程序shell.so文件中关键代码片段,原始shell.so文件中的关键代码片段为[mov x0,x7 str x1,[x0]ldr x2 x3],则替换后的smc指令为[smc app,31];若待隐藏对象为第一壳程序shell.so文件中关键函数,原始shell.so文件中的关键函数为[key_fun1()],则替换后的smc指令为[smc app,35]。原始shell.so文件中的指令在NW执行,替换后的smc指令在SW中执行。

步骤104:根据加固后的第二壳程序,对受保护应用的应用程序包APK进行加固,得到加固后的APK。

也就是说,服务器端根据加固后的第二壳程序shell.so文件,进行后续的加壳加固流程,最终输出加固后的Android应用程序包(Android application package,APK)。APK是安卓应用的安装包,壳程序是用来保护APK的软件,本实施例中主要是保护壳程序的,保护壳程序也可以理解为加固壳程序,从而再利用的加固后的第二壳程序再去加固受保护应用的APK。

在上述步骤101之后,还可以确定受保护应用的第一壳程序中相邻的待隐藏对象之间的非隐藏代码区间;计算非隐藏代码区间的哈希值,并将哈希值作为服务端和注册受保护应用的终端之间的共享信息;当编译安全世界SW的可信应用(Trust Application,TA)时,将共享信息编译到终端的操作系统中,其中,共享信息用于供终端在注册受保护应用时验证受保护应用的安全性。也就是说,待隐藏对象中的非隐藏代码区间为shell.so文件中所有未被替换的代码区间。如图3所示,shell.so文件中所有未被替换的代码区间为空白格所在区域即就是shell.so文件中所有未被替换的代码区间,也就是是非隐藏代码区间。计算各个非隐藏代码区间的哈希值,并将哈希值作为服务端和注册受保护app之间的共享信息,服务器端在编译SW中的TA时,将共享信息编译到操作系统中。

由于对第一壳程序shell.so文件中的逻辑隐藏对象进行替换后,除了替换为smc指令的部分会有变化外,第一壳程序shell.so文件中的其余部分都不再发生变化。因此,确定shell.so的smc指令后,统计所有不变化部分的代码区间(即非隐藏代码区间)并计算每个区间的哈希值,在编译TA时期输入这些不变区间的哈希值数据成为服务端和终端的共享信息,攻击者无法获取这个秘密。利用共享信息可以让受保护app在注册阶段进行一次初始的完整性校验,有利于防止攻击者壳程序shell.so进行欺骗攻击。在注册时只要非隐藏代码区间发生变化,如攻击者恶意注入shell.so或构造了假的shell.so,都会被终端根据共享信息判断出来从而拒绝注册,防止攻击者进行欺骗攻击。

本申请实施例提供的加固方法,先确定受保护应用的第一壳程序中的待隐藏对象;确定与待隐藏对象对应的smc指令;将待隐藏对象替换为与待隐藏对象对应的smc指令,得到加固后的第二壳程序;第一壳程序中待隐藏对象被替换,即第一壳程序中待隐藏对象被隐藏,不存在完整的语义信息,可以完全阻止攻击者对壳程序的静态分析。而且,本申请实施例还可以极大地增加攻击者对壳程序的动态分析的难度,由于攻击者只能在NW中调试壳程序,在smc指令前后分析整个处理器状态以及内存空间的变化,在当前终端的处理器复杂度以及超大内存空间的前提下,这个搜索空间是非常大的,后续的逻辑分析则更加艰难。因此,本申请实施例中得到的加固后的第二壳程序被攻击的难度极大,可以提高壳程序保护的安全性。采用加固后的第二壳程序,对受保护应用的APK进行加固,得到加固后的APK,从而可以提高利用该加固后的第二壳程序保护APK的安全性。

需要说明的是,本申请实施例中的上述各示例均为为方便理解进行的举例说明,并不对本发明的技术方案构成限定。

本申请实施例还提供了一种注册方法,应用于终端,具体包括:当检测到一APK被安装后,确定APK对应的受保护应用是否在安全世界SW的可信应用TA中被注册;其中,APK为基于上述实施例加固方法得到的加固后的APK;若受保护应用未在安全世界SW的可信应用TA中被注册,在SW的TA中注册受保护应用。

如图5所示,终端系统有普通世界(Normal Word,NW)和安全世界(Secure Word,SW)两种状态,两种状态下均有自己独立的寄存器即CPU的环境。CPU在一个时刻只能处于一种状态,比如在NW状态运行,使用的就是NW寄存器,在SW状态运行,使用的就是SW寄存器,NW寄存器、SW寄存器是相互独立,互相隔离的。图5中的加固代理和加固TA均可以为软件模块。终端系统中的加固代理运行在NW中的EL1内核态,负责检测普通应用是否为受保护应用、收集受保护应用的特征信息、实现sys_call_enforce()系统调用逻辑、与SW中的加固TA通信并根据加固TA的返回信息控制受保护应用app的运行状态,其中,加固代理检测应用是否受到保护,通过hook Android系统PackageManager类,在应用安装时检测应用是否受到保护,如果受保护应用加固过,则继续进行注册流程,在应用卸载时同样进行检测,如果已经注册过,则通知SW的加固TA取消注册,加固代理在收集应用特征信息时与服务器端保持一致。sys_call_enforce()系统调用接受的参数为应用的包名,然后通过smc指令通知加固TA注册此应用。加固代理可能会收到加固TA的各种返回值,例如完整性验证失败后加固TA返回false,此时加固代理负责立即停止整性受损的应用。其中,加固TA运行在TEE中的EL0用户态,负责响应受保护应用的启动时的注册流程以及接收运行时的smc指令请求,注册流程主要包括初始完整性验证、生成动态完整性基准值。加固代理可看成是NW和SW的一个传输媒介。

在具体实施中,当检测到APK被安装后,壳程序的shell.so文件加载,进入JNI_onLoad()函数,执行系统调用sys_call_enforce(pkg_name),NW中的加固代理响应,加固代理收到pkg_name参数后,计算hash(pkg_name),然后调用[smc hash(pkg_name),0]进入SW让加固TA查询受保护应用app是否在安全世界SW的可信应用TA中已经注册,若受保护应用未在安全世界SW的可信应用TA中被注册,则在SW的TA中注册受保护应用。

在一个例子中,服务端在编译安全世界SW的可信应用TA时,将服务端和终端之间的共享信息编译到终端的操作系统中,则在SW的TA中注册受保护应用,如图6所示,具体步骤为:

步骤201,在普通世界NW中,查找加固后的第二壳程序在内存中的起始地址和结束地址;

具体而言,在普通世界NW中,加固代理会收集受保护应用壳程序shell.so文件内存中映射的起始地址与结束地址(addr_start,addr_end)。

步骤202,在安全世界SW的TA中,根据来自普通世界NW的目标smc指令,获取目标smc指令携带的起始地址和结束地址;

具体而言,普通世界NW的目标smc指令可以是[smc hash(pkg_name),1,addr_start,addr_end]指令,加固TA通过NW的目标smc指令得到起始地址与结束地址。其中,[smchash(pkg_name),0]和[smc hash(pkg_name),1,addr_start,addr_end]这两个smc指令的第二个参数0和1由此系统调用独占,专门用来在注册阶段与加固TA进行信息交互,因此服务器端加固创建映射A的值域不能使用0和1这两个元素。然而在具体实现中,专门用来在注册阶段与TA进行信息交互的两个smc指令的第二个参数也可以采用其他数值,保证创建映射A的值域与所述其他数值不同即可。

步骤203,在安全世界SW的TA中,根据起始地址和结束地址,确定加固后的第二壳程序中的非隐藏代码区间,并计算非隐藏代码区间的哈希值;

具体而言,SW加固TA根据起始地址和结束地址(addr_start,addr_end)定位受保护app的shell.so文件的所有非隐藏代码区间,分别计算所有非隐藏代码区间的哈希值,其中,非隐藏代码区间是shell.so的不变区间。shell.so的不变区间是除smc指令后分成很多块的,服务器给每一块的不变区间计算哈希值,有多少个不变区间就有多少个哈希值。可选的,也可以根据所有不变区间的哈希值再计算一个哈希值作为所有不变区间的哈希值。

在一个例子中,在加固后的第二壳程序的预设位置插入有用于触发动态完整性验证的smc指令,在根据起始地址和结束地址,确定加固后的第二壳程序中的非隐藏代码区间之后,还可以根据起始地址和结束地址,计算并存储加固后的第二壳程序的哈希值;其中,加固后的第二壳程序的哈希值用于在受保护应用运行的过程中作为动态完整性验证的基准值,也就是说SW中的加固TA记录受保护应用的shell.so地址区间(addr_start,addr_end),计算shell.so的哈希值进行记录为后续动态完整性验证的基准值。

需要注意的是,SW加固TA在注册阶段保存的app信息有:(pkg_name,addr_start,addr_end,hash(mem[addr_start,addr_end]))。这些信息通过HashMap存储在TEE的安全内存中,称为Map_enforce,攻击者无法获取。在终端运行时,壳程序中的shell.so不再发生变化(不变区间加上所有smc指令都不能变了),本次哈希值计算是基于壳程序shell.so的全部内容计算的哈希值,可以在受保护应用运行过程中验证壳程序shell.so是否被篡改过,在未被篡改的情况下在所述SW的TA中注册所述受保护应用,保证运行过程中的安全性。

步骤204,若非隐藏代码区间的哈希值与共享信息相同,则在SW的TA中注册受保护应用。

具体而言,计算非隐藏代码区间的哈希值后,与共享信息中进行比较。如果发现存在不一致的区间,立即向加固代理返回注册失败信息,由NW的加固代理终止受保护app的运行。如果所有不变区间验证通过则在SW的TA中注册受保护应用。

在一个例子中,在SW的TA中注册受保护应用之后,还包括:在SW的TA中查询与所述受保护应用的名称标识对应的第二映射关系,并将受保护应用的名称标识与第二映射关系绑定。具体而言,在上一个实施例加固方法中,生成受保护应用对应的TA镜像,将TA镜像编译到终端的操作系统中后,TA镜像中包含了受保护应用的名称标识对应的第二映射关系,在注册阶段将受保护应用的名称标识与所述第二映射关系绑定,方便了后续受保护应用运行时,可以根据smc指令携带的受保护应用的名称标识得到该第二映射关系,从而基于该第二映射关系得到smc指令携带的混淆参数对应的待隐藏对象。

本申请实施例还提供了一种运行方法,用于运行上述实施例的注册方法注册的受保护应用,包括:在运行受保护应用的过程中,当在安全世界SW的TA中接收到受保护应用的smc指令时,确定smc指令对应的待隐藏对象;根据待隐藏对象所表征的语义,在安全世界SW的TA中执行待隐藏对象。其中,受保护应用的smc指令携带混淆参数和所述受保护应用的名称标识,根据受保护应用的名称标识,确定与受保护应用的名称标识绑定的第二映射关系;根据绑定的第二映射关系,确定与smc指令携带的混淆参数对应的待隐藏对象,根据待隐藏对象所表征的语义,在安全世界SW的TA中执行待隐藏对象。在具体实施中,如图7所示:

步骤301,收到受保护应用的smc指令;

具体而言,在运行受保护应用的过程中,安全世界SW的TA中接收到受保护应用的smc指令,例如smc指令为[smc hash(pkg_name),a],hash(pkg_name)为包名参数,a为混淆参数。

步骤302,确定smc指令对应的待隐藏对象;

具体而言,根据受保护应用的名称标识,确定与受保护应用的名称标识绑定的第二映射关系;根据绑定的第二映射关系,确定与smc指令携带的混淆参数对应的待隐藏对象,从而得到待隐藏对象所表征的语义。

步骤303,根据待隐藏对象所表征的语义,在安全世界SW的TA中执行待隐藏对象所表征的语义;

其中,待隐藏对象所表征的语义即为:关键指令所表征的语义、关键代码片段所表征的语义或是关键函数所表征的语义。安全世界SW的TA可以根据关键指令以及关键代码片段的语义,修改NW的寄存器或者内存,完成后将NW的pc指针指向smc的下一条指令然后直接返回NW继续执行。同理,关键函数的模拟执行与关键指令以及关键代码片段执行过程基本相同,从NW堆栈中获取到smc指令携带的参数后执行,将结果反馈到NW堆栈后返回NW继续执行。其中,生成可信应用TA模拟执行待隐藏对象的逻辑代码是在加固TA里执行,加固TA需要处理各种各样的逻辑隐藏对象,每种隐藏逻辑需要加固TA设置一个处理模块来负责执行,这个处理模块为就是handler0,比如说是关键指令模拟执行handler、关键代码片段模拟执行handler,关键函数模拟执行handler,动态完整性校验handler。

在一个例子中,在安全世界SW的TA中执行待隐藏对象所表征的语义时要切换的时候,SW需要用到NW寄存器,就涉及寄存器传递的问题,可以用堆栈传递把SW寄存器的相关状态设置成NW寄存器的相关状态。比如,smc指令为smc(app_name,76),相关状态即可以只设置app_name、76那两个部分。比如,要执行smc(app_name,76)这个指令对应的待隐藏对象所表征的语义,可以传递两个参数,一个是app_name,一个是76,这两个参数可以占两个寄存器,通过堆栈保存的方式,从NW传递到SW,然后在SW里将这两个参数拷贝到对应的比如X1、X2寄存器上,让SW模拟执行smc(app_name,76)这个指令对应的待隐藏对象所表征的语义。

步骤304,动态完整性校验是否通过;

具体而言,在运行受保护应用的过程中,当执行到用于触发动态完整性验证的smc指令时,根据加固后的第二壳程序在内存中的起始地址和结束地址,计算当前运行的加固后的第二壳程序的当前哈希值;判断当前哈希值与存储的动态完整性验证的共享信息是否相同。

步骤305,返回NW继续执行;

若当前哈希值与存储的动态完整性验证的基准值相同,也就是说,加固TA根据受保护应用在启动时注册的addr_start与addr_end信息计算shell.so非隐藏区间的哈希值,与共享信息的已知值进行比较,若发现区间一致,则返回NW的shell.so继续执行。

步骤306,返回NW加固代理停止进程。

具体而言,加固TA根据受保护应用在启动时注册的addr_start与addr_end信息计算shell.so非隐藏区间的哈希值,与共享信息的已知值进行比较,若发现存在不一致的区间,则动态完整性校验未通过,立即向加固代理返回动态完整性校验未通过的信息,由NW加固代理停止此受保护app的运行。

本实施例提供的运行方法,能够完全阻止攻击者对NW中shell.so的静态分析,因为逻辑隐藏后的shell.so完全不存在任何完整的语义信息;此外,本发明能够极大地增加动态分析的难度,因为安全假设为攻击者无法攻破TEE从中获取处理smc请求的handler,攻击者只能在NW中调试shell.so,在smc指令前后分析整个处理器状态以及内存空间的变化,在当前设备的处理器复杂度以及超大内存空间的前提下,这个搜索空间是非常大的,后续的逻辑分析则更加艰难,本申请实施例能够提供非常高的壳程序保护安全性。

上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。

本申请实施例还提供了一种电子设备,如图8所示,包括:至少一个处理器701;以及,与至少一个处理器通信连接的存储器702;其中,在电子设备为服务器的情况下,存储器702存储有可被至少一个处理器701执行的指令,所述指令被所述至少一个处理器701执行,以使所述至少一个处理器701能够执行上述的加固方法;在所述电子设备为终端的情况下,所述存储器702存储有可被所述至少一个处理器701执行的指令,所述指令被所述至少一个处理器701执行,以使所述至少一个处理器701能够执行上述的注册方法,或者执行上述的运行方法。

其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。

处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。

为实现上述目的,本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时实现上述的加固方法,或者实现上述任一的注册方法,或者实现上述的运行方法。

即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。

相关技术
  • 注册概率预估方法、装置、存储介质及电子设备
  • 脚本运行方法、装置、电子设备及存储介质
  • 飞机运行安全风险评价方法、装置、电子设备及存储介质
  • 一种软件运行异常的分析方法、装置、电子设备及存储介质
  • 运行监测方法、装置、电子设备及计算机可读存储介质
  • 设备注册方法、设备注册装置、电子设备以及存储介质
  • 注册靶标、注册方法、装置、电子设备和存储介质
技术分类

06120115803415