一种细粒度控制流完整性保护实现方法及系统与流程

文档序号:22834187发布日期:2020-11-06 16:25阅读:140来源:国知局
一种细粒度控制流完整性保护实现方法及系统与流程

本发明涉及网络安全技术领域,尤其涉及一种细粒度控制流完整性保护实现方法及系统。



背景技术:

在程序开发中,通常存在内存漏洞,内存漏洞是指程序员在软件编写的过程中,对内存的操作上有时间上或者空间上的设计失误,产生使得程序可能做出违反程序本身设计的行为的问题。攻击者利用程序的内存漏洞,可以构造出各种攻击,执行恶意行为。

在漏洞的利用过程中,经常需要绕过一个广泛被使用的防御:nx保护,即可写数据是不可执行的。这使得攻击者无法直接注入攻击代码,而是需要将被攻击程序本身的代码片段组织起来完成攻击行为。因此,这种攻击被称为代码重用攻击。代码重用攻击的关键在于按照攻击者的设计组织代码片段。为了实现代码片段的任意连接,一般需要使用间接分支指令。间接分支指令指一些使用寄存器或者内存内的指针作为目标地址,而不是在代码中固定的代码地址作为目标地址的一系列分支指令。间接分支指令一般包括间接调用,间接跳转和返回指令。例如,攻击者可以确定地执行一条指令jmprax,这是一条间接跳转指令。如果攻击者可以控制rax的值,就可以跳转到任意地址的指令序列。如果下一条指令序列以另一个间接分支结尾,还可以用同样的方法继续跳转到其他任意地址序列。每一条间接分支都可以是不同的种类或者单一种类:间接调用(例如callrax)间接跳转(例如jmprax)返回指令(return,从栈上弹出一个地址并跳转)。

为了防御代码复用攻击,提出了控制流完整性保护(cfi:control-flowrestrictor)的概念。控制流完整性保护是指在程序运行前对程序进行分析,得出程序合法的控制流。在程序运行时检查控制流是否符合分析的结果。cfi可以大致分为粗粒度和细粒度:细粒度指每个(间接)的控制流的源和目的地址都使用标记,例如a到b,c到d,做出细致的区分。而粗粒度一般指只标记一个代码片段可以被作为间接控制流转移的目的地址。如果a到b,c到d是合法的,那么b和d会被标记为合法的目的。而a到d和c到b在粗粒度cfi中也是合法的。因此可见,细粒度的cfi是更加安全的,而粗粒度的cfi实现更加简单。

目前cpu只有粗粒度的硬件设计,一般引入一个特殊的空指令来标记合法的目的地址。例如intelcet中的ibt中添加了endbranch指令。这个指令被放置在所有的合法的跳转目标的入口。当一个间接转移发生时,cpu会检查转移的目的地址是否是endbranch指令,如果不是,则认为发生了攻击。arm的bti也是类似的设计。

因此,需要提出一种基于细粒度的控制流完整性保护的实现方法,解决上述不足。



技术实现要素:

本发明实施例提供一种细粒度控制流完整性保护实现方法及系统,用以解决上述问题或者至少部分地解决上述问题。

第一方面,本发明实施例提供一种细粒度控制流完整性保护实现方法,包括:

获取目标程序中若干代码片段的合法间接控制流;

基于所述合法间接控制流,将对应于每一个代码片段的跳转地址的预设低位地址替换为控制流指令地址的预设低位编码;

为每一个代码片段添加预设空指令作为间接控制流的合法跳转目的标记。

进一步地,所述获取目标程序中若干代码片段的合法间接控制流,具体包括:

将所述目标程序分解成若干代码片段;

对所述若干代码片段进行静态分析,得到每一个代码片段到下一个允许跳转代码片段的路径集合,将所述路径集合作为所述合法间接控制流。

进一步地,所述基于所述合法间接控制流,将对应于每一个代码片段的跳转地址的预设低位地址替换为控制流指令地址的预设低位编码,具体包括:

获取每一个代码片段的源标签和目的标签;

按照所述合法间接控制流的跳转顺序,将所述源标签对应的源跳转地址的预设低位地址,以及所述目的标签对应的目的跳转地址的预设低位地址分别替换为所述预设低位编码。

进一步地,所述按照所述合法间接控制流的跳转顺序,将所述源标签对应的源跳转地址的预设低位地址,以及所述目的标签对应的目的跳转地址的预设低位地址分别替换为所述预设低位编码,进一步包括:

若当前代码片段的源跳转地址包括一个预设低位编码,且下一跳代码片段对应的目的跳转地址与所述当前代码片段具有相同预设低位编码,则判定所述当前代码片段的源跳转地址为合法源跳转地址;

若下一跳代码片段的预设低位编码集合包含至少一个当前代码片段的源跳转地址,则判定所述至少一个当前代码片段的源跳转地址为合法源跳转地址集合。

第二方面,本发明实施例提供一种细粒度控制流完整性保护实现系统,包括:

获取模块,用于获取目标程序中若干代码片段的合法间接控制流;

替换模块,用于基于所述合法间接控制流,将对应于每一个代码片段的跳转地址的预设低位地址替换为控制流指令地址的预设低位编码;

标记模块,用于为每一个代码片段添加预设空指令作为间接控制流的合法跳转目的标记。

第三方面,本发明实施例提供一种电子设备,包括:

存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现任一项所述细粒度控制流完整性保护实现方法的步骤。

第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现任一项所述细粒度控制流完整性保护实现方法的步骤。

本发明实施例提供的细粒度控制流实现方法及系统,通过将程序运行中的代码片段之间的跳转地址标签替换为跳转指令自身地址的低位编码,使得内存运行的硬件开销大幅降低,同时提升了安全性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种细粒度控制流完整性保护实现方法流程图;

图2为现有技术的基于静态分析的路径结果示意图;

图3为现有技术的粗粒度控制流完整性保护的实现结果示意图;

图4为现有技术的普通细粒度控制流完整性保护的实现结果示意图;

图5为本发明实施例提供的改进细粒度控制流完整性保护的实现结果示意图;

图6为本发明实施例提供的一种细粒度控制流完整性保护实现系统结构图;

图7为本发明实施例提供的电子设备的结构框图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。

现有技术中,粗粒度的cfi允许了一些不应该允许的控制流路径,这使得攻击者有很多路径可以用来组建攻击;细粒度的cfi设计都需要使用一个标签寄存器,在控制流转移的源和目的添加标签执行,源标签指令更新标签寄存器,目的标签指令检查当前标签寄存器是否为合法标签,因此存在两个问题:一是硬件损耗过大,一般为2.5%左右,也是商业界没有正式使用的最主要原因;二是对于单个目标被标记为多个标签的情况没有良好的解决方法。

针对上述问题,本发明实施例使用了地址的低位作为标签来进行细粒度cfi检查,并且修改了间接转移的指令逻辑,使得硬件的损耗几乎为零,并且对于单个目标被标记为多个标签的情况提供了十分简单的解决办法。

图1为本发明实施例提供的一种细粒度控制流完整性保护实现方法流程图,如图1所示,包括:

s1,获取目标程序中若干代码片段的合法间接控制流;

s2,基于所述合法间接控制流,将对应于每一个代码片段的跳转地址的预设低位地址替换为控制流指令地址的预设低位编码;

s3,为每一个代码片段添加预设空指令作为间接控制流的合法跳转目的标记。

具体地,将待保护的程序进行分析,该程序是由若干个代码片段组成,获取其中代码片段中合法跳转的路径,即合法间接控制流,原代码片段之间的跳转都是基于标签地址,即识别源地址到目的地址之间是否为合法路径,现修改这些间接控制流转移的逻辑,将控制流的目的地址的低n位改成了这条指令自身地址的低n位,相当于跳转的地址的低位由当前跳转指令的低位拷贝过去。同样使用一个特殊的标记指令,即预设空指令来完成类似于粗粒度cfi的检查,即作为合法跳转的目的标记endbr;此处,将编译器进行修改,重排了二进制文件,使得所有的间接调用和其合法的目的地址的低n位是相等的。

本发明实施例通过将程序运行中的代码片段之间的跳转地址标签替换为跳转指令自身地址的低位编码,使得内存运行的硬件开销大幅降低,同时提升了安全性。

基于上述实施例,该方法中步骤s1具体包括:

将所述目标程序分解成若干代码片段;

对所述若干代码片段进行静态分析,得到每一个代码片段到下一个允许跳转代码片段的路径集合,将所述路径集合作为所述合法间接控制流。

具体地,如图2所示的实施例中,将程序分成5个代码片段,即代码片段a、b、c、d和e,对其进行静态分析,得到允许的跳转路径:a-b、a-c、b-d、c-d和d-e,将上述路径集合作为合法间接控制流。

如图3所示实施例中的粗粒度cfi中,endbr是标记指令,而b-c和b-e是非法路径,但由于跳转指令和标记指令相同,无法防范上述两个非法攻击。

如图4所示实施例中的普通细粒度cfi中,由于需要设置标签寄存器set和检查标签寄存器check,代码片段a的源地址设为5,代码片段b和c的目的地址和源地址分别设为5和7,代码片段d和e的目的地址设为7,因此非法路径b-c和b-e中,只能防范住b-c,而无法防范b-e。此处,如果每个位置只有单一的标签,代码片段cde就需要共享标签,则有一个攻击无法防御。

此处,需要说明的是,程序可体现为任意组合的代码片段,以及其间任意的合法跳转方式,上述各图中只是其中一个示例,本发明实施例对此并不作任何限制。

基于上述任一实施例,该方法中步骤s2具体包括:

获取每一个代码片段的源标签和目的标签;

按照所述合法间接控制流的跳转顺序,将所述源标签对应的源跳转地址的预设低位地址,以及所述目的标签对应的目的跳转地址的预设低位地址分别替换为所述预设低位编码。

其中,所述按照所述合法间接控制流的跳转顺序,将所述源标签对应的源跳转地址的预设低位地址,以及所述目的标签对应的目的跳转地址的预设低位地址分别替换为所述预设低位编码,进一步包括:

若当前代码片段的源跳转地址包括一个预设低位编码,且下一跳代码片段对应的目的跳转地址与所述当前代码片段具有相同预设低位编码,则判定所述当前代码片段的源跳转地址为合法源跳转地址;

若下一跳代码片段的预设低位编码集合包含至少一个当前代码片段的源跳转地址,则判定所述至少一个当前代码片段的源跳转地址为合法源跳转地址集合。

具体地,如图5所示的实施例中,在普通细粒度cfi基础上,对指令编译进行修改,重排了二进制文件,将代码片段a的源地址、代码片段b和c的目的地址中的低位地址修改为控制流控制指令的低位地址,如图中所示的到“xx05”位,其中代码片段b的源地址的低位修改为到“xx07”位,代码片段c的源地址的低位修改为到“xx08”位,代码片段d的目的地址的低位修改为到“xx07”位和“xx08”位,代码片段e的目的地址的低位修改为到“xx08”位,当跳转地址不是endbr时认为发生了攻击,可以防御所有的非法路径的攻击。此处,代码片段d中包含了两个目的地址,即解决了单目标多地址的问题,不同的跳转指令虽然有不同的指令地址低位编码,这里的代码片段b和代码片段c都可以跳转到d并执行代码,每个跳转地址可以有不同的源地址标签。由于地址低位是直接由控制指令的低位编码直接进行替换,因此跳转并不需要总是以跳转的函数进行开头,而是对应于一个范围区间的预设空指令均可,也就满足了多标签控制流的场景需求。

此处,在代码片段b、c、d和e的目的地址处统一添加预设空指令作为合法跳转的目的标记,完成了类似于粗粒度cfi的检查,若入口不存在该标记,则被认为是非法路径,访问被拒绝。

图6为本发明实施例提供的一种细粒度控制流完整性保护实现系统结构图,如图6所示,包括:获取模块61、替换模块62和标记模块63;其中:

获取模块61用于获取目标程序中若干代码片段的合法间接控制流;替换模块62用于基于所述合法间接控制流,将对应于每一个代码片段的跳转地址的预设低位地址替换为控制流指令地址的预设低位编码;标记模块63用于为每一个代码片段添加预设空指令作为间接控制流的合法跳转目的标记。

本发明实施例提供的系统用于执行上述对应的方法,其具体的实施方式与方法的实施方式一致,涉及的算法流程与对应的方法算法流程相同,此处不再赘述。

本发明实施例通过将程序运行中的代码片段之间的跳转地址标签替换为跳转指令自身地址的低位编码,使得内存运行的硬件开销大幅降低,同时提升了安全性。

图7示例了一种电子设备的实体结构示意图,如图7所示,该电子设备可以包括:处理器(processor)710、通信接口(communicationsinterface)720、存储器(memory)730和通信总线740,其中,处理器710,通信接口720,存储器730通过通信总线740完成相互间的通信。处理器710可以调用存储器730中的逻辑指令,以执行如下方法:获取目标程序中若干代码片段的合法间接控制流;基于所述合法间接控制流,将对应于每一个代码片段的跳转地址的预设低位地址替换为控制流指令地址的预设低位编码;为每一个代码片段添加预设空指令作为间接控制流的合法跳转目的标记。

此外,上述的存储器730中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的传输方法,例如包括:获取目标程序中若干代码片段的合法间接控制流;基于所述合法间接控制流,将对应于每一个代码片段的跳转地址的预设低位地址替换为控制流指令地址的预设低位编码;为每一个代码片段添加预设空指令作为间接控制流的合法跳转目的标记。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1