Windows操作环境下基于插桩工具的漏洞检测方法

文档序号:9432989阅读:432来源:国知局
Windows操作环境下基于插桩工具的漏洞检测方法
【技术领域】
[0001]本发明属于计算机领域,具体涉及一种在Windows操作环境下的基于插粧工具的漏洞检测。
【背景技术】
[0002]软件漏洞是造成蠕虫、木马等各类攻击逐渐猖獗的重要原因。近几年来,重大安全事件屡见不鲜,如2010年I月Google受Microsoft的极光漏洞影响,被黑客攻击,导致系统故障;2011年12月全球最大的中文IT社区CSDN被脱库,造成600万注册用户的个人信息被泄露。国家信息安全漏洞共享平台(China Nat1nal Vulnerability Database)从2004年到2014收集的漏洞数据显示,只有在06年到08年间漏洞数量有所下降,从08年起,漏洞数量开始反弹,被曝光的漏洞不仅在数量上越来越多,其危害程度也在急速增长,由此带来的安全问题也会日益增多。
[0003]漏洞验证是归类于软件系统安全领域的黑盒测试,目标文件二进制级的测试通过对大量的漏洞样本文件的获取来完成,在测试过程中,将探针插入目标代码中来监控运行过程中是否有异常行为出现。Pin是目前国内外广泛采用的二进制动态插粧工具,其采用JIT(Just-1n-Time)编译,通过在进程中插入探针实现对目标进程进行监控的目的。另一方面,动态污点分析技术(Dynamic Taint Analysis)被外界普遍采纳,其在代码动态运行过程中对利用软件漏洞的攻击行为进行探测,从而实现对漏洞文件样本的验证。
[0004]缓冲区溢出、本地提权和ROP这三类漏洞,是非常普遍、非常危险的漏洞,在各种操作系统、应用软件广泛存在,但是当前研究仅仅对一种漏洞进行分析处理,比较单一。同时,为保护互联网中用户的信息安全,国家安全部门以及企业随时都会捕获到大量的文件样本,仅仅依靠静态扫描或者人工分析文件样本会导致分析进度迟缓,特别是在当今如此复杂的网络环境下,海量的文件数据有分析需求,而单纯的手工分析只能处理有限的样本。另一方面,多数样本文件中的恶意代码隐藏极深,手工分析等方法无法准确地判断出文件中是否存在对软件漏洞的利用等恶意行为。因此,有必要提供一个稳定的自动化平台,用于动态执行过程中,快速且精确地验证文件中是否存在对漏洞的触发等恶意行为。

【发明内容】

[0005]本发明的发明目的在于:针对上述存在的问题,提供一种能检查多种类型的漏洞检测方法。
[0006]本发明的Windows操作环境下基于插粧工具的漏洞检测方法,能实现对缓冲区溢出漏洞、本地提权漏洞和ROP漏洞的检测。即对给定的漏洞样本文件,采用插粧工具(例如Inter公司的Pin技术)对样本动态运行过程中的指令进行实时反汇编,对目标指令(如call函数调用、ret函数返回等)执行前后插入相应处理函数来获得进程运行过程中的相应信息(如寄存器、内存分配状态、栈帧等),从而可以监控进程运行状态。其具体包括下列步骤:
[0007]当检测到目标进程执行函数调用指令时(例如通过检测目标进程调用call指令来判断是否执行函数调用指令),将下一指令的地址存入第一预设存储单元中(例如采用堆栈的方式进行存储),并且将当前被调用函数的返回地址存入第二预设存储单元中;
[0008]检查目标进程的跳转目的地址,若所述目的地址对应的指令不是被调用函数的起始指令,则判定目标进程存在ROP漏洞;
[0009]当检测到目标进程执行函数返回指令时(例如通过检测目标进程调用ret指令来判断是否执行函数返回指令),检测当前线程栈中的返回地址是否在第一预设存储单元中存在,若是,则判定目标进程存在缓冲区溢出漏洞;判断所述函数返回指令的地址与第二预设存储单元中的当前被调用函数的返回地址是否相同,若否,则保存所述函数返回指令的地址,当检测到该地址的函数返回指令被执行K(K ^ 2)次时,则判定目标进程存在ROP漏洞;针对缓冲区溢出漏洞,还可以通过检测是否存在未匹配到函数调用指令的函数返回指令来判定,例如,系统运行的指令存在未匹配到call指令的ret指令,则对应于该ret指令的目标进程存在缓冲区溢出漏洞。另外,针对ROP漏洞,还可以通过判断目标进程的提权指令地址和跳转目的地址是否在一个库来判定,即若两者不在同一个库(操作系统本身所构建的对应库),则认为目标进程存在ROP漏洞。
[0010]基于函数调用接口(API)打开预设被调试进程(例如可获取的已有漏洞样本),再判断所述预设被调试进程能否打开目标进程,若否,则目标进程存在本地提权漏洞。
[0011]综上所述,由于采用了上述技术方案,本发明的有益效果是:能够并发地对多个样本进行处理,对于满足缓冲区溢出,本地提权和ROP这三类漏洞的样本,能够自动进行识别和检测。
【具体实施方式】
[0012]为使本发明的目的、技术方案和优点更加清楚,下面结合实施方式,对本发明作进一步地详细描述。
[0013]实施例1
[0014]本发明所述的基于插粧工具的漏洞检测的具体实施为:
[0015]a)以挂起方式创建目标进程;
[0016]b)以调试模式附加到目标进程;
[0017]c)恢复目标进程运行直到内存管理动态链接库加载到进程空间并完成初始化再次挂起;
[0018]d)将内存管理动态链接库从进程空间中分离;
[0019]e)拷贝插粧启动例程到目标进程空间并将进程计数器指向该例程;
[0020]f)恢复目标进程运行;
[0021]g)加载插粧工具模块枚举(Pinvm.dll);
[0022]h)加载漏洞触发判定模块;
[0023]i)对目标进程进行插粧,并执行进程指令,生成漏洞检测报告。
[0024]上述步骤除步骤h外,均可采用任一惯用方式具体实现,步骤h中所涉及的漏洞出发判定模块是用来判定目标进程运行中是否触发了漏洞,漏洞所在位置以及漏洞类型。漏洞触发判定模块利用漏洞先验知识来判定目标进程在执行过程中是否存在漏洞,即遭受到漏洞攻击,其具体执行步骤如下:
[0025]1.缓冲区溢出漏洞触发判定:
[0026]缓冲区溢出型漏洞的判定原理可利用影子栈技术(Shadow Stack),即当目标进程利用call指令调用函数时,将下一条指令地址存入第一影子栈中,当执行ret指令从当前被调用函数返回时检测当前线程栈中的返回地址是否与该影子栈中的返回地址相同,如不相同则可以判定目标程序存在缓冲区溢出漏洞;
[0027]例如:目标进程执行call MyPrintf (4010B0h)指令,将下一条指令地址(0x401023)存入当前线程栈中;漏洞触发判定模块检测到call指令时,将下一条指令地址(0x401023)存入第一影子桟中;当目标进程执行ret指令,S卩从MyPrintf函数中返回时,跳转到0x401023处;漏洞触发判定模块检测到ret指令时,从第一影子栈中取出对应返回地址与当前线程栈中的返回地址比对,当比对结果不一样时,可以判定当前目标进程存在缓冲区溢出漏洞。
[0028]2.ROP漏洞触发判定:
[0029]ROP是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。本发明利用插粧工具对call,ret, jmp指令的完整性检测(动态监控)进行判定:
[0030]call:当识别到目标进程执行call指令时,将被执行函数的返回地址压入第二影子栈,然后检查目标进程的跳转目的地址。如果该目的地址所对应指令不是其所在的函数的起始指令,则判定目标进程存在ROP漏洞;例如,执行call MyPrintf (4010B0h)指令时,将被执行函数(MyPrintf)的返回地址压入第二影子栈,再判断目标进程的调准目的地址所对应的指令是否为MyPrintf的起始指令,若否,则判定当前目标进程存在ROP漏洞。
[0031]ret:当识别到目标进程执行ret指令时,从第二影子栈取出压入的返回地址,比较两者是否一致,若否,则记录该ret指令的内存地址,若该内存地址的ret指令被执行多次(大于或等于2次),则判定当前目标进程存在ROP漏洞;
[0032]jmp:提权目标进程的jmp指令地址和跳转目的地址,如果不在一个库,则判定当前目标进程存在ROP漏洞。
[0033]3.本地提权漏洞触发判定:
[0034]利用API openprocessstoken去打开预设被调试进程,由于低权限进程不能打开高权限进程的限制,若预设被调试进程打开目标进程失败,那么就可以判定当前目标进程存在漏洞样本提权。
[0035]以上所述,仅为本发明的【具体实施方式】,本说明书中所公开的任一特征,除非特别叙述,均可被其他等效或具有类似目的的替代特征加以替换;所公开的所有特征、或所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以任何方式组合。
【主权项】
1.Windows操作环境下基于插粧工具的漏洞检测方法,其特征在于,包括下列步骤: 当检测到目标进程执行函数调用指令时,将下一指令的地址存入第一预设存储单元中,并且将当前被调用函数的返回地址存入第二预设存储单元中; 检查目标进程的跳转目的地址,若所述目的地址对应的指令不是被调用函数的起始指令,则判定目标进程存在ROP漏洞; 当检测到目标进程执行函数返回指令时,检测当前线程栈中的返回地址是否在第一预设存储单元中存在,若是,则判定目标进程存在缓冲区溢出漏洞;判断所述函数返回指令的地址与第二预设存储单元中的当前被调用函数的返回地址是否相同,若否,则保存所述函数返回指令的地址,当检测到该地址的函数返回指令被执行K次时,则判定目标进程存在ROP漏洞,其中K彡2 ; 基于函数调用接口打开预设被调试进程,再判断所述预设被调试进程能否打开目标进程,若否,则目标进程存在本地提权漏洞。2.如权利要求1所述的方法,其特征在于,针对缓冲区溢出漏洞,还包括:检测系统运行的指令是否存在未匹配到函数调用指令的函数返回指令若是,则判定目标进程存在缓冲区溢出漏洞。3.如权利要求1或2所述的方法,其特征在于,针对ROP漏洞,还包括:检测目标进程的提权指令地址和跳转目的地址是否在一个库,若否,则判定目标进程存在ROP漏洞。
【专利摘要】本发明公开了一种Windows操作环境下基于插桩工具的漏洞检测方法。本发明为:当检测到目标进程执行函数调用指令时,保存下一指令地址,以及函数的返回地址;若目标进程的跳转目的地址对应的指令不是该函数的起始指令,则判定存在ROP漏洞;当检测到目标进程执行函数返回指令时,检测当前线程栈中的返回地址是否被存储过,若是,则判定存在缓冲区溢出漏洞;判断函数返回指令地址与所存储是否相同,若否,则保存该函数返回指令的地址,当检测到其被执行多次时,则判定目标进程存在ROP漏洞;基于函数调用接口打开预设被调试进程,再判断所述预设被调试进程能否打开目标进程,若否,则存在本地提权漏洞。本发明能够并发地对多个样本进行自动识别和检测。
【IPC分类】G06F21/57
【公开号】CN105184169
【申请号】CN201510585330
【发明人】张小松, 向琦, 牛伟纳, 鲍凯, 唐海洋, 曹思宇, 岳豪
【申请人】电子科技大学
【公开日】2015年12月23日
【申请日】2015年9月14日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1