第44卷第4期2021年4月
Vol.44Ao.4
Apr.2021计算机学报
CHINESE JOURNAL OF COMPUTERS
牛伟纳年赵成洋年张小松年,黄晓祥年蒋廉年张詢旋年
年(子科技大学计算机科学与工程学院网络空间安全研究院成都611731)
鹏程实验室网络空间安全研究中心广东深圳518000)
摘要面向返回编程(Return-Oriented Programming,ROU)是针对软件漏洞利用最广泛的攻击技术之一,能够
绕过数据执行保护、地址空间布局随机化等防御机制•本文提出了一种基于硬件的NO攻击实时检测方法,在 不需要任何边缘信息鹏如代码、编译器支持)和二进制重写的情况下,利用现代CPU中的硬件性能计数器监控
密封油目标程序执行过程,提取NO攻击发生时底层硬件事件特征来实时检测NO攻击•然后,在32位Lit实验环
境下实现了原型系统ROPDetector,使用真实的NO攻击与漏洞进行实验,并与同类方法进行了对比实验,最后
评估了系统的性能消耗然验结果表明,该方法能有效地检测真实的NO攻击,在分别以6次和9次错误预测
返回指令为检测周期时,系统性能消耗仅有5.05%和5.25%,磁盘I/O性能消耗仅有0.94%和2%,网络I/O性 能消耗仅有0.06%和0.78%.
关键词面向返回编程;硬件事件;实时检测;硬件性能计数器;错误预测返回指令
中图法分类号TP304DPI号10.11897/SP.J.1016.2021.本761
ROPDetector:A Real-time Detection Method of RPD Attack Based or
Hardware Performance Counter
NIR WeiOm〉ZHAO Cheng-Yanr n ZHANG Xiao-Song15R)HUANG Xiao-Oianr n
JIANG Lim年ZHANG Ke-Xuag n
年(.School of CompuLer Science and Engineering,Inslilule for Cyber Security,
UniuersiLy of ElecLronic Science anE Technolog,of Chinn,Chengdr611731)
1(.Cyberspace SecuriL,Research Cenfr,Pen,Chen,Laboraloro,Chenzhen,Guangdond518040)
Abstract Neturn-oriente-programmin-(ROD)is one ol the most commo-attack techniques
for software vulnerabilitieo.Attackero cae use this attack technique to tampeo with the program execution flow to ruu maliciouc coPe.ROD attack it o generalizatiou ot the ret-to-lit attack.A
the rW-to-lib attack,the attactea reusec the entire libk library.While in the ROD attack,ths attactea chains fora o spiteful attack chain to carry out the attack,chick cau bypase the dah execution protection,address spare layouh randomizatioo defense mechanism,anP ultimatelo destrop the user-levet and kernel-levet software modulee.Amon-thern,gadgeh refere
to the instruction fragmeft ending with the return instruction in the target prograc ps the librarp ftmetion called bp the target prograc.A series of special registert foe recordin-the numbee of hardware-relaten activities built into the CPA of modern computere arc called hardwarc performancc
收稿日期:2019-11-12;在线发布日期:2020-05-Y.本课题得到国家重点研发计划鹏016QY1121)、国家自然科学基金(61902260, A9A216)、四川省科技支撑项标鹏17CCH71)资助.牛伟纳该士该师该要研究方向为网络攻击检测、恶意代码分析.R-mail: niuweinal@126.赵成洋,硕士研究生,主要研究方向为网络攻击检测.张小松(通信作者),博士,使授,主要研究领域为网络攻击检测、恶意代码分析.Email:joWnsonzxsm 黄晓祥,硕士研究生,主要研究方向为系统安全.蒋廉,硕士研究生,主要研究方向为网络攻击检测•张电可旋该士研究生该要研究方向为二进制安全.
762计 算 机 学 报2021 年
counters (HPCs), which is designed for performance debugging of complex software systems.
Developers cat configure the HCC to monitos the execution of the target program. As with tradi
tional software analysic tools, they cat collect detailed performancr informatioo about the target
program. A is helpful to understanp program behavios bt runtime anp optimize their performance. Io responsr to the threah of ROC attacks , v largr numbes of researcher) v P homr anp abroad havr
imested io ths research of ROC defenss mechanisms , and havr proposed v serier of defense oe detection methohs. However, some existing defense techniques cac Oe overcome by cttackere , pc
suffer frorn high performancrIc this paper , ws observed anomalies io exceptional
underlying hardware events when ths ROC attach was happening. Aus to it, ws proposed p real-timc detection approach based on hardwars withoui my side informatioc (s. g. , sourer code, compilee
support) , which mW hardware performance counters in modere CPU to monitoe targei program execmon process md extracted the low-level featurs of hardwars events against ROC attach t
rmtinR. Then, ws implemented p prototype on x86-based Linux platform called ROPDetectos. Ws found v tiny program with buffes overflow vulnerabilitp, and used ROPGadget to construci 42 real ROC paylofs. Ws reproduced othes method which is alsp based on hardwars performancr
counters foe comparative experiments nd utilized real exploits which are fotrnd on the opec sourer exploitatioc platform t o verifp feasibilitp of ROPDetector. The experimental results
showed thai oue approach could eRicientlp detect real ROC attach with a higher detectiod rate. At last , we evaluated the performance overhead of our method through UnixEench, the dish I/O
performance overhead of oue method througO Bonnie + + , nd the netword 1/O performance
overhead of oue method through the Apa_che wed serves httpd-1. 2. 41. When the detectiod
interval T of ROPDetectos is ( rnis-predicted return instructiod cvents , the overall systern performance
drops Up 5. 05%, the dish I/O performance drops Up 0. 94%, and the netword I/O performance drops Up 0.06%. When the detectiod interval T of ROPDetectos is 4 rnis-predicted return
instructiod cvents , the overall systern performance drops Up 5.05%, the dish I/O performance drops by 0. 94%, and the netword I/O performance drops by 6. 06%.
Keywords return-oriented programminh ; hardware events ; real-timr detectiod ; hardware
performance counter ; mis-predicted return instructions
(CVE-2015-6,787)®. Wireshark(CVE-2015-67 36)③
等.针对ROP 攻击威胁,国内外大量研究人员投入 到ROP 防御机制研究中,并提出了一系列防御/检
测方法.
G-free^是第一个实用的且可以防御所有形式
ROP 攻击的方法,它集成了对齐UAW 密返回地
址、帧cookie 和代码重写技术.前三个技术都是在
1引言
面向返回编程是一种高级代码复用攻击技 术5攻击者可以利用这种攻击技术去篡改程序执 行流来执行恶意代码.W ROP 攻击中,攻击者将可 用的gadget 链接起来,构成恶意攻击链来进行攻
击,能够绕过数据执行保护、地址空间布局随机化
(Address Space Layout Randomization, ALSR)「幻
防御机制,最终达到用户级归和内核级软件模块的 破坏/其中,gadget 是指在目标程序或目标程序
所调用的库函数中以返回指令为结尾的指令片段.
近年来,如表1所示,大量与ROP 攻击相关的漏洞 被曝出来,例如 gliUe t CVE-2015-7547)①、pdfium
①
Google Seccs 让y Research. Glibc-getaddrinfo Stack-Based Buller Overflow. Wtp ://www. exploit-dp. com/exploits/ 39452/
②
Google Security Research. Pdfium CPDF_ Function : : Cab Stack-Based Buller Overflow, https ://www. exploit-dp. com/expl c —s /39165/
③
心电电极Google Seccs 让y Research. Wireshah-be_read(wtap_read_ byte_ or _ eof/mp2t _ find _ next _ per ) Stack-based B u IR s Overflow. Wtps ://www. exploit-db. com/exploits/38997/
4期牛伟纳等:ROPDetector:一种基于硬件性能计数器的ROP攻击实时检测方法763
表1ROP相关CVE
冷库蒸发器序号描述CVEt 0Adobe Flask Casi32InB OvL2014-0569
2Adobe Flask Domaid Memory UAF2015-0359
3IE COALineDashStyleArray InB Ovl.2013-2554
相册内页
4IE CButCd UAF21204792
5IE Cixeg Table Col Span Heap OvL2012-1873
3IE Execommang UAF21120499
7IE CDisplayPointee UAF211.0.797
8WiresharO2115077.
9IE OptCd ElemedB UAF2011-1996
10Adobe Clash Kern Parsing Int.OvI.2112015.5
11pdfium21150777
02Nginxl.3.9211.02127 11Glibc2.3.3211507547
11DNSTracerl.3211011191 11FFmpeg3.3.12117094.1
保护二进制文件中可用的对齐的自由分支指令(对齐的概念是指它只使用代码中已经存在的“预期”指令),利用现有的堆栈保护机制,把具有危险指令的函数作为一个短代码块整体,确保该函数内任何指令不能单独执行,只能以一个整体执行,保证攻击者不能直接跳转到该危险指令执行,这样才能执行自由分支指令.此外利free是针对各种可能出现分支指令未对齐的情况,通过代码重写或者一些其它手段来阻止这种情况发生.它有效消除了传统的利用lib库进行攻击的威胁,具有无需在目标进程中注入任何代码,性能开销非常低,且增加的文件大小也在接受范围内的优点.缺点是它是基于编译器进行定制的,需要提前收集编译器信息,实际应用不太现实.CFLoctong"〕通过对目标程序进行重编译来限制或是锁定异常控制流的数量来检测ROP攻击,但是这种技术本质上就不能检测以未对齐分支指令为结尾的ROP攻击.Return-less kernel^77是—种基于编译器的ROP攻击检测方法,它通过从内核镜像中移除:相关操作,将控制流数据从栈移动到专用区域.基于此方法,Shu。等人归提出了一种基于虚拟化的ROP攻击检测方法,但此方法需要被检测程序的源代码,然后在编译过程中在函数的头部和尾部插入控制流完整性检测.显然,以上方法都不能防御使用jmp或是call指令的ROD攻击.CFI-Mon⑷是通过分析运行时控制流轨迹来检测那些企图篡改程序控制流的攻击,但它具有较高的延时性,可能导致检测到攻击时攻击早就已经发生过了. MoCFW是在智能手机上检测篡改控制流攻击的框架,它能够实时地进行控制流完整性检查,且不需要目标程序的源代码,实验结果表明它在对IOS上流行的应用程序进行监测时的开销并不高.Coly-ctoonakis等⑴〕提出一种对任意数据都可以检测出ROD payloads的方法,该技术通过扫描目标程序地址空间中可执行代码的输入来检测ROD payloaSs.
TRUSS®〕和TaintChecto"〕使用二进制代码插桩的方式来检测ROP攻击,这类方法不仅会打破目标程序的二进制完整性,也会带来高昂的性能代价.例如具aintCheck的性能消耗更是高达20倍.为了克服性能消耗过高这一点,IPR[14]被提出来. IPR目的是破坏ROD gadget而不改变代码规模.但是它总是只破坏可执行地址空间的明显的gadgee,很难保证剩余的gadgee能否构成一次完整的ROD 攻击.ROPDefender:通过跟踪目标程序二进制指令的执行过程来检查软件控制流完整性进而检测是否受到ROD攻击.一旦目标程序发出调用指令, Defendee会将返回地址的副本存储到一个单独的影子堆栈中,在运行时检查目标程序执行过程中执行的返回指令,将其和影子堆栈上的顶部返回地址进行对比,以此来判断是不是恶意构造的ROD payloads.ROPDefendee能够检测ROP攻击,甚至可以检测到非预期的指令序列.缺点是系统会检查进程执行的每条机器指令,开销巨大,而且由于它的影子堆栈机制,只关注了以返回指令结尾的ROR gadget的防御,比较局限.CCFIR将所有的间接控制流分支指令的合法目标地址存储在一个基础数据库里,然后插桩二进制代码,规定所有的间接分支指令的目标地址只能是基础数据库里的地址.但是,一方面该方法可移植性差,因为它事先收集的地址数据库只能是某一个固定平台(例如:Windows10)上的共享代码库;另一方面,攻击者只需要使用非基础数据库里面的gadget就能绕过此检测机制.
为了有效扩展现有ROP攻击检测范围,基于硬件的方法KBounce会0和ROPecke会0被提出来,它们都使用最后分支记录(Last Branch Record, LBR)来监控程序的执行并追踪间接分支的目标地址,将
LBR中的地址和程序的控制流路径相比较来判断程序运行期间是否受到ROP攻击.这两种工具都具有良好的攻击类型覆盖和运行效率,相对于G f e来说,不太依赖编译器环境等多余信息.对于ROPDefendee来说,检测ROP攻击的类型更广.其中在Bouncer利用二进制重写技术编写代码,破坏了二级制代码完整性但I发了针对安全机制的兼容性问题,而且它只监视选定关键路径上的执行流,会错误遗漏其余路径上的ROP攻击.ROPeckee是一种基于Linux的反ROP方法,它使用LBR CPU
764计算科学报2026年寄存器来查潜在的gadget执行,另外需要一个静
态数据库检测将来可能调用的小工具.每当程序执行离开滑动窗口或调用关键的系统指令时博会触发检查.但是这个滑动窗口机制可能会被攻击者利用来绕过.ROPK++U-在ROPeRee的基础上进行扩展,在其内核模块中加入了ret-cheRO函数使□入了“ret”指令完整性检测机制,通过“call”与“ret”的—
—对应性来加强ROD攻击防御能力.缺点是与ROPeRee同样存在粗粒度被人为绕过的问题以及预先的静态数据库建立耗费大量的时间成本的问题.
基于硬件性能计数器(Aardwarc Performance Counter,RPC)的ROD攻击检测方法HDROPi20能够极大地减少性能开销,与前面的方法不同,它不再关注内存和LBR中的信息,从而省去了一个时间成本很大的环节.现代处理器利用分支预测器来提高性能该OPK击常常使它无法预测正确的分支目标,DROP「0通过检测给定执行路径上的错误预测是否异常地增加,来判断是否存在ROD攻击. SIGDROP「0利
用在-个检测周期内(6个错误预测返回指令)gadget长度与错误预测返回指令数的乘积小于等于总指令数作为检测逻辑来判断是否发生ROD攻击,但这种方法只能针对ROD攻击且攻击者可以利用long gadget来绕过这种检测机制. ROPSentet通过使用硬件性能计数器跟踪特定的硬件性能事件来观察、分析ROD攻击行为模式,检测的精度较高,在防御基于堆喷射的ROP攻击时性能消耗较低,但在防御非基于堆喷射的ROD攻击时性能消耗也在10%以上.
本文提出了基于配置硬件性能计数器获取异常特征来检测ROD攻击的方法—
—ROPDetector,G 可以在无源代码、无定制编译器支持和无二进制重写的情况下高效、低消耗地防御ROP攻击.同时,它适用于任何系统框架中该OPDetechr是一种通用、实用和低消耗的NP攻击检测机制.
本文的主要贡献可概括如下:
通)设计了一种通用且实用的ROP攻击检测方法该OPDetechr不需要源代码、定制编译器支持和二进制重写.
(2)
ROPDetectoe适用于任何平台,不依赖于特定的软件,不需要修改硬件.
⑶我们在基于X86的Linux平台上实现了ROPDetectoe,验证了它的正确性,并评估了它的系统性能消耗、磁盘1/O性能消耗和网络1/O性能消耗这些指标.2背景知识
2.1返回地址堆栈(Return Address StacB g
返回地址堆栈(RAS)°是一个存储着return 指令目标地址的先进后出的硬件栈.由于call指令与ret指令是一一对应的,当有一个call指令发生时,处理器会将下一条指令⑶返回目标地址)压入RAS的栈顶.当ret指令发生时,处理器会弹出RAS栈顶的预测地址,若与与程栈里的返回目标地址不同主则预测失败.
2.2面向返回编程(Return-Oriented Programming)
ROD攻击是w Y o-1指攻击的推广,在ret-ta-指攻击中,攻击者复用整个liba库.本ROP攻击中,攻击者在内存(目标程序或者是共享库)中到可用的代码片段——gadget,而后将构造一个有效载荷来将一系列gadget链接在一起.如图1所示,攻击者利用return指令将可利用库文件中的gadget 链接起来,就可以执行想要的任何操作.
图1ROP gadget链进行链接与攻击示意图
2.3硬件性能计数器通ardware Performance Counterg
现代计算机CPU中内置了一系列用于记录硬件相关活动发生次数的专用寄存器,被称为硬件性能计数器(Hardware Cerformance Counter,RPC)[Z%. HDC与硬件事件选择器一起,当指定的硬件事件发生时,计数器将递增.
HPC最初被设计用于复杂软件系统的性能调
4期牛伟纳等:ROPDetecmy—种基于硬件性能计数器的ROP攻击实时检测方法765
试,利用HPC,开发者可以更深入地理解运行时的程序行为和优化其性能2.开发者可以通过配置HPC监控目标程序执行与传统的软件分析工具一样能收集到目标程序的详细性能信息,但系统开销却低得多并且不需要修改源代码.
早期的处理器仅支持少部分事件并且HPC的数量也很少.在现代CPU中,预定义的可被监控的性能事件根据CPA微架构的不同也不同.例如,Intel PentiumP有两个HPCs和一百多种不同的事件; AMD Opterod有四个HPCs和超过一百种事件;相比之下,第六、七代Intel Core处理器2有数百种事件,如表2所示的架构兼容事件和部分架构非兼容事件.
表2第六、七代Intel Core CPU中部分性能事件
架构兼容性能事件描述非架构兼容体系事件(对分)描述
Unllalteg Core Cyclep Unllalteg Reference Cyclep Instruction-Retiren
LLC Reference
LLC Misset
Branch Instruction Retireg Branch Misses RetireF 时钟周期数
访问时钟周期数
有效执行的指令数
LLC的访问次数例括命中和未命中)
LLCC命中数
有效执行的分支指令数牙箱
分支未命中数
UOCEXECUTED.TIIREAD
BR_INST_RETIRED.此川!™?^
DTLB_DSSES
BR_INST_RETIRED.NEAR_RETURN
ITLB_MISSES
br_misp_retired.此创丁]。?^
三明治面料mem_inst_retired. ALL_LOADS
在所有端口上执行的微指令数目
条件分支指令数
DTLB未命中
返回分支指令数
ITLB未命中
条件分支指令预测失败
所有的载入指令数
3系统设计
3.1威胁模型
在我们的威胁模型中,我们允许攻击者利用目标程序软件漏洞,如缓冲区溢出等来获取程序栈的控制和发起ROP攻击.因此,我们假定攻击者知道目标程序的全部细节,并能向目标程序发送任意的输入.
3.2条件假设
我们假定CPU和操作系统开启了数据执行保护机制(Data Executiod Protection,DEC),编译程序过程中关闭栈保护机制.同时,攻击者有权限执行目标程序的二进制文件及其共享库文件来获得可用的gadget链,利用信息泄露或JIT-ROP对ust in time ROP)攻击绕过ASLR.
3.3ROPDetectoe的具体设计
经过我们实际ROP攻击的观察,发现ROP攻击在硬件层面具有以下特征:
例)每一个gadget的执行都会出现错误预测返回指令(Ds-preRcted returd instruction):R—■个ROP gadget都是以“预来指令为结尾,因为这些gadget都是攻击者构造的,没有与之对应的“预指指令且在原本的程序中并不会执行,故而都会被返回地址栈(RAS)错误预测.因此,当一个ROP载荷被执行时,会持续地出现错误预测返回指令.
例单一gadget的短指令:为了避免执行gadget 链过程中产生一些不必要的边际效应(如,更改了CPA状态、导致寄存器数值被异常修改而无法顺利执行gadget链剩余部分等):每一个gadget都仅有几条指令.最近的研究"表明真实攻击中的ROP gadget指令数一般都小于3.
对)指令转译后备缓冲区未命中数和数据转译后备缓冲区未命中数会异常增加:由于ROP gadget 链分布在不同的程序段,所以在执行过程中会不断地在多个页面间跳转,会导致大量的指令转译后备缓冲区(Instruction Translatiod Lookaside Buffer, ITLR)未命中和数据转译后备缓冲区(Data Tr会和lation Lookaside Buffer攻TLB)未命中.
ROPDetectoe监控目标程序提取运行时特征进行比对来检测ROP攻击.如图2所示,当目标程序运行时也OPDetec的r持续监控多种低级事件:总指令数、返回指令数、错误预测返回指令数、ITLL未命中数返址未命中数.然后,我们在指定的周期内记录当前各种预定事件的数值,再采用如下策略检测ROP攻击:
图2ROP攻击检测逻辑
R)Ret/I t表示在每个采样区间返回指令在总指令中的占比.在ROP攻击期间,攻击者利用“预t”指令链接gadgetl即从一个gadget跳转到另一