CN112100686A - 一种基于arm指针验证的内核代码指针完整性保护方法 - Google Patents
一种基于arm指针验证的内核代码指针完整性保护方法 Download PDFInfo
- Publication number
- CN112100686A CN112100686A CN202010885933.9A CN202010885933A CN112100686A CN 112100686 A CN112100686 A CN 112100686A CN 202010885933 A CN202010885933 A CN 202010885933A CN 112100686 A CN112100686 A CN 112100686A
- Authority
- CN
- China
- Prior art keywords
- pointer
- sensitive
- code
- sensitive pointer
- variable
- 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
Links
- 238000012795 verification Methods 0.000 title claims abstract description 31
- 238000000034 method Methods 0.000 title claims abstract description 26
- 239000003607 modifier Substances 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 8
- 238000004458 analytical method Methods 0.000 description 5
- 230000010354 integration Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 3
- 238000002347 injection Methods 0.000 description 3
- 239000007924 injection Substances 0.000 description 3
- 239000000243 solution Substances 0.000 description 3
- 108010034145 Helminth Proteins Proteins 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007123 defense Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 244000000013 helminth Species 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000001681 protective effect Effects 0.000 description 1
- 230000001012 protector Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
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/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Technology Law (AREA)
- Multimedia (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种基于ARM指针验证的内核代码指针完整性保护方法,利用指针验证码对内核中所有的敏感指针提供完整性保护。此方法包括如下步骤:(1)定位内核代码中所有的敏感指针;(2)插入指针验证指令使得:向内存写入敏感指针前生成并嵌入指针验证码,从内存读入敏感指针后检查指针验证码;(3)修改内核启动代码,在启动早期初始化指针验证特性,随后初始化全局敏感指针的指针验证码。本发明不仅保护了内核的控制流完整性,也能防止攻击者通过篡改数据指针间接篡改代码指针,在内核中全面保护了代码指针完整性。
Description
技术领域
本发明涉及计算机系统安全领域,尤其涉及一种基于ARM指针验证(PointerAuthentication,PA)的内核代码指针完整性(Code Pointer Integrity,CPI)的保护方法。
背景技术
操作系统是计算机系统运行的基础,其上任何安全问题会直接危害系统整体安全。近年来,针对操作系统的攻击层出不穷,如2010年的震网病毒和2017到2019年的WannaCry蠕虫式勒索病毒。根据攻击手段的演化,对操作系统的攻击主要分为三类:代码注入攻击、代码重用攻击以及非控制数据攻击。与此同时,操作系统安全在攻击者和防护者的不断对抗中得到很大提升,随着抗代码注入攻击硬件安全特性的大规模部署,主流操作系统均已实现基于硬件的抗代码注入攻击防护。攻击者无法注入新的代码,转而篡改系统中的代码指针,控制系统控制流重用已有代码片段构造攻击载荷,被称为代码重用攻击。篡改返回地址的ROP攻击和篡改函数指针的JOP攻击都是常见的代码重用攻击技术。非控制数据攻击由于限制条件多、攻击载荷复杂以及通用性较低等特点,目前并未被攻击者广泛采用。抵御代码重用攻击成为当下操作系统防护的重点问题。
已有的针对代码重用攻击的保护技术主要可以分为基于控制流完整性(Control-Flow Integrity,CFI)和基于内存完整性的两类保护方法。基于控制流完整性的保护只对控制数据的跳转进行限制,不对控制数据(即代码指针)本身进行保护。这类保护方案通常需要事先对程序进行分析,创建精准的控制流图(Control-Flow Graph,CFG),对于每一个控制数据构建允许跳转目标的集合;然后在运行时根据事先建立的控制流图对程序跳转进行检查,不允许控制流图以外的任何跳转。但令人遗憾的是,大规模代码上静态分析得到的控制流图精确性往往受限,导致保护精度也受限。例如J.Li等在2018年发表的工作中(LiJ,Tong X,Zhang F,et al.Fine-CFI:Fine-grained control-flow integrity foroperating system kernels[J].IEEE Transactions on Information Forensics andSecurity,2018,13(6):1535-1550.)同时使用了基于指向(points-to)分析和基于类型分析的方法构建控制流图后,平均每个间接跳转依然有57个合法的跳转目标。另外运行时在跳转处(call-site)的检查也会引入无法忽视的运行时性能开销,严重影响被保护程序性能。
基于内存性完整性的保护方法着眼于保护控制数据本身,此类工作保证只有经过验证后的值才能写入到控制数据,因此不需要对控制数据在跳转时进行检查,提高了性能。然而早期的此类保护方法没有借助专用的安全硬件,造成性能低下。PointGuard(Cowan C,Beattie S,Johansen J,et al.PointGuardTM:Protecting pointers from bufferoverflow vulnerabilities[C]//Proceedings of the 12th conference on USENIXSecurity Symposium.2003,12:91-104.)使用简单的异或加密保护内存中的指针,以弥补性能上的不足,然而简单异或加密算法极易遭受攻击,安全性弱。2015年提出的CCFI(Mashtizadeh AJ,Bittau A,Boneh D,et al.CCFI:Cryptographically enforcedcontrol flow integrity[C]//Proceedings of the 22nd ACM SIGSAC Conference onComputer and Communications Security.2015:941-951.)利用x86平台的AES指令集实现高效地计算代码指针的消息验证码(Message Authentication Code,MAC),并利用MAC保护代码指针的完整性。然而CCFI依然引入了52%的性能开销,且不能对操作系统内核进行保护。
上述工作更严重的问题在于,它们仅能保护代码指针本身,却不能保护可用于访问代码指针的数据指针。利用这一防护漏洞,攻击者可以利用与COOP(Schuster F,TendyckT,Liebchen C,et al.Counterfeit object-oriented programming:On the difficultyof preventing code reuse attacks in C++applications[C]//2015IEEE Symposium onSecurity and Privacy.IEEE,2015:745-762.)相似的方法,通过篡改存有函数指针的内核对象的指针,实现间接劫持内核控制流的攻击。
CPI(Kuznetzov V,Szekeres L,Payer M,et al.Code-pointer integrity[M]//The Continuing Arms Race:Code-Reuse Attacks and Defenses.2018:81-116.)提出保护所有的敏感指针以实现代码指针完整性。敏感指针包括代码指针和可用于访问敏感指针的数据指针。虽然能实现全面的保护,但是在ARM平台上实现该工作的可行性受到后来研究者的质疑(Evans I,Fingeret S,Gonzalez J,et al.Missing the point(er):On theeffectiveness of code pointer integrity[C]//2015IEEE Symposium on Securityand Privacy.IEEE,2015:781-796.)。同时CPI只能保护用户态程序,无法直接应用于操作系统。
PARTS(Liljestrand H,Nyman T,Wang K,et al.PAC it up:Towards PointerIntegrity using ARM Pointer Authentication[C]//28th USENIX Security Symposium(USENIX Security 19).2019:177-194.)提出使用ARM平台的指针验证(PointerAuthentication,PA)特性实现对代码指针和数据指针的高效防护。遗憾的是,PARTS无法自动化地识别敏感的数据指针,同时也只能保护用户态程序。
发明内容
本发明实施例的目的是提供一种基于ARM指针验证的内核代码指针完整性保护方法,以高效地保护操作系统内核中代码指针的完整性。
为了达到上述目的,本发明实施例所采用的技术方案如下:
本发明实施例提供一种基于ARM指针验证的内核代码指针完整性保护方法,包括:
标记操作系统代码中所有的函数指针类型为敏感指针类型,得到初始化的敏感指针类型集,其中敏感指针类型集为所有敏感指针类型的集合;
根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集;
根据确定的敏感指针类型集,标记代码结构体中所有敏感指针类型的域为敏感指针域,得到初始化的敏感指针域集,其中敏感指针域集为所有敏感指针域的集合;根据确定的敏感指针类型集,标记代码中所有敏感指针类型的变量为敏感指针变量,得到初始化的敏感指针变量集,其中敏感指针变量集为所有敏感指针变量的集合;
根据代码语义、初始化的敏感指针域集和初始化的敏感指针变量集,计算并确定完整的敏感指针变量集和敏感指针域集;
根据确定的敏感指针变量集,对操作系统内核代码进行如下修改:在敏感指针变量写入内存的代码前插入PAC生成代码StoreGenkey(sensptr),在敏感指针变量从内存中读取的代码后插入PAC验证代码LoadAuthkey(sensptr),其中key表示128bit的PA密钥,sensptr表示敏感指针变量,当操作系统内核运行时,动态执行插入的PAC生成代码生成敏感指针的PAC,动态执行插入的PAC验证代码验证敏感指针的PAC,若PAC验证通过,则代码指针一定完整,反之,则代码指针完整性被破坏;
在操作系统内核启动代码中插入PA密钥初始化代码keyinit(),该代码开启ARMCPU的PA特性并用随机数初始化PA密钥;
根据确定的敏感指针变量集,确定该集合中的全局变量,记为全局敏感指针变量;
根据确定的全局敏感指针变量,在keyinit()之后插入全局敏感指针变量初始化代码sensvar_init()。该代码对所有全局敏感指针变量调用StoreGenkey(gsensptr),其中key表示128bit的PA密钥,gsensptr表示全局敏感指针变量。
进一步地,根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集,包括:
根据代码中包含的类型信息,找到所有包含敏感指针类型的结构体类型,将指向这些结构体的指针类型加入敏感指针类型集,重复这一步骤直到敏感指针类型集稳定。
进一步地,根据代码语义、初始化的敏感指针域集和初始化的敏感指针变量集,计算并确定完整的敏感指针变量集和敏感指针域集,包括:
所有来自敏感指针域、被敏感指针变量赋值、与敏感指针变量比较大小或者成为间接调用目标的变量都被标记为敏感指针变量,若敏感指针变量来自于结构体的一个域,则同时标记该域为敏感指针域,重复这一步骤直到敏感指针变量集和敏感指针域集稳定。
进一步地,在敏感指针变量写入内存的代码前插入PAC生成代码StoreGenkey(sensptr),包括:
若敏感指针变量为代码指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的PACIA指令为敏感代码指针写入PAC,其中PA密钥保存在apia寄存器,若敏感指针变量为数据指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的PACDA指令为敏感数据指针写入PAC,其中PA密钥保存在apda寄存器。
进一步地,在敏感指针变量从内存中读取的代码后插入PAC验证代码LoadAuthkey(sensptr),包括:
若敏感指针变量为代码指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的AUTIA指令为敏感代码指针验证PAC,其中PA密钥保存在apia寄存器,若敏感指针变量为数据指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的AUTDA指令为敏感数据指针验证PAC,其中PA密钥保存在apda寄存器;如果验证不通过,则表明操作系统内核的代码指针完整性被破坏,终止操作系统内核继续执行或是引发警报。
根据以上技术方案,本发明的有益效果是,本发明能自动识别操作系统内核中的所有敏感指针,节省了人工分析的时间且保证覆盖了全部的敏感指针;本发明自动插入保护敏感指针的代码,可以有效抵抗攻击者通过直接篡改代码指针,或是通过篡改内核对象指针间接篡改代码指针造成的代码重用攻击;本发明利用了ARM提供的基于硬件的指针验证功能,减少了保护所有敏感指针带来的性能开销。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例提供一种基于ARM指针认证的内核代码指针完整性保护方法的流程示意图;
图2是本发明实施例提供中ARM平台上指针验证中PAC指针的格式。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本发明实施例提供的一种基于ARM指针验证的内核代码指针完整性保护方法的流程图;本实施例提供的一种基于ARM指针验证的内核代码指针完整性保护方法,利用指针验证码对内核中所有的敏感指针(包括代码指针和能用于访问代码指针的数据指针)提供完整性保护,本实施例以保护Linux操作系统内核的代码指针为例来进行说明,该方法包括以下步骤:
步骤S101,标记操作系统代码中所有的函数指针类型为敏感指针类型,得到初始化的敏感指针类型集,其中敏感指针类型集为所有敏感指针类型的集合;
具体地,首先利用LLVM10编译器编译Linux v4.9.78内核,生成整个Linux内核的中间表示码(Intermediate Representation,IR),记作IRLinux,相比于源代码,IRLinux可以使后续的分析更加便捷;根据IRLinux包含的类型信息,将其中所有函数指针类型添加到初始化的敏感指针类型集。
步骤S102,根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集;
具体地,遍历IRLinux中包含的所有结构体类型,采用深度优先搜索(Depth-firstsearch,DFS)策略处理嵌套的结构体;对于一个结构体,如果它具有敏感指针类型的域,则将指向该结构体的指针类型也添加到敏感指针类型集中;遍历结构体的过程将重复直到敏感指针类型集的大小不再变化为止,所得到的完整的敏感指针类型集包含了所有的敏感代码指针和敏感数据指针。
步骤S103,根据确定的敏感指针类型集,标记代码结构体中所有敏感指针类型的域为敏感指针域,得到初始化的敏感指针域集,其中敏感指针域集为所有敏感指针域的集合;根据确定的敏感指针类型集,标记代码中所有敏感指针类型的变量为敏感指针变量,得到初始化的敏感指针变量集,其中敏感指针变量集为所有敏感指针变量的集合;
具体地,首先遍历IRLinux中结构体的所有域并确定初始的敏感指针域集;再遍历IRLinux包含的所有变量并确定每个变量是否为初始的敏感指针变量,初始的敏感指针变量是敏感指针类型的变量,或者是是来自于敏感指针域的变量;
步骤S104,根据代码语义、初始化的敏感指针域集和初始化的敏感指针变量集,计算并确定完整的敏感指针变量集和敏感指针域集;
具体地,根据IRLinux中每条指令的语义,把所有来自敏感指针域、被敏感指针变量赋值、与敏感指针变量比较大小或者成为间接调用目标的变量都被标记为敏感指针变量,若敏感指针变量来自于结构体的一个域,则同时标记该域为敏感指针域,重复这一步骤直到敏感指针变量集和敏感指针域集稳定。
步骤S105,根据确定的敏感指针变量集,对操作系统内核代码进行如下修改:在敏感指针变量写入内存的代码前插入PAC生成代码StoreGenkey(sensptr),在敏感指针变量从内存中读取的代码后插入PAC验证代码LoadAuthkey(sensptr),其中key表示128bit的PA密钥,sensptr表示敏感指针变量,当操作系统内核运行时,动态执行插入的PAC生成代码生成敏感指针的PAC,动态执行插入的PAC验证代码验证敏感指针的PAC,若PAC验证通过,则代码指针一定完整,反之,则代码指针完整性被破坏;
具体地,若敏感指针变量为代码指针,则PAC生成代码StoreGenkey(sensptr)以敏感指针变量的内存地址作为修饰符,使用ARMv8.3提供的PACIA指令为敏感代码指针写入PAC,PAC验证代码LoadAuthkey(sensptr)以敏感指针变量的内存地址作为修饰符,使用ARMv8.3提供的AUTIA指令验证PAC,PA密钥保存在apia寄存器;若敏感指针变量为敏感数据指针,则PAC生成代码StoreGenkey(sensptr)以敏感指针变量的内存地址作为修饰符,使用ARMv8.3提供的PACDA指令为敏感数据指针写入PAC,PAC验证代码LoadAuthkey(sensptr)以敏感指针变量的内存地址作为修饰符,使用ARMv8.3提供的AUTDA指令验证PAC,PA密钥保存在apda寄存器。携带PAC的指针格式如图2所示。
步骤S106,在操作系统内核启动代码中插入PA密钥初始化代码keyinit(),该代码开启ARM CPU的PA特性并用随机数初始化PA密钥;
具体地,PA密钥初始化代码keyinit()被插入到start_kernel()中的boot_init_stack_canary()语句之后。keyinit()应该位于Linux操作系统的随机数生成器初始化函数之后,因为keyinit()需要调用随机数生成器。
步骤S107,根据确定的敏感指针变量集,确定该集合中的全局变量,记为全局敏感指针变量;
具体地,遍历敏感指针变量集,如果一个变量同时是IRLinux中的全局变量,则标记它为全局敏感指针变量。
步骤S108,根据确定的全局敏感指针变量,在keyinit()之后插入全局敏感指针变量初始化代码sensvar_init()。该代码对所有全局敏感指针变量调用StoreGenkey(gsensptr),其中key表示128bit的PA密钥,gsensptr表示全局敏感指针变量。
具体地,本步骤为全局敏感指针变量初始化PAC。全局敏感指针变量在初始化时默认具有完整性,本发明在操作系统内核启动时直接生成全局敏感指针对应的PAC,使初始化的全局敏感指针在被操作系统内核读取时能够通过LoadAuthkey(sensdata)当中的完整性验证。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,包括:
标记操作系统代码中所有的函数指针类型为敏感指针类型,得到初始化的敏感指针类型集,其中敏感指针类型集为所有敏感指针类型的集合;
根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集;
根据确定的敏感指针类型集,标记代码结构体中所有敏感指针类型的域为敏感指针域,得到初始化的敏感指针域集,其中敏感指针域集为所有敏感指针域的集合;根据确定的敏感指针类型集,标记代码中所有敏感指针类型的变量为敏感指针变量,得到初始化的敏感指针变量集,其中敏感指针变量集为所有敏感指针变量的集合;
根据代码语义、初始化的敏感指针域集和初始化的敏感指针变量集,计算并确定完整的敏感指针变量集和敏感指针域集;
根据确定的敏感指针变量集,对操作系统内核代码进行如下修改:在敏感指针变量写入内存的代码前插入PAC生成代码StoreGenkey(sensptr),在敏感指针变量从内存中读取的代码后插入PAC验证代码LoadAuthkey(sensptr),其中key表示128bit的PA密钥,sensptr表示敏感指针变量,当操作系统内核运行时,动态执行插入的PAC生成代码生成敏感指针的PAC,动态执行插入的PAC验证代码验证敏感指针的PAC,若PAC验证通过,则代码指针一定完整,反之,则代码指针完整性被破坏;
在操作系统内核启动代码中插入PA密钥初始化代码keyinit(),该代码开启ARM CPU的PA特性并用随机数初始化PA密钥;
根据确定的敏感指针变量集,确定该集合中的全局变量,记为全局敏感指针变量;
根据确定的全局敏感指针变量,在keyinit()之后插入全局敏感指针变量初始化代码sensvar_init(),该代码对所有全局敏感指针变量调用StoreGenkey(gsensptr),其中key表示128bit的PA密钥,gsensptr表示全局敏感指针变量。
2.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集,包括:
根据代码中包含的类型信息,找到所有包含敏感指针类型的结构体类型,将指向这些结构体的指针类型加入敏感指针类型集,重复这一步骤直到敏感指针类型集稳定。
3.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,根据代码语义、初始化的敏感指针域集和初始化的敏感指针变量集,计算并确定完整的敏感指针变量集和敏感指针域集,包括:
所有来自敏感指针域、被敏感指针变量赋值、与敏感指针变量比较大小或者成为间接调用目标的变量都被标记为敏感指针变量,若敏感指针变量来自于结构体的一个域,则同时标记该域为敏感指针域,重复这一步骤直到敏感指针变量集和敏感指针域集稳定。
4.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,在敏感指针变量写入内存的代码前插入PAC生成代码StoreGenkey(sensptr),包括:
若敏感指针变量为代码指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的PACIA指令为敏感代码指针写入PAC,其中PA密钥保存在apia寄存器,若敏感指针变量为数据指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的PACDA指令为敏感数据指针写入PAC,其中PA密钥保存在apda寄存器。
5.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,在敏感指针变量从内存中读取的代码后插入PAC验证代码LoadAuthkey(sensptr),包括:
若敏感指针变量为代码指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的AUTIA指令为敏感代码指针验证PAC,其中PA密钥保存在apia寄存器,若敏感指针变量为数据指针,则以敏感指针变量的内存地址作为修饰符,使用ARM提供的AUTDA指令为敏感数据指针验证PAC,其中PA密钥保存在apda寄存器;如果验证不通过,则表明操作系统内核的代码指针完整性被破坏,终止操作系统内核继续执行或是引发警报。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010885933.9A CN112100686B (zh) | 2020-08-28 | 2020-08-28 | 一种基于arm指针验证的内核代码指针完整性保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010885933.9A CN112100686B (zh) | 2020-08-28 | 2020-08-28 | 一种基于arm指针验证的内核代码指针完整性保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112100686A true CN112100686A (zh) | 2020-12-18 |
CN112100686B CN112100686B (zh) | 2022-04-08 |
Family
ID=73758308
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010885933.9A Active CN112100686B (zh) | 2020-08-28 | 2020-08-28 | 一种基于arm指针验证的内核代码指针完整性保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112100686B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032737A (zh) * | 2021-03-15 | 2021-06-25 | 清华大学 | 软件的保护方法、装置、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110029961A1 (en) * | 2009-07-31 | 2011-02-03 | Google Inc. | Native code module security for arm instruction set architectures |
CN102930185A (zh) * | 2012-11-28 | 2013-02-13 | 中国人民解放军国防科学技术大学 | 运行时程序安全关键数据的完整性验证方法及装置 |
CN104598808A (zh) * | 2015-01-08 | 2015-05-06 | 中国科学院信息工程研究所 | 基于寄存器架构的Android应用完整性验证方法 |
CN104809401A (zh) * | 2015-05-08 | 2015-07-29 | 南京大学 | 一种操作系统内核完整性保护方法 |
CN105260659A (zh) * | 2015-09-10 | 2016-01-20 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
CN105264513A (zh) * | 2013-06-23 | 2016-01-20 | 英特尔公司 | 用于过程返回地址验证的系统和方法 |
CN108780425A (zh) * | 2016-03-10 | 2018-11-09 | 微软技术许可有限责任公司 | 受保护指针 |
US20200082069A1 (en) * | 2018-09-11 | 2020-03-12 | Apple Inc. | Dynamic switching between pointer authentication regimes |
-
2020
- 2020-08-28 CN CN202010885933.9A patent/CN112100686B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110029961A1 (en) * | 2009-07-31 | 2011-02-03 | Google Inc. | Native code module security for arm instruction set architectures |
CN102930185A (zh) * | 2012-11-28 | 2013-02-13 | 中国人民解放军国防科学技术大学 | 运行时程序安全关键数据的完整性验证方法及装置 |
CN105264513A (zh) * | 2013-06-23 | 2016-01-20 | 英特尔公司 | 用于过程返回地址验证的系统和方法 |
CN104598808A (zh) * | 2015-01-08 | 2015-05-06 | 中国科学院信息工程研究所 | 基于寄存器架构的Android应用完整性验证方法 |
CN104809401A (zh) * | 2015-05-08 | 2015-07-29 | 南京大学 | 一种操作系统内核完整性保护方法 |
CN105260659A (zh) * | 2015-09-10 | 2016-01-20 | 西安电子科技大学 | 一种基于qemu的内核级代码重用型攻击检测方法 |
CN108780425A (zh) * | 2016-03-10 | 2018-11-09 | 微软技术许可有限责任公司 | 受保护指针 |
US20200082069A1 (en) * | 2018-09-11 | 2020-03-12 | Apple Inc. | Dynamic switching between pointer authentication regimes |
Non-Patent Citations (4)
Title |
---|
EVANS, I等: "Missing the Point(er): On the Effectiveness of Code Pointer Integrity", 《2015 IEEE SYMPOSIUM ON SECURITY AND PRIVACY SP》 * |
YUTIAN YANG等: "ARM Pointer Authentication based Forward-Edge and Backward-Edge Control Flow Integrity for Kernels", 《HTTP://ARXIV.ORG/ABS/1912.10666》 * |
叶雁秋等: "ARM架构中控制流完整性验证技术研究", 《计算机工程》 * |
童晓梦: "基于数据流完整性的内核保护技术研究", 《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032737A (zh) * | 2021-03-15 | 2021-06-25 | 清华大学 | 软件的保护方法、装置、电子设备及存储介质 |
CN113032737B (zh) * | 2021-03-15 | 2021-11-30 | 清华大学 | 软件的保护方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112100686B (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Davi et al. | Isomeron: Code Randomization Resilient to (Just-In-Time) Return-Oriented Programming. | |
US7853803B2 (en) | System and method for thwarting buffer overflow attacks using encrypted process pointers | |
US9514305B2 (en) | Code pointer authentication for hardware flow control | |
CN107077562B (zh) | 用于动态控制代码执行的计算机实现的方法和系统 | |
US9390264B2 (en) | Hardware-based stack control information protection | |
US10528729B2 (en) | Methods and systems for defending against cyber-attacks | |
CN101866406A (zh) | 一种栈溢出攻击防御方法 | |
Shi et al. | InfoShield: A security architecture for protecting information usage in memory | |
WO2020057603A1 (zh) | 检测堆栈中返回地址被篡改的方法及装置 | |
Zhang et al. | Recfa: Resilient control-flow attestation | |
Ismail et al. | Tightly Seal Your Sensitive Pointers with {PACTight} | |
US8621238B1 (en) | Using software-based decision procedures to control instruction-level execution | |
CN112100686B (zh) | 一种基于arm指针验证的内核代码指针完整性保护方法 | |
Adiletta et al. | Mayhem: Targeted corruption of register and stack variables | |
WO2001097010A2 (en) | Data processing method and device for protected execution of instructions | |
CN111881485B (zh) | 一种基于arm指针验证的内核敏感数据完整性保护方法 | |
Zonouz et al. | Dynamic memory protection via Intel SGX-supported heap allocation | |
Yuan et al. | CAWDOR: compiler assisted worm defense | |
CN114981811A (zh) | 用于软件安全的装置和方法 | |
Piromsopa et al. | Defeating buffer-overflow prevention hardware | |
CN114547651B (zh) | 一种基于链式加密的操作系统中断上下文保护方法 | |
CN117972799A (zh) | 一种应用于arm处理器的指针保护方法、计算机系统 | |
KR102258408B1 (ko) | 반환 명령어 난독화 방법 및 난독화된 반환 명령어 실행방법 | |
Kisore et al. | FFRR: a software diversity technique for defending against buffer overflow attacks | |
Tsantekidis et al. | MMU-based Access Control for Libraries. |
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 |