CN109508536B - 一种篡改程序流攻击的检测方法和装置 - Google Patents
一种篡改程序流攻击的检测方法和装置 Download PDFInfo
- Publication number
- CN109508536B CN109508536B CN201710832391.7A CN201710832391A CN109508536B CN 109508536 B CN109508536 B CN 109508536B CN 201710832391 A CN201710832391 A CN 201710832391A CN 109508536 B CN109508536 B CN 109508536B
- Authority
- CN
- China
- Prior art keywords
- jump
- instruction
- jump instructions
- instructions
- type
- 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/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种篡改程序流攻击的检测方法和装置,以有效识别出受到攻击的异常程序流。检测方法为,确定被检测进程发生分支预测失败事件时,获取被检测进程中发生时刻距离当前时刻由近及远的N条跳转指令;从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M;获取所述M条跳转指令的目标地址;若所述M条跳转指令的目标地址未全部包含在预设的白名单中时,确定所述被检测进程发生篡改程序流攻击,可以有效并安全的检测出被检测进程是否被篡改程序流攻击,与现有技术相比,无需在跳转指令之前***检验代码,避免插桩引入的代码开销,可以提高代码的运行效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种篡改程序流攻击的检测方法和装置。
背景技术
堆栈缓存溢出(Stack Smashing)漏洞,是操作***和应用程序安全漏洞中比较常见、造成的后果比较严重的漏洞类型之一。攻击者可以利用这种漏洞远程执行恶意代码。恶意篡改程序流攻击,就是利用函数的堆栈缓存溢出漏洞往程序内存中写入超长数据,覆盖程序的返回地址,达到控制程序执行行为的目的。返回导向编程(Return orientedprogramming,ROP)是现阶段恶意篡改程序流攻击中最具威胁的攻击。
返回导向编程(Return oriented programming,ROP)是建立在函数堆栈缓存溢出基础上的一种高级篡改程序流攻击。与传统的代码注入攻击不同,ROP攻击注入到栈上的不是恶意代码,而是***中已有指令序列的地址,中间夹杂着一些供指令序列使用的数据。攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码,ROP可以借用现有操作***函数库,实现任何逻辑功能。
控制流完整性(Control Flow Integrity)检查作为一种防御篡改程序流攻击的安全机制,通过监视程序运行过程中的控制流转移过程,使控制流始终处于原有控制流图所限定的合法范围内。
控制流完整性检查是在编译阶段通过编译器静态分析程序的控制流图,重点关注间接转移指令,如间接跳转、间接调用和函数返回等指令,获取相应的白名单。在程序运行过程中在间接转移指令之前***检验代码,对间接转移指令的目标地址进行检查核对。攻击者对控制流的劫持会导致目标地址不在白名单中,此时利用控制流完整性检查技术可迅速行阻断控制流的劫持,保证***安全。
由此可知,现有的控制流完整性检查通过编译器控制,在控制流的间接转移指令前***检验代码,来判断目标地址的合法性。这种插桩方式引入的开销非常大,对代码的正常运行造成很大影响。
发明内容
本申请实施例提供一种篡改程序流攻击的检测方法和装置,以有效的识别出受到攻击的异常程序流。
第一方面,本申请实施例提供一种篡改程序流攻击的检测方法,包括:确定被检测进程发生分支预测失败事件时,获取所述被检测进程中已发生时刻距离当前时刻由近及远的N条跳转指令;从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M;获取所述M条跳转指令的目标地址;若所述M条跳转指令的目标地址未全部包含在预设的白名单中时,确定所述被检测进程发生篡改程序流攻击。这样,能够有效并安全的检测出被检测进程是否被篡改程序流攻击,与现有技术相比,无需在跳转指令之前***检验代码,可以降低插桩引入的代码开销,提高代码运行效率。
在第一方面的一种可能的设计中,从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令时,将所述N条跳转指令中的静态跳转指令和已经发生过的动态跳转指令筛选出来作为所述M条跳转指令。这样能够快速筛选出M条高危跳转指令进行检测分析,无需针对安全的跳转指令进行检测分析,提高检测效率。
在第一方面的一种可能的设计中,若所述M条跳转指令的目标地址全部包含在预设的白名单中时,确定所述被检测进程运行安全。
在第一方面的一种可能的设计中,所述预设的白名单由下述方式获得:通过静态扫描的方式读取可执行文件的二进制代码,所述可执行文件是指运行后生成所述被检测进程的文件;利用反汇编工具从所述二进制代码中获取包含所有的跳转指令;获取所述所有的跳转指令中的各跳转指令分别对应的目标地址;保存获取到的目标地址,从而形成白名单。这种构建方式创建的白名单,能够涵盖所有合法的跳转指令的目标地址,进一步利用创建的白名单检测被检测进程是否运行安全。
在第一方面的一种可能的设计中,所述保存获取到的目标地址,从而形成白名单时,可以通过以下过程实现:将获取到的目标地址按照对应的跳转指令所属的指令类型进行分类存储得到所述预设的白名单,所述指令类型包括无条件转移类、条件转移类和调用指令类,所述调用指令类包括调用子程序类和调用子程序与返回类。这样白名单中存储的目标地址能够实现分类存储。
在第一方面的一种可能的设计中,获取所述M条跳转指令的目标地址时,根据跳转指令的指令类型进行获取,可以通过以下方式实现:针对所述M条跳转指令中的第一跳转指令,若所述第一跳转指令所属的指令类型为无条件转移类、条件转移类、或为调用指令类中的调用子程序类时,则将所述第一跳转指令中包含的地址作为所述第一跳转指令的目标地址;若所述第一跳转指令所属的指令类型为调用指令类中的调用子程序与返回类,则将所述第一跳转指令的下一条跳转指令中包含的地址作为所述第一跳转指令的目标地址;其中,所述第一跳转指令为所述M条跳转指令中的任意一个。这种设计中,根据跳转指令的指令类型快速准确的获取该跳转指令对应的目标地址。
在第一方面的一种可能的设计中,所述白名单包括各指令类型的目标地址集合,确定所述M条跳转指令的目标地址是否全部包含在所述预设的白名单中时,可以通过以下过程实现:检测所述第一跳转指令的目标地址是否包含在预设的白名单包括的所述第一跳转指令所属的指令类型对应的目标地址集合中,若是,则确定所述第一跳转指令的目标地址包含在所述预设的白名单中;否则,确定所述第一跳转指令的目标地址未包含在所述预设的白名单中。
这种设计中,根据跳转指令的指令类型来与白名单中包括的对应指令类型的目标地址集合中的目标地址进行匹配,无需与白名单除对应指令类型之外的目标地址集合进行匹配,从而可以提升跳转指令与白名单的匹配效率。
第二方面,本申请实施例提供一种篡改程序流攻击的检测装置,包括:第一获取单元,用于确定被检测进程发生分支预测失败事件时,获取所述被检测进程中已发生时刻距离当前时刻由近及远的N条跳转指令;筛选单元,用于从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M;第二获取单元,用于获取所述M条跳转指令的目标地址;确定单元,用于在所述M条跳转指令的目标地址未全部包含在预设的白名单中时,确定所述被检测进程发生篡改程序流攻击。
在第二方面的一种可能的设计中,所述筛选单元从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令时,具体用于:将所述N条跳转指令中的静态跳转指令和已经发生过的动态跳转指令筛选出来作为所述M条跳转指令。
在第二方面的一种可能的设计中,所述确定单元还用于:在所述M条跳转指令的目标地址全部包含在预设的白名单中时,确定所述被检测进程运行安全。
在第二方面的一种可能的设计中,所述装置还包括第三获取单元,所述预设的白名单由所述第三获取单元由下述方式获得:通过静态扫描的方式读取可执行文件的二进制代码,所述可执行文件是指运行后生成所述被检测进程的文件;利用反汇编工具从所述二进制代码中获取包含所有的跳转指令;获取所述所有的跳转指令中的各跳转指令分别对应的目标地址;保存获取到的目标地址,从而形成白名单。
在第二方面的一种可能的设计中,所述第三获取单元在保存获取到的目标地址,从而形成白名单时,具体用于:将获取到的目标地址按照对应的跳转指令所属的指令类型进行分类存储得到所述预设的白名单,所述指令类型包括无条件转移类、条件转移类和调用指令类,所述调用指令类包括调用子程序类和调用子程序与返回类。
在第二方面的一种可能的设计中,所述第二获取单元在获取所述M条跳转指令的目标地址时,具体用于:针对所述M条跳转指令中的第一跳转指令,若所述第一跳转指令所属的指令类型为无条件转移类、条件转移类、或为调用指令类中的调用子程序类时,则将所述第一跳转指令中包含的地址作为所述第一跳转指令的目标地址;若所述第一跳转指令所属的指令类型为调用指令类中的调用子程序与返回类,则将所述第一跳转指令的下一条跳转指令中包含的地址作为所述第一跳转指令的目标地址;其中,所述第一跳转指令为所述M条跳转指令中的任意一个。
在第二方面的一种可能的设计中,所述白名单包括各指令类型的目标地址集合,所述确定单元在确定所述M条跳转指令的目标地址是否全部包含在所述预设的白名单中时,具体用于:检测所述第一跳转指令的目标地址是否包含在预设的白名单包括的所述第一跳转指令所属的指令类型对应的目标地址集合中,若是,则确定所述第一跳转指令的目标地址包含在所述预设的白名单中;否则,确定所述第一跳转指令的目标地址未包含在所述预设的白名单中。
第三方面,本申请实施例提供一种篡改程序流攻击的检测设备,包括处理器、存储器和输入接口。其中,存储器、输入结构与处理器之间可以通过总线***相连。输入接口用于接收可执行文件,存储器用于存储程序、指令或代码,处理器用于执行存储器中的程序、指令或代码,以完成上述第一方面或第一方面的任意可能的设计方式中的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面的任意可能的设计方式中的方法。
第五方面,本申请实施例提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面的任意可能的设计方式中的方法。
第六方面,本申请实施例提供一种芯片***,该芯片***包括处理器,用于支持检测设备实现上述第一方面或第一方面的任意可能的设计方式中所涉及的功能。在一种可能的设计中,芯片***还包括存储器,用于保存检测设备必要的程序指令和数据。芯片***,可以由芯片构成,也可以包含芯片和其他分立器件。
应理解,本申请实施例的第二至六方面与本申请实施例的第一方面的技术方案一致,各方面及对应的可实施的设计方式所取得的有益效果相似,不再赘述。
附图说明
图1为本申请实施例的篡改程序流攻击的检测设备结构图;
图2为本申请实施例的篡改程序流攻击的检测方法流程示意图;
图3A为检测篡改程序流攻击方法在X86CPU硬件环境的应用示意图;
图3B为本申请实施例的篡改程序流的检测进程示意图;
图4为本申请实施例提供的篡改程序流攻击的检测装置结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
现有的控制流完整性检查通过编译器控制,在控制流的间接转移指令前***检验代码,来判断目标地址的合法性,这种插桩方式引入的代码开销非常大,对代码的正常运行造成很大影响。鉴于此,本申请提供一种篡改程序流攻击的检测方法和装置,能够在不降低危险检出率的情况下有效地降低安全监测引入的代码开销,提高代码的运行效率。
下面介绍一下本申请中涉及的相关术语。
(1)最后分支记录(Last Branch Record,LBR)寄存器
LBR寄存器是Intel处理器提供的一组用于记录和追踪程序运行过程中已发生的距离当前时刻由近及远的若干次跳转指令的信息的循环寄存器组。这些寄存器的数量与Intel处理器的微架构相关。在Haswell架构中有16个循环寄存器,可以记录程序距离当前时刻由近及远的16条跳转指令的信息,其中每条跳转指令的信息具体包括指令的地址,程序从哪条指令的地址跳转到这条跳转指令的地址中的(即这条跳转指令的来源地址),以及程序由这条跳转指令的地址跳转到哪条指令的地址去(即这条跳转指令的目的地址)。在Skylake架构中有32个循环寄存器。LBR寄存器的优点在于其定制性很强,能够过滤掉一些不重要的跳转指令,而保留需要重点关注的跳转指令。
(2)分支预测
现代处理器都是采用流水线的方式执行指令,即把一条指令的操作分成多个细小的步骤,每个步骤由专门的电路来并行完成,让不同指令的各步操作在时间上重叠,从而实现几条指令并行处理,以提高处理器执行指令的效率。当包含流水线技术的处理器在处理分支指令时会遇到一个问题,根据判定条件的真假不同,有可能会转跳到不同的分支,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令。流水线越长,处理器等待的时间便越长,因为它必须等待分支指令处理完毕,才能确定下一条进入流水线的指令。分支预测技术便是为解决这一问题而出现的,分支预测就是预测一条可能的分支,让处理器沿着这条分支流水执行下去而不用等待。若预测成功,那么处理器继续执行下去即可;若预测失败,处理器则需要回退到分支位置,重新沿着正确的分支方向执行。
(3)合法性检测
合法性检测主要检查跳转指令的目标地址是否在合法的目标集合中。如果所有的跳转指令的目标地址都在合法的目标集合中,认为当前的被检测进程没有受到攻击;如果有至少一个跳转指令的目标地址未包含在合法的目标集合中,那么认为当前的被检测进程受到攻击。合法的目标集合的获取过程如下:在本申请篡改程序流攻击的检测进程的初始化过程中,利用现有的扫描工具进行静态扫描从而读取可执行文件的二进制代码,其中可执行文件是指运行后生成被检测进程的文件。然后使用反汇编工具对二进制代码进行词法分析,语义分析,语法分析等操作,从二进制代码中获取跳转指令,及其对应的目标地址,其中获取的目标地址即为合法的目标地址。并且将获取到的目标地址存储在操作***的公共内存中,此公共内存可以被访问。本申请中将由合法的目标地址构成的集合称之为白名单。
分支预测有许多种策略,如静态预测、动态预测、自适应预测、关联性分支预测、返回栈预测等。无论采用何种策略进行分支预测,攻击者劫持指令流后,处理器无法预测其目标地址,必然会产生一个分支预测失败的性能监测单元(Performance Monitoring Unit,PMU)事件。本申请提供的检测篡改程序流攻击的方案,在发生分支预测失败的PMU事件时,从LBR中取出发生时刻距离当前时刻最近的若干条跳转指令,取出的这些跳转指令中必定包含造成分支预测失败的跳转指令,进一步从这些跳转指令中甄别出高危跳转指令,高危跳转指令是指可能被攻击者利用,发起篡改程序流攻击从而造成分支预测失败的跳转指令。
本申请中的篡改程序流攻击的检测方法可适用于多种硬件结构的检测设备,图1为本申请适用的一种检测设备的硬件结构示意图。如图1所示,该检测设备100中包括:输入接口101、存储器102、处理器103,所述处理器103、存储器102和输入接口101通过总线***104相互连接。
所述输入接口101,用于接收可执行文件。
所述存储器102,用于存储指令和数据;
存储器102包括但不限于是随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者快闪存储器)、或便携式只读存储器(CD-ROM)。
处理器103可以是一个或多个中央处理器(Central Processing Unit,简称CPU),在处理器103是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。
输入接口101可以是网络接口,例如有线接口,例如光纤分布式数据接口(FiberDistributed Data Interface,简称FDDI)、千兆以太网(Gigabit Ethernet,简称GE)接口;输入接口101也可以是无线接口。输入接口101也可以是包括麦克风、键盘在内的输入设备,也可以是USB接口等等。只要检测设备通过输入接口101可以接收可执行文件即可。
存储器102还用于存储白名单,可选地,还用于存储指令的历史发生(taken)集合等等。
所述检测设备100中的处理器103用于读取所述存储器102中存储的指令和数据后,执行以下操作:运行可执行文件,生成被检测进程,确定被检测进程发生分支预测失败事件时,获取所述被检测进程中发生时刻距离当前时刻由近及远的N条跳转指令;从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M;获取所述M条跳转指令的目标地址;若所述M条跳转指令的目标地址未全部包含在预设的白名单中时,确定所述被检测进程发生篡改程序流攻击。
可选地,检测设备100中还包括输出接口,用于将处理器确定所述被检测进程是否发生篡改程序流攻击的确定结果输出给用户。输出接口可以与输出设备连接,输出设备包括打印机,显示器,麦克风等等。
另外,检测设备100的各个组件可以通过总线***104耦合在一起,其中总线***104除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线***104。但是为了清楚说明,在图1中将各种总线都标为总线***104。
其中,处理器103控制检测设备100的操作,处理器103还可以称为中央处理单元(英文:central processing unit,CPU)。处理器103可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器103中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器103可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器102,处理器103读取存储器102中的信息,结合其硬件执行以下图2所示的方法步骤。
图2示出了本申请实施例提供的篡改程序流攻击的检测方法流程示意图,该流程具体可通过硬件、软件编程或软硬件的结合来实现。
处理器可被配置为执行如图2所示的流程,该处理器中用以执行本申请实施例所提供的篡改程序流攻击的检测的方案的功能模块具体可以通过硬件、软件编程以及软硬件的组合来实现,硬件可包括一个或多个信号处理和/或专用集成电路。
如图2所示,该流程具体包括有以下处理过程:
步骤20:确定被检测进程发生分支预测失败事件时,获取所述被检测进程中发生时刻距离当前时刻由近及远的N条跳转指令。
例如,为了精确定位造成分支预测失败事件的跳转指令,步骤20在具体实施时,可以从LBR中获取已发生的发生时刻距离当前时刻由近及远的N条跳转指令,需要说明的是,N的取值不大于LBR的数量。
步骤21:从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M。
例如,从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令时,可以通过以下过程实现,将所述N条跳转指令中的静态跳转指令和已经发生过的动态跳转指令筛选出来作为所述M条跳转指令。
其中,静态跳转指令是指跳转指令的目标地址在程序未运行时已确定的跳转指令,例如跳转的目标地址已写入代码的。
动态跳转指令是指只有在程序运行之后,跳转的目标地址才能确定的跳转指令,例如,目标地址是根据已执行的其他指令的运行结果计算得到,例如其他两个指令的运行结果相加后确定的。
步骤22:获取所述M条跳转指令的目标地址。
例如,获取所述M条跳转指令的目标地址时,可以根据每条跳转指令所属的指令类型来获取,具体可以针对所述M条跳转指令中的第一跳转指令,若所述第一跳转指令所属的指令类型为无条件转移类、条件转移类、或为调用指令类中的调用子程序类时,则将所述第一跳转指令中包含的地址作为所述第一跳转指令的目标地址;若所述第一跳转指令所属的指令类型为调用指令类中的调用子程序与返回类,则将所述第一跳转指令的下一条指令中包含的地址作为所述第一跳转指令的目标地址;其中,所述第一跳转指令为所述M条跳转指令中的任意一个。
步骤23:若所述M条跳转指令的目标地址未全部包含在预设的白名单中时,可以确定所述被检测进程发生篡改程序流攻击。
进一步的,若所述M条跳转指令的目标地址全部包含在预设的白名单中时,可以确定所述被检测进程运行安全。
可选的,所述预设的白名单可以由下述方式获得:
通过静态扫描的方式读取可执行文件的二进制代码,其中可执行文件是指运行后生成上述被检测进程的文件。利用反汇编工具从所述二进制代码中获取其所包含的跳转指令。获取所述所有的跳转指令中的各跳转指令分别对应的目标地址。将获取到的目标地址存储得到所述预设的白名单。
可选地,为了提高后续匹配的效率,在存储目标地址的过程中,可以采用分类存储的方式。即将获取到的目标地址按照对应的跳转指令所属的指令类型进行分类存储得到所述预设的白名单,所述指令类型包括无条件转移类、条件转移类和调用指令类。所述调用指令类包括调用子程序类和调用子程序与返回类,表1示出了本申请实施例中按照指令类型构建的白名单举例示意图。
表1
需要说明的是,表1中的优先级用于表示跳转指令的执行顺序的优先级,可选的,也可以不包含优先级。表1只是白名单的一种举例性示意,也可以通过其他方式实现,本申请中不做限定。
一种可能的设计中,确定所述M条跳转指令的目标地址是否全部包含在所述预设的白名单中时,可以通过以下过程实现:
检测第一跳转指令的目标地址是否包含在预设的白名单包括的所述第一跳转指令所属的指令类型对应的目标地址集合中,若是,则确定所述第一跳转指令的目标地址包含在所述预设的白名单中;否则,确定所述第一跳转指令的目标地址未包含在所述预设的白名单中,其中,第一跳转指令为M条跳转指令中的任意一个。
例如,假设M条跳转指令包括指令A,指令A的指令类型为无条件转移类。此时,需要查询指令A的目标地址是否包含在白名单包括的无条件转移类对应的目标地址集合中,无需查询白名单中除无条件转移类之外的目标地址集合,从而可以节省查询时间,提高查询效率。
另一种可能的设计中,确定所述M条跳转指令的目标地址是否全部包含在所述预设的白名单中时,可以通过以下过程实现:
获取所述M条跳转指令的优先级,按照优先级从高到低的顺序对M条跳转指令进行排序。依次确定排序结果中各个跳转指令的目标地址是否命中白名单,若均命中白名单,则确定所述M条跳转指令全部包含在白名单中;否则,如果发现一个跳转指令的目标地址不在白名单中,则停止匹配过程,确定所述M条跳转指令未全部包含在白名单中。
通过上述过程可知,本申请实施例中,被检测进程发生分支预测失败事件时,获取发生时刻距离当前时刻由近及远的N条跳转指令,并从N条跳转指令中筛选出M条高危跳转指令。对照预设的白名单对M条高危跳转指令的目标地址进行验证,从而对被检测进程的程序流安全性做出判断,能够高效并安全的检测出被检测进程是否被篡改程序流攻击,与现有技术相比,无需在跳转指令之前***检验代码,避免插桩引入的代码开销,提高代码运行效率。
图3A为检测篡改程序流攻击方法在X86CPU的硬件环境的应用示意图。如图3A所示,X86的CPU架构从逻辑上看,包括运行在底层的硬件驱动层、运行在硬件驱动层之上的操作***,如linux操作***或windows操作***。本申请中的被检测进程和篡改程序流攻击的检测进程在操作***的支持下运行。
图3A中的CPU在运行被检测进程之前需要执行篡改程序流攻击的检测进程的初始化过程,具体可参阅图3B中的步骤301~步骤305。
步骤301:篡改程序流攻击的检测进程的初始化开始。
步骤302:CPU设置分支预测失败事件的中断触发开关处于工作状态。此中断触发开关利用CPU硬件的自身特性,通过配置CPU的中断使能寄存器来打开此特定的中断触发开关,使其处于工作状态。
步骤303:初始化篡改程序流检测进程,使被检测进程发生中断时,可以跳转到此篡改程序流检测进程执行对应的处理。具体方式为:将篡改程序流检测程序代码复制到特定响应中断的地址位置,当中断被触发时,CPU的程序计数器(Program counter,PC)指针便会跳转到此地址位置,执行预先复制的篡改程序流检测程序代码。
步骤304:静态扫描可执行文件得到二进制代码,使用反汇编工具从二进制代码中获取所有的跳转指令,根据不同的跳转指令的指令类型对跳转指令的目标地址进行分类存储,形成白名单。
需要说明是,步骤303和步骤304并不存在先后时间限制,CPU可以先执行步骤303,也可以先执行步骤304,当然也可以同时执行。
步骤305:篡改程序流攻击的检测进程的初始化结束。
当CPU执行被检测进程A时,可以触发篡改程序流攻击的检测进程,可以参阅图3B中步骤311~步骤317。
步骤311:***开始运行被检测进程A。
步骤312:被检测进程A在执行跳转指令时发生分支预测失败事件。
步骤313:触发中断响应,进入篡改程序流攻击的检测进程,包括步骤314~步骤320。
步骤314:从LBR寄存器中获发生时刻距离当前时刻由近及远的N次跳转指令。
步骤315:从N次跳转指令中筛选M个高危跳转指令,M≦N。
具体实施时,可以按照如下三个步骤进行:
A、区分跳转指令是动态跳转指令还是静态跳转指令。
B、将静态跳转指令直接放入高危指令集合中。
C、如果是动态跳转指令,结合存储器中记录的指令的历史发生(taken)集合,查看该动态跳转指令是否在历史上发生过,若未在历史上发生过,则不放入高危指令集合中,否则放入高危指令集合中。taken一般用2bit位记录该分支在历史上发生过的跳转指令的次数
举例如下:
当某次分支预测失败事件发生时,从LBR寄存器中获知此时N=6,其跳转指令的集合为
{1.AJMP 0xffffaaaa
2.AJMP 0xffffbbbb
3.LJMP 0xbbbb0000
4.ACALL 0x89631200 taken=0
5.LCALL 0x89631300 taken=1
6.LCALL 0x78946200 taken=2
}
按照上述A步骤,区分跳转指令是动态跳转指令还是静态跳转指令,其中1、2、3为无条件跳转指令属于静态跳转指令,直接放入高危指令集合中,5和6的taken不为0,放入高危指令集合,4的taken为0,不放入高危指令集合,故高危指令集合的数量M=5,高危指令集合如下:
{1.AJMP 0xffffaaaa
2.AJMP 0xffffbbbb
3.LJMP 0xbbbb0000
5.LCALL 0x89631300 taken=1
6.LCALL 0x78946200 taken=2
}
步骤316:检查M个跳转指令的跳转目标地址是否全部命中白名单,若是则跳转到步骤318;否则跳转到步骤317。
步骤317:检测到被检测进程受到篡改程序流攻击。
步骤318:检测到被检测进程在现阶段运行安全。
步骤319:终止被检测进程的程序运行,上报告警,并采取相应措施。
步骤320:被检测进程的程序继续运行。
需要说明的是,上述被检测进程的运行过程310和篡改程序流检测进程的初始化过程300是两个相对独立的进程,只要保证篡改程序流攻击的检测进程的初始化过程在被检测进程运行之前执行即可。
值得一提的是,图2所示的方法也可以应用在基于无内部互锁流水级的微处理器(Microprocessor without interlocked piped stages,MIPS CPU)或精简指令集处理器,如(Advanced RISC Machines,ARM)系列处理器的硬件环境下,本申请中不做具体限定。
基于上述实施例,本申请实施例提供一种篡改程序流攻击的检测装置。该检测装置可执行本申请前述实施例所描述的方法流程,该检测装置中用以执行本申请前述实施例所描述的方法流程的功能模块可以通过硬件、软件编程以及软硬件的组合来实现,硬件可包括一个或多个信号处理和/或专用集成电路。
图4示出了本申请一些实施例所提供的篡改程序流攻击的检测装置的结构示意图,如图4所示,该检测装置包括:
第一获取单元41,用于确定被检测进程发生分支预测失败事件时,获取所述被检测进程中发生时刻距离当前时刻由近及远的N条跳转指令;
筛选单元42,用于从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M;
第二获取单元43,用于获取所述M条跳转指令的目标地址;
确定单元44,用于在所述M条跳转指令的目标地址未全部包含在预设的白名单中时,确定所述被检测进程发生篡改程序流攻击。
可选的,所述筛选单元42从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令时,具体用于:
将所述N条跳转指令中的静态跳转指令和已经发生过的动态跳转指令筛选出来作为所述M条跳转指令。
可选的,所述确定单元44还用于:
若所述M条跳转指令的目标地址全部包含在预设的白名单中时,确定所述被检测进程运行安全。
可选的,所述检测装置还包括第三获取单元45,所述预设的白名单由所述第三获取单元45由下述方式获得:
通过静态扫描的方式读取可执行文件的二进制代码,所述可执行文件是指运行后生成所述被检测进程的文件;利用反汇编工具从所述二进制代码中获取包含所有的跳转指令;获取所述所有的跳转指令中的各跳转指令分别对应的目标地址;保存获取到的目标地址,从而形成白名单。
可选的,所述第三获取单元45在保存获取到的目标地址,从而形成白名单时,具体用于:将获取到的目标地址按照对应的跳转指令所属的指令类型进行分类存储得到所述预设的白名单,所述指令类型包括无条件转移类、条件转移类和调用指令类,所述调用指令类包括调用子程序类和调用子程序与返回类。
可选的,所述第二获取单元43在获取所述M条跳转指令的目标地址时,具体用于:针对所述M条跳转指令中的第一跳转指令,若所述第一跳转指令所属的指令类型为无条件转移类、条件转移类、或为调用指令类中的调用子程序类时,则将所述第一跳转指令中包含的地址作为所述第一跳转指令的目标地址;若所述第一跳转指令所属的指令类型为调用指令类中的调用子程序与返回类,则将所述第一跳转指令的下一条跳转指令中包含的地址作为所述第一跳转指令的目标地址;其中,所述第一跳转指令为所述M条跳转指令中的任意一个。
可选的,所述白名单包括各指令类型的目标地址集合,所述确定单元44在确定所述M条跳转指令的目标地址是否全部包含在所述预设的白名单中时,具体用于:检测所述第一跳转指令的目标地址是否包含在预设的白名单包括的所述第一跳转指令所属的指令类型对应的目标地址集合中,若是,则确定所述第一跳转指令的目标地址包含在所述预设的白名单中;否则,确定所述第一跳转指令的目标地址未包含在所述预设的白名单中。
基于同一发明构思,本申请一些实施例所提供的篡改程序流攻击的检测装置的解决问题的原理以及有益效果可以参见上述图1所示方法的实施方式以及所带来的有益效果,该检测装置的实施可以参见上述方法实施例的实施,重复之处不再赘述。
基于相同的技术构思,本申请一些实施例还提供了一种篡改程序流攻击的检测设备,该检测设备可用于执行本申请前述实方法施例所描述的篡改程序流攻击的检测流程。该检测设备的硬件实现可参考图1及其相关描述。其中:
输入接口101,用于接收可执行文件。
存储器102,用于存储指令和数据。
处理器103用于读取所述存储器102中存储的指令和数据后,执行以下操作:运行可执行文件,生成被检测进程,确定被检测进程发生因程序跳转而引发的分支预测失败事件时,获取所述被检测进程中已发生时刻距离当前时刻由近及远的N条跳转指令;从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M;获取所述M条跳转指令的目标地址;若所述M条跳转指令的目标地址未全部包含在预设的白名单中时,确定所述被检测进程发生篡改程序流攻击。
可选的,所述处理器103从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令时,具体用于:
将所述N条跳转指令中的静态跳转指令和已经发生过的动态跳转指令筛选出来作为所述M条跳转指令。
可选的,所述处理器103还用于:在所述M条跳转指令的目标地址全部包含在预设的白名单中时,确定所述被检测进程运行安全。
可选的,所述预设的白名单由所述处理器103由下述方式获得:通过静态扫描的方式读取可执行文件的二进制代码,所述可执行文件是指运行后生成所述被检测进程的文件;利用反汇编工具从所述二进制代码中获取包含所有的跳转指令;获取所述所有的跳转指令中的各跳转指令分别对应的目标地址;保存获取到的目标地址,从而形成白名单。
可选的,所述处理器103在保存获取到的目标地址,从而形成白名单时,具体用于:
将获取到的目标地址按照对应的跳转指令所属的指令类型进行分类存储得到所述预设的白名单,所述指令类型包括无条件转移类、条件转移类和调用指令类,所述调用指令类包括调用子程序类和调用子程序与返回类。
可选的,所述处理器103在获取所述M条跳转指令的目标地址时,具体用于:
针对所述M条跳转指令中的第一跳转指令,若所述第一跳转指令所属的指令类型为无条件转移类、条件转移类、或为调用指令类中的调用子程序类时,则将所述第一跳转指令中包含的地址作为所述第一跳转指令的目标地址;若所述第一跳转指令所属的指令类型为调用指令类中的调用子程序与返回类,则将所述第一跳转指令的下一条跳转指令中包含的地址作为所述第一跳转指令的目标地址;其中,所述第一跳转指令为所述M条跳转指令中的任意一个。
一种可能的设计中,所述白名单包括各指令类型的目标地址集合,所述处理器103在确定所述M条跳转指令的目标地址是否全部包含在所述预设的白名单中时,具体用于:
检测所述第一跳转指令的目标地址是否包含在预设的白名单包括的所述第一跳转指令所属的指令类型对应的目标地址集合中,若是,则确定所述第一跳转指令的目标地址包含在所述预设的白名单中;否则,确定所述第一跳转指令的目标地址未包含在所述预设的白名单中。
基于相同的技术构思,本申请一些实施例所提供的篡改程序流攻击的检测设备的解决问题的原理以及有益效果可以参见上述图2所示方法的实施方式以及所带来的有益效果,该检测设备的实施可以参见上述方法实施例的实施,重复之处不再赘述。
上述实施例可以全部或部分地通过软件、硬件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、双绞线或光纤)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如光盘)、或者半导体介质(例如固态硬盘)等。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求的范围之内,则本申请也意图包括这些改动和变型在内。
Claims (8)
1.一种篡改程序流攻击的检测方法,其特征在于,包括:
确定被检测进程发生分支预测失败事件时,获取所述被检测进程中发生时刻距离当前时刻由近及远的N条跳转指令;
从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M;
获取所述M条跳转指令的目标地址;
若所述M条跳转指令的目标地址未全部包含在预设的白名单中时,确定所述被检测进程发生篡改程序流攻击;
所述从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,包括:
将所述N条跳转指令中的静态跳转指令和已经发生过的动态跳转指令筛选出来作为所述M条跳转指令。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
若所述M条跳转指令的目标地址全部包含在预设的白名单中时,确定所述被检测进程运行安全。
3.如权利要求1-2任一项所述的方法,其特征在于,所述预设的白名单由下述方式获得:
通过静态扫描的方式读取可执行文件的二进制代码,所述可执行文件是指运行后生成所述被检测进程的文件;
利用反汇编工具从所述二进制代码中获取包含所有的跳转指令;
获取所述所有的跳转指令中的各跳转指令分别对应的目标地址;
保存获取到的目标地址,从而形成白名单。
4.如权利要求3所述的方法,其特征在于,获取所述M条跳转指令的目标地址,包括:
针对所述M条跳转指令中的第一跳转指令,若所述第一跳转指令所属的指令类型为无条件转移类、条件转移类、或为调用指令类中的调用子程序类时,则将所述第一跳转指令中包含的地址作为所述第一跳转指令的目标地址;
若所述第一跳转指令所属的指令类型为调用指令类中的调用子程序与返回类,则将所述第一跳转指令的下一条跳转指令中包含的地址作为所述第一跳转指令的目标地址;
其中,所述第一跳转指令为所述M条跳转指令中的任意一个。
5.一种篡改程序流攻击的检测装置,其特征在于,包括:
第一获取单元,用于确定被检测进程发生分支预测失败事件时,获取所述被检测进程中发生时刻距离当前时刻由近及远的N条跳转指令;
筛选单元,用于从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令,N和M均为正整数,且N不小于M;
第二获取单元,用于获取所述M条跳转指令的目标地址;
确定单元,用于在所述M条跳转指令的目标地址未全部包含在预设的白名单中时,确定所述被检测进程发生篡改程序流攻击;
所述筛选单元从所述N条跳转指令中筛选出符合预设高危条件的M条跳转指令时,具体用于:
将所述N条跳转指令中的静态跳转指令和已经发生过的动态跳转指令筛选出来作为所述M条跳转指令。
6.如权利要求5所述的装置,其特征在于,所述确定单元还用于:
在所述M条跳转指令的目标地址全部包含在预设的白名单中时,确定所述被检测进程运行安全。
7.如权利要求5-6任一项所述的装置,其特征在于,所述装置还包括第三获取单元,所述预设的白名单由所述第三获取单元由下述方式获得:
通过静态扫描的方式读取可执行文件的二进制代码,所述可执行文件是指运行后生成所述被检测进程的文件;
利用反汇编工具从所述二进制代码中获取包含所有的跳转指令;
获取所述所有的跳转指令中的各跳转指令分别对应的目标地址;
保存获取到的目标地址,从而形成白名单。
8.如权利要求7所述的装置,其特征在于,所述第二获取单元在获取所述M条跳转指令的目标地址时,具体用于:
针对所述M条跳转指令中的第一跳转指令,若所述第一跳转指令所属的指令类型为无条件转移类、条件转移类、或为调用指令类中的调用子程序类时,则将所述第一跳转指令中包含的地址作为所述第一跳转指令的目标地址;
若所述第一跳转指令所属的指令类型为调用指令类中的调用子程序与返回类,则将所述第一跳转指令的下一条跳转指令中包含的地址作为所述第一跳转指令的目标地址;
其中,所述第一跳转指令为所述M条跳转指令中的任意一个。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710832391.7A CN109508536B (zh) | 2017-09-15 | 2017-09-15 | 一种篡改程序流攻击的检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710832391.7A CN109508536B (zh) | 2017-09-15 | 2017-09-15 | 一种篡改程序流攻击的检测方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109508536A CN109508536A (zh) | 2019-03-22 |
CN109508536B true CN109508536B (zh) | 2020-12-15 |
Family
ID=65744872
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710832391.7A Active CN109508536B (zh) | 2017-09-15 | 2017-09-15 | 一种篡改程序流攻击的检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109508536B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112306841B (zh) * | 2019-07-26 | 2022-09-09 | 比亚迪股份有限公司 | 轨道业务的自动化测试方法、装置及设备 |
CN111414321B (zh) * | 2020-02-24 | 2022-07-15 | 中国农业大学 | 一种基于动态映射机制的cache防护方法及装置 |
CN111413565B (zh) * | 2020-04-16 | 2020-10-23 | 西华大学 | 一种可识别量测篡改攻击的智能电网故障诊断方法 |
CN111552959B (zh) * | 2020-06-18 | 2023-08-29 | 南方电网科学研究院有限责任公司 | 一种程序特征序列生成方法和装置 |
CN111552960B (zh) * | 2020-06-18 | 2024-01-05 | 南方电网科学研究院有限责任公司 | 一种程序完整性的动态度量方法和装置 |
CN111552958B (zh) * | 2020-06-18 | 2024-01-19 | 南方电网科学研究院有限责任公司 | 一种程序运行特征提取方法和装置 |
CN111898120B (zh) * | 2020-06-29 | 2023-10-10 | 中国科学院信息工程研究所 | 控制流完整性保护方法及装置 |
CN112182579B (zh) * | 2020-08-28 | 2024-05-28 | 杭州数梦工场科技有限公司 | 进程名单生成方法及装置、异常进程检测方法及装置 |
CN112199669B (zh) * | 2020-09-25 | 2022-05-17 | 杭州安恒信息技术股份有限公司 | 一种检测rop攻击的方法和装置 |
CN112417493A (zh) * | 2020-10-15 | 2021-02-26 | 北京八分量信息科技有限公司 | 一种基于可信执行环境tee的存储调用速度提升方法 |
CN114491506A (zh) * | 2020-11-13 | 2022-05-13 | 奇安信科技集团股份有限公司 | 行为控制方法、装置、电子设备及存储介质 |
CN112596792B (zh) * | 2020-12-17 | 2022-10-28 | 海光信息技术股份有限公司 | 分支预测方法、装置、介质及设备 |
CN113760366B (zh) * | 2021-07-30 | 2024-02-09 | 浪潮电子信息产业股份有限公司 | 一种条件跳转指令的处理方法、***及相关装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4358648B2 (ja) * | 2004-02-18 | 2009-11-04 | 日本電信電話株式会社 | スタックスマッシング攻撃防御方法、スタックスマッシング攻撃防御装置及びスタックスマッシング攻撃防御プログラム |
CN101206692B (zh) * | 2006-12-20 | 2011-04-27 | 联想(北京)有限公司 | 检测进程的方法及设备 |
CN103632087B (zh) * | 2012-08-21 | 2017-10-13 | 腾讯科技(深圳)有限公司 | 保护进程的方法和装置 |
CN105260659B (zh) * | 2015-09-10 | 2018-03-30 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
-
2017
- 2017-09-15 CN CN201710832391.7A patent/CN109508536B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109508536A (zh) | 2019-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109508536B (zh) | 一种篡改程序流攻击的检测方法和装置 | |
US8117660B2 (en) | Secure control flows by monitoring control transfers | |
KR101759008B1 (ko) | 코드 실행의 프로파일링 | |
JP6494744B2 (ja) | リターン指向プログラミング攻撃の透過的な検出及び抽出 | |
CN110048997B (zh) | 处理故障注入攻击的安全***和方法 | |
US20170116418A1 (en) | Hardware heuristic-driven binary translation-based execution analysis for return-oriented programming malware detection | |
US11363058B2 (en) | Detecting execution of modified executable code | |
CN109643346B (zh) | 控制流完整性 | |
US10395033B2 (en) | System, apparatus and method for performing on-demand binary analysis for detecting code reuse attacks | |
US20120179898A1 (en) | System and method for enforcing software security through cpu statistics gathered using hardware features | |
US10650147B2 (en) | Method and apparatus for ensuring control flow integrity | |
Zhang et al. | Exploring branch predictors for constructing transient execution trojans | |
Pfaff et al. | Learning how to prevent return-oriented programming efficiently | |
US10706180B2 (en) | System and method for enabling a malware prevention module in response to a context switch within a certain process being executed by a processor | |
Zhou et al. | Hardware-based on-line intrusion detection via system call routine fingerprinting | |
US11126721B2 (en) | Methods, systems and apparatus to detect polymorphic malware | |
US9495138B1 (en) | Scheme for verifying the effects of program optimizations | |
US20090125728A1 (en) | Security method of system by encoding instructions | |
Choudhari et al. | SpecDefender: Transient Execution Attack Defender using Performance Counters | |
JP7383750B2 (ja) | 故障注入攻撃を検出する改善されたシステムと方法 | |
EP3535681B1 (en) | System and method for detecting and for alerting of exploits in computerized systems | |
Taram et al. | Fast and efficient deployment of security defenses via context sensitive decoding | |
JP2023554266A (ja) | コンピューティング・システムにおけるソフトウェア・ポインタ認証のためのハードウェア・サポート |
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 |