当前位置: 首页 > 专利查询>浙江大学专利>正文

一种基于ARM指针验证的内核代码指针完整性保护方法技术

技术编号:26763313 阅读:157 留言:0更新日期:2020-12-18 23:23
本发明专利技术公开了一种基于ARM指针验证的内核代码指针完整性保护方法,利用指针验证码对内核中所有的敏感指针提供完整性保护。此方法包括如下步骤:(1)定位内核代码中所有的敏感指针;(2)插入指针验证指令使得:向内存写入敏感指针前生成并嵌入指针验证码,从内存读入敏感指针后检查指针验证码;(3)修改内核启动代码,在启动早期初始化指针验证特性,随后初始化全局敏感指针的指针验证码。本发明专利技术不仅保护了内核的控制流完整性,也能防止攻击者通过篡改数据指针间接篡改代码指针,在内核中全面保护了代码指针完整性。

【技术实现步骤摘要】
一种基于ARM指针验证的内核代码指针完整性保护方法
本专利技术涉及计算机系统安全领域,尤其涉及一种基于ARM指针验证(PointerAuthentication,PA)的内核代码指针完整性(CodePointerIntegrity,CPI)的保护方法。
技术介绍
操作系统是计算机系统运行的基础,其上任何安全问题会直接危害系统整体安全。近年来,针对操作系统的攻击层出不穷,如2010年的震网病毒和2017到2019年的WannaCry蠕虫式勒索病毒。根据攻击手段的演化,对操作系统的攻击主要分为三类:代码注入攻击、代码重用攻击以及非控制数据攻击。与此同时,操作系统安全在攻击者和防护者的不断对抗中得到很大提升,随着抗代码注入攻击硬件安全特性的大规模部署,主流操作系统均已实现基于硬件的抗代码注入攻击防护。攻击者无法注入新的代码,转而篡改系统中的代码指针,控制系统控制流重用已有代码片段构造攻击载荷,被称为代码重用攻击。篡改返回地址的ROP攻击和篡改函数指针的JOP攻击都是常见的代码重用攻击技术。非控制数据攻击由于限制条件多、攻击载荷复杂以及通用性较低等特点,目前并未被攻击者广泛采用。抵御代码重用攻击成为当下操作系统防护的重点问题。已有的针对代码重用攻击的保护技术主要可以分为基于控制流完整性(Control-FlowIntegrity,CFI)和基于内存完整性的两类保护方法。基于控制流完整性的保护只对控制数据的跳转进行限制,不对控制数据(即代码指针)本身进行保护。这类保护方案通常需要事先对程序进行分析,创建精准的控制流图(Control-FlowGraph,CFG),对于每一个控制数据构建允许跳转目标的集合;然后在运行时根据事先建立的控制流图对程序跳转进行检查,不允许控制流图以外的任何跳转。但令人遗憾的是,大规模代码上静态分析得到的控制流图精确性往往受限,导致保护精度也受限。例如J.Li等在2018年发表的工作中(LiJ,TongX,ZhangF,etal.Fine-CFI:Fine-grainedcontrol-flowintegrityforoperatingsystemkernels[J].IEEETransactionsonInformationForensicsandSecurity,2018,13(6):1535-1550.)同时使用了基于指向(points-to)分析和基于类型分析的方法构建控制流图后,平均每个间接跳转依然有57个合法的跳转目标。另外运行时在跳转处(call-site)的检查也会引入无法忽视的运行时性能开销,严重影响被保护程序性能。基于内存性完整性的保护方法着眼于保护控制数据本身,此类工作保证只有经过验证后的值才能写入到控制数据,因此不需要对控制数据在跳转时进行检查,提高了性能。然而早期的此类保护方法没有借助专用的安全硬件,造成性能低下。PointGuard(CowanC,BeattieS,JohansenJ,etal.PointGuardTM:Protectingpointersfrombufferoverflowvulnerabilities[C]//Proceedingsofthe12thconferenceonUSENIXSecuritySymposium.2003,12:91-104.)使用简单的异或加密保护内存中的指针,以弥补性能上的不足,然而简单异或加密算法极易遭受攻击,安全性弱。2015年提出的CCFI(MashtizadehAJ,BittauA,BonehD,etal.CCFI:Cryptographicallyenforcedcontrolflowintegrity[C]//Proceedingsofthe22ndACMSIGSACConferenceonComputerandCommunicationsSecurity.2015:941-951.)利用x86平台的AES指令集实现高效地计算代码指针的消息验证码(MessageAuthenticationCode,MAC),并利用MAC保护代码指针的完整性。然而CCFI依然引入了52%的性能开销,且不能对操作系统内核进行保护。上述工作更严重的问题在于,它们仅能保护代码指针本身,却不能保护可用于访问代码指针的数据指针。利用这一防护漏洞,攻击者可以利用与COOP(SchusterF,TendyckT,LiebchenC,etal.Counterfeitobject-orientedprogramming:OnthedifficultyofpreventingcodereuseattacksinC++applications[C]//2015IEEESymposiumonSecurityandPrivacy.IEEE,2015:745-762.)相似的方法,通过篡改存有函数指针的内核对象的指针,实现间接劫持内核控制流的攻击。CPI(KuznetzovV,SzekeresL,PayerM,etal.Code-pointerintegrity[M]//TheContinuingArmsRace:Code-ReuseAttacksandDefenses.2018:81-116.)提出保护所有的敏感指针以实现代码指针完整性。敏感指针包括代码指针和可用于访问敏感指针的数据指针。虽然能实现全面的保护,但是在ARM平台上实现该工作的可行性受到后来研究者的质疑(EvansI,FingeretS,GonzalezJ,etal.Missingthepoint(er):Ontheeffectivenessofcodepointerintegrity[C]//2015IEEESymposiumonSecurityandPrivacy.IEEE,2015:781-796.)。同时CPI只能保护用户态程序,无法直接应用于操作系统。PARTS(LiljestrandH,NymanT,WangK,etal.PACitup:TowardsPointerIntegrityusingARMPointerAuthentication[C]//28thUSENIXSecuritySymposium(USENIXSecurity19).2019:177-194.)提出使用ARM平台的指针验证(PointerAuthentication,PA)特性实现对代码指针和数据指针的高效防护。遗憾的是,PARTS无法自动化地识别敏感的数据指针,同时也只能保护用户态程序。
技术实现思路
本专利技术实施例的目的是提供一种基于ARM指针验证的内核代码指针完整性保护方法,以高效地保护操作系统内核中代码指针的完整性。为了达到上述目的,本专利技术实施例所采用的技术方案如下:本专利技术实施例提供一种基于ARM指针验证的内核代码指针完整性保护方法,包括:标记操作系统代码中所有的函数指针类型为敏感指针类型,得到初始化的敏感指针类型集,其中敏感指针类型集为所有敏感指针类型的集合;根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集;根本文档来自技高网
...

【技术保护点】
1.一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,包括:/n标记操作系统代码中所有的函数指针类型为敏感指针类型,得到初始化的敏感指针类型集,其中敏感指针类型集为所有敏感指针类型的集合;/n根据初始化的敏感指针类型集和代码中包含的类型信息,计算并确定完整的敏感指针类型集;/n根据确定的敏感指针类型集,标记代码结构体中所有敏感指针类型的域为敏感指针域,得到初始化的敏感指针域集,其中敏感指针域集为所有敏感指针域的集合;根据确定的敏感指针类型集,标记代码中所有敏感指针类型的变量为敏感指针变量,得到初始化的敏感指针变量集,其中敏感指针变量集为所有敏感指针变量的集合;/n根据代码语义、初始化的敏感指针域集和初始化的敏感指针变量集,计算并确定完整的敏感指针变量集和敏感指针域集;/n根据确定的敏感指针变量集,对操作系统内核代码进行如下修改:在敏感指针变量写入内存的代码前插入PAC生成代码StoreGen

【技术特征摘要】
1.一种基于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表示全局敏感指针变量。


2.根据权利要求1所述一种基于ARM指针验证的内核代码指针完整性保护方法,其特征在于,根据初始化的敏感...

【专利技术属性】
技术研发人员:杨昱天朱凇伯申文博周亚金任奎王文海
申请(专利权)人:浙江大学
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1