CN110378117B - 控制流完整性检测方法、装置及系统 - Google Patents

控制流完整性检测方法、装置及系统 Download PDF

Info

Publication number
CN110378117B
CN110378117B CN201910540371.1A CN201910540371A CN110378117B CN 110378117 B CN110378117 B CN 110378117B CN 201910540371 A CN201910540371 A CN 201910540371A CN 110378117 B CN110378117 B CN 110378117B
Authority
CN
China
Prior art keywords
tag
return address
register
label
address
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
Application number
CN201910540371.1A
Other languages
English (en)
Other versions
CN110378117A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201910540371.1A priority Critical patent/CN110378117B/zh
Publication of CN110378117A publication Critical patent/CN110378117A/zh
Application granted granted Critical
Publication of CN110378117B publication Critical patent/CN110378117B/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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/565Static detection by checking file integrity
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Storage Device Security (AREA)

Abstract

本申请提供一种控制流完整性检测系统以及方法,该检测系统包括存储器以及检测模块,在执行子程序时,存储器接收第一返回地址以及与第一返回地址对应的第一标签,将第一标签存储到应用软件不能读写的第一存储区域中第一地址对应的区域;在子程序执行完时,检测模块可以接收来自第一存储区域中第一地址对应的区域的第二标签,并验证第二标签的值是否与预设值相等,当第二标签的值与预设值不等时,表示第一返回地址被修改,检测模块生成告警信号。通过增加应用软件不可读写的标签,并在子程序执行完时,验证执行子程序时与返回地址一起存储的标签的值是否与预设值相等,能够确定控制流是否被劫持,保护控制流完整性。

Description

控制流完整性检测方法、装置及系统
技术领域
本发明涉及计算机领域,尤其涉及一种控制流完整性检测方法、装置及系统。
背景技术
控制流劫持是一种能够改变程序正常执行流程的攻击方式,由于程序普遍存在缓冲区溢出等漏洞,攻击者可以通过栈溢出等漏洞改写程序中的返回地址,劫持控制流并破坏控制流完整性(control flow integrity,CFI),实现攻击的意图。目前,为了抵御劫持控制流的攻击,主要的防御机制是监视程序运行时的控制流,若控制流被改变,则说明程序运行时受到攻击,此时会终止程序并进行警告。
发明内容
本发明实施例公开了一种控制流完整性检测方法、装置及系统,通过增加应用软件不可读写的比特位传输和存储标签,并验证调用子程序时以及子程序执行完时标签是否相同,从而能够确定控制流是否被劫持,保护控制流完整性。
第一方面,本申请提供一种控制流完整性检测系统,所述检测系统包括随机存取存储器RAM以及检测模块,其中,
所述RAM,用于接收第一返回地址和与所述第一返回地址对应的第一标签,将所述第一标签与所述第一返回地址分别存储到所述RAM中第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域,其中,所述第一存储区域的访问权限为应用软件不可读写;
所述检测模块,用于:接收第二标签,其中,所述第二标签来自所述第一存储区域中所述第一地址对应的区域;
验证所述第二标签的值是否等于预设值;
当所述第二标签的值不等于预设值时,所述检测模块生成告警信号。
通过将第一返回地址对应的第一标签以及第一返回地址分别存储到存储器第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域,其中,第一标签的值是预设值中的任意一个。当第一返回地址被攻击者用应用软件修改时,对应的第一标签会被硬件修改为非预设值,在寄存器等其它模块需要获取第一返回地址,从存储第一返回地址与第一标签的存储区域读取第一返回地址与第一标签时,检测模块会接收到来自第一存储区域中第一地址对应的区域的第二标签,并验证第二标签的值是否与预设值相等,若不等,则表示与第一标签对应的第一返回地址被修改,控制流完整性被破坏,实现对控制流完整性的检测。
在一种可能的实现方式中,所述存储器还用于:所述存储器还用于:在确定所述第一返回地址被更新时,更新存储于所述第一存储区域中第一地址对应的区域的第一标签,其中,更新后的第一标签的值不等于所述预设值。
在将第一标签存储到第一存储区域中第一地址对应的区域中以及将第一返回地址存储第二存储区域中第二地址对应的区域中之后,若所述存储器接收到不包括标签的数据,且该数据用于更新第一返回地址时,存储器中的硬件电路会生成一个标签以更新存储于第一存储区域中第一地址对应的区域中的第一标签,并且由存储器中的硬件电路生成的标签的值与预设值不相同,从而使检测模块在获取到来自第一存储区域中第一地址对应的区域中的标签之后,若该标签的值与预设值不同,则表示第一地址被修改过。
在一种具体的实现方式中,所述系统还包括:
第一寄存器,用于将所述第一返回地址和所述第一标签发送给所述RAM;
第二寄存器,用于生成所述第一标签,并向所述第一寄存器发送所述第一标签以及所述第一返回地址。
当第一返回地址被攻击者用应用软件修改时,对应的第一标签会被硬件修改为非预设值,在第二寄存器输出第一返回地址时,通过第二寄存器中的硬件电路生成第一标签,从而使第一标签不能被应用软件读写。能够防止第一标签与第一返回地址在存储到存储器中之后,攻击者在通过应用软件修改第一返回地址时,通过应用软件将第一存储区域中第一地址对应的区域中的标签值改为预设标签的值。
在一种具体的实现方式中,所述系统还包括:
第一寄存器,用于将所述第一返回地址和所述第一标签发送给所述RAM;
第二寄存器,用于将所述第一返回地址发送给标签生成模块;
所述标签生成模块,用于在接收到所述第一返回地址之后,生成所述第一标签,并向所述第一寄存器发送所述第一标签和所述第一返回地址。
通过增加标签生成模块,标签生成模块在接收到第二寄存器输出的第一返回地址时,生成第一标签,然后将向第一寄存器发送第一标签与第一返回地址,并由第一寄存器发送给所述存储器进行存储。
在一种具体的实现方式中,所述第一寄存器,还用于接收所述第二标签与第二返回地址,其中,所述第二返回地址来自所述第二存储区域中第二地址对应的区域;
在验证所述第二标签的值是否等于预设值之前,所述检测模块还用于:
在所述第一寄存器接收所述第二标签和所述第二返回地址时,接收所述RAM发送的所述第二标签;或者,
在所述第一寄存器接收所述第二标签和所述第二返回地址之后,接收所述第一寄存器发送的所述第二标签。
上述检测模块可以设置于第一寄存器输入端或者第一寄存器的输出端,在检测模块设置于第一寄存器的输入端时,在第一寄存器接收来自存储器的第二返回地址与第二标签时,检测模块通过接收存储器发送的第二标签并进行验证;在检测模块设置于第一寄存器的输出端时,第一寄存器在接收到第二返回地址与第二标签之后,检测模块通过接收第一寄存器发送的标签并进行验证。
在一种具体的实现方式中,所述第一寄存器是连接寄存器,所述第二寄存器是程序计数器寄存器。
在一种具体的实现方式中,所述检测模块还用于:当所述第一寄存器接收来自所述第二寄存器或者所述标签生成模块的所述第一标签和所述第一返回地址时,所述检测模块接收所述第一标签,对所述第一标签进行验证;在所述第一标签等于预设值的情况下,所述第一寄存器将所述第一返回地址与所述第一标签发送给所述RAM。
由于检测模块并不能识别接收到的标签来自于哪一个寄存器,因此在第二寄存器或者标签生成模块在生成第一标签之后,第一寄存器接收来自第二寄存器或者标签生成模块的第一标签与第一返回地址时,检测模块同样会接收到第一标签,并对第一标签进行验证,在第一标签的值等于预设值的情况下,第一寄存器才会将第一返回地址与所述第一标签发送给所述存储器。
本申请提供的控制流完整性检测系统,通过增加比特位,设置新增的比特位的访问权限为应用软件不可读写,采用硬件生成标签并采用新增的比特位传输和存储所述标签,从而能够防止攻击者修改标签的值,然后在子程序调用时,将标签值与返回地址一起存储,由于标签值不能被软件修改,攻击者在对RAM中的返回地址进行攻击时不能将标签同时修改为正确的标签值,从而能够使检测模块在子程序执行完之后获取到所述标签时,能够验证来自RAM中的标签是否与预设的标签相同,并在不同的情况下确定控制流被劫持,进而产生告警信息。
第二方面,本申请实施例提供一种控制流完整性检测方法,所述方法应用于处理器,所述处理器包括检测模块和第一寄存器,所述处理器与随机存取存储器RAM连接,所述方法包括:
所述第一寄存器将第一返回地址和与所述第一返回地址对应的第一标签发送给所述RAM,其中,所述第一标签与所述第一返回地址分别存储到所述RAM中第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域,所述第一存储区域的访问权限为应用软件不可读写;
所述检测模块接收第二标签,其中,所述第二标签来自所述第一存储区域中第一地址对应的区域;
所述检测模块验证所述第二标签的值是否等于预设值,当所述第二标签的值不等于预设值时,所述检测模块生成告警信号。在一种具体的实现方式中,所述处理器还包括第二寄存器,所述方法还包括:
在所述第一寄存器将第一返回地址和与所述第一返回地址对应的第一标签发送给所述RAM之前,所述第二寄存器生成所述第一标签,并向所述第一寄存器发送所述第一标签以及所述第一返回地址。
在一种具体的实现方式中,所述处理器还包括第二寄存器与标签生成模块,所述方法还包括:
在所述第一寄存器将第一返回地址和与所述第一返回地址对应的第一标签发送给所述RAM之前,
所述第二寄存器将所述第一返回地址发送给所述标签生成模块;
所述标签生成模块在接收到所述第一返回地址之后,生成所述第一标签,并向所述第一寄存器发送所述第一标签和所述第一返回地址。
在一种具体的实现方式中,在所述检测模块验证所述第二标签的值是否等于预设值之前,所述第一寄存器接收所述第二标签和第二返回地址,所述第二返回地址来自所述第二存储区域中第二地址对应的区域;
所述检测模块接收第二标签,包括:
在所述第一寄存器接收所述第二标签和所述第二返回地址时,接收所述RAM发送的所述第二标签;或者,
在所述第一寄存器接收所述第二标签和所述第二返回地址之后,接收所述第一寄存器发送的所述第二标签。
在一种具体的实现方式中,所述第一寄存器是连接寄存器,所述第二寄存器是程序计数器寄存器。
在一种具体的实现方式中,当所述第一寄存器接收来自所述第二寄存器或者所述标签生成模块的所述第一标签和所述第一返回地址时,所述检测模块接收所述第一标签,对所述第一标签进行验证;在所述第一标签等于预设值的情况下,所述第一寄存器将所述第一返回地址与所述第一标签发送给所述RAM。
第三方面,本申请实施例提供一种控制流完整性检测装置,所述装置包括检测模块和第一存储模块,所述检测装置与随机存取存储器RAM连接,其中,
所述第一存储模块,用于将第一返回地址和与所述第一返回地址对应的第一标签发送给存储器,其中,所述第一标签与所述第一返回地址分别存储到所述存储器中第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域,所述第一存储区域的访问权限为应用软件不可读写;
所述检测模块,用于:接收第二标签,其中,所述第二标签来自所述第一存储区域中第一地址对应的区域;
验证所述第二标签的值是否等于预设值;
当所述第二标签的值不等于预设值时,所述检测模块生成告警信号。在一种具体的实现方式中,所述装置还包括:
第二存储模块,用于在所述第一存储模块将所述第一返回地址和与所述第一返回地址对应的第一标签发送给所述存储器之前,生成所述第一标签,并向所述第一存储模块发送所述第一标签以及所述第一返回地址。
在一种具体的实现方式中,所述装置还包括:
标签生成模块,用于在接收到所述第一返回地址之后,生成所述第一标签,并向所述第一存储模块发送所述第一标签和所述第一返回地址;
第二存储模块,用于在所述第一存储模块将所述第一返回地址和与所述第一返回地址对应的第一标签发送给所述存储器之前,将所述第一返回地址发送给所述标签生成模块。
在一种具体的实现方式中,所述第一存储模块,还用于接收所述第二标签和第二返回地址,所述第二返回地址来自所述第二存储区域中第二地址对应的区域;
在验证所述第二标签的值是否等于预设值之前,所述检测模块还用于:
在所述第一存储模块接收所述第二标签和所述第二返回地址时,接收来自所述存储器的第二标签;或者,
在所述第一存储模块接收所述第二标签和所述第二返回地址之后,接收所述第一寄存器发送的所述第二标签。
在一种具体的实现方式中,所述检测模块还用于:当所述第一寄存器接收来自所述第二寄存器或者所述标签生成模块的所述第一标签和所述第一返回地址时,所述检测模块接收所述第一标签,对所述第一标签进行验证;在所述第一标签等于预设值的情况下,所述第一寄存器将所述第一返回地址与所述第一标签发送给所述存储器。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A-1B是本申请实施例提供的一种控制流完整性检测的示意图;
图2是本申请实施例提供的程序控制流完整性检测方法的交互图
图3A-3B是本申请实施例提供的一种控制流完整性检测系统的结构示意图;
图4A-4B是本申请实施例提供的另一种控制流完整性检测系统的结构示意图;
图5是本申请实施例提供的另一种控制流完整性检测系统的结构示意图;
图6是本申请实施例提供的另一种控制流完整性检测系统的结构示意图;
图7是本申请实施例提供的另一种控制流完整性检测系统的结构示意图;
图8是本申请实施例提供的一种控制流完整性检测装置的结构示意图;
图9是本申请实施例提供的一种控制流完整性检测装置的结构示意图。
具体实施方式
下面结合附图对本申请实施例进行详细的阐述。
在程序执行的过程中,处理器要执行的程序(指令序列)都是以二进制代码序列的方式存储在计算机的存储器中,处理器将这些代码逐条读取到处理器中再译码并执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,处理器在执行每条指令时,需要确定下一条指令的地址,程序计数器(program counter,PC)寄存器即是用于存放下一条指令的地址寄存器,处理器总是按照PC寄存器的指向对指令序列进行取指、译码和执行。在处理器执行子程序调用指令时,处理器需要在子程序执行完之后返回到子程序调用指令的下一条指令处,因此必须对主程序中子程序调用指令的下一条指令的地址(即返回地址)进行保存,在子程序执行完时根据返回地址实现子程序返回。在采用ARM指令集的处理器中,通过将子程序调用时PC寄存器中的返回地址传送给连接(link register,LR)寄存器保存,在子程序执行完后,处理器再根据LR寄存器中的返回地址实现子程序返回。由于LR寄存器中只能保存一个返回地址的值,当程序中出现多级子程序调用时,则在调用各级子程序时,需要将LR寄存器中子程序的返回地址存入存储器的栈中,在每个子程序执行完时,首先将存储器中执行完的子程序对应的返回地址发送给LR寄存器,处理器再根据LR寄存器中的返回地址实现子程序的返回。其中,该处理器可以是中央处理器(central processing unit,CPU),也可以是别的类型的处理器,本申请不对此进行限定。上述存储器可以是随机存取存储器(random access memory,RAM)、闪存(flash memory)、非易失存储器(non-volatilememory,NVM)等其他类型的存储器,本申请对此不做具体限定。
在程序运行的过程中,控制流是程序运行中决定程序下一步应该怎么执行的机制,而控制流劫持是一种危害性极大的攻击方式,攻击者可以采用代码重用攻击,例如面向返回地址的编程(return oriented programming,ROP)攻击,通过修改子程序调用时存储器中的返回地址对控制流进行劫持,从而实现控制流劫持、破坏控制流完整性以及获取计算机控制权的目的。因此可以通过判断存储器中的返回地址是否被修改来确定控制流是否被劫持,若确定返回地址被修改,则确定控制流被劫持,进而采取对应措施。
在判断返回地址是否被修改时,可以将返回地址与标签一起存储,在处理器执行完子程序获取存储器中的返回地址时,通过验证标签来确定返回地址是否被修改。举例来讲,如图1A所示,在调用子程序时,通过执行PACIASP指令,将LR寄存器中的返回地址的值与栈指针(stack pointer,SP)寄存器中的值通过加密模块进行加密运算,将运算后得到的计算结果的若干位作为起始标签,将起始标签与返回地址一起存入LR寄存器中。如图1B所示,在子程序执行完之后,执行AUTIASP指令,再对LR寄存器中返回地址的值与SP寄存器中的值进行相同的加密运算,得到结果标签,然后对比结果标签与起始标签是否相同,若相同,则表明返回地址没有被修改,若不同,则表明返回地址被修改。
但是,一方面该方法的安全性依赖于保存于加密模块中的密钥,若密钥泄露,攻击者可以通过密钥伪造出合法标签,进而通过标签验证,执行被修改的返回地址所指向的程序。另外,上述方法中标签的长度取决于LR寄存器中未被使用的比特数,因此一般情况下标签的长度较短,对暴力破解的抵抗性弱,并且目前有针对此方法的特定攻击方法,例如指针替换等。另一方面,上述方法在子程序调用以及子程序执行完之后均需增加指令以实现上述计算以及验证过程,这样会影响程序执行的效率。
为了解决上述问题,本申请提供一种程序控制流劫持检测方法,该方法用于包括处理器以及存储器的计算机系统中,其中,处理器中包括第一寄存器、第二寄存器以及检测模块,存储器以RAM为例进行说明。RAM中具有用于传递参数、保存中断断点以及保存子程序返回地址等功能的栈。第一寄存器用于子程序调用时,保存子程序返回地址,第二寄存器用于在程序执行过程中存放下一条指令的地址,并在处理器调用子程序时,通过内部的硬件电路生成预设的标签,将生成的标签与下一条指令的地址(即返回地址)发送给第一寄存器。
本申请实施例中,计算机系统会为PC寄存器发送的返回地址之外增加至少一个比特位的标签,新增的比特位用于校验返回地址的有效性,其中,计算机的比特位增加之后,计算机系统中处理器、寄存器以及存储器在传输或者存储该返回地址时,均会保留所增加的比特位,增加的比特位对应用软件不可见,不能被应用软件读写、修改和删除,可以被硬件读写、修改或者删除。在本申请所提供的一种实现方式中,增加的比特位也可以被系统软件读写、修改或者删除。其中,应用软件指的是一般功能性的软件程序,在用户模式(usermode)权限便可启动运行,应用软件所能使用的内存等系统资源受限。系统软件指的是系统中需要内核模式(kernel mode)权限才可运行的软件程序。在内核模式下,程序代码具有对硬件的所有控制权限,可以执行所有的CPU指令,可以访问任意地址的内存。而在用户模式下,代码没有对硬件的直接控制权限,程序需要通过调用系统接收实现对硬件的访问。由于新增的比特位中的值由硬件或者系统软件产生,系统能够接收应用软件输入的数据的位数仍然为原系统的位数,从而在子程序调用的过程中,可以确保标签值不能被应用软件读写和修改。示例性的,原计算机系统为32位的处理系统,PC寄存器在发送返回地址时,能够生成与返回地址对应的2个比特位大小的标签,所述标签可以添加到该32比特位返回地址的前面或者后面,然后将标签和返回地址共34比特位的数据发送出去,并最终由RAM保存。其中标签会存储在RAM中第一存储区域中,具体而言,可以存储在第一地址对应的区域,32位的返回地址存储在RAM中第二存储区域中第二地址对应的区域,且第一存储区域的访问权限为应用软件不可读写与修改。其中,上述PC寄存器中硬件电路生成的标签的值为预设值中的任意一个值,预设值为处理器中的寄存器或者组合逻辑通过硬件电路能够生成的标签的值的集合,当攻击者使用应用软件攻击RAM以修改第一返回地址时,与第一返回地址对应的第一标签无法被应用软件修改。RAM在接收到攻击者通过应用软件输入的32位数据时,会通过RAM的硬件电路生成预先设置的2个比特位的标签,其中,RAM中硬件电路生成的标签的值被设置为与上述预设值不同,例如预设值为01、10以及11,RAM中能够生成的2个比特位的标签为00。然后将RAM中硬件电路生成的2个比特位的标签存储到第一存储区域中第一地址对应的区域,将应用软件输入的32位的返回地址存储到第二存储区域中第二地址对应的区域。因此在攻击者通过应用软件修改第二存储区域中第二地址对应的区域中的返回地址时,第一存储区域中第一地址对应的区域中存储的第一标签的值也会被RAM中的硬件电路修改为非预设值。在子程序执行完时,检测模块获取来自RAM的标签和返回地址,验证来自RAM的标签的值是否与预设值相同,若来自RAM的标签的值与预设值相同,则表示返回地址没有被应用软件修改,若来自RAM的标签的值与预设值不同,则表示返回地址被应用软件修改。
图2是本申请实施例提供的控制流完整性检测方法的交互图,如图所示,所述方法包括:
S102、第二寄存器生成第一标签,并向第一寄存器发送第一标签与第一返回地址。
本申请实施例中,处理器在执行程序的过程中,需要执行子程序调用指令调用子程序时,第二寄存器会生成与第一返回地址对应的第一标签,并将第一标签添加到第一返回地址之前或者之后,然后向第一寄存器发送第一标签与第一返回地址。图3A为本申请实施例提供的一种控制流完整性检测系统结构图,图3A中是处理器调用子程序时,第二寄存器中的地址传输到RAM中保存的过程,其中,第一返回地址为主程序中子程序调用指令之后的一条指令的地址。第一标签和第一返回地址可以是从第二寄存器直接发送到第一寄存器,也可以是从第二寄存器发出后经过一个或者多个其他寄存器或组合逻辑之后到达第一寄存器。
S104、第一寄存器接收第一标签以及第一返回地址,将第一标签与第一返回地址发送给随机存取存储器。
本申请实施例中,第一寄存器中输出的第一标签与第一返回地址可以直接输入到RAM中,也可以通过一个或者多个其他寄存器或组合逻辑之后输入到RAM中。
S106、随机存取存储器接收第一标签与第一返回地址,将第一标签与第一返回地址分别存储到随机存取存储器中第一存储区域和第二存储区域。
本申请实施例中,RAM在接收到第一标签与第一返回地址之后,将第一标签存储到第一存储区域中第一地址对应的区域中,将第一返回地址存储到第二存储区域中第二地址对应的区域中。其中,第一存储区域的访问权限为应用软件不可见,且不能被应用软件读写、修改和删除。
S108、检测模块接收来自随机存取存储器的第二标签与第二返回地址,验证第二标签的值是否等于预设值,当第二标签的值不等于预设值时,检测模块生成告警信号。
其中,第二标签为子程序执行完时,第一存储区域中第一地址对应的区域中存储的标签,第二返回地址为子程序执行完时,第二存储区域中第二地址对应的区域中存储的地址。RAM在将第一标签与第一返回地址分别存储到第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域中之后,攻击者可能会通过应用软件修改第二存储区域中的第一返回地址,以达到破坏控制流完整性的目的。在攻击者通过应用软件修改第一返回地址时,与第一返回地址对应的第一标签的值会被RAM更新为非预设值。因此,在子程序执行完,第一寄存器从RAM中第一存储区域中第一地址对应的区域中获取的标签,以及从第二存储区域中第二地址对应的区域中获取的返回地址,可能不再是S106中RAM接收到的第一标签与第一返回地址,为了与调用子程序时写入的第一标签以及第一返回地址进行区分,将子程序执行完时,从第一存储区域中第一地址对应的区域中读取的标签称为第二标签,从第二存储区域中第二地址对应的区域中读取的返回地址称为第二地址。
在本申请中,可以只存在一个预设值,也可以存在两个或者两个以上的预设值。当只存在一个预设值时,预设值与第二寄存器生成的第一标签的值相同。第二寄存器在生成第一标签并发送第一标签与第一返回地址之后,第一标签与第一返回地址在传输到RAM的过程中不会被其他寄存器或者组合逻辑修改,检测模块在验证来自RAM的第二标签的值是否与预设值相同时,即当第二标签的值与第二寄存器生成的第一标签的值相同时,确定返回地址没有被修改。
当存在两个或者两个以上的预设值时,第一标签的值为预设值中的任意一个。例如,处理器中不同的寄存器生成的标签的值不同,第二寄存器生成的第一标签在从第二寄存器传输到第一寄存器的过程中会进入其他寄存器或者组合逻辑,第一寄存器以及其他寄存器等在接收到第一标签之后输出时,可以将第一标签修改为本寄存器对应的标签,但修改后的第一标签的值与其中一个预设值相同。而当第一寄存器与RAM之间存在一个或者多个其他寄存器或组合逻辑时,第一寄存器与RAM之间的一个或者多个其他寄存器或组合逻辑不会对接收到的标签进行修改,以防止标签在RAM中被修改为非预设值之后,在从RAM中被发送到第一寄存器的过程中,非预设值又被修改为预设值,从而使检测模块收到的第二标签的值一直等于预设值,导致第一返回地址即使被修改也不会被检测到。
本申请中,攻击者通过应用软件攻击RAM修改第一返回地址时,RAM在接收到应用软件输入的数据时,会通过硬件生成除预设值之外的任意一个值作为标签,更新与第一返回地址对应的第一标签。例如,预设值可以是01、10以及11,第二寄存器生成的标签的值为11,而攻击者使用应用软件攻击RAM,RAM在接收到由应用软件输入的32位的数据时,通过硬件电路生成值为00的标签存储到第一存储区域中第一返回地址对应的区域,以更新第一标签,即第一标签在RAM中被修改后,被修改后的标签的值与任意一个预设值都不同。上述在验证来自RAM的第二标签的值是否与预设值相同时,当第二标签的值与预设值中任意一个相同时,即能确定返回地址没有被修改。
因此,第二标签的值与第一标签的值可能相同,也可能不同,若第二标签的值与第一标签的值不同且第二标签的值与预设值中的一个相同,则表示第一标签在从第二寄存器传输到RAM的过程中,被第二寄存器与第一寄存器之间的其他寄存器或组合逻辑修改过;若第二标签的值与任意一个预设值都不相同,则表示第一标签在存储到RAM中之后被修改过,即第一存储区域中第一地址对应的区域中的第一标签被修改过,因此第二存储区域中第二地址对应的区域中的数据也被修改过,即第一返回地址被修改过。
具体的,如图3B所示,当子程序执行完时,第一寄存器会从RAM的栈中读取第二标签以及第二返回地址,第一寄存器在接收第二标签与第二返回地址时,检测模块同样能够接收到第二标签,并对第二标签进行验证。检测模块中预先存储有一个或者多个预设值,若第二标签的值与任意一个预设值相同,则表示第二返回地址与第一返回地址相同,第一返回地址没有被修改;若第二标签的值与任何一个预设值都不同,则表示第一返回地址被修改,检测模块根据第一返回地址被修改确定控制流被劫持,进而生成告警信号,并将告警信号发送给处理器,处理器在接收到告警信号之后,会进行对应的处理,例如终止程序的运行等。
本申请提供的控制流完整性检测系统,通过为返回地址增加额外的比特位作为标签,且增加的比特位的访问权限为应用软件不可读写,从而能够检测到攻击者通过应用软件修改标签的值。在处理器调用子程序时,将寄存器中硬件电路生成的标签与返回地址一起存储到存储器中,由于增加的比特位的值不能被应用软件修改,攻击者在对存储器中的返回地址进行修改时不能将标签同时修改为正确的标签值,从而能够在子程序执行完获取存储器中的返回地址时,通过检测模块验证子程序执行完时来自存储器中的标签的值是否与预设值相同,并在不同的情况下确定控制流被劫持,进而产生告警信息,实现控制流完整性的检测。
下面以处理器指令集为ARM指令集,计算机系统为32位的处理系统,计算机系统为返回地址增加额外的2个比特位的标签为例,对本申请提供的程序控制流完整性检测方法进行详细介绍。
当处理器指令集为ARM指令集时,上述第一寄存器为LR寄存器,第二寄存器为PC寄存器。例如,所述PC寄存器输出32位地址数据时,都会通过PC寄存器中的硬件电路生成值为11的两个比特位作为标签,即在所述PC寄存器输出的地址之前或者之后增加两个比特位为11的标签,而其他寄存器新增或者修改的两个比特位输出的值可以设置为11、10、01等,RAM在接收到由应用软件输入的32位的数据时,由硬件生成的值为00,即预设值为01、10以及11。
请参见图4A,图4A为本申请实施例提供的另一种控制流完整性检测系统结构图,图4A中是处理器调用子程序时,PC寄存器中的标签和返回地址传输到RAM中保存的过程。在处理器调用子程序,所述PC寄存器将第一返回地址发送给所述LR寄存器时,会生成两个比特位的第一标签11,并将第一标签添加到第一返回地址之前或者之后,然后向LR寄存器发送第一返回地址与第一标签。LR寄存器在接收到第一标签与第一返回地址之后,将第一返回地址与第一标签一起发送给RAM。RAM在接收到第一返回地址与第一标签之后,将第一标签与第一返回地址分别存储到第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域。其中,当第一标签是从PC寄存器直接发送到LR寄存器时,上述第一存储区域中第一地址对应的区域中存储的数据是第一标签的值;当第一标签从PC寄存器发出后可以经过一个或者多个其他寄存器到达LR寄存器,其他寄存器可能会将第一标签的值修改为其他预设值,则第一存储区域中第一地址对应的区域中存储的数据可能是其他预设值。
如图4B所示,图4B是第一寄存器从RAM中获取返回地址和标签的示意图,在子程序执行完之后,处理器需要从RAM中获取所述第一返回地址以返回到调用子程序的位置。具体的,LR寄存器会从RAM中读取第二标签与第二返回地址,其中,第二标签来自于第一存储区域中第一地址对应的区域,第二返回地址来自于第二存储区域中第二地址对应的区域。此时,上述检测模块同样会接收到来自第一存储区域中第一地址对应的区域的第二标签并对第二标签进行验证,若检测模块确定第二标签的值与预设值中的任意一个相同,则说明第二返回地址与第一返回地址相同,存储在RAM中的第一返回地址没有被修改,程序可以正常执行。若RAM中的第一返回地址被攻击者修改,由于攻击者输入的数据只能是32位,攻击者输入的32位数据会由硬件补充值为00的两个比特位的标签,因此若检测模块确定第二标签的值与预设值中的任意一个都不相同,则说明存储在RAM中的第一返回地址被修改,控制流被劫持,检测模块会发送告警信号给处理器,处理器在接收到告警信号之后,会进行对应的处理,例如终止程序的运行等。
可以理解,攻击者是攻击RAM中的存放返回地址的存储区域,修改RAM中的返回地址以实现劫持程序控制流的目的,因此检测模块只需要在子程序执行完之后验证来自于RAM中的第二标签是否与预设值相同,但是由于检测模块不能区分输入的标签来自于RAM还是来自于寄存器,因此在LR寄存器接收来自PC寄存器的第一标签时,检测模块同样会对接收到的第一标签进行验证,若第一标签的值与预设值中的任意一个相同,则检测模块确认第一返回地址没有被修改,所述LR寄存器接收第一标签与第一返回地址,并将第一标签与第一返回地址发送给RAM。
上述实施例中,检测模块设置于LR寄存器的输入端,在第一返回地址与第一标签输入LR寄存器时,验证所述第一标签,或者在第二返回地址与第二标签输入LR寄存器时验证第二标签。检测模块也可以设置于LR寄存器的输出端,在LR寄存器输出返回地址以及标签时,验证来自于LR寄存器的标签。例如,在LR寄存器从RAM中读取第二返回地址与第二标签之后,LR寄存器发送第二返回地址与第二标签时,检测模块接收第二标签并进行验证,若检测模块验证第二标签的值与预设值中的任意一个都不相同,则表明RAM中的第一返回地址被修改,控制流被劫持,检测模块会发送告警信号给处理器,处理器在接收到告警信号之后,会进行对应的处理,例如终止程序的运行等。
本申请实施例中,检测模块可以只接收输入到LR寄存器中的标签或者LR寄存器中输出的标签,检测模块也可以同时接收输入到LR寄存器的返回地址与标签或者从LR寄存器中输出的返回地址与标签,如图5所示,若检测模块设置在LR寄存器的输入端,在处理器调用子程序时,PC寄存器可以将第一返回地址与第一标签同时发送给检测模块,然后检测模块从第一返回地址与第一标签组成的数据中提取出第一标签并进行验证,若检测模块验证提取出的第一标签的值与预设值中的任意一个相同,则检测模块将第一返回地址与第一标签发送给LR寄存器。在子程序执行完之后,LR寄存器读取RAM中的第二返回地址与第二标签时,第二返回地址与第二标签先传输到检测模块,然后检测模块从第二返回地址与第二标签组成的数据中提取出第二标签并进行验证,若检测模块验证第二标签的值与预设值中的任意一个相同,则检测模块将第二返回地址发送给LR寄存器,若检测模块验证第二标签的值与预设值中的任意一个都不相同,则表明RAM中的第一返回地址被修改,控制流被劫持,检测模块会发送告警信号给处理器,处理器在接收到告警信号之后,会进行对应的处理,例如终止程序的运行等。
在一种可能的实施方式中,由于攻击者修改的是RAM中存储的返回地址,因此检测模块还可以设置RAM的输出端,在LR寄存器读取RAM中的第二标签与第二返回地址时,检测模块接收RAM中输出的第二标签,以验证第二标签的值是否与预设值中的任意一个相同。
在一种可能的实施方式中,第一标签可以是由PC寄存器直接生成,也可以是由其他模块生成之后添加到第一返回地址之前或者之后的,例如,如图6所示,图6是本申请实施例提供的另一种检测装置的结构示意图,在PC寄存器的输出端连接一个标签生成模块,当存在标签生成模块时,标签生成模块在接收到PC寄存器输出的第一返回地址后,标签生成模块生成值为11的第一标签,然后将第一标签与所述第一返回地址一起发送给LR寄存器。
可以理解,本申请中介绍的控制流完整性检测方法可以使用在采用ARM指令集的处理器中,也可以使用在采用RISC-V指令集的处理器中,在采用RISC-V指令集的处理器中,如图7所示,上述第一寄存器为返回地址(return address,RA)寄存器,上述第二寄存器为PC寄存器;还可以使用在采用其他指令集的处理器中。所述标签的位数可以是一位,可以是两位,可以是四位,也可以是五位等,本申请实施例均不做具体限定。
上述详细阐述了本申请实施例的方法,为了便于更好的实施本申请实施例的上述方案,相应地,下面还提供用于配合实施上述方案的相关装置。请参见图8,图8本申请实施例提供的一种控制流完整性装置的结构示意图。所述检测装置800包括:检测模块801、第一存储模块802以及第二存储模块803,该检测装置与存储器连接。在本申请可能的一种实现方式中,检测装置800是处理器,检测模块801是该处理器中的电路。
所述第一存储模块802,用于将第一返回地址和与第一返回地址对应的第一标签发送给存储器,其中,第一标签与第一返回地址分别存储到存储器中第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域,所述第一存储区域的访问权限为应用软件不可读写。
所述检测模块801,用于接收来自存储器的第二标签,验证第二标签的值是否与预设值相同,当第二标签的值与预设值不同时,生成告警信号,其中,第二标签来自所述存储器中第一存储区域中第一地址对应的区域。
上述装置800还包括第二存储模块803;用于在第一存储模块802将第一返回地址和与第一返回地址对应的第一标签发送给存储器之前,生成第一标签,并向第一存储模块802发送第一标签以及第一返回地址。
第一存储模块802还用于,读取存储器中第一存储区域中第一地址对应的区域中的第二标签;上述检测模块可以位于第一存储模块802的输入端,也可以位于第一存储模块802的输出端,图8中示出的是位于第一存储模块802的输入端。
检测模块801在第一存储模块802读取存储器中的第二标签时,接收来自存储器的第二标签;或者,检测模块801在第一存储模块802读取存储器中的第二标签之后,接收第一存储模块802发送的第二标签。
在一种可能的方式中,上述装置800还包括标签生成模块804,用于在接收到第二存储模块803发送的第一返回地址之后,生成第一标签,并发送第一标签和第一返回地址给第一存储模块802。
上述存储器可以是随机存取存储器(random access memory,RAM)、闪存(flashmemory)、非易失存储器(non-volatile memory,NVM)等其他类型的存储器,本申请对此不做具体限定。
具体的,上述装置800的比特位相对于原系统会增加一位或者多位,用于传输和存储上述第一标签,具体可参照上述方法实施例中对控制流完整性检测系统的描述;检测模块801执行的各种操作具体实现可参照上述方法实施例中的检测模块的具体操作;第一存储模块802执行的各种操作具体实现可参照上述方法实施例中的第一寄存器或LR寄存器的具体操作;第二存储模块803执行的各种操作具体实现可参照上述方法实施例中的第二寄存器或PC寄存器的具体操作,标签生成模块804执行的各种操作具体实现可参照上述方法实施例中标签生成模块的具体操作,在此不再赘述。
请参见图9,图9是本申请实施例提供的一种控制流完整性检测装置的结构示意图。所述检测装置900包括:处理单元910以及通信接口920,所述处理单元910与所述通信接口920通过总线940连接,其中,
所述处理单元910调用子程序时防止控制流被劫持的方法具体可参照上述方法实施例中的具体操作。处理单元910可以有多种具体实现形式,例如处理单元910可以包括处理器911和存储单元,所述处理器911中包括第一寄存器9101、第二寄存器9102以及检测模块9103,其中,第一寄存器用于存储返回地址,在采用ARM指令集的处理器中,第一寄存器为LR寄存器,在采用RISC-V指令集的处理器中第一寄存器为RA寄存器,第二寄存器9101为PC寄存器。所述处理器911在执行程序的过程中调用子程序时,防止控制流被劫持的方法具体可参照上述方法实施例中具体操作。
处理器911可以为中央处理器(central processing unit,CPU),处理器911可以是单核处理器或多核处理器。所述处理器911可以由CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。处理器911也可以单独采用内置处理逻辑的逻辑器件来实现,例如FPGA或数字信号处理器(digital signal processor,DSP)等。
存储单元可以是内存912,处理器911根据内存912中存储的程序单元执行相关的操作,程序单元可以是指令,或称计算机指令。本申请实施例中,上述RAM属于所述存储单元,用于接收所述第一寄存器9101发送的标签和返回地址并存储。
通信接口920可以为有线接口(例如以太网接口)或无线接口(例如蜂窝网络接口或使用无线局域网接口),用于与其他模块或设备进行通信。可选地,该检测装置还可以包括输入/输出接口950,输入/输出接口950连接有输入/输出设备,用于接收输入的信息,输出操作结果,输入/输出接口950可以为鼠标、键盘、显示器或者光驱等。
总线940可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。所述总线940可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选地,该检测装置还可以包括辅助存储器930,一般也称为外存,辅助存储器930的存储介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如光盘)、或者半导体介质(例如固态硬盘)等。辅助存储器930也可用于存储程序代码和数据,以便于处理器911调用辅助存储器930中存储的程序代码和数据实现一定的功能。此外,检测装置900可能包含相比于图9展示的更多或者更少的组件,或者有不同的组件配置方式。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并或删减;本申请实施例装置中的模块可以根据实际需要进行划分、合并或删减。
以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (17)

1.一种控制流完整性检测系统,其特征在于,所述检测系统包括存储器以及检测模块,其中,
所述存储器,用于接收第一返回地址和与所述第一返回地址对应的第一标签,将所述第一标签与所述第一返回地址分别存储到所述存储器中第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域,其中,所述第一存储区域的访问权限为应用软件不可读写;
所述检测模块,用于:接收第二标签,其中,所述第二标签来自所述第一存储区域中所述第一地址对应的区域;
验证所述第二标签的值是否等于预设值;
当所述第二标签的值不等于预设值时,所述检测模块生成告警信号。
2.根据权利要求1所述的系统,其特征在于,所述存储器还用于:
在确定所述第一返回地址被更新时,更新存储于所述第一存储区域中第一地址对应的区域的第一标签,其中,更新后的第一标签的值不等于所述预设值。
3.根据权利要求1所述的系统,其特征在于,所述系统还包括:
第一寄存器,用于将所述第一返回地址和所述第一标签发送给所述存储器;
第二寄存器,用于生成所述第一标签,并向所述第一寄存器发送所述第一标签以及所述第一返回地址。
4.根据权利要求1所述的系统,其特征在于,所述系统还包括:
第一寄存器,用于将所述第一返回地址和所述第一标签发送给所述存储器;
第二寄存器,用于将所述第一返回地址发送给标签生成模块;
标签生成模块,用于在接收到所述第一返回地址之后,生成所述第一标签,并向所述第一寄存器发送所述第一标签和所述第一返回地址。
5.根据权利要求3所述的系统,其特征在于,
所述第一寄存器,还用于接收所述第二标签与第二返回地址,其中,所述第二返回地址来自所述第二存储区域中第二地址对应的区域;
在验证所述第二标签的值是否等于预设值之前,所述检测模块还用于:
在所述第一寄存器接收所述第二标签和所述第二返回地址时,接收所述存储器发送的所述第二标签;或者,
在所述第一寄存器接收所述第二标签和所述第二返回地址之后,接收所述第一寄存器发送的所述第二标签。
6.根据权利要求4所述的系统,其特征在于,
所述第一寄存器,还用于接收所述第二标签与第二返回地址,其中,所述第二返回地址来自所述第二存储区域中第二地址对应的区域;
在验证所述第二标签的值是否等于预设值之前,所述检测模块还用于:
在所述第一寄存器接收所述第二标签和所述第二返回地址时,接收所述存储器发送的所述第二标签;或者,
在所述第一寄存器接收所述第二标签和所述第二返回地址之后,接收所述第一寄存器发送的所述第二标签。
7.根据权利要求3-6任一项所述的系统,其特征在于,所述第一寄存器是连接寄存器,所述第二寄存器是程序计数器寄存器。
8.一种控制流完整性检测方法,其特征在于,所述方法应用于处理器,所述处理器包括检测模块和第一寄存器,所述处理器与存储器连接,所述方法包括:
所述第一寄存器将第一返回地址和与所述第一返回地址对应的第一标签发送给所述存储器,其中,所述第一标签与所述第一返回地址分别存储到所述存储器中第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域,所述第一存储区域的访问权限为应用软件不可读写;
所述检测模块接收第二标签,其中,所述第二标签来自所述第一存储区域中第一地址对应的区域;
所述检测模块验证所述第二标签的值是否等于预设值,当所述第二标签的值不等于预设值时,所述检测模块生成告警信号。
9.根据权利要求8所述的方法,其特征在于,所述处理器还包括第二寄存器,所述方法还包括:
在所述第一寄存器将第一返回地址和与所述第一返回地址对应的第一标签发送给所述存储器之前,所述第二寄存器生成所述第一标签,并向所述第一寄存器发送所述第一标签以及所述第一返回地址。
10.根据权利要求8所述的方法,其特征在于,所述处理器还包括第二寄存器与标签生成模块,所述方法还包括:
在所述第一寄存器将第一返回地址和与所述第一返回地址对应的第一标签发送给所述存储器之前,
所述第二寄存器将所述第一返回地址发送给所述标签生成模块;
所述标签生成模块在接收到所述第一返回地址之后,生成所述第一标签,并向所述第一寄存器发送所述第一标签和所述第一返回地址。
11.根据权利要求9所述的方法,其特征在于,所述方法还包括:
在所述检测模块验证所述第二标签的值是否等于预设值之前,所述第一寄存器接收所述第二标签和第二返回地址,所述第二返回地址来自所述第二存储区域中第二地址对应的区域;
所述检测模块接收第二标签,包括:
在所述第一寄存器接收所述第二标签和所述第二返回地址时,接收所述存储器发送的所述第二标签;或者,
在所述第一寄存器接收所述第二标签和所述第二返回地址之后,接收所述第一寄存器发送的所述第二标签。
12.根据权利要求10所述的方法,其特征在于,所述方法还包括:
在所述检测模块验证所述第二标签的值是否等于预设值之前,所述第一寄存器接收所述第二标签和第二返回地址,所述第二返回地址来自所述第二存储区域中第二地址对应的区域;
所述检测模块接收第二标签,包括:
在所述第一寄存器接收所述第二标签和所述第二返回地址时,接收所述存储器发送的所述第二标签;或者,
在所述第一寄存器接收所述第二标签和所述第二返回地址之后,接收所述第一寄存器发送的所述第二标签。
13.根据权利要求9-12任一项所述的方法,其特征在于,所述第一寄存器是连接寄存器,所述第二寄存器是程序计数器寄存器。
14.一种控制流完整性检测装置,其特征在于,所述装置包括检测模块和第一存储模块,所述检测装置与存储器连接,其中,
所述第一存储模块,用于将第一返回地址和与所述第一返回地址对应的第一标签发送给存储器,其中,所述第一标签与所述第一返回地址分别存储到所述存储器中第一存储区域中第一地址对应的区域和第二存储区域中第二地址对应的区域,所述第一存储区域的访问权限为应用软件不可读写;
所述检测模块,用于:接收第二标签,其中,所述第二标签来自所述第一存储区域中第一地址对应的区域;
验证所述第二标签的值是否等于预设值;
当所述第二标签的值不等于预设值时,所述检测模块生成告警信号。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
第二存储模块,用于在所述第一存储模块将所述第一返回地址和与所述第一返回地址对应的第一标签发送给所述存储器之前,生成所述第一标签,并向所述第一存储模块发送所述第一标签以及所述第一返回地址。
16.根据权利要求14所述的装置,其特征在于,所述装置还包括:
标签生成模块,用于在接收到所述第一返回地址之后,生成所述第一标签,并向所述第一存储模块发送所述第一标签和所述第一返回地址;
第二存储模块,用于在所述第一存储模块将所述第一返回地址和与所述第一返回地址对应的第一标签发送给所述存储器之前,将所述第一返回地址发送给所述标签生成模块。
17.根据权利要求15或16所述的装置,其特征在于,
所述第一存储模块,还用于接收所述第二标签和第二返回地址,所述第二返回地址来自所述第二存储区域中第二地址对应的区域;
在验证所述第二标签的值是否等于预设值之前,所述检测模块还用于:
在所述第一存储模块接收所述第二标签和所述第二返回地址时,接收来自所述存储器的第二标签;或者,
在所述第一存储模块接收所述第二标签和所述第二返回地址之后,接收所述第一存储模块发送的所述第二标签。
CN201910540371.1A 2019-06-21 2019-06-21 控制流完整性检测方法、装置及系统 Active CN110378117B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910540371.1A CN110378117B (zh) 2019-06-21 2019-06-21 控制流完整性检测方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910540371.1A CN110378117B (zh) 2019-06-21 2019-06-21 控制流完整性检测方法、装置及系统

Publications (2)

Publication Number Publication Date
CN110378117A CN110378117A (zh) 2019-10-25
CN110378117B true CN110378117B (zh) 2022-12-30

Family

ID=68249256

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910540371.1A Active CN110378117B (zh) 2019-06-21 2019-06-21 控制流完整性检测方法、装置及系统

Country Status (1)

Country Link
CN (1) CN110378117B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111030991B (zh) * 2019-11-06 2022-02-11 温州大学 一种用于数据处理器的防御控制流攻击方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104951697A (zh) * 2014-03-28 2015-09-30 英特尔公司 来自过程指令的返回-目标限制性返回、处理器、方法及系统
CN107194252A (zh) * 2017-05-09 2017-09-22 华中科技大学 一种完全上下文敏感的程序控制流完整性保护方法和系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10289842B2 (en) * 2015-11-12 2019-05-14 Samsung Electronics Co., Ltd. Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation
US10536264B2 (en) * 2016-12-28 2020-01-14 Intel Corporation Efficient cryptographically secure control flow integrity protection

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104951697A (zh) * 2014-03-28 2015-09-30 英特尔公司 来自过程指令的返回-目标限制性返回、处理器、方法及系统
CN107194252A (zh) * 2017-05-09 2017-09-22 华中科技大学 一种完全上下文敏感的程序控制流完整性保护方法和系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于IPT硬件的内核模块ROP透明保护机制;王心然等;《软件学报》;20180111(第05期);全文 *

Also Published As

Publication number Publication date
CN110378117A (zh) 2019-10-25

Similar Documents

Publication Publication Date Title
US10089470B2 (en) Event-based apparatus and method for securing BIOS in a trusted computing system during execution
US9183394B2 (en) Secure BIOS tamper protection mechanism
US9129113B2 (en) Partition-based apparatus and method for securing bios in a trusted computing system during execution
US9507942B2 (en) Secure BIOS mechanism in a trusted computing system
US9367689B2 (en) Apparatus and method for securing BIOS in a trusted computing system
CN109558372B (zh) 用于安全处理器的设备和方法
US10049217B2 (en) Event-based apparatus and method for securing bios in a trusted computing system during execution
US9779242B2 (en) Programmable secure bios mechanism in a trusted computing system
US9798880B2 (en) Fuse-enabled secure bios mechanism with override feature
CN110378117B (zh) 控制流完整性检测方法、装置及系统
US9779243B2 (en) Fuse-enabled secure BIOS mechanism in a trusted computing system
US10055588B2 (en) Event-based apparatus and method for securing BIOS in a trusted computing system during execution
EP3316168B1 (en) Fuse-enabled secure bios mechanism in a trusted computing system
EP3316167B1 (en) Programmable secure bios mechanism in a trusted computing system
US9767288B2 (en) JTAG-based secure BIOS mechanism in a trusted computing system
CN109190383B (zh) 访问指令的处理方法、装置及设备
US10095868B2 (en) Event-based apparatus and method for securing bios in a trusted computing system during execution
EP3316169B1 (en) Jtag-based secure bios mechanism in a trusted computing system
EP3316170B1 (en) Fuse-enabled secure bios mechanism with override feature

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