基于函数注入的沙箱拦截识别方法
2016-10-14颜学雄王清贤
赵 旭 颜学雄 王清贤 魏 强
基于函数注入的沙箱拦截识别方法
赵 旭*颜学雄 王清贤 魏 强
(解放军信息工程大学 郑州 450002),(数学工程与先进计算国家重点实验室 郑州 450002)
沙箱验证机制的测试需要首先识别沙箱拦截,即识别沙箱截获的系统函数集。已有的Hook识别方法大多仅关注钩子的存在性,识别沙箱拦截的能力不足。该文设计了一种基于函数注入的沙箱拦截识别方法,该方法分析系统函数的指令执行记录(Trace)来识别沙箱截获的系统函数。首先,向不可信进程注入并执行系统函数来获取函数的执行记录;其次,根据沙箱截获系统函数执行记录的特点,设计了地址空间有限状态自动机,并在自动机内分析获取的执行记录来判别沙箱截获的系统函数;最后,遍历测试函数集来识别目标沙箱截获的系统函数集。该文设计实现了原型系统SIAnalyzer,并对Chromium和Adobe Reader进行了沙箱拦截识别测试,测试结果验证了方法的有效性和实用性。
沙箱拦截;系统函数集;钩子;函数注入;自动机
1 引言
沙箱是隔离不可信程序(恶意程序或存在漏洞程序)的重要安全机制,其中,服务机制和验证机制是沙箱的主要实现机制[1,2]。沙箱的服务机制向不可信程序提供服务接口来满足其功能需要,该机制存在缓冲区溢出等缺陷会导致沙箱逃逸漏洞的产生,如CVE-2014-0512, CVE-2014-0546, CVE-2015- 2429;沙箱的验证机制截获不可信程序调用的系统函数并验证其行为来保证系统安全,该验证过程实现复杂且容易出现逻辑缺陷,也可能导致沙箱逃逸,比如,CVE-2011-1353, CVE-2013-0641, CVE-2013-3186。沙箱安全分析技术受到产业界和学术界重视,研究者分析了不同沙箱的实现机制并使用模糊测试技术[9,10]测试并发现沙箱的缺陷,比如,文献[11-14]分别研究了Protect Mode IE, Chrome等沙箱的实现机制,文献[15,16]设计了COMEye等模糊测试工具测试沙箱的缺陷。已有的沙箱测试研究多集中在沙箱的服务机制方面,而针对沙箱验证机制的测试方法方面的研究不多。
截获不可信程序调用的系统函数是沙箱验证机制的首要步骤,因此,沙箱验证机制的测试需要首先识别沙箱拦截,即沙箱截获的系统函数集。已有的沙箱拦截识别方法分析特定沙箱的实现细节来识别沙箱拦截,比如,文献[17]使用IDA分析并识别了Adobe Reader X的沙箱拦截。但由于不同沙箱截获的系统函数不同,并且不同沙箱的沙箱拦截实现技术也存在差异,因此,已有的沙箱拦截识别方法无法满足高效、自动的沙箱拦截识别的需求。Hook技术是沙箱拦截的主要实现技术,已有的Hook识别方法关注钩子的植入机制,缺乏对钩取的系统函数的识别,无法满足系统函数识别的要求,比如,文献[18,19]使用程序切片分析等技术识别Rootkit在系统中植入的钩子。Hook识别工具只能识别部分类型的钩子及其截获的系统函数,无法完全识别沙箱截获的系统函数集,比如,文献[20,21]设计的工具只能识别系统服务描述表(SSDT)、输入/输出地址表(IAT&IDT)中存在的钩子,HookShark[22]能够识别Inline和VTable两种类型的钩子,但无法识别Inline类钩子截获的系统函数。
通过对不可信进程(不可信程序的运行时进程)在沙箱内调用系统函数的流程的分析研究,本文发现:
(1)虽然沙箱使用不同的Hook技术截获不可信进程调用的系统函数,但都会将控制流重定向到沙箱的验证代码,而该过程会体现在该进程的指令执行记录(Trace)中;
(2)操作系统提供大量的系统函数,如果在沙箱内分别运行每个函数的测试程序来获取执行记录会耗费大量资源。而在沙箱内运行的不可信进程中注入并执行待识别的系统函数,则可以快速、准确地生成用于沙箱拦截识别的执行记录。
基于以上观察,本文设计了一种基于函数注入的沙箱拦截识别方法,方法包括两个子方法:(1)基于函数注入的执行记录生成方法,该方法选择不可信进程的NOP,HLT等指令填充的内存区域并注入待识别的函数,进一步控制不可信进程执行该函数来获取执行记录;(2)基于执行记录的沙箱截获系统函数分析方法,首先,方法建立描述指令地址空间转换的有限状态自动机模型,其次,以执行记录的指令作为自动机输入,通过自动机的状态和状态转换指令的位置来判断沙箱的系统函数截获行为及识别沙箱截获的系统函数。
论文的组织结构如下:第2节介绍基于函数注入的执行记录生成方法的工作原理;第3节介绍基于执行记录的沙箱截获函数的分析方法;第4节首先介绍了原型系统—SIAnalyzer的结构及主要实现问题的解决方法,其次,介绍了方法性能的分析方法和实验结果;第5节总结了本文的主要工作并指出进一步研究方向。
2 基于函数注入的执行记录生成方法
基于函数注入的执行记录生成方法在不可信进程的内存中注入测试的系统函数,并控制该进程执行注入的函数来生成用于沙箱拦截识别的执行记录(图1)。为了更好地描述基于函数注入的执行记录生成方法,下面给出4个定义:
定义1 记地址空间表示不可信进程内存中来源不同的可执行代码所占用的内存区域。
为了便于沙箱拦截识别,本文将不可信进程的内存划分为:不可信进程地址空间(PC)、系统地址空间(OS)和沙箱地址空间(SC) 3部分。
定义2 记执行记录表示不可信进程在沙箱内调用系统函数所执行的指令。
Windows系统内,由于NOP, HLT被大量用于填充程序的代码段来保证指令对齐,因此,为了不破坏不可信程序的功能代码,本文在Windows系统中选择NOP, HLT填充的区域为。
图1 基于函数注入的执行记录生成示意图
基于函数注入的执行记录生成算法的主要步骤如表1所示,包括函数注入、函数执行和执行记录获取3个步骤。在函数注入步骤中,如果存在长度大于注入函数所需的内存空间的,直接在该注入,否则,算法选择多个注入。
表1 执行记录(trace)生成算法
本文方法在注入函数时采用贪婪策略,即在中尽可能多地注入测试函数的相关指令,假设筛选的大小都是19B,那么注入结果如图2所示,其中,,和分别注入CreateFileW的5个,2个和1个指令。
图2 CreateFileW注入示意图
3 基于执行记录的沙箱截获函数分析方法
基于执行记录的沙箱截获函数分析方法将地址空间映射为有限状态自动机的不同状态,并将不同类型的指令作为自动机输入,通过在自动机内分析执行记录来识别沙箱截获的系统函数。该方法包括:(1)沙箱截获行为的识别,该识别过程分析系统函数执行记录的状态转换来判断是否存在截获系统函数的行为;(2)沙箱截获系统函数的识别,该识别过程根据实现地址空间状态转换指令的语义和位置信息来判定沙箱截获的系统函数。
图3 状态转换函数示意图
表2 中元素的类型
表2 中元素的类型
指令类型saddrtaddr指令类型saddrtaddr aPCPCfSCOS bPCOSgOSPC cOSOShPCSC dOSSCiSCPC eSCSC
3.1 沙箱截获行为的识别
识别沙箱截获的系统函数需要首先判断是否存在沙箱截获行为,因此,本文分析了不可信进程调用系统函数时,执行记录地址空间自动机状态的转换情况。如图4所示,其中,图4(a)表示函数未被沙箱截获,执行记录的指令只属于程序地址空间和系统地址空间;图4(b)和图4 (c)表示沙箱在系统地址空间实现系统函数截获的自动机状态转换情况;图4(d)和图4(e) 表示沙箱在不可信进程地址空间实现系统函数截获的自动机状态转换情况。
图4 执行记录地址空间转换示意图
3.2 沙箱截获的系统函数识别
图5 沙箱截获函数识别误报成因示意图
沙箱截获系统函数的识别包括两个步骤:(1)识别系统函数的执行记录中所有调用指令()和返回指令(),并根据关系将其组织成; (2)选择距离,类指令最近的对应的系统函数为识别的沙箱截获的系统函数。本文方法使用式(2)选择包含,类指令的最小,其中,式(2)的前两个子式保证包含,类指令,式(2)的第3个子式选择距离,指令最近的对应的系统函数为沙箱截获的系统函数。
4 原型系统和实验验证
为了测试方法的有效性和性能,本文在全系统模拟器QEMU[23]上构建了原型系统SIAnalyzer。首先,本文选择开源的Chromium沙箱作为测试对象,验证SIAnalyzer的沙箱拦截识别能力,即验证方法的有效性;其次,本文记录了SIAnalyzer生成执行记录的数量、时间,并分析了SIAnalyzer的效率;最后,本文选择Adobe Reader X(10.0.1)来测试SIAnalyzer对闭源沙箱的沙箱拦截识别能力,即验证本文方法的实用性。
4.1 SIAnalyzer的设计与实现
SIAnalyzer包括内存监控器、函数注入器、执行记录记录器和拦截分析器4个主要部分(图6)。内存监控器监控和记录不可信进程的内存信息,同时,搜索不可信进程的代码空间并标记函数可注入的内存地址;函数注入器从测试函数库中选择用于测试的系统函数,进一步在内存监控器提供的可注入地址注入测试的系统函数;执行记录记录器获取系统函数的调用执行记录,将执行记录转换为便于沙箱拦截识别的中间表示并存入执行记录库;拦截分析器获取执行记录库中的执行记录中间表示,并在地址空间的有限状态自动机内分析识别沙箱截获的系统函数。
图6 SIAnalyzer结构示意图
本文在实现SIAnalyzer时,处理了测试系统函数集构造、函数注入时机选择等4个关键问题:
(1)测试系统函数集的构造: 测试系统函数集由基础函数集和增量函数集两部分组成,其中,基础函数集包括操作系统提供的进程、文件、注册表、网络以及安全相关的系统函数;增量函数集包括沙箱功能对应的系统函数。
(2)函数注入时机选择: 注入测试系统函数必须在沙箱拦截部署完成后,才能获取适用于分析的执行记录,因此,SIAnalyzer需要识别沙箱拦截部署是否完成,而该识别过程需要监控沙箱行为,耗费资源巨大并且不同沙箱的拦截部署存在差异,存在大量误报。本文分析了不可信进程的初始化和执行步骤,发现一旦不可信进程执行,则说明该沙箱已经结束拦截部署,因此,SIAnalyzer从不可信进程的角度选择函数注入时机,首先,SIAnalyzer标记不可信进程的入口函数,其次,监视该入口函数的指令是否执行,如果该函数的指令被执行,则说明沙箱拦截部署完成,此时,SIAnalyzer控制不可信进程并注入测试的系统函数。
(3)内存监控:为了能够准确标记各类内存空间和搜索可用于测试函数注入的内存地址,内存监控器监控系统提供的内存申请、释放函数,并通过这些函数的参数标记各类内存空间,比如,memcpy, free, MapViewOfFile和UnmapViewOfFile等函数。
(4)执行记录转换规则:为了提高沙箱拦截识别的效率,SIAnalyzer在执行记录获取的基础上,将执行记录的指令转换为便于拦截分析的中间表示。指令的中间表示转换规则将系统指令划分为转移指令(TI)和非转移指令(NTI)两类,系统指令的具体转换规则如表3所示。
表3 指令转换规则
4.2 实验验证
本文将SIAnalyzer部署在3.4 GHz i3处理器和4 GB RAM的Linux机器上,并选择32位的Windows XP Sp3系统作为测试系统,即在本文的实验验证过程中,式(1a)和式(1b)的DJMP.sz, max(Inst.sz) 取值分别为5和14。
4.2.1方法的有效性分析 Chromium沙箱是主流的开源沙箱产品,Chromium沙箱默认截获的系统函数共20个,主要包括操作文件、命名管道等7类函数。本文选择Chromium沙箱作为测试沙箱,同时,选择HookShark来对比分析本文方法的性能,即沙箱拦截识别能力。
测试的主要步骤如下:(1)修改Chromium的AddRule函数的参数来控制沙箱截获不同的系统函数;(2)使用SIAnalyzer和HookShark分别识别沙箱截获的系统函数,实验结果如表4所示。
表4 SIAnalyzer与HookShark的沙箱拦截识别能力对比
实验结果显示,SIAnalyzer能够识别Chromium拦截的所有函数,而HookShark无法识别代码Hook方式截获的函数。这是因为Chromium的代码Hook修改函数指令来截获系统函数,HookShark可以识别函数被修改的指令,但无法判定沙箱截获的系统函数,而SIAnalyzer以执行记录作为拦截分析的载体,不论沙箱采用何种Hook技术,执行的指令都会记录在执行记录中,因此,SIAnalyzer的拦截识别能力不受沙箱使用的具体Hook技术影响。
4.2.2方法的效率分析 执行记录是拦截分析的基础,因此,本文方法的效率分析主要关注生成执行记录的规模,生成执行记录的时间以及执行记录的利用效率。不失一般性,本文选择Windows Xp Sp3的两个核心库NTDLL和KERNEL32的导出函数作为测试函数集,其中,NTDLL和KERNEL32分别导出1317个和955个系统函数。
方法效率分析的步骤如下:(1)修改Chromium沙箱源码,在Chromium沙箱内分别增加实现测试函数截获相关的dispatcher.cc, interception.cc和policy.cc;(2)在Chromium默认拦截的基础上,使用AddRule函数增加Chromium沙箱截获的系统函数,并重新编译Chromium沙箱源码;(3)使用SIAnalyzer测试重新编译的Chromium沙箱,并在Chromium沙箱截获系统函数数量不同的情况下,统计SIAnalyzer生成执行记录的数量、规模和时间。
本文方法效率分析的结果如图7所示,其中,图7(a)是执行记录的规模、时间与测试函数数量之间的关系图,实验结果显示,方法生成执行记录的规模和耗费的时间都随沙箱截获系统函数数量的增加而增加,但由于存在系统函数间的相互调用,随着沙箱截获函数的增加,方法能够从单条执行记录中识别多个不同的被截获系统函数,因此,随着沙箱截获函数的增加,本文方法生成执行记录的规模和时间开销的增长速度变缓。
图7 SIAnalyzer效率分析图
进一步,本文分析了方法生成执行记录的数量与沙箱截获函数数量的关系。本文定义了沙箱拦截的识别率来分析执行记录数量与沙箱截获函数数量之间的关系:
其中,FuncNum表示沙箱截获的系统函数数量,TraceNum表示用于识别沙箱截获函数的执行记录数量。
图7(b)是执行记录数量,IRatio与函数数量之间的关系图,分析结果显示,执行记录数量随着沙箱截获系统函数数量的增加而增加;而IRatio却是先增长后减小,这是由于在沙箱截获的系统函数数量属于时,单条执行记录能够识别的系统函数数量随之增加,即IRatio增长,当沙箱截获的系统函数数量属于时,部分截获的函数已被SIAnalyzer在前期实验中识别,即IRatio下降。
4.2.3Adobe Reader沙箱的拦截分析 本文选择文献[17]测试的版本号为10.0.1的Adobe Reader X闭源沙箱来验证方法的实用性。Adobe Reader X的pdf解析进程是该沙箱的不可信进程,因此,SIAnalyzer选择该进程注入测试函数。实验结果显示,SIAnalyzer具有与文献[17]方法相同的沙箱拦截识别能力,即能够识别该版本Adobe Reader X沙箱截获的系统函数,共193个函数,如表5所示;同时,SIAnalyzer自动化程度更高,且不需要研究人员具有沙箱的先验知识。
表5 SIAnalyzer识别Adobe Reader沙箱拦截统计表
5 结束语
本文设计了一种基于函数注入的沙箱拦截识别方法,该方法首先在不可信进程中注入并执行系统函数来获取用于分析的执行记录,其次,引入地址空间的有限状态自动机,通过自动机的状态转换来识别沙箱的截获行为,并分析状态转换指令的信息来识别沙箱拦截的系统函数;再次,设计实现了原型系统SIAnalyzer;最后,以Chromium沙箱和Adobe Reader X沙箱作为测试沙箱,测试了本文方法的有效性和实用性,同时,分析了本文方法的效率,实验结果显示,与已有的沙箱拦截识别方法相比,本文方法具有相同沙箱拦截识别能力的同时,自动化程度和执行效率更高。
在沙箱拦截识别的基础上,研究沙箱验证机制的测试技术并发现沙箱验证机制存在的缺陷是进一步研究的主要方向。
[1] YEE B, SEHR D, DARDYK G,. Native client: A sandbox for portable, untrusted x86 native code[C]. 2009 IEEE Symposium on Security and Privacy, Oakland, USA, 2009: 79-93.
[2] MAASS M, SALES A, CHUNG B,. A systematic analysis of the science of sandboxing[J]., 2016, 2: e43. doi:10.7717/peerj-cs.43.
[3] CVE-2014-0512[OL]. https://web.nvd.nist.gov/view/vuln /detail?vulnId=CVE-2014-0512, 2014.
[4] CVE-2014-0546[OL]. https://web.nvd.nist.gov/view/vuln/ detail?vulnId=CVE-2014-0546, 2014.
[5] CVE-2015-2429[OL]. https://web.nvd.nist.gov/view/vuln/ detail?vulnId=CVE-2015-2429, 2015.
[6] CVE-2011-1353[OL], https://web.nvd.nist.gov/view/vuln/ detail?vulnId=CVE-2011-1353, 2011.
[7] CVE-2013-0641[OL]. https://web.nvd.nist.gov/view/vuln/ detail?vulnId=CVE-2013-0641, 2013.
[8] CVE-2013-3186[OL]. https://web.nvd.nist.gov/view/vuln/ detail?vulnId=CVE-2013-3186, 2013.
[9] 崔宝江, 梁晓兵, 王禹, 等. 基于回溯和引导的关键代码区域覆盖的二进制程序测试技术研究[J].电子与信息学报, 2012, 34(1): 108-114. doi: 10.3724/SP.J.1146.2011.00532.
CUI B J, LIANG X B, WANG Y,. The study of binary program test techniques based on backtracking and leading for covering key code area[J].&, 2012, 34(1): 108-114. doi: 10.3724/SP.J.1146.2011.00532.
[10] 欧阳永基, 魏强, 王清贤, 等. 基于异常分布导向的智能Fuzzing方法[J].电子与信息学报, 2015, 37(1): 143-149. doi: 10.11999/JEIT140262.
OUYANG Y J, WEI Q, WANG Q X,. Intelligent fuzzing based on exception distribution steering[J].&, 2015, 37(1): 143-149. doi: 10.11999/JEIT140262.
[11] SABABAL P and MARK V Y. Playing in the reader X sandbox[C]. Black Hat USA 2011, Las Vegas, USA 2011. https://media.blackhat.com/bh-us-11/Sabanal/BH_US_11_SabanalYason_Readerx_WP.pdf.
[12] MARK V Y. Understanding the attack surface and attack resilience of project spartans new edgeHtml rendering engine[C]. Black Hat USA 2015, Las Vegas, USA, 2015. https: //www. blackhat. com/ docs/ us-15/materials/us-15-Yason- Understanding-The-Attack-Surface-And-Attack-Resilience-Of-Project-Spartans-New-EdgeHTML-Rendering-Engine-wp.pdf.
[13] JAMES F. Digging for sandbox escapes-finding sandbox breakouts in Internet explorer[C]. Black Hat USA 2014, Las Vegas, USA, 2014. https://www.blackhat.com/docs/ us-14/ materials/us-14-Forshaw-Digging-For_IE11-Sandbox-Escapes. pdf.
[14] KOH Y C. Understanding the microsoft office 2013 protected-view sandbox[C]. Recon, Montreal, Canada, 2015. http://recon.cx/2015/slides/recon 2015-16-yong-chuan-koh- Understaning-the-Microsoft-Office-Protected-View-Sandbox.pdf.
[15] LI X N and LI H F. Smart COM fuzzing-auditing IE sandbox bypass in COM objects[C]. CanSecWest Vancouver 2015, Vancouver, Canada, 2015. https://cansecwest.com/ slides/ 2015/Smart_COM_Fuzzing_Auditing_IE_Sandbox_Bypass_in_COM_Objects-Xiaoning_li.pdf.
[16] BRIAN G and JASIEL S. Thinking outside the sandbox: Violating trust boundaries in uncommon ways[C]. Black Hat USA 2014, Las Vegas, USA, 2014. https: //www. blackhat. com/docs/us-14/materials/us-14-Gorenc-Thinking-Outside-The-Sandbox-Violating-Trust-Boundaries-In-Uncommon- Ways-WP.pdf.
[17] LIU Z H and GUILAUME L. Breeding Sandworms: How to fuzz your way out of Adobe Reader’s Sandbox[C]. Black Hat EUROPE 2012, Amsterdam, Netherlands, 2012. https:// media.blackhat.com/bh-eu-12/Liu_Lovet/bh-eu-12-Liu_Lovet-Sandworms-Slides.pdf.
[18] Wang Z, JIANG X, CUI W,. Countering persistent kernel rootkits through systematic hook discovery[C]. Recent Advances in Intrusion Detection 2008, Cambridge, England, 2008: 21-38.
[19] YIN H, POOSANKAM P, HANNA S,. HookScout: proactive binary-centric hook detection[C]. 7th Detection of Intrusions and Malware, and Vulnerability Assessment, Bonn, Germany, 2010: 1-20.
[20] BUTLER J and GREG H. VICE–catch the hookers[C]. Black Hat USA 2004, Las Vegas, USA, 2004. http:// 120.52. 72.44/www.blackhat.com/c3pr90ntcsf0/presentations/bh-usa-04/bh-us-04-butler/bh-us-04-butler.pdf.
[21] JOANNA R. System Virginity verifier-defining the roadmap for malware detection on windows system[C]. Hack In The Box 2005, Kuala, 2005. http://www.cs.dartmouth.edu/ ~sergey/cs258/rootkits/hitb05_virginity_verifier.ppt.
[22] HookShark[OL]. http://www.gamedeception.net/threads/ 20596-HookShark-Beta-0-9-highlight=hookshark, 2010.
[23] BELLARD F. QEMU, a fast and portable dynamic translator[C]. Proc. USENIX Annual Technical Conference, Marroitt Anaheim, USA, 2005: 41-46.
Sandbox-interception Recognition Method Based on Function Injection
ZHAO Xu YAN Xuexiong WANG Qingxian WEI Qiang
(,450002,),(,450002,)
Testing sandbox authentication mechanism needs to recognize the sandbox interception first,.. to recognize the intercepted system function sets by the sandbox. Existing Hook recognition methods and tools mainly focus on the existence of the hook, lacking the ability of recognizing sandbox interception. This study proposes a sandbox interception recognition method based on function injection. The method recognizes the sandbox intercepts testing functions by analyzing the trace of system functions. First, the method injects and executes the system functions in untrusted process to record the function trace. Then, according to the features of intercepted system function trace, the paper designs the address space finite state automata and identifies intercepted system functions by analyzing the trace. Next, the function sets are traversed to identify the intercepted system function sets by target sandbox. Finally, a prototype is implemented—SIAnalyzer, and tested with Chromium Sandbox and Adobe Reader Sandbox. Results show the method proposed is effective and practical.
Sandbox interception; System functionset; Hook; Function injection; Automata
TP311.1
A
1009-5896(2016)07-1823-08
10.11999/JEIT151074
2015-09-21;改回日期:2016-03-03;网络出版:2016-04-07
赵旭 zhx0117@sina.cn
国家863计划项目(2012AA012902)
The National 863 Program of China (2012AA012902)
赵 旭: 男,1986年生,博士生,研究方向为二进制程序漏洞挖掘、Web安全.
颜学雄: 男,1975年生,副教授,研究方向为二进制程序分析、Web安全.
王清贤: 男,1960年生,教授,研究方向为网络空间安全.
魏 强: 男,1979年生,副教授,研究方向为程序分析、漏洞挖掘.