CN105488397B - 一种基于情境的rop攻击检测***及方法 - Google Patents
一种基于情境的rop攻击检测***及方法 Download PDFInfo
- Publication number
- CN105488397B CN105488397B CN201510874221.6A CN201510874221A CN105488397B CN 105488397 B CN105488397 B CN 105488397B CN 201510874221 A CN201510874221 A CN 201510874221A CN 105488397 B CN105488397 B CN 105488397B
- Authority
- CN
- China
- Prior art keywords
- rop
- module
- function
- application
- instruction
- 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
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 61
- 238000000034 method Methods 0.000 title claims abstract description 49
- 238000012544 monitoring process Methods 0.000 claims abstract description 60
- 230000008569 process Effects 0.000 claims abstract description 30
- 230000002452 interceptive effect Effects 0.000 claims abstract description 15
- 230000006870 function Effects 0.000 claims description 85
- 230000006399 behavior Effects 0.000 claims description 30
- 230000002159 abnormal effect Effects 0.000 claims description 18
- 230000026676 system process Effects 0.000 claims description 11
- 238000004458 analytical method Methods 0.000 claims description 8
- 238000012423 maintenance Methods 0.000 claims description 7
- 230000008859 change Effects 0.000 claims description 6
- 238000013480 data collection Methods 0.000 claims description 5
- 238000007689 inspection Methods 0.000 claims description 4
- 238000012360 testing method Methods 0.000 claims description 4
- 238000000151 deposition Methods 0.000 claims description 3
- 230000015572 biosynthetic process Effects 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 9
- 230000007246 mechanism Effects 0.000 abstract description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000008260 defense mechanism Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000004321 preservation Methods 0.000 description 2
- 239000000047 product Substances 0.000 description 2
- 206010000234 Abortion spontaneous Diseases 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 239000006227 byproduct Substances 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 208000015994 miscarriage Diseases 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 208000000995 spontaneous abortion Diseases 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/552—Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting
-
- 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于情境的ROP攻击检测***及方法,***包括用户交互模块、注入器模块、监控模块、情境收集模块、ROP攻击检测模块与记录模块;方法包括注入***关键进程、收集被检应用情境信息及ROP攻击检测三部分内容。本发明实现了对Android***中ROP攻击的有效检测,防止攻击者使用ROP技术执行恶意代码或绕过安全机制,避免用户遭受ROP攻击的危害,提升***的安全性。
Description
技术领域
本发明属于信息安全技术领域,涉及一种基于情境的ROP攻击检测***及方法,具体涉及一种基于情境的检测Android***ROP攻击的装置及方法。
背景技术
随着移动互联网的高速发展,智能手机已经成为人们日常生活中必不可少的一部分,然而智能手机中往往存在比其他传统终端更多的隐私信息,如短信、通讯录、通话记录、银行密码等,因此智能手机的安全显得尤为重要。Android操作***作为移动平台的主流操作***,由于其平台应用的开放性以及***的分层混合结构,近年来针对Android***应用程序的攻击层出不穷,为Android***用户带来巨大的安全风险。
面向返回编程攻击,即ROP攻击是一种功能强大较为复杂的非注入代码型攻击,利用了代码复用技术,自2007年被提出以来,发展迅速。ROP攻击复用程序代码片段(即Gadget)的编程方法具有图灵完备性,理论上可以构造任意恶意代码。它利用程序自身进程地址空间的代码片断而不依赖外部注入代码,因此能有效绕过现有的诸多防御机制,例如DEP和W⊕X。
2008年Kornau等人给出了ROP攻击在ARM指令集下的实现,自此ROP攻击开始转向***底层基于ARM指令集的Android***。攻击者进行针对Android***的ROP攻击,可以绕过多种防御机制,与其他攻击方式相结合,使得已经被成功防御的攻击方法再度有效,无疑造成了巨大的安全威胁。如今,ROP攻击已经越来越多地被使用来针对Android***:CVE-2013-2597的栈溢出漏洞、CVE-2014-7911的Android本地提权漏洞以及流传甚广的HackingTeam Android Browser Exploit都是ROP攻击在Android***中的实际应用。由此观之,如何在Android***中有效的检测ROP攻击已经变成了一个至关重要的问题。
Android***面临ROP攻击的威胁,但目前Android的主流产品中,并没有较为完善***的ROP检测方法装置的实现。另一方面,对于PC端,软件行为监控和敏感行为拦截已经是较为成熟的恶意软件对抗技术,有着十分广泛的应用。但在Android***中,还未有主流产品将这一技术应用于对ROP攻击的检测中。情境的概念虽然很早就被提出,但是也未有主流产品从这一角度考虑与ROP攻击检测相结合的方法。
发明内容
为了解决上述技术问题,提高Android平台的安全性,本发明提出了一种基于情境的ROP攻击检测***及方法,在对Android***本身不做任何修改的情况下,有效检测Android***中发生的ROP攻击,并以敏感行为监控与拦截技术避免用户遭受ROP攻击的危害。
本发明的装置所采用的技术方案是:一种基于情境的ROP攻击检测***,其特征在于:包括用户交互模块、注入器模块、监控模块、情境收集模块、ROP攻击检测模块与记录模块;
所述用户交互模块提供检测***与用户交互的接口,在进行ROP攻击检测之前可以通过用户交互模块指定应用检测范围,当检测到ROP攻击时,用户根据交互模块查验检测结果与相关情境信息,根据结果维护应用白名单所述注入器模块用于将监控模块注入***关键进程,初始监控模块,监控应用的初始启动过程;
所述监控模块用于监控应用的敏感行为,当ROP攻击发生时,对其敏感行为进行拦截;
所述情境收集模块用于收集被检应用的情境信息,当触发关键点时,调用ROP攻击检测模块判断是否发生ROP攻击,当发生ROP攻击时,继续收集问题应用的情境信息;反馈监控模块,对问题应用的敏感行为进行拦截;调用记录模块,对情境信息进行记录;
所述ROP攻击检测模块用于分析情境收集模块获得的情境信息,根据预先配置的ROP攻击检测策略判断是否发生ROP攻击,当检测到应用进程受到ROP攻击时,调用记录模块,对ROP攻击发生的相关情境信息进行记录;检测到ROP攻击时反馈情境收集模块,进一步收集相关情境信息;
所述记录模块用于记录ROP攻击检测结果和相关的情境信息,形成ROP攻击检测记录;
用户通过用户交互模块同步数据库查验检测记录,维护生成Android***应用的白名单,ROP攻击检测记录和应用白名单被统一保存在数据库当中。
作为优选,所述检测***还包括性能监视单元,对硬件事件的值进行读取,用于检测ROP攻击;所述性能监视单元包括事件选择模块、性能计数器模块和中断模块;事件选择模块决定需要记录的性能事件;性能计数器模块对相应性能事件的值进行记录,每当有相应的事件发生则对应的性能计数器的值将加一;中断模块主要负责何时读取性能计数器的值。
本发明的方法所采用的技术方案是:一种基于情境的ROP攻击检测方法,其特征在于,包括以下步骤:
步骤1:注入***关键进程,其具体实现包括以下子步骤:
步骤1.1:注入器模块查找***中与敏感行为相关的关键***进程的PID号;所述关键***进程具体是指:与Android***各种服务相关的system_server,与通话、短信等业务相关的com.android.phone,与录制视频、语音相关的/system/bin/media_server;
步骤1.2:注入器模块通过ptrace()函数attach以上四个关键***进程,加载监控模块到其进程空间,调用mprotect()函数改变监控模块所在进程空间的可执行属性,最终由dlopen()函数执行库函数_init()运行监控模块;
步骤1.3:监控模块被注入关键***进程中运行之后,以修改当前进程全局对象列表的方式,对libbinder.so库中的ioctl()函数进行HOOK,实现对Android***范围内应用行为的监控与拦截,至此完成对监控模块的初始化;
步骤2:收集被检应用情境信息,其具体实现包括以下子步骤:
步骤2.1:获取***实时信息,包括:
①获取应用执行的ARM指令,当前寄存器的值,栈空间布局;若当前ARM指令为ROP攻击的关键指令,包括mov lr,pc指令,跳转指令b,以及切换指令集的跳转指令bx,保存返回地址的跳转指令bl以及切换数据集并保存返回地址的跳转指令blx时,调用ROP检测模块,判断是否发生ROP攻击;
②获取应用程序执行时硬件事件的值,并实时检测硬件事件的值是否存在异常;
③在ROP攻击发生时,获取问题应用已加载的模块、加载模块的名称、内存基址、长度、以及导出函数表,使用函数调用返回地址偏移进行遍历和匹配,定位到产生漏洞的模块名、函数名和相对于函数首址的偏移;
④在ROP攻击发生后,监控、拦截与记录应用的敏感行为;
步骤2.2:获取用户预定义,即指用户维护的白名单:对于白名单应用,对其敏感行为不进行拦截,也不收集其情境信息;
步骤3:ROP攻击检测,分析情境收集模块中获得的ARM指令及相关的情境信息,进而分析应用程序的控制流和数据流,检测ROP攻击的发生;其具体实现包括以下子步骤:
步骤3.1:跳转异常检查;
通过当前跳转指令所在的地址与其跳转的目的地址之间的差值是否大于给定阈值来检测ROP攻击,如果是,则认为发生了ROP攻击;
步骤3.2:函数调用异常检查,其具体实现包括以下子步骤:
步骤3.2.1:获取函数调用跳转指令的目标地址开始的基本块;
步骤3.2.2:在基本块的起始部分,提取两条反汇编指令,检查第一条指令是否为push,操作数中最后一个寄存器是不是lr;对于第二条指令,检查是否为mov指令,且最后一个操作数为sp;如果全部满足,则是正常的函数调用,退出检测;如果不满足,则认为是ROP攻击;
步骤3.3:函数返回异常检查,其具体实现包括以下子步骤:
步骤3.3.1:在对应用进行情境收集过程中,情境收集模块创建维护一个影子栈Shadow Stack,当执行函数调用指令时,用于存放函数返回地址;
步骤3.3.2:当检测到应用程序当前执行函数调用指令bl或blx时,将函数返回地址压入影子栈Shadow Stack中;
步骤3.3.3:当检测到当前指令为函数返回的bx lr指令时,分析影子栈顶返回地址与函数返回控制流跳转目的地址是否一致,如果不一致,则报告为ROP攻击;
当检测到ROP攻击时,将ROP攻击检测结果、问题应用的相关情境信息与敏感行为的监控、拦截情况形成检测记录,呈现给用户。
本发明的主要优点:
1.防止攻击者使用ROP技术执行恶意代码或绕过安全机制,避免用户遭受ROP攻击的危害,提升了***的安全性;
2.检测装置未对***本身进行修改,方便配置在任意Android***上,可检测***范围内针对任意应用的ROP攻击;
3.基于应用的情境信息,从跳转异常检查、函数调用异常检查、函数返回异常检查与硬件事件检测四个方面有效检测ROP攻击。ROP攻击检测过程的检测粒度达到指令级别,是一种较细粒度的检测,有较低的漏报率和误报率;
4.在检测ROP攻击的同时,同时记录问题应用ROP攻击相关的情境信息,可以辅助用户对ROP攻击发生过程进行复盘与分析。用户对于Android***应用白名单的维护,可以进一步提升检测结果的准确度,改善装置的检测效率。
附图说明
图1:本发明实施例的装置构架原理图;
图2:本发明实施例装置的性能监视单元构架原理图;
图3:本发明实施例方法的注入***关键进程流程图;
图4:本发明实施例方法的ROP攻击检测流程图.
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
请见图1和图2,本发明提供的一种基于情境的ROP攻击检测***,包括用户交互模块、注入器模块、监控模块、情境收集模块、ROP攻击检测模块、记录模块和性能监视单元;
(1)用户交互模块提供了检测***与用户交互的接口。用户可以通过交互模块指定应用检测范围,查验检测结果与相关情境信息,还包括根据结果维护应用白名单。
(2)注入器模块完成将监控模块注入***关键进程等注入过程,还包括初始监控模块,以监控应用的敏感行为等初始启动过程。
(3)监控模块用于监控应用的敏感行为,当ROP攻击发生时,对其敏感行为进行拦截。
(4)情境收集模块用于收集被检应用的情境信息,当触发关键点时,调用核心模块ROP攻击检测模块,判断是否发生ROP攻击。当发生ROP攻击时,继续收集问题应用的情境信息,还包括反馈监控模块,对问题应用的敏感行为进行拦截;调用记录模块,对情境信息进行记录。
(5)ROP攻击检测模块,为检测***的核心模块。该模块分析情境收集模块获得的ARM指令等情境信息,根据预先配置的ROP攻击检测策略判断是否发生ROP攻击。还包括当检测到应用进程受到ROP攻击时,调用记录模块,对ROP攻击发生的问题模块、问题函数等相关情境信息进行记录,还包括检测到ROP攻击时反馈情境收集模块,进一步收集相关情境信息。
(6)记录模块用于记录ROP攻击检测结果和相关的情境信息,如发生ROP攻击后的问题应用Package名、问题模块、问题函数等,还包括问题应用的敏感行为监控与拦截情况,并将以上信息形成ROP攻击检测记录。用户可以通过用户交互模块,同步数据库查验检测记录,维护生成Android***应用的白名单。ROP攻击检测记录和应用白名单被统一保存在数据库当中。
ROP攻击会导致程序的执行流发生变化,最终会体现在一些硬件事件上。ARM提供的性能监视单元(Performance Monitor Units,PMU)可以对硬件事件的值进行读取,用于检测ROP攻击。
如图2所示,ARM架构的性能监视单元主要通过APB接口或者CP15接口获得性能监视计数器的值。性能监视单元包括事件选择模块、性能计数器模块和中断模块。事件选择模块决定需要记录的性能事件,性能计数器模块对相应性能事件的值进行记录,每当有相应的事件发生则对应的性能计数器的值将加一。中断模块主要负责何时读取性能计数器的值,本专利中每隔16000条指令读取一次。
本专利选取了与ROP攻击最相关的4个性能事件,如表1所示.
表1:用于检测ROP的性能事件
事件 | 事件说明 |
RET | 执行的return指令的数目 |
STORE | 执行的store指令的数目 |
MISP_BR | 分支预测失败的数目 |
MIS_ITLB | 指令页表没有命中的次数 |
具体实现步骤如下:
①数据处理,鉴于性能和有效性的考量,每隔16000条指令读取一次性能监视计数器的值,然后利用指数转换对收集到的数据进行处理;
②建立分类器,利用非监督式学习方法对收集到的数据进行机器学习;
③通过步骤②建立的分类器识别是否存在ROP攻击。
本发明提供的一种基于情境的ROP攻击检测方法,包括注入***关键进程、收集被检应用情境信息及ROP攻击检测三部分内容。
一、注入***关键进程;
该部分主要完成将监控模块,注入Android***关键进程,并初始监控模块的过程。运行后的监控模块完成对***内运行应用敏感行为的捕获与拦截,是对Android***Native层Hook技术的扩展,如图3,具体步骤:
1.注入器模块查找***中与敏感行为相关的关键***进程的PID号。关键***进程具体是指:与Android***各种服务相关的system_server,与通话、短信等业务相关的com.android.phone,与录制视频、语音相关的/system/bin/media_server。
2.鉴于Android***基于linux内核,注入器模块通过ptrace()函数attach以上四个关键***进程,加载监控模块到其进程空间,调用mprotect()函数改变监控模块所在进程空间的可执行属性,最终由dlopen()函数执行库函数_init()运行监控模块。
3.监控模块被注入关键***进程中运行之后,以修改当前进程全局对象列表(Global Object Table,以下简称GOT)的方式,对libbinder.so库中的ioctl()函数进行HOOK,实现对Android***范围内应用行为的监控与拦截,至此完成对监控模块的初始化。
二、收集被检应用情境信息;
该部分为情境收集模块完成对应用情境信息的收集过程。在相关研究工作中,情境是指可以用来描述实体状态的任何信息。在本装置中,包括***实时信息与用户预定义两个方面,具体步骤:
1.获取***实时信息,包括:
①获取应用执行的ARM指令,当前寄存器的值,栈空间布局。若当前ARM指令为ROP攻击的关键指令,包括mov lr,pc指令,跳转指令b,以及切换指令集的跳转指令bx,保存返回地址的跳转指令bl以及切换数据集并保存返回地址的跳转指令blx时,调用ROP检测模块,判断是否发生ROP攻击。
②获取应用程序执行时硬件事件的值,并实时检测硬件事件的值是否存在异常。
③在ROP攻击发生时,获取问题应用已加载的模块、加载模块的名称、内存基址、长度、以及导出函数表(如果存在的话),使用函数调用返回地址偏移进行遍历和匹配,就可以定位到产生漏洞的模块名、函数名和相对于函数首址的偏移。
④在ROP攻击发生后,监控、拦截与记录应用的敏感行为。
2.获取用户预定义,即指用户维护的白名单:
①对于白名单应用,对其敏感行为不进行拦截,也不收集其情境信息。
三、ROP攻击检测;
该部分为发明装置的核心模块,分析情境收集模块中获得的ARM指令及相关的情境信息,进而分析应用程序的控制流和数据流,检测ROP攻击的发生,如图4,具体步骤:
1.跳转异常检查;
通过当前跳转指令所在的地址与其跳转的目的地址之间的差值是否大于给定阈值来检测ROP攻击。为提高检测效率,降低误报率,只有当两个连续的跳转指令出现且中间没有出现函数调用指令时,才对跳转指令进行异常检测,并且直接跳转指令因为不能被ROP攻击利用,所以只关注间接跳转指令。
具体涉及mov lr,pc指令,跳转指令b,以及切换指令集的跳转指令bx。如果它的操作数是立即数,则代表其是直接跳转,返回继续执行;如果跳转指令的操作数不是立即数,本发明就认为它是间接跳转。即mov lr,pc指令为间接跳转指令,其余跳转指令的操作数不为立即数时为间接跳转指令,为检测中关注的指令。
这个限制对于正常程序而言并没有任何影响,只对可能出现在gadget中的跳转指令进行异常检测。
对于满足条件的跳转指令,即当两个连续的跳转指令出现且中间没有出现函数调用指令的间接跳转指令,取出此条指令所在的地址,记作jumpSourceAddress;取出跳转指令操作数的值,即间接跳转的目的地址,记为jumpSinkAddress;计算|jumpSourceAddress-jumpSinkAddress|是否大于给定阈值,如果是,则认为发生了ROP攻击。
2.函数调用异常检查;
检查函数调用异常要分析函数调用指令,具体涉及保存返回地址的跳转指令bl以及切换数据集并保存返回地址的跳转指令blx。
正常函数中函数调用跳转指令的目的地址应该是被调函数的入口地址,如果不是,那么本发明怀疑它可能是ROP攻击。即如果bl指令或blx指令跳转的目的指令序列为“push{r7,lr};mov r7,sp”(其中“r7”可变,其余固定),则本发明认为它是正常的函数调用;如果不是,则本发明认为其是ROP攻击。
具体实现步骤如下:
①获取函数调用跳转指令的目标地址开始的基本块。
②在基本块的起始部分,提取两条反汇编指令,检查第一条指令是否为push,操作数中最后一个寄存器是不是lr;对于第二条指令,检查是否为mov指令,且最后一个操作数为sp。如果全部满足,则是正常的函数调用,退出检测;如果不满足,则认为是ROP攻击。
3.函数返回异常检查;
为了检查返回异常,建立一个影子栈Shadow Stack。当执行到函数调用的bl指令或blx指令时,将函数返回地址压入Shadow Stack;当执行到函数返回的bx lr指令时,取出Shadow Stack栈顶的地址,并比较这个地址与返回控制流跳转目的地是否一致。如果这两个地址不一致,则认为是ROP攻击。也就是说,每当执行新的函数调用过程时,本发明更新Shadow Stack。函数返回异常检查能够发现没有对应函数调用返回的,利用函数片段构造的ROP攻击。
具体实现步骤如下:
①在对应用进行情境收集过程中,情境收集模块创建维护一个影子栈ShadowStack,当执行函数调用指令时,用于存放函数返回地址;
②当检测到应用程序当前执行函数调用指令bl或blx时,将函数返回地址压入影子栈Shadow Stack中;
③当检测到当前指令为函数返回的bx lr指令时,分析影子栈顶返回地址与函数返回控制流跳转目的地址是否一致,如果不一致,则报告为ROP攻击。
ROP检测方法除以上三点外,当检测到ROP时,将ROP攻击检测结果、问题应用的相关情境信息与敏感行为的监控、拦截情况形成检测记录,呈现给用户。用户分析查验检测结果维护一个Android***应用的白名单来提升检测的效率,并降低误报率。
以下结合具体实例对上述方案做进一步说明。
实例基于Android***ROP攻击检测装置的实现。
以运行在Android***的Package名为com.example.helloworld的应用为例进行说明。在Android***运行时,首先由注入器模块查找到***关键进程的PID:system_server为739,com.android.phone为149,/system/bin/media_server为152,将监控模块monitor.so注入到每个关键进程的进程空间,初始化监控模块完成对ioctl()函数的HOOK。情境收集模块从数据库加载用户维护的应用白名单,如果应用com.example.helloworld不在白名单上,查找其PID号,得到其PID号为11432;否则继续正常运行应用。情境收集模块通过ptrace()获取应用com.example.helloworld的情境信息,包括获取应用执行的ARM指令,当前寄存器的值,栈空间布局。解析当前ARM指令,当前ARM指令为函数调用的bl指令或blx指令时,建立影子栈Shadow Stack保存函数的返回地址;为mov lr,pc指令,跳转指令b,以及切换指令集的跳转指令bx,保存返回地址的跳转指令bl以及切换数据集并保存返回地址的跳转指令blx时,调用ROP检测模块。ROP检测模块分析传入的应用情境信息,按照ROP检测策略,进行跳转异常检查、函数调用异常检查与函数返回异常检查。
若ROP模块判断未发生ROP攻击,则继续执行程序;若判断ROP攻击已经发生,情境收集模块获取应用已加载的模块、加载模块的名称、内存基址、长度、以及导出函数表(如果存在的话),使用函数调用返回bx值进行遍历和匹配,就可以定位到产生漏洞的模块名、函数名和相对于函数首址的偏移。将发生ROP攻击的应用Package名com.exaple.helloworld、问题模块名、问题函数名以及相对首地址的偏移存入数据库。
ROP攻击发生后,监控模块开始监控拦截问题应用的敏感行为,生成记录存入数据库。
用户交互模块同步更新数据库中的检测记录,由用户对检测结果进行查验,考虑是否更新应用白名单。
本发明实现了对Android***中ROP攻击的有效检测,防止攻击者使用ROP技术执行恶意代码或绕过安全机制,避免用户遭受ROP攻击的危害,提升***的安全性。
应当理解的是,本说明书未详细阐述的部分均属于现有技术。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。
Claims (3)
1.一种基于情境的ROP攻击检测***,其特征在于:包括用户交互模块、注入器模块、监控模块、情境收集模块、ROP攻击检测模块与记录模块;
所述用户交互模块提供检测***与用户交互的接口,在进行ROP攻击检测之前可以通过用户交互模块指定应用检测范围,当检测到ROP攻击时,用户根据交互模块查验检测结果与相关情境信息,根据结果维护应用白名单;
所述注入器模块用于将监控模块注入***关键进程,初始监控模块,监控应用的初始启动过程;
所述监控模块用于监控应用的敏感行为,当ROP攻击发生时,对其敏感行为进行拦截;
所述情境收集模块用于收集被检应用的情境信息,当触发关键点时,调用ROP攻击检测模块判断是否发生ROP攻击,当发生ROP攻击时,继续收集问题应用的情境信息;反馈监控模块,对问题应用的敏感行为进行拦截;调用记录模块,对情境信息进行记录;
所述ROP攻击检测模块用于分析情境收集模块获得的情境信息,根据预先配置的ROP攻击检测策略判断是否发生ROP攻击,当检测到应用进程受到ROP攻击时,调用记录模块,对ROP攻击发生的相关情境信息进行记录;检测到ROP攻击时反馈情境收集模块,进一步收集相关情境信息;
所述记录模块用于记录ROP攻击检测结果和相关的情境信息,形成ROP攻击检测记录;
用户通过用户交互模块同步数据库查验检测记录,维护生成Android***应用的白名单,ROP攻击检测记录和应用白名单被统一保存在数据库当中。
2.根据权利要求1所述的基于情境的ROP攻击检测***,其特征在于:还包括性能监视单元,对硬件事件的值进行读取,用于检测ROP攻击;
所述性能监视单元包括事件选择模块、性能计数器模块和中断模块;事件选择模块决定需要记录的性能事件;性能计数器模块对相应性能事件的值进行记录,每当有相应的事件发生则对应的性能计数器的值将加一;中断模块主要负责何时读取性能计数器的值。
3.一种基于情境的ROP攻击检测方法,其特征在于,包括以下步骤:
步骤1:注入***关键进程,其具体实现包括以下子步骤:
步骤1.1:注入器模块查找***中与敏感行为相关的关键***进程的PID号;所述关键***进程具体是指:与Android***各种服务相关的system_server,与通话、短信等业务相关的com.android.phone,与录制视频、语音相关的/system/bin/media_server;
步骤1.2:注入器模块通过ptrace()函数attach以上三个关键***进程,加载监控模块到其进程空间,调用mprotect()函数改变监控模块所在进程空间的可执行属性,最终由dlopen()函数执行库函数_init()运行监控模块;
步骤1.3:监控模块被注入关键***进程中运行之后,以修改当前进程全局对象列表的方式,对libbinder.so库中的ioctl()函数进行HOOK,实现对Android***范围内应用行为的监控与拦截,至此完成对监控模块的初始化;
步骤2:收集被检应用情境信息,其具体实现包括以下子步骤:
步骤2.1:获取***实时信息,包括:
①获取应用执行的ARM指令,当前寄存器的值,栈空间布局;若当前ARM指令为ROP攻击的关键指令,包括mov lr, pc指令,跳转指令b,以及切换指令集的跳转指令bx,保存返回地址的跳转指令bl以及切换数据集并保存返回地址的跳转指令blx时,调用ROP检测模块,判断是否发生ROP攻击;
②获取应用程序执行时硬件事件的值,并实时检测硬件事件的值是否存在异常;
③在ROP攻击发生时,获取问题应用已加载的模块、加载模块的名称、内存基址、长度、以及导出函数表,使用函数调用返回地址偏移进行遍历和匹配,定位到产生漏洞的模块名、函数名和相对于函数首址的偏移;
④在ROP攻击发生后,监控、拦截与记录应用的敏感行为;
步骤2.2:获取用户预定义,即指用户维护的白名单:对于白名单应用,对其敏感行为不进行拦截,也不收集其情境信息;
步骤3:ROP攻击检测,分析情境收集模块中获得的ARM指令及相关的情境信息,进而分析应用程序的控制流和数据流,检测ROP攻击的发生;其具体实现包括以下子步骤:
步骤3.1:跳转异常检查;
通过当前跳转指令所在的地址与其跳转的目的地址之间的差值是否大于给定阈值来检测ROP攻击,如果是,则认为发生了ROP攻击;
步骤3.2:函数调用异常检查,其具体实现包括以下子步骤:
步骤3.2.1:获取函数调用跳转指令的目标地址开始的基本块;
步骤3.2.2:在基本块的起始部分,提取两条反汇编指令,检查第一条指令是否为push,操作数中最后一个寄存器是不是lr;对于第二条指令,检查是否为mov指令,且最后一个操作数为sp;如果全部满足,则是正常的函数调用,退出检测;如果不满足,则认为是ROP攻击;
步骤3.3:函数返回异常检查,其具体实现包括以下子步骤:
步骤3.3.1:在对应用进行情境收集过程中,情境收集模块创建维护一个影子栈ShadowStack,当执行函数调用指令时,用于存放函数返回地址;
步骤3.3.2:当检测到应用程序当前执行函数调用指令bl或blx时,将函数返回地址压入影子栈Shadow Stack中;
步骤3.3.3:当检测到当前指令为函数返回的bx lr指令时,分析影子栈顶返回地址与函数返回控制流跳转目的地址是否一致,如果不一致,则报告为ROP攻击;
当检测到ROP攻击时,将ROP攻击检测结果、问题应用的相关情境信息与敏感行为的监控、拦截情况形成检测记录,呈现给用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510874221.6A CN105488397B (zh) | 2015-12-02 | 2015-12-02 | 一种基于情境的rop攻击检测***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510874221.6A CN105488397B (zh) | 2015-12-02 | 2015-12-02 | 一种基于情境的rop攻击检测***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105488397A CN105488397A (zh) | 2016-04-13 |
CN105488397B true CN105488397B (zh) | 2018-01-12 |
Family
ID=55675371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510874221.6A Active CN105488397B (zh) | 2015-12-02 | 2015-12-02 | 一种基于情境的rop攻击检测***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105488397B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106295258B (zh) * | 2016-08-04 | 2019-03-26 | 南京大学 | 用于多线程后向控制流完整性保护的影子栈实现方法 |
CN106529224A (zh) * | 2016-10-27 | 2017-03-22 | 南京大学 | 基于rop攻击特点的二进制混淆方法 |
CN108334756B (zh) * | 2017-01-20 | 2020-05-12 | 武汉斗鱼网络科技有限公司 | 一种对递归下降式分析器反编译的干扰方法及装置 |
CN107220537B (zh) * | 2017-05-25 | 2021-02-23 | 南京大学 | 一种程序内存布局信息泄露行为的检测方法 |
CN107229862B (zh) * | 2017-06-06 | 2019-11-12 | 电子科技大学 | 基于模拟栈和线程注入的一种rop攻击栈溢出防护方法 |
CN107545174B (zh) * | 2017-08-22 | 2020-03-10 | 武汉大学 | 一种基于llvm的抵御控制流劫持的***和方法 |
CN110737888B (zh) * | 2019-09-12 | 2022-09-20 | 北京理工大学 | 虚拟化平台操作***内核数据攻击行为检测方法 |
CN113360902B (zh) * | 2020-03-05 | 2024-02-20 | 奇安信科技集团股份有限公司 | shellcode的检测方法、装置、计算机设备及计算机存储介质 |
CN111385302A (zh) * | 2020-03-06 | 2020-07-07 | 北京计算机技术及应用研究所 | 一种载荷自动化生成*** |
CN112199669B (zh) * | 2020-09-25 | 2022-05-17 | 杭州安恒信息技术股份有限公司 | 一种检测rop攻击的方法和装置 |
CN113556336B (zh) * | 2021-07-19 | 2022-02-11 | 北京丁牛科技有限公司 | 提权漏洞攻击的检测方法及装置、电子设备 |
CN114880665B (zh) * | 2022-05-12 | 2023-06-16 | 电子科技大学 | 一种针对面向返回编程攻击的智能化检测方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663312A (zh) * | 2012-03-20 | 2012-09-12 | 中国科学院信息工程研究所 | 一种基于虚拟机的rop攻击检测方法及*** |
CN104268471A (zh) * | 2014-09-10 | 2015-01-07 | 珠海市君天电子科技有限公司 | 一种检测面向返程的编程攻击的方法及装置 |
CN104685506A (zh) * | 2012-10-31 | 2015-06-03 | 英特尔公司 | 对返回导向的编程攻击的检测 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10114643B2 (en) * | 2013-05-23 | 2018-10-30 | Intel Corporation | Techniques for detecting return-oriented programming |
-
2015
- 2015-12-02 CN CN201510874221.6A patent/CN105488397B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663312A (zh) * | 2012-03-20 | 2012-09-12 | 中国科学院信息工程研究所 | 一种基于虚拟机的rop攻击检测方法及*** |
CN104685506A (zh) * | 2012-10-31 | 2015-06-03 | 英特尔公司 | 对返回导向的编程攻击的检测 |
CN104268471A (zh) * | 2014-09-10 | 2015-01-07 | 珠海市君天电子科技有限公司 | 一种检测面向返程的编程攻击的方法及装置 |
Non-Patent Citations (2)
Title |
---|
一种有效的Return-Oriented-Programming 攻击检测方法;刘智等;《小型微型计算机***》;20130731(第7期);第1625-1630页 * |
针对ROP攻击的动态运行时检测***;韩浩等;《计算机工程》;20120229;第38卷(第4期);第122-125页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105488397A (zh) | 2016-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105488397B (zh) | 一种基于情境的rop攻击检测***及方法 | |
EP3571622B1 (en) | Processor trace-based enforcement of control flow integrity of computer system | |
EP3368973B1 (en) | Multi-layer computer security countermeasures | |
CN106156353B (zh) | 一种为数据库增加多语言动态编译执行引擎的方法和*** | |
CN110266669A (zh) | 一种Java Web框架漏洞攻击通用检测与定位的方法及*** | |
CN102541729A (zh) | 软件安全漏洞检测装置和方法 | |
CN104102878B (zh) | 一种Linux平台下的恶意代码分析方法及*** | |
CN106991324A (zh) | 一种基于内存保护类型监控的恶意代码跟踪识别方法 | |
CN108595952A (zh) | 一种电力移动应用软件漏洞的检测方法及*** | |
CN110351255B (zh) | 一种网络靶场***中的数据采集方法及数据采集*** | |
CN102521531B (zh) | 基于硬件虚拟化的密码保护*** | |
CN109558726A (zh) | 一种基于动态分析的控制流劫持攻击检测技术与*** | |
CN102999716A (zh) | 虚拟机器监控***及方法 | |
CN105589807B (zh) | 一种应用程序间组件能力泄露动态检测方法和*** | |
CN106055385A (zh) | 监控虚拟机进程的***和方法、过滤page fault异常的方法 | |
CN107004086A (zh) | 安全信息和事件管理 | |
CN102467628A (zh) | 一种基于浏览器内核拦截技术的数据保护方法 | |
CN102521542A (zh) | 一种计算机软件漏洞利用的捕获方法及*** | |
CN107103237A (zh) | 一种恶意文件的检测方法及装置 | |
CN109800569A (zh) | 程序鉴别方法及装置 | |
KR20200057402A (ko) | 가상 및 리얼 머신 기반의 악성코드 탐지 시스템 및 방법 | |
CN105550574B (zh) | 基于内存活动的边信道攻击取证***及方法 | |
CN110737888B (zh) | 虚拟化平台操作***内核数据攻击行为检测方法 | |
CN106682493A (zh) | 一种防止进程被恶意结束的方法、装置及电子设备 | |
CN108345795A (zh) | 用于检测和分类恶意软件的***和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |