CN111898119A - 控制流完整性保护方法、装置、设备及存储介质 - Google Patents

控制流完整性保护方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN111898119A
CN111898119A CN202010599864.5A CN202010599864A CN111898119A CN 111898119 A CN111898119 A CN 111898119A CN 202010599864 A CN202010599864 A CN 202010599864A CN 111898119 A CN111898119 A CN 111898119A
Authority
CN
China
Prior art keywords
current
target address
program
control flow
indirect branch
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.)
Granted
Application number
CN202010599864.5A
Other languages
English (en)
Other versions
CN111898119B (zh
Inventor
孟丹
陈李维
李锦峰
佘才睿
史岗
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN202010599864.5A priority Critical patent/CN111898119B/zh
Publication of CN111898119A publication Critical patent/CN111898119A/zh
Priority to EP21182170.7A priority patent/EP3866037B1/en
Priority to US17/361,270 priority patent/US11704404B2/en
Application granted granted Critical
Publication of CN111898119B publication Critical patent/CN111898119B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明实施例提供一种控制流完整性保护方法、装置、设备及存储介质,所述方法包括:将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同;将当前间接分支指令的当前目标地址的预设位改写为与合法目标地址的预设位相同,以使待保护程序在当前目标地址被篡改时终止执行。本发明实施例通过将当前间接分支指令的所有合法目标地址的预设位更改至相同;并将当前目标地址的预设位改写为与合法目标地址的预设位一致,用预设位覆盖操作替代传统的标签比对,减小性能开销,提高攻击防御效率;使程序被篡改时由于目标指令的错误而触发异常终止执行,实现了细粒度控制流完整性保护,提高了控制流完整性保护的安全性与可靠性。

Description

控制流完整性保护方法、装置、设备及存储介质
技术领域
本发明涉及通信领域,尤其涉及一种控制流完整性保护方法、装置、设备及存储介质。
背景技术
由于冯诺依曼结构将指令作为数据存在内存中执行,所以早期攻击者会将恶意代码作为数据注入内存,然后劫持控制流执行注入的恶意代码。现在的操作系统普遍采用了不可执行位技术,即标记每个内存页是可读,可写还是可执行。程序的代码段会被标记为可执行但不可写,而数据段则会被标记为不可执行。这样攻击者的恶意代码由于是作为数据注入内存的,所以被标记为不可执行,当攻击者试图执行恶意代码时则会因违法内存页标记报错。为了绕过不可执行位保护技术,研究者提出了代码重用攻击,即利用程序自身的代码片段实现各个小功能,再利用间接分支指令将代码片段链接起来实现完整的攻击,因为代码片段本身是程序自己的代码,都标记为可执行,所以可以绕过不可执行位保护。
现有的控制流完整性保护方法(Control-flow Integrity,CFI)可以有效防御代码重用攻击。控制流完整性保护方法通过静态或者动态分析获取程序的合法控制流图,在程序运行时检查控制流是否符合控制流图,如果符合则说明程序行为合法,不符合则说明存在攻击行为。现有的基于软件的CFI技术会引入巨大的性能开销,比如原始的CFI最大开销为45%。其主要原因是需要比较操作,耗时较长。现在应用的粗粒度CFI技术普遍为粗粒度CFI,对间接转移的目的地址之间不进行区分。仍然给攻击者留下了很大的攻击空间。且硬件实现对于老的处理器而言无法实现安全保护。
因此,如何提出一种在使用时性能开销较小且仍然可以实现安全保护的控制流完整性保护方法,成为一个亟需解决的问题。
发明内容
针对现有存在的问题,本发明实施例提供一种控制流完整性保护方法、装置、设备及存储介质。
第一方面,本发明实施例提供的控制流完整性保护方法,包括:
将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同;
将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行。
可选地,所述将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行,具体包括:
将所述当前目标地址的预设位改写至与所述当前间接分支指令的标签相同,以使所述待保护程序在所述当前目标地址被篡改时,所述当前间接分支无法跳转至所述合法目标地址,所述待保护程序终止执行;
其中,所述标签为所述当前间接分支指令的合法目标地址的预设位。
可选地,所述将所述当前目标地址的预设位改写至与所述当前间接分支指令的标签相同,具体包括:
在所述当前间接分支指令处进行代码插桩操作;
其中,所述代码用于将所述当前目标地址的预设位改写至与所述标签相同。
可选地,所述将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同,具体包括:
对所述所有合法目标地址分别进行空指令填充操作,以使所述所有合法目标地址预设位变大,直至与所述当前间接分支指令的标签相等。
可选地,所述当前间接分支指令的标签是随机预设的,其中,所述的当前间接分支指令的标签与所述待保护程序中其他间接分支指令的标签不同。
可选地,所述合法目标地址的预设位为所述合法目标地址的低字节,所述当前目标地址的预设位为所述当前目标地址的低字节。
可选地,所述将待保护程序的控制流中的间接分支指令的所有合法目标地址进行重排之前,所述方法还包括:
对所述待保护程序进行静态分析,获取所述待保护程序的控制流。
第二方面,本发明实施例提供一种控制流完整性保护装置,包括:
更改模块,用于将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同;
改写模块,用于将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面提供的控制流完整性保护方法的步骤。
第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面提供的控制流完整性保护方法的步骤。
本发明实施例提供的控制流完整性保护方法、装置、设备及存储介质,通过将当前间接分支指令的所有合法目标地址的预设位更改至相同;并将当前间接分支指令的当前目标地址的预设位改写为与合法目标地址的预设位一致,用预设位覆盖操作替代了传统的标签比对,减小了性能开销,提高攻击防御效率;并且使得待保护程序在当前目标地址被篡改时,会由于目标指令的错误而触发异常终止执行,实现了细粒度控制流完整性保护,提高了控制流完整性保护的安全性与可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中待保护程序的控制流中的合法路径示意图;
图2是本发明实施例中粗粒度控制流完整性保护效果示意图;
图3是本发明实施例中细粒度控制流完整性保护效果示意图;
图4为本发明一实施例提供的控制流完整性保护方法流程示意图;
图5是本发明一实施例提供的合法目标地址空指令填充操作流程图;
图6为本发明一实施例提供的控制流完整性保护方法原理示意图;
图7为本发明另一实施例提供的控制流完整性保护方法原理示意图;
图8为本发明一实施例提供的控制流完整性保护方法效果示意图;
图9为本发明一实施例提供的控制流完整性保护装置;
图10为本发明一实施例提供的电子设备组成示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明各实施例用到的几个背景知识,说明如下:
间接分支:一个间接分支(又称跳计算,间接的跳跃和寄存器间接跳转)是一种程序控制目前在一些机器语言指令集的指令。指定在直接分支,执行下一条指令的地址,而不是参数指定的地址位于。因此,一个例子是“在间接R1寄存器跳跃”,这将意味着,今后将要执行的指令的地址,其值在寄存器R1。地址将跃升至未知地址,直到指令执行。间接分支也可以依赖于内存位置的值。
内存漏洞:指程序员在软件编写的过程中,对内存的操作上有时间上或者空间上的设计失误,产生使得程序可能做出违反程序本身设计的行为的问题。攻击者利用程序的内存漏洞,可以构造出各种攻击,执行恶意行为。
现在的操作系统普遍采用了不可执行位技术,即标记每个内存页是可读,可写还是可执行。程序的代码段会被标记为可执行但不可写,而数据段则会被标记为不可执行。这样攻击者的恶意代码由于是作为数据注入内存的,所以被标记为不可执行,当攻击者试图执行恶意代码时则会因违法内存页标记报错。
代码重用攻击(code-reuseattack,CRA):指利用程序自身的代码片段实现各个小功能,再利用间接分支指令将代码片段链接起来实现完整的攻击,这种攻击主要有ROP攻击及其变种,如JOP攻击。例如,攻击者可以确定地执行一条指令jmp RAX,这是一条间接跳转指令。如果攻击者可以控制RAX的值,就可以劫持控制流跳转到任意地址的指令序列。如果下一条指令序列也以另一个间接分支结尾,还可以用同样的方法继续跳转到其他任意地址序列。每一条间接分支都可以是不同的种类或者单一种类:间接调用(例如callRAX)间接跳转(例如jmp RAX)返回指令(return,从栈上弹出一个地址并跳转)。
研究者发现控制流完整性保护(Control-flow Integrity,CFI)可以有效防御代码重用攻击。控制流完整性保护通过静态或者动态分析获取程序的合法控制流图,在程序运行时检查控制流是否符合控制流图,如果符合则说明程序行为合法,不符合则说明存在攻击行为。
CFI可以大致分为粗粒度和细粒度:细粒度指每个(间接)的控制流的源和目的地址都使用标记。例如a到b,c到d,做出细致的区分。而粗粒度一般指只标记一个代码片段可以被作为间接控制流转移的目的地址。如果a到b,c到d是合法的,那么b和d会被标记为合法的目的。而a到d和c到b在粗粒度CFI中也是合法的。因此可见,细粒度的CFI是更加安全的。而粗粒度的CFI实现更加简单。
图1是本发明实施例中待保护程序的控制流中的合法路径示意图,如图1所示,此待保护程序的控制流中的合法路径为A到B,A到C,B到D,C到D,及C到E。
图2是本发明实施例中粗粒度控制流完整性保护效果示意图,如图2所示,由于粗粒度的方法只识别合法目标,而在这个待保护程序的控制流图中B,C,D和E都是合法目标,因此当程序受到攻击,比如将B的跳转路径篡改为不合法路径201或不合法路径202时,即把B的目标地址篡改为C或E时,程序会因为目标C或E是合法的,从而误认为路径201或路径202合法,即此方法没有实现保护。
图3是本发明实施例中细粒度控制流完整性保护效果示意图,如图3所示,由于每个间接分支指令只有一个可以用来放标签的位置,因此当有两个从C出发的合法路径时(即C到D,及C到E),D和E只能用同样一套check7,均与C的set7对应,才可以实现正常的C到D及C到E的跳转,但是B到D也是合法的,因此B就只能也用和check7配套的set7;当程序受到攻击,比如将B的跳转路径篡改为不合法路径301时,但是由于C的check采用的是与B的set7不对应的check5,因此程序会认为路径301不合法,即实现了保护;但如果程序受到的攻击为将B的跳转路径篡改为不合法路径302时,由于E的check采用的是与B的set7相对应的check7,因此程序会误认为路径302合法,即此方法没有实现保护。
因此,容易理解的是,由于普通细粒度CFI需要设置标签寄存器(set)和检查标签寄存器(check),且仅可以防御其中一个攻击,但容易看出,如果每个位置只有单一的标签,C、D及E就需要共享标签,则会有一个攻击无法防御。目前llvm编译器和gcc编译器都支持细粒度CFI,其基本原理与前述基本一致。
目前硬件处理器厂商也开始应用CFI技术对计算机安全进行保护,比如Intel的CET技术。该技术是典型的粗粒度CFI,用相同指令ENDBRANCH标记了所有的合法的跳转目标的入口。当一个间接转移发生时,处理器会检查转移的目的地址是否是ENDBRANCH指令,如果不是,则认为发生了攻击。ARM的BTI技术设计思路也和CET类似。
基于软件实现了低性能开销的细粒度CFI技术,相较于硬件CFI,解决了兼容性和粗粒度不够安全的问题。但是基于软件的CFI技术会引入巨大的性能开销;且现在应用的CFI技术普遍为粗粒度CFI,对间接转移的目的地址之间不进行区分。仍然给攻击者留下了很大的攻击空间。且硬件实现对于老的处理器而言无法实现安全保护。
基于上述特征,为了克服现在应用的CFI技术无法实现安全保护的问题,本发明各实施例的主要构思是,利用间接分支合法目标地址的预设位作为标签,可以省去在跳转目标前插入标签的操作;可以理解的是,间接分支合法目标地址为间接分支所有可能跳转的合法目标所在地址。同时通过采用标签直接改写跳转目的地址的低位,可以省去间接分支处的比较,提高性能。基于软件实现了低性能开销的细粒度CFI技术,相较于硬件CFI,可以解决兼容性和粗粒度不够安全的问题。
以下结合多个实施例对本发明进行详细介绍。
图4为本发明一实施例提供的控制流完整性保护方法流程示意图,包括:
步骤400,将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同;
具体地,当前间接分支指令是指待保护程序中将执行的间接分支指令;本实施例中,可以将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同。即利用间接分支指令对应的合法跳转目标所在的地址的预设位作为标签,设计了代码重排机制,对指令进行静态分析并重排操作,使得同一组合法目标地址的预设位(标签)一致,便于检查待保护程序是否被篡改。
具体地,若预设位为地址低位,则利用间接分支指令对应的合法跳转目标所在的地址低位作为标签,设计了代码重排机制,对指令进行静态分析并重排,使得同一组合法跳转目标的地址低位(标签)一致,便于检查待保护程序是否被篡改。
步骤401,将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行。
具体地,本实施例中改写了传统CFI在间接分支指令处的检查逻辑,传统CFI采用比较操作来对比跳转目标的标签是否合法,而本实施例中因为采用合法目标地址预设位作为标签,所以可以直接将合法目标地址覆盖到当前目标地址中,即用标签直接改写当前目标地址的预设位,省去了间接分支处的比较,提高了效率,且用预设位覆盖操作替代了传统的标签比对,减小了性能开销。
本实施例中,由于使用已经更改为相同的合法目标地址预设位作为标签,并用标签直接改写当前目标地址的预设位,若程序正常执行的话,由于合法目标地址以及当前将跳转的地址的预设位一致,因此程序正常执行。但如果间接分支指令的当前目标地址被攻击者篡改,那么因为攻击者篡改后的地址预设位也会被改写为与合法目标地址一致,而其他位却与合法目标地址不一致,因此就不会跳转到合法目标地址,又因为地址其他位与攻击者希望构造攻击的跳转目标地址一致,而被改写过的预设位与攻击者希望构造攻击的跳转目标地址不一致,因此也不会跳转到攻击者篡改的非法目标地址,程序也会由于目标指令的错误而自行触发异常终止执行。
例如,若存储跳转目标的jmp ecx预设位为地址低位,使用已经更改为相同的合法目标地址预设位0xAB作为标签,在jmp ecx中的目的地址被攻击者篡改后,因为攻击者篡改后的地址低位也会被改写为0xAB,因而就不会跳转到攻击者希望构造攻击的跳转目标,此时的当前目标地址不与合法目标地址完全一致,程序会由于目标指令的错误而自行触发异常终止执行。因此由于目标指令的错误,间接分支跳转至错误的当前目标地址,跳转地址不为endbr,程序可以认为发生了攻击。可以理解的是,本实施例提供的方法可以防御所有攻击。
本发明实施例提供的控制流完整性保护方法,通过将当前间接分支指令的所有合法目标地址的预设位更改至相同;并将当前间接分支指令的当前目标地址的预设位改写为与合法目标地址的预设位一致,用预设位覆盖操作替代了传统的标签比对,减小了性能开销,提高攻击防御效率;并且使得待保护程序在当前目标地址被篡改时,会由于目标指令错误而触发异常终止执行,实现了细粒度控制流完整性保护,提高了控制流完整性保护的安全性与可靠性。
可选地,在上述实施例的基础上,所述将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行,具体包括:
将所述当前目标地址的预设位改写至与所述当前间接分支指令的标签相同,以使所述待保护程序在所述当前目标地址被篡改时,所述当前间接分支无法跳转至所述合法目标地址,所述待保护程序终止执行;
具体地,为了使间接分支指令在执行时正常跳转至当前目标地址,可以把当前目标地址的预设位改写至与当前间接分支指令的标签相同,而若是此时程序受到了攻击,当前目标地址被篡改,即目标指令错误,则在预设位被修改至与标签相同后,程序会因为当前间接分支并未跳转至所述合法目标地址,即跳转地址不为endbr,程序可以认为发生了攻击自行触发异常终止执行,从而实现对程序的保护。
其中,所述标签为所述当前间接分支指令的合法目标地址的预设位。
具体地,本实施例中,利用间接分支的合法目标地址的预设位作为标签,可以省去细粒度CFI技术中在跳转目标前插入标签的操作,大大提高检查效率。
可选地,在上述实施例的基础上,所述将所述当前目标地址的预设位改写至与所述当前间接分支指令的标签相同,具体包括:
在所述当前间接分支指令处进行代码插桩操作;
具体地,在实现将当前目标地址的预设位改写至与当前间接分支指令的标签相同时,可以采用代码插桩的方式。
其中,所述代码用于将所述当前目标地址的预设位改写至与所述标签相同。
具体地,在进行代码插桩操作时,可以插入两行用于改写当前目标地址的预设位至与标签相同的代码;例如,若标签为0xAB,预设位为低位,则可以直接插入AND ecx,0xFFFFFF00;XOR ecx,0xFFFFFFAB,这两条指令可以使得将当前目标地址的预设位改写至与标签一致,均为0xAB;即把存储跳转目标的jmp ecx的预设位直接改写为0xAB,与标签对应。
可选地,在上述实施例的基础上,所述将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同,具体包括:
对所述所有合法目标地址分别进行空指令填充操作,以使所述所有合法目标地址预设位变大,直至与所述当前间接分支指令的标签相等。
具体地,图5是本发明一实施例提供的合法目标地址空指令填充操作流程图,如图5所示,X代表任意地址,code是程序原始的指令,endbr是标记,padding是本实施例中填充的空指令,例如,若预设位为地址低位,可以假设原合法目标地址低位是f0,标签为f4,因此在前面填充四个空指令,可以使合法目标地址低位变为f4。可以理解的是,实际应用时会采用特定规则来避免添加的padding太长。
可选地,在上述实施例的基础上,所述当前间接分支指令的标签是随机预设的,其中,所述的当前间接分支指令的标签与所述待保护程序中其他间接分支指令的标签不同。
具体地,标签为当前间接分支指令的合法目标地址的预设位,在具体设置合法目标地址的预设位时,可以随机进行设置,只需要保持当前间接分支指令的标签与待保护程序中其他间接分支指令的标签不同,避免跳转目标地址被改写时出现重复,导致跳转错误的情况。
可以理解的是,在随机设置当前间接分支指令的标签时,可以将标签大小设置为比原所有合法目标地址预设位略大,且还可以与原所有合法目标地址的预设位尽量接近,避免在对所有合法目标地址分别进行空指令填充操作时,空指令插入过多,影响程序执行效率。
可选地,在上述实施例的基础上,所述合法目标地址的预设位为所述合法目标地址的低字节,所述当前目标地址的预设位为所述当前目标地址的低字节。
具体地,为了在对所述所有合法目标地址分别进行空指令填充操作时,使所有合法目标地址预设位有规律地变大,且更易实现,合法目标地址的预设位可以为合法目标地址的低字节,因此在对所述所有合法目标地址分别进行空指令填充操作时,每填充操作一次,合法目标地址低位加一,可以使得判断合法目标地址是否预设位变大至与当前间接分支指令的标签相等时,更加容易确定。
可以理解的是,本实施例中,所有的地址低位均指地址的低字节。
可选地,在上述实施例的基础上,所述将待保护程序的控制流中的间接分支指令的所有合法目标地址进行重排之前,所述方法还包括:
对所述待保护程序进行静态分析,获取所述待保护程序的控制流。
具体地,程序代码的静态分析就是通过检查程序的源代码来推测程序运行时的行为信息。静态分析除了能够检查指定程序中存在的错误和安全漏洞以外,同时还能够将其思想加入到代码编译器中,用于程序的优化。将静态分析用于优化最关键的技术点就是流分析技术。流分析技术包括控制流分析。
控制流图(Control Flow Graph,CFG)也叫控制流程图,是一个过程或程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序执行过程中会遍历到的所有路径。它用图的形式表示一个过程内所有基本块执行的可能流向,也能反映一个过程的实时执行过程。控制流图中每个在图形中的节点代表一个基本块,跳跃目标以一个块开始,并以一个块结束。
本实施例中,若要通过用低位覆盖操作替代传统的标签实现对程序的保护,首先就需要获得所有合法路径,即首先就需要进行静态分析,获取待保护程序的控制流。
本发明实施例提供的控制流完整性保护方法,通过将当前间接分支指令的所有合法目标地址的预设位更改至相同;并将当前间接分支指令的当前目标地址的预设位改写为与合法目标地址的预设位一致,用预设位覆盖操作替代了传统的标签比对,减小了性能开销,提高攻击防御效率;并且使得待保护程序在当前目标地址被篡改时,会由于目标指令的错误而触发异常终止执行,实现了细粒度控制流完整性保护,提高了控制流完整性保护的安全性与可靠性。
图6为本发明一实施例提供的控制流完整性保护方法原理示意图,如图6所示,首先可以利用现有的静态分析工具,获取需要保护的程序的控制流图,进而得到jmp ecx指令有两个合法的跳转目标,即合法跳转目标601与合法跳转目标602。本实施例中,可以使jmpecx指令所有可能的合法目标地址预设位保持一致,即合法跳转目标601与合法跳转目标602的地址预设位更改为一致,因而要对合法跳转目标601与合法跳转目标602进行地址重排操作,具体地,对合法跳转目标601与合法跳转目标602分别进行空指令填充操作,以使合法跳转目标601与合法跳转目标602预设位变大,可以理解的是,插入填充的空指令的数量可以是随机个,只要保持合法跳转目标601与合法跳转目标602地址预设位一致即可。
本实施中,可以用合法目标地址低位作为预设位,同时将合法目标地址低位作为标签,经过合法目标地址重排后,合法跳转目标601和602的地址低位均为0xAB,即以0xAB作为标签。在jmp ecx处插入代码,相较于传统CFI的比较操作,本实施例使用低位覆盖的方法,直接插入AND ecx,0xFFFFFF00;XOR ecx,0xFFFFFFAB;两条指令,将ecx中存储的当前目标地址低位直接改写为0xAB,与标签对应。程序正常执行的话则不会有任何影响。如果ecx中的目的地址被攻击者篡改,那么因为攻击者篡改的地址低位也会被改写为0xAB,因而就不会跳转到攻击者希望构造攻击的跳转目标,程序也会由于目标指令的错误而自行触发异常终止执行。
图7为本发明另一实施例提供的控制流完整性保护方法原理示意图,如图7所示,图7中控制流图的合法跳转路径为路径701:A到B,可以假设预设位为低位,因此可以将B的地址低位更改为0x5,此时,A的当前跳转地址也需要被改写为0x5,如此便可实现从A跳转至B;可以理解的是,本实施例中,由于路径702:A到C,并不为合法路径,因此为了使A无法跳转到C,可以要求A的合法目标地址低位与C的地址低位不统一,如图7所示,C的地址低位为0x0。
图8为本发明一实施例提供的控制流完整性保护方法效果示意图,如图8所示,可以把B的合法目标地址低位更改成0x07,即把直接0x07作为标签,因此不存在受到set只有一位的限制,可以将B的合法目标地址也就是D的地址低位更改为0x07;因此在程序执行时由于B的当前目标地址也会改写为与标签一致,为0x07,在跳转过程中可以直接跳转到D。
如果程序受到攻击,B的当前目标地址被篡改了,例如变成C中的某一个地址,即被篡改为跳转路径801,可以理解的是,在B的目标地址被篡改后,进行跳转时会将当前目标地址低位改写为0x07,即攻击者篡改的跳转路径801的地址低位会被改写为0x07,而C本身不为B的合法路径,在进行合法目标地址重排的时候C的地址低位不会更改成与B的合法目标地址低位一致的0x07,而是保持原地址不变,即与B的低位被改写为0x07的当前目标地址不一致,因此跳转路径801会发生异常,即B无法按照攻击者希望的路径801进行跳转,即不会跳转到C,可以理解的是,endbr在程序中的作用为验证目标地址是期望的跳转目标。
如果程序受到攻击,B的当前目标地址被篡改了,例如变成D中的某一个地址,即被篡改为跳转路径802,可以理解的是,在B的目标地址被篡改后,进行跳转时会将当前目标地址低位改写为0x07,即攻击者篡改的跳转路径802的地址低位会被改写为0x07,而D本身不为B的合法路径,在进行合法目标地址重排的时候D的地址低位不会更改成与B的合法目标地址低位一致的0x07,而是保持原地址不变,即与B的低位被改写为0x07的当前目标地址不一致,因此跳转路径802会发生异常,即B无法按照攻击者希望的路径802进行跳转,即不会跳转到D。可以理解的是,本实施例中的控制流完整性保护方法可以抵御所有攻击。
图9为本发明一实施例提供的控制流完整性保护装置,包括:更改模块901及改写模块902。
其中,更改模块901用于将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同;
改写模块902用于将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行。
具体地,控制流完整性保护装置通过更改模块901将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同后;通过改写模块902将当前间接分支指令的当前目标地址的预设位也改写为与合法目标地址的预设位一致,以使待保护程序在所述当前目标地址被篡改时,可以因为目标指令错误而终止执行。
本发明实施例提供的控制流完整性保护装置,通过将当前间接分支指令的所有合法目标地址的预设位更改至相同;并将当前间接分支指令的当前目标地址的预设位改写为与合法目标地址的预设位一致,用预设位覆盖操作替代了传统的标签比对,减小了性能开销,提高攻击防御效率;并且使得待保护程序在当前目标地址被篡改时,会由于目标指令的错误而触发异常终止执行,实现了细粒度控制流完整性保护,提高了控制流完整性保护的安全性与可靠性。
图10为本发明一实施例提供的电子设备组成示意图,如图10所示,该电子设备包括存储器(memory)1001、处理器(processor)1002及存储在存储器1001上并可在处理器1002上运行的程序,其中,存储器1001和处理器1002通过通信总线1003完成相互间的通信,处理器1002执行所述程序时实现如下步骤:
将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同;
将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行。
此外,上述的存储器1001中的计算机程序可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
处理器1002执行所述程序所涉及的方法流程,具体可以参将上述方法实施例,此处不再赘述。
本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的数据传输处理方法流程,其具体的功能和流程可以详见上述方法实施例,此处不再赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种控制流完整性保护方法,其特征在于,包括:
将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同;
将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行。
2.根据权利要求1所述的控制流完整性保护方法,其特征在于,所述将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行,具体包括:
将所述当前目标地址的预设位改写至与所述当前间接分支指令的标签相同,以使所述待保护程序在所述当前目标地址被篡改时,所述当前间接分支无法跳转至所述合法目标地址,所述待保护程序终止执行;
其中,所述标签为所述当前间接分支指令的合法目标地址的预设位。
3.根据权利要求2所述的控制流完整性保护方法,其特征在于,所述将所述当前目标地址的预设位改写至与所述当前间接分支指令的标签相同,具体包括:
在所述当前间接分支指令处进行代码插桩操作;
其中,所述代码用于将所述当前目标地址的预设位改写至与所述标签相同。
4.根据权利要求1所述的控制流完整性保护方法,其特征在于,所述将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同,具体包括:
对所述所有合法目标地址分别进行空指令填充操作,以使所述所有合法目标地址预设位变大,直至与所述当前间接分支指令的标签相等。
5.根据权利要求4所述的控制流完整性保护方法,其特征在于,所述当前间接分支指令的标签是随机预设的,其中,所述的当前间接分支指令的标签与所述待保护程序中其他间接分支指令的标签不同。
6.根据权利要求1至5任一所述的控制流完整性保护方法,其特征在于,所述合法目标地址的预设位为所述合法目标地址的低字节,所述当前目标地址的预设位为所述当前目标地址的低字节。
7.根据权利要求1所述的控制流完整性保护方法,其特征在于,所述将待保护程序的控制流中的间接分支指令的所有合法目标地址进行重排之前,所述方法还包括:
对所述待保护程序进行静态分析,获取所述待保护程序的控制流。
8.一种控制流完整性保护装置,其特征在于,包括:
更改模块,用于将待保护程序的控制流中的当前间接分支指令的所有合法目标地址的预设位更改至相同;
改写模块,用于将所述当前间接分支指令的当前目标地址的预设位改写为与所述合法目标地址的预设位相同,以使所述待保护程序在所述当前目标地址被篡改时终止执行。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述控制流完整性保护方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项控制流完整性保护方法的步骤。
CN202010599864.5A 2020-06-28 2020-06-28 控制流完整性保护方法、装置、设备及存储介质 Active CN111898119B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202010599864.5A CN111898119B (zh) 2020-06-28 2020-06-28 控制流完整性保护方法、装置、设备及存储介质
EP21182170.7A EP3866037B1 (en) 2020-06-28 2021-06-28 Method for control-flow integrity protection, apparatus, device and storage medium
US17/361,270 US11704404B2 (en) 2020-06-28 2021-06-28 Method for control-flow integrity protection, apparatus, device and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010599864.5A CN111898119B (zh) 2020-06-28 2020-06-28 控制流完整性保护方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN111898119A true CN111898119A (zh) 2020-11-06
CN111898119B CN111898119B (zh) 2024-08-09

Family

ID=73207257

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010599864.5A Active CN111898119B (zh) 2020-06-28 2020-06-28 控制流完整性保护方法、装置、设备及存储介质

Country Status (3)

Country Link
US (1) US11704404B2 (zh)
EP (1) EP3866037B1 (zh)
CN (1) CN111898119B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111898119B (zh) 2020-06-28 2024-08-09 中国科学院信息工程研究所 控制流完整性保护方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050010804A1 (en) * 2002-12-19 2005-01-13 Bruening Derek L. Secure execution of a computer program using a code cache
US20080184016A1 (en) * 2007-01-31 2008-07-31 Microsoft Corporation Architectural support for software-based protection
US8151349B1 (en) * 2008-07-21 2012-04-03 Google Inc. Masking mechanism that facilitates safely executing untrusted native code
US20120124347A1 (en) * 2010-11-12 2012-05-17 Dundas James D Branch prediction scheme utilizing partial-sized targets
US20130024676A1 (en) * 2011-07-19 2013-01-24 Glew Andrew F Control flow integrity
CN104252334A (zh) * 2013-06-29 2014-12-31 华为技术有限公司 分支目标地址获取方法和装置
US20170126738A1 (en) * 2013-03-14 2017-05-04 Daniel Shawcross Wilkerson Hard Object: Lightweight Hardware Enforcement of Encapsulation, Unforgeability, and Transactionality

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10108530B2 (en) * 2016-02-24 2018-10-23 Stmicroelectronics (Rousset) Sas Method and tool for generating a program code configured to perform control flow checking on another program code containing instructions for indirect branching
CN111898119B (zh) 2020-06-28 2024-08-09 中国科学院信息工程研究所 控制流完整性保护方法、装置、设备及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050010804A1 (en) * 2002-12-19 2005-01-13 Bruening Derek L. Secure execution of a computer program using a code cache
US20080184016A1 (en) * 2007-01-31 2008-07-31 Microsoft Corporation Architectural support for software-based protection
US8151349B1 (en) * 2008-07-21 2012-04-03 Google Inc. Masking mechanism that facilitates safely executing untrusted native code
US20120124347A1 (en) * 2010-11-12 2012-05-17 Dundas James D Branch prediction scheme utilizing partial-sized targets
US20130024676A1 (en) * 2011-07-19 2013-01-24 Glew Andrew F Control flow integrity
US20170126738A1 (en) * 2013-03-14 2017-05-04 Daniel Shawcross Wilkerson Hard Object: Lightweight Hardware Enforcement of Encapsulation, Unforgeability, and Transactionality
CN104252334A (zh) * 2013-06-29 2014-12-31 华为技术有限公司 分支目标地址获取方法和装置

Also Published As

Publication number Publication date
EP3866037A2 (en) 2021-08-18
US11704404B2 (en) 2023-07-18
EP3866037A3 (en) 2021-12-01
CN111898119B (zh) 2024-08-09
US20210406017A1 (en) 2021-12-30
EP3866037B1 (en) 2023-12-13
EP3866037C0 (en) 2023-12-13

Similar Documents

Publication Publication Date Title
US11599628B2 (en) Detecting return-oriented programming payloads by evaluating data for a gadget address space address and determining whether operations associated with instructions beginning at the address indicate a return-oriented programming payload
US9805188B2 (en) Control flow integrity system and method
KR101480821B1 (ko) 리턴-지향형 프로그래밍을 억제하기 위한 동적 실행 방지
CN107077562B (zh) 用于动态控制代码执行的计算机实现的方法和系统
JP6189039B2 (ja) セキュアドメインおよび低セキュアドメインを使用するデータ処理装置および方法
US20080133858A1 (en) Secure Bit
US10528729B2 (en) Methods and systems for defending against cyber-attacks
CN109409086B (zh) 基于新增指令的检测堆栈中返回地址被篡改的装置
CN109409084B (zh) 一种检测返回地址被篡改的链式数据存储结构
WO2020057603A1 (zh) 检测堆栈中返回地址被篡改的方法及装置
KR20220108176A (ko) 도메인 전이 디스에이블 구성 파라미터
CN111898130B (zh) 一种细粒度控制流完整性保护实现方法及系统
CN111898119B (zh) 控制流完整性保护方法、装置、设备及存储介质
US11113392B2 (en) Executable binary code insertion
CN111898120B (zh) 控制流完整性保护方法及装置
US10579457B1 (en) Processor for achieving flow integrity and a method of providing notice of a fault in control flow
CN113032737B (zh) 软件的保护方法、装置、电子设备及存储介质
CN109409083B (zh) 检测堆栈中返回地址被篡改的装置
US11055202B1 (en) Compilation scheme for tagged global variables
Ogorkiewicz et al. Analysis of buffer overflow attacks
Karwayun et al. War of Control Hijacking: Attacks and Defenses
CN118519890A (zh) 嵌入式系统的软件动态可信性防护方法及装置
KR20220108175A (ko) 모드간 호출 분기 명령어

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