CN112287357B - 一种针对嵌入式裸机系统的控制流验证方法与系统 - Google Patents
一种针对嵌入式裸机系统的控制流验证方法与系统 Download PDFInfo
- Publication number
- CN112287357B CN112287357B CN202011253939.0A CN202011253939A CN112287357B CN 112287357 B CN112287357 B CN 112287357B CN 202011253939 A CN202011253939 A CN 202011253939A CN 112287357 B CN112287357 B CN 112287357B
- Authority
- CN
- China
- Prior art keywords
- control flow
- program
- authentication
- embedded
- embedded bare
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及一种针对嵌入式裸机系统的控制流验证方法与系统,该方法包括:在预处理阶段,利用编译器和MPU对证明端嵌入式裸机程序进行跳板代码的插桩,以“访问相同硬件”的原则进行函数分组,形成若干个“认证隔间”;验证端用不同的输入获取目标程序所有可能的动态控制流图,通过控制流递归哈希计算的方式节约存储空间并存储在数据库中。在线处理阶段,证明端在运行每一个认证隔间中的函数时,其控制流将同样利用控制流递归哈希计算的方式记录,并在认证隔间生成认证报告发送出去;验证端将解析得到报告中的哈希值与数据库进行匹配,如果能够匹配上说明此次运行的控制流是完整的,否则控制流完整性遭到了破坏。
Description
技术领域
本发明属于嵌入式终端关键应用的控制流动态度量领域,尤其涉及一种在嵌入式裸机系统平台上验证软件控制流完整性的方法与系统。
背景技术
随着物联网(Internet of Things,IoT)技术的快速发展,搭载着嵌入式系统的物联网终端得到了越来越广泛的应用。而在嵌入式终端日益普及的同时,针对系统的安全事件也缕缕发生。对这些安全事件进行解析,我们发现,有很大一部分的嵌入式设备,因为其计算能力的匮乏,因而其应用软件的部署方式是:放弃操作系统,而直接把应用程序运行在硬件上,这种软件执行方式在嵌入式领域被称为“裸机系统(Bare-metal System)”。由于缺乏操作系统为应用程序提供必要的隔离环境,因而部署在嵌入式设备上的应用软件的权限得不到限制,通常该应用软件可以访问嵌入式设备内所有的外设以及所有的地址空间。虽然这种方式大幅提升了软件运行的效率并节省了嵌入式设备的计算资源(乃至成本),然而,这种具备明显缺陷的设计方案也使得搭载裸机系统的嵌入式设备的安全性难以保证,当这个应用软件被攻击者以某种形式劫持时,攻击者就可以具备对这个嵌入式设备完全的控制了,不仅如此,这个嵌入式设备所连接的其他系统,也可能遭到攻击,上述论断已经在BLACK HAT2018大会上得到了验证。会上,国外某团队通过对搭载在博通WiFi Soc上的裸机系统进行劫持,进而攻击了与该Soc连接的智能手机主处理(AP),从而顺利控制了该智能手机的Android系统。
为了实现上述攻击,一种十分流行的办法是进行控制流攻击(Control-FlowAttack)就是其中一种攻击手段,这种攻击手段非常常见而且能够造成比较大的威胁。控制流攻击会影响程序的运行时行为,表现在于它会劫持程序的控制流到任意的地址空间,从而破坏程序的完整性。当然,由于嵌入式设备通常以低功耗的ARM Cortex-M为运行架构,这种架构的特点是,其函数的返回通常不会依赖于某一个指令(X86通常以“ret”指令进行触发),而是压到堆栈里面。这样,函数的返回可能是任意的可能从堆栈中取出这个返回地址的指令,比如将程序寄存器PC的值直接指向这个堆栈的内容。因此,传统在X86平台上以寻找“ret”以形成攻击串的控制流攻击难以在ARM平台上实现,这里提到的绝大多数针对ARMCortex-M平台的攻击的构造本身就十分复杂,所以攻击者目前更多的着眼于对某一个函数指针进行修改进而改变程序流的运行。
裸机系统动态完整性问题是十分重要的,而远程完整性验证技术因为其可以为嵌入式设备节约验证控制流的验证计算资源,因此得到了工业界和学术界的青睐。然而,虽然针对设备动态完整性的运行技术已经有学者进行过讨论,但当前大多数的工作仍局限在针对X86平台或基于ARM Cortex-A系列强计算能力设备的完整性研究,把这些研究应用在裸机系统上仍存在着很大的挑战。这主要有以下几个方面的原因,第一,通常搭载裸机系统的嵌入式设备硬件资源匮乏,其缺乏MMU、TrustZone等强计算能力平台上提供安全机制,无法使得应用程序进行隔离;第二,嵌入式裸机系统通常只有一个应用程序运行,这个应用程序将包含这个设备所有的控制以及运行逻辑,因此,在X86以及ARM Cortex-A系列方案中,很容易就可以设置待认证软件的粒度(比如对不同的进程进行认证)的方式,在裸机系统中就没有办法实现。嵌入式裸机系统是没有多任务、进程的概念的,那么以当前研究来套用的话,就只能对整个程序进行验证,这样明显将降低系统的验证效率,也使得验证方式缺乏灵活性。
控制流攻击,是一种能够劫持原有程序控制流的技术,包括代码注入攻击,代码复用攻击,还有近些年来提出的非控制数据攻击。这些攻击的方法能够改变原有的控制流,从而实现攻击者的攻击意图。
远程证明,是一种有效验证嵌入式平台完整性的系统方案。它包括两个部分:验证端和证明端。验证端通常是一个资源丰富的第三方可信平台(如PC),它主要向证明端发起验证并且对最后的验证报告进行有效性检查。而证明端是一个资源有限的平台,在本方案中指的就是嵌入式平台。它们之间通过一定的协议进行通信,从而达到验证证明端完整性的目的。
编译器插桩,是指利用编译对程序源码进行改造,在保持程序原有逻辑完整性的基础上在程序中插入一些额外的“跳板”代码,这些跳板的目的是采集函数及代码段的信息。编译器插桩技术不仅可用于记录程序运行时代码的执行路径,从而了解代码的执行情况,还可以用于对程序控制流的改写。
嵌入式裸机系统,一般指程序不借助操作系统,直接部署到嵌入式设备上进行运行的软件系统。这种系统通常只具备一个应用程序来处理所有的逻辑,这意味着,其控制外设和访问全局变量的所有函数都被编译进入了这一个程序中来。此外,应用程序直接运行在物理内存上,不需要通过操作系统,就可以控制外设。
动态度量,就是通过静态分析技术或者动态执行提取应用的行为特征,然后在应用实际运行过程中实时监控应用行为并与行为特征进行匹配,匹配成功则表示应用是可信的,匹配不成功则判定应用行为不可信。
特权级,与X86与Cortex-A处理器的多特权级机制不同,Cortex-M处理器仅具备两个特权级,分别是特权级和非特权级。一般的,运行在非特权级的代码的访问权限将低于特权级代码的访问权限,而特权级代码理论上可以访问所有内存区域(如控制外设相关的重要寄存器)。当非特权级代码想要通过一些手段调用特权级的代码的时候,一种常用的做法是使用SVC指令。SVC指令可以触发一个软件中断,进而使得处理器Core进入特权级异常处理程序。这种方式与X86系统的系统调用十分相似。
ARM MPU硬件隔离技术,MPU从技术上来说,它是需要直接对物理内存来操作的。具体来说,它将为物理内存设置一个访问控制层,这个访问控制层虚拟的将整个物理内存分成了不同的MPU区域(region),每一个region都可以被设置为在不同特权级下的可读、可写、可执行权限。MPU与TrustZone那种强隔离机制完全不同,在TrustZone下是真正构筑出了普通执行环境和可信执行环境两个独立的运行环境,程序运行在不同的环境下的时候,还具备不同的特权级。这样,在基于TrustZone的系统下就至少具备4个特权级(普通环境下2个,安全环境下2个),其还具备各自的指令集。
控制流图,表示函数内部基本块之间的执行先后关系和控制流关系,每个函数都有一个控制流图,而控制流图是由代码基本块组成。
一种基于编译器插桩的裸机系统控制流动态完整性验证系统需解决以下几个问题:对嵌入式裸机系统认证隔离空间的构建、对嵌入式裸机设备运行时程序动态路径特征白名单收集、对嵌入式裸机设备运行时程序动态路径的收集以及对嵌入式裸机设备运行时程序动态路径的检验。
在嵌入式裸机系统中只包含一个软件执行所有的应用逻辑,这使得对这种系统进行完整性认证只能把软件的整体进行认证,无法按照进程、任务的粒度进行区分,让认证过程的效率低下;此外,搭载这种系统的设备不支持MMU和TrustZone,这使得对这种软件的完整性认证方法无法使用过去针对X86与ARM Cortex-A系列平台的认证数据采集方式,无法保障采集到的控制流数据的安全。
发明内容
为了解决上面的技术解决,本发明提出了基于编译器插桩的裸机系统控制流动态完整性验证方法和系统,该系统将利用远程证明的架构对嵌入式裸机系统的控制流完整性进行验证。为了保证在证明端收集到控制流不被待测软件所篡改,要求嵌入式终端带有一个可信的隔离环境用于保证收集到的控制流的安全,ARM Cortex-M系列处理器不具备MMU和TrustZone,而外置TPM等安全芯片也将大大增加终端的成本,因此本发明采用这种低功耗处理器普遍具备的一个叫做MPU的硬件扩展来实现可信的控制流采集。
本发明的核心首先是对嵌入式裸机系统通过进行分区,形成不同的待认证隔间,从而降低每次都要对系统整体进行认证的资源消耗;接着,设计针对嵌入式裸机系统的,特殊的控制流采集方案,使得在不具备MMU和TrustZone的IoT设备上还可以动态的采集程序的控制流。其次,本发明的核心是利用编译器以及MPU技术对嵌入式裸机系统进行插桩,形成若干个“认证隔间”,再分别对隔间内部的控制流进行采集,利用MPU对采集到的控制流进行安全存储,配合远程证明技术实现对待在嵌入式裸机系统的IOT设备的控制流验证。
按照本发明所提供的技术方案,提出一种针对嵌入式裸机系统的控制流验证方法,包含如下步骤:
步骤1、对嵌入式裸机系统认证隔离空间的构建,对原有编译器进行改造,利用代码静态分析技术识别出目标嵌入式裸机程序的各个函数,并根据一定的规则对程序以函数为粒度插入“跳板”代码,利用该代码把程序划分为若干个“认证分区”。
步骤2、对嵌入式裸机设备运行时程序动态路径特征白名单收集,在认证隔离空间的基础上,利用不同的输入生成不同的程序的控制流,最终形成程序的动态控制流图(execution-profiling CFG),生成好的CFG将存放在验证端。本发明假设验证端与证明端不同,拥有较强的计算能力,可以大批量的存放动态控制流图。与此对应的是作为证明端的IOT设备的计算能力较低,存储所有的动态控制流图会存在困难,因此发明中提出使用一种递归哈希计算控制流图的方式,最终某一个控制流将会表征为程序执行过程中控制流哈希值的叠加。
步骤3、对嵌入式裸机设备运行时程序动态路径的收集,验证端发送指令请求给证明端,证明端在接受请求后运行处理过的目标程序,并在可信安全域中收集程序运行过程中的相应控制流转移指令,利用这些指令的信息来计算此次控制流图的哈希值,计算过程与步骤2中的哈希值计算相同。
步骤4、对嵌入式裸机设备运行时程序动态路径的检验,证明端将收集的哈希值通过一定的协议发送给验证端,验证端将接收到的哈希值与步骤2中数据库中存储的相应哈希值进行匹配,如果能够匹配上说明此次运行没有遭到控制流的攻击,否则此次运行可能遭受了控制流的攻击,完整性被破坏。
上述步骤中的安全域指的是MPU硬件隔离环境保证的,而哈希值计算拟采用BLAKE2算法,该算法是一种高效而且安全的哈希值算法,从发明至今,还没有人提出破解它的方法。BLAKE2的内部基于的是ChaCha,而ChaCha是高度可信任的,它不太可能被破解。(注:ChaCha是一种由Daniel J.Bernstein设计的流密码,它是TLS1.3所使用的三大密码之一,并且符合新的TLS标准。)
所述步骤1的对嵌入式裸机系统认证隔离空间的构建具体包含如下步骤:
步骤1.1、嵌入式裸机系统插桩,在这里我们需要对编译器进行一定的改造,使得其可以对嵌入式裸机系统源码中指定的函数位置添加额外的跳板代码,本发明中针对的ARM Cortex-M处理器基于ARMv7-M架构,其与研究中通常提到的X86以及ARM Cortex-A处理器的指令集结构均存在差异。对于ARMv7-M架构而言,编译器添加的跳板代码应该可以引起一个软件异常,此处我们将通过SVC的形式来触发。SVC通常用于在操作系统上请求特权操作或访问系统资源,虽然当前的软件环境下,是没有操作系统的,但是本发明创新性的复用了SVC来用作了跳板代码,更符合于ARMv7-M的系统架构设计。
步骤1.2、嵌入式裸机系统程序认证隔间建立,由于嵌入式裸机系统程序直接运行在物理内存上,不存在虚拟地址隔离,因此对于这种软件的隔间化也就是相当于定义在软件动态运行过程中,这个软件的哪些函数可以访问哪些内存。在定义的过程中,一个至关重要的技术点在于确定哪些函数应该被归为一类,并分配哪些内存的访问权限,目前鲜有在嵌入式裸机系统下对这个问题进行讨论。由于搭载嵌入式裸机系统的IOT设备的最终目标接收指令并控制响应的硬件执行(这种直接的控制方式也是IOT设备需要具备特别复杂、强大计算能力的原因之一),因此本发明提出一种基于“访问相同硬件”的函数归类方式,即利用静态分析技术,分析出所有访问相同硬件的函数,这些函数将会被归为一类,把他们划分到同一个隔离空间去。这样做的好处显而易见,从程序执行的角度,IOT设备从接收指令到最终控制硬件将形成一个完成的程序流,本发明直接利用步骤1.1中已经使得编译器可以对程序的特定位置插入SVC,在建立若干认证隔间节约认证资源的同时,保证了每一个隔间中程序流执行的完整。
所述步骤2的对嵌入式裸机设备运行时程序动态路径特征白名单收集具体包含如下步骤:
步骤2.1、动态路径收集白名单收集,为了保证后续控制流的验证,验证端需要收集到被认证隔间化的嵌入式裸机系统的所有控制流。虽然控制流白名单收集这一概念已经在诸多远程证明方案中提出,但是这个步骤也是最终实现控制流验证所不可缺少的部分,而因为针对平台,系统不同,验证收集的具体内涵都会有一定的差异。在本发明中,验证端需要对待验证的嵌入式裸机系统发送不同的控制执行,获取该系统所有可以执行的控制流,这个过程从技术上成为“动态分析”;此外,函数的静态分析也会帮助本发明对待测软件的控制流进行获取。获取后的流(递归哈希h,步骤2.2描述)的哈希将被存储在验证端(通常为强计算能力的PC机或者服务器)。
步骤2.2、动态路径的递归哈希计算,根据步骤1.2的描述,IOT设备的软硬件资源是受限的,虽然验证端可以存储大量数据,但证明端(IOT设备)是难以存储大量的实时控制流数据的。因此,本发明设计了通过递归哈希计算获取程序流的方案,具体而言,在动态记录程序运行轨迹的时候,程序执行的每一个函数,其函数名地址都将会作为参数进行一次哈希计算,而这个哈希计算的结果又会作为下一个函数在运行时的输入参数,与这个函数的地址共同计算出一个新的哈希。
所述步骤3的对嵌入式裸机设备运行时程序动态路径的收集具体包含如下步骤:
步骤3.1、嵌入式裸机设备运行时动态路径收集的触发,根据步骤1.2中所述的认证隔间划分方案,同样利用编译器技术对每一个隔间内部的函数进行插桩,这样在函数间调用时候,将会触发一个SVC的异常,此时利用步骤2.2的递归哈希计算方式,逐步记录控制流,而控制流的内容将存储在MPU所划定的特殊区域中,受到保护。
步骤3.2、嵌入式裸机设备运行时动态路径收集结束后的上传,当认证隔间间需要进行跳转时,本发明将对步骤3.1所记录的递归控制流哈希h利用内置的密钥k进行签加,计算得到签名值r生成报告Auth。
所述步骤4的动态路径的检验具体包含如下步骤:
步骤4.1、签名解密,验证端从证明端接收报告Auth,它利用已知的密钥k对Auth进行解密,验证前面r并分解出哈希值h;
步骤4.2、将哈希值h与步骤2.2中得到的可信路径集进行比较,如果能够匹配,则说明此次运行没有遭受到控制流的攻击,否则此次运行可能遭受了控制流的攻击,完整性被破坏。利用加解密对控制流验证是远程证明领域必不可少的组成部分,是一个统一的整体,不能被割裂。
本发明具有以下优点:
1、提出了一种针对嵌入式裸机系统的控制流验证方法,它可以对嵌入式裸机系统的控制流进行实时采集,经过验证端的检测可以检测控制流攻击。
2、介绍了如何使用编译器和MPU实现的对嵌入式裸机应用程序进行认证隔间的划分,从而扩展了研究者对嵌入式裸机系统远程认证在证明端如何实施隔间化的认知。
3、该发明从技术角度对方案进行详细的论述,通过对系统工作流程的介绍,证明该方案是可以在待在嵌入式裸机系统的IOT设备上实际运行的。
附图说明
图1为本发明的整体框架流程图;
图2为本发明的递归控制流图哈希值的生成示意图;
图3为本发明的证明端收集可信路径以及插入跳板代码的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅为本发明的一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域的普通技术人员在不付出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
本发明是一种针对嵌入式裸机系统控制流进行远程验证的方法与系统,该方法利用编译器以及MPU技术对嵌入式裸机系统进行插桩,形成若干个“认证隔间”,再分别对隔间内部的控制流进行采集,利用MPU对采集到的控制流进行安全存储,配合远程证明技术实现对待在嵌入式裸机系统的IOT设备的控制流验证,它能够在运行时性能和安全保障之间达到一个相对的平衡。
本发明利用远程证明的架构来有效的证明嵌入式设备的完整性,并且基于MPU硬件隔离技术可信的计算控制流图的哈希值。本发明具有安全性高,运行时开销低等特点。
为使本发明的目的、优点以及技术方案更加清楚,以下通过具体实施,并结合附图,对本发明进一步详细说明。
图1从整体上描述了该方案实施的总体架构,主要包括以下四部分内容:
一、对嵌入式裸机系统认证隔离空间的构建
在对嵌入式裸机系统软件进行动态完整性验证前,首先需要对目标程序进行预处理,预处理的过程主要是对程序中函数的概率预测以及可信路径特征集的构建,主要涉及到步骤的裸机系统隔间分割部分,对于系统隔间的分割,可以结合图3有关部分进行介绍。
(1)认证隔间的构建,在图3中,我们的目标程序是一个嵌入式裸机程序,这个程序包含若干的函数,分别为函数1~5。通过接受来自外部的指令,这个程序将调用不同的函数进行执行并控制硬件(如:开/关灯和开/关马达)。在嵌入式裸机程序中,调用不同的函数,即表示着程序将产生不同的控制流,本发明正是根据这个发现,利用LLVM编译器,对嵌入式裸机程序利用插桩技术插入跳板代码,从而把原来的一个整体的裸机程序切割形成不同的“认证隔间”,使得不同的控制流得到了有效划分。本发明首先需要对编译过程中的各个函数进行识别,并通过程序分析技术对函数进行分组。分组的策略为:根据不同的函数对硬件控制的不同,对这些函数进行分组。如函数1,2都会去控制灯,所以1,2将会被分为一组,置于认证隔间X中;而函数3/4/5是用于访问、控制马达的,因此他们将会被放置到认证隔间Y中。此外,利用编译器技术,本发明将使得嵌入式裸机程序运行在非特权级,这样使得动态收集的控制流和相关处理代码被MPU更好的保护在特权级才能访问的内存中。
(2)编译器插桩插入跳板代码。在第一步中对函数进行分组后,接下来就是在系统层面实现这一分组。前面说过,嵌入式裸机系统仅仅包含一个应用程序,没有操作系统,而这个程序就涵盖了所有对这个IOT设备的控制逻辑。因此,为了将这个单一的应用程序划分成不同的组,本发明中将利用LLVM在编译源码时的插桩功能,对所有的函数间的调用以及其返回进行跳板代码的插桩,跳板代码在实现形式上是以SVC指令的形式存在的。SVC是一种软中断指令,就是通过软件方式模拟产生一个中断,SVC指令中嵌入了一个数字,这个数字通常称为SVC编号。在大多数ARM处理器上,此编号用于指示要请求的服务。由于本发明中涉及到控制流的收集和控制流的发送,所以在一个隔离空间内,用于函数间调用(并采集控制流)的SVC指令将和用于隔间之间跳转(并在跳转过程中完成控制流采集,上传工作)的SVC指令将用不同的编号标识。如图3所示,在认证隔间X中,函数1在执行调用函数2前,也将调用一类SVC指令用于控制流记录,而在函数2准备调用位于认证隔间Y的函数4之前,将调用另一类SVC指令用于将控制流的报告发送给远程验证端。
二、对嵌入式裸机设备运行时程序动态路径特征白名单收集
在在线对证明端(IOT)设备进行动态完整性度量之前,需要首先收集到待验证目标程序的控制流白名单,这里对应图1步骤的内容。收集白名单本身是远程认证的常用手段,然而,鉴于IOT设备受限的软硬件资源限制,其无法完整存储所有的控制流,这也意味着作为对比的验证端也不能直接存储所有的控制流数据。所以本发明提出了使用递归控制流哈希的形式存储某一条控制流的方式,实现如图2所示。这里是一个示例的函数调用流(即认证隔间X),隔间中函数1调用函数2,之后函数2利用SVC指令跳转到其他的认证隔间中去。在这里,当函数1调用函数2时,函数2的函数入口地址(4Byte),连同前一次哈希计算的哈希值(16Byte,初始设为0)将会被合并进行哈希计算,生成一个新的摘要。这个摘要随后将会被存放到又MPU设定的一个区域(REGION)中去,这个REGION将会被设计成只有运行在特权级下的代码才可以访问,这样保证了非特权级的待验证的嵌入式裸机程序无法对这些采集的控制流数据(和相关处理代码)进行篡改。
而当程序继续执行的时候,上述过程将会重复,以保证控制流的哈希以迭代的形式不停的更新。这一步中我们需要通过给目标程序不同的可能输入来得到所有可能的控制流图哈希值,并且把这些哈希值存储在数据库中进行后续的比对匹配。当然不仅仅是验证端可以使用,证明端也将使用同样的哈希计算模式,用以确保可以进行匹配。
三、对嵌入式裸机设备运行时程序动态路径的收集
当程序开始运行后,在每一个认证隔间(X或Y)内,当内部进行函数的调用(如函数1调用函数2)时,一个记录控制流的SVC指令将会被调用。此时,这个软中断将促使ARM Core进入特权级状态,并将控制权交给预设的异常解析模块(使用汇编编写)。异常解析模块将会对SVC进行辨识,当辨识到为认证隔间内的函数调用的时候,将会采用实施方案二中对于控制流的递归哈希计算方法,将控制流哈希值更新到受到MPU保护的内存中去。接着,将恢复此前函数1调用函数2时的堆栈指针,使得程序可以继续运行;而当函数2执行完毕,准备调用位于认证隔间Y中的函数4时,将会调用认证隔间切换SVC。这个时候,同样会促使ARMCore调用特权级运行的异常解析模块,而异常解析模块此时会将控制交给控制流报告的打包流程。系统会利用当前计算的哈希值h,被MPU保护的密钥k生成对签名r并打包成报告Auth,利用网络等通信接口将报告发送给验证端。接着,证明端代码还需要配置MPU,使得其满足认证隔间Y对于内存的访问(硬件的访问)需求,在完成认证隔间切换的同时,也保障系统的正常运行。
四、对嵌入式裸机设备运行时程序动态路径的检验
当证明端将控制流报告Auth,验证端需要对Auth进行验证以完成一个完整的控制流动态验证流程,这里对应图1步骤的内容。验证端首先利用密钥k来对Auth进行解密,验证签名并分解出控制流哈希值h。在对嵌入式裸机设备运行时程序动态路径特征白名单收集的那一步,我们利用在不同输入的情况下将收集到的合法的控制流图哈希值都存储在数据库中。下一步就是针对收集到的哈希值h进行比对。在数据库中我们查找相应的应用在某个输入下对应的哈希值ht,当h=ht时,说明该目标程序的此次运行没有受到控制流的攻击,即目标平台仍然处于可信状态。否则的话说明此次运行的结果是不可信的,平台的完整性遭到了破坏。
所以,本发明中的动态完整性度量可以在MPU可信执行环境的支持下,收集可信的路径信息,并对产生的控制流图哈希值进行检验。
总结来说,本发明是一种针对嵌入式裸机系统的控制流验证方法,它能够验证嵌入式裸机系统代码在动态运行时是否受到攻击,和以前的控制流验证方案相比,该发明的优点在于它针对的是嵌入式裸机系统的特性实现,在不借助于MMU、TrustZone等常见安全模块的前提下,它能够利用编译器技术和MPU实现对裸机程序的隔间化,进行可信的程序执行的动态采集,是一种针对裸机系统行之有效的验证方法。
提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求书限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。
Claims (6)
1.一种针对嵌入式裸机系统的控制流验证方法,其特征在于,包括如下步骤:
步骤1、构建嵌入式裸机系统认证隔离空间,使用编译器对目标源程序插入预先准备好的跳板代码,利用代码静态分析识别出目标嵌入式裸机程序的各个函数,并根据预定的规则对程序以函数为粒度插入“跳板”代码,利用该代码把程序划分为若干个“认证分区”;
步骤2、对嵌入式裸机设备运行时程序动态路径特征白名单进行收集,在认证隔离空间的基础上,利用不同的输入生成不同的程序的控制流,最终形成程序的动态控制流图CFG,生成好的CFG将存放在验证端,其中,使用递归哈希计算控制流图的方式,最终某一个控制流将会表征为程序执行过程中控制流哈希值的叠加;
步骤3、对嵌入式裸机设备运行时程序动态路径进行收集,验证端发送指令请求给证明端,证明端在接受请求后运行处理过的目标程序,并在可信安全域中收集程序运行过程中的相应控制流转移指令,利用这些指令的信息来计算此次控制流图的哈希值,计算过程与步骤2中的哈希值计算相同;
步骤4、对嵌入式裸机设备运行时程序动态路径进行检验,证明端将收集的哈希值通过协议发送给验证端,验证端将接收到的哈希值与步骤2中数据库中存储的相应哈希值进行匹配,如果能够匹配上说明此次运行没有遭到控制流的攻击,否则此次运行可能遭受了控制流的攻击,完整性被破坏。
2.根据权利要求1所述的一种针对嵌入式裸机系统的控制流验证方法,其特征在于,所述步骤3中的可信安全域指的是MPU硬件隔离环境保证的,而哈希值计算拟采用BLAKE2算法。
3.根据权利要求1所述的一种针对嵌入式裸机系统的控制流验证方法,其特征在于,所述步骤1的对嵌入式裸机系统认证隔离空间的构建具体包括如下步骤:
步骤1.1、嵌入式裸机系统插桩,对编译器进行改造,即使用编译器对目标源程序插入预先准备好的跳板代码,使得其能够对嵌入式裸机系统源码中指定的函数位置添加额外的跳板代码,通过SVC的形式来触发;
步骤1.2、嵌入式裸机系统程序认证隔间建立,采用一种基于“访问相同硬件”的函数归类方式,即利用静态分析技术,分析出所有访问相同硬件的函数,这些函数将会被归为一类,把他们划分到同一个隔离空间去;从程序执行的角度,IOT设备从接收指令到最终控制硬件将形成一个完成的程序流,直接利用步骤1.1中已经使得编译器能够对程序的特定位置插入SVC,在建立若干认证隔间节约认证资源的同时,保证了每一个隔间中程序流执行的完整。
4.根据权利要求1所述的一种针对嵌入式裸机系统的控制流验证方法,其特征在于,所述步骤2的对嵌入式裸机设备运行时程序动态路径特征白名单收集具体包含如下步骤:
步骤2.1、动态路径特征白名单收集,验证端需要对待验证的嵌入式裸机系统发送不同的控制执行,获取该系统所有能够执行的控制流,这个过程从技术上称为“动态分析”;同时,采用函数的静态分析帮助对待测软件的控制流进行获取,获取后的流的哈希将被存储在验证端;
步骤2.2、动态路径的递归哈希计算,通过递归哈希计算获取程序流,具体包括,在动态记录程序运行轨迹的时候,程序执行的每一个函数,其函数名地址都将会作为参数进行一次哈希计算,而这个哈希计算的结果又会作为下一个函数在运行时的输入参数,与这个函数的地址共同计算出一个新的哈希。
5.根据权利要求1所述的一种针对嵌入式裸机系统的控制流验证方法,其特征在于,所述步骤3的对嵌入式裸机设备运行时程序动态路径的收集具体包含如下步骤:
步骤3.1、嵌入式裸机设备运行时动态路径收集的触发,根据步骤1.2中所述的认证隔间划分方案,同样利用编译器技术对每一个隔间内部的函数进行插桩,这样在函数间调用时候,将会触发一个SVC的异常,此时利用步骤2.2的递归哈希计算方式,逐步记录控制流,而控制流的内容将存储在MPU所划定的特殊区域中,受到保护;
步骤3.2、嵌入式裸机设备运行时动态路径收集结束后的上传,当认证隔间间需要进行跳转时,对步骤3.1所记录的递归控制流哈希h利用内置的密钥k进行签加,计算得到签名值r生成报告Auth。
6.根据权利要求1所述的一种针对嵌入式裸机系统的控制流验证方法,其特征在于,所述步骤4的动态路径的检验具体包含如下步骤:
步骤4.1、签名解密,验证端从证明端接收报告Auth,它利用已知的密钥k对Auth进行解密,验证签名值r并分解出哈希值h;
步骤4.2、将哈希值h与步骤2.2中得到的可信路径集进行比较,如果能够匹配,则说明此次运行没有遭受到控制流的攻击,否则此次运行可能遭受了控制流的攻击,完整性被破坏。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011253939.0A CN112287357B (zh) | 2020-11-11 | 2020-11-11 | 一种针对嵌入式裸机系统的控制流验证方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011253939.0A CN112287357B (zh) | 2020-11-11 | 2020-11-11 | 一种针对嵌入式裸机系统的控制流验证方法与系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112287357A CN112287357A (zh) | 2021-01-29 |
CN112287357B true CN112287357B (zh) | 2022-08-12 |
Family
ID=74399106
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011253939.0A Active CN112287357B (zh) | 2020-11-11 | 2020-11-11 | 一种针对嵌入式裸机系统的控制流验证方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112287357B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113377379B (zh) * | 2021-08-12 | 2021-11-16 | 四川腾盾科技有限公司 | 一种基于模拟器指令插桩的操作系统信息统计方法 |
CN114611106B (zh) * | 2022-03-10 | 2024-04-09 | 昆明理工大学 | 一种基于多目标粒子群算法的程序控制流证明方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101504709A (zh) * | 2009-04-03 | 2009-08-12 | 中国科学院研究生院 | 用于软件配置管理的脆弱软件水印方法 |
US8782435B1 (en) * | 2010-07-15 | 2014-07-15 | The Research Foundation For The State University Of New York | System and method for validating program execution at run-time using control flow signatures |
CN109543401A (zh) * | 2018-11-23 | 2019-03-29 | 中国人民解放军战略支援部队信息工程大学 | 基于控制流锁的sgx侧信道攻击防御方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9288058B2 (en) * | 2013-09-03 | 2016-03-15 | Red Hat, Inc. | Executing compliance verification or remediation scripts |
CN104615473B (zh) * | 2013-11-04 | 2017-11-24 | 华为技术有限公司 | 轮廓技术编译的优化方法及装置 |
CN104933362B (zh) * | 2015-06-15 | 2017-10-20 | 福州大学 | Android应用软件API误用类漏洞自动化检测方法 |
CN106970823B (zh) * | 2017-02-24 | 2021-02-12 | 上海交通大学 | 高效的基于嵌套虚拟化的虚拟机安全保护方法及系统 |
CN110276198B (zh) * | 2019-06-14 | 2021-04-20 | 中国科学院信息工程研究所 | 一种基于概率预测的嵌入式可变粒度控制流验证方法及系统 |
-
2020
- 2020-11-11 CN CN202011253939.0A patent/CN112287357B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101504709A (zh) * | 2009-04-03 | 2009-08-12 | 中国科学院研究生院 | 用于软件配置管理的脆弱软件水印方法 |
US8782435B1 (en) * | 2010-07-15 | 2014-07-15 | The Research Foundation For The State University Of New York | System and method for validating program execution at run-time using control flow signatures |
CN109543401A (zh) * | 2018-11-23 | 2019-03-29 | 中国人民解放军战略支援部队信息工程大学 | 基于控制流锁的sgx侧信道攻击防御方法 |
Non-Patent Citations (2)
Title |
---|
Control-flow integrity;Martín Abadi等;《CCS "05: Proceedings of the 12th ACM conference on Computer and communications security》;20051107;全文 * |
裸机嵌入式系统的软件移植问题研究;袁学贵等;《化工自动化及仪表》;20130710;第40卷(第07期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112287357A (zh) | 2021-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Fei et al. | Security vulnerabilities of SGX and countermeasures: A survey | |
US10148442B2 (en) | End-to-end security for hardware running verified software | |
KR102347562B1 (ko) | 보안 제어 방법 및 컴퓨터 시스템 | |
US10303899B2 (en) | Secure public cloud with protected guest-verified host control | |
Nunes et al. | {APEX}: A verified architecture for proofs of execution on remote devices under full software compromise | |
Mai et al. | Verifying security invariants in ExpressOS | |
CN110276198B (zh) | 一种基于概率预测的嵌入式可变粒度控制流验证方法及系统 | |
Ammar et al. | S $\mu $ μ V—The Security MicroVisor: A Formally-Verified Software-Based Security Architecture for the Internet of Things | |
CN112287357B (zh) | 一种针对嵌入式裸机系统的控制流验证方法与系统 | |
CN111931251A (zh) | 一种基于区块链的可信计算芯片 | |
CN107194246B (zh) | 一种用于实现动态指令集随机化的cpu | |
CN112511306A (zh) | 一种基于混合信任模型的安全运行环境构建方法 | |
Hu et al. | A probability prediction based mutable control-flow attestation scheme on embedded platforms | |
Caulfield et al. | {ACFA}: Secure Runtime Auditing & Guaranteed Device Healing via Active Control Flow Attestation | |
CN106127054A (zh) | 一种面向智能设备控制指令的系统级安全防护方法 | |
Nemati | Secure system virtualization: End-to-end verification of memory isolation | |
CN109165509A (zh) | 软件实时可信度量的方法、设备、系统及存储介质 | |
CN212966171U (zh) | 一种基于区块链的可信计算芯片 | |
Zhang et al. | Design and implementation of trustzone-based blockchain chip wallet | |
Zobaed et al. | Confidential computing across edge-to-cloud for machine learning: A survey study | |
CN112580015A (zh) | 包括信任锚计算仪器的处理系统和相应的方法 | |
Mishra et al. | Threats and vulnerabilities to IoT end devices architecture and suggested remedies | |
Cho et al. | Mobile application tamper detection scheme using dynamic code injection against repackaging attacks | |
Ciravegna | Detecting compromise in TEE applications at runtime | |
CN113239347B (zh) | 一种适用于tee安全应用实例的启动方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |