基于内存搜索的shellcode的检测系统及方法
技术领域
本发明涉及网络安全入侵检测防御领域,具体是指一种基于内存搜索的shellcode的检测系统及方法。
背景技术
利用缓冲区溢出安全漏洞以及其他内存内存安全漏洞是进行网络攻击、获取系统控制权的重要手段,因此,针对该类型漏洞攻击的防御技术是网络安全领域研究的重要内容。
由于上述主要的漏洞攻击中具体的功能实现必须要通过shellcode来完成,因此攻击者发生的漏洞载体数据中一定保护shellcode,当前将检测是否存在shellcode作为判断漏洞攻击的主要手段。
当前主流的攻击软件载体主要是微软office文档、adobe pdf 、adobe flash、ie browser等最流行的软件。因此这些主流的文档是漏洞攻击的主要目标,shellcode也主要存在该类文档中。目前常规的IDS/IPS/Anti AV网络安全防御设备都是采用基于格式解析从而检测shellcode的技术,对于该类shellcode检测都必须要先对具体的文档格式进行解析,解析出原始的数据流之后,在进行相应的shellcode检测。
该类技术主要优点在于:
可以部署在网关层,直接解析网络数据包中相应的文件格式,从而直接扫描shellcode。
速度快,在要求实时性网络安全防御中具有较大的优势。
同时该类技术存在相应的缺点:主流的文档格式其中office、pdf、flash等文档格式,该类格式非常复杂,虽然office、pdf等格式已有公开的格式文档说明,但是按照对应格式实现相应的格式解析工具非常耗时、耗人力成本。同时这些公开的格式文档只是提供了该类文档格式的标准规范,对于不按照此类标准规范的一些文档,其相应的发布厂商能有较好的兼容性解决方案,具有很好的容错能力。而第三方据此格式文档实现的格式解析工具往往不能很好的兼容各种不规范的格式文件,容错能力差。从而造成了漏洞攻击的空隙,攻击者构造特殊的格式文档,使得其漏洞触发的程序可以正常解析,但是第三方的解析工具确无法解析,从而绕过各种防御的检测。
发明内容
本发明所要解决的技术问题是提供一种基于内存搜索的shellcode的检测系统及方法。它能够不通过解析相应的文档格式从而直接进行shellcode检测识别。
本发明是通过下述技术方案来解决上述技术问题的:
一种基于内存搜索的shellcode的检测系统,包括:
被检测样本调度模块,用于调度每个样本被相应的宿主程序打开并解析内容;
内存搜索算法模块,用于搜索被检测应用的所有可读可写堆块;
shellcode检测模块,用于对搜索出来的每块内存进行shellcode扫描;
日志模块,用于输出有关检测信息的结果。
所述内存搜索算法模块包括堆栈内存搜索模块和堆内存搜索模块。
本发明的重点是如何通过不解析文档格式进行shellcode检测识别的思路方法。主要通过被测试应用的内存搜索实现检测。
当shellcode被编码成各种形态存于文档中时,当被测试应用程序解析该文档时,会自动进行解码操作,并将真实的shellcode形态还原于内存当中。由于无论shellcode多么复杂的文档格式编码、加密、转换,但是最终都必须要能被测试应用程序正常解析,否则会导致该攻击无效化。因此采用直接搜索内存的方式无须应对各种复杂的文档格式、编码,也不会造成和被测试应用程序解析文档的差异造成的无法解出真正的shellcode,造成检测防御系统的漏报。
内存搜索主要搜索被测试应用的堆、堆栈。通过解析堆、堆栈的内存结构,从而搜索出有效的内存区域,加快检测的速度。
一种基于内存搜索的shellcode的检测方法,包括以下步骤:
(1)调度模块调度被测试应用打开被检测文档样本;
(2)内存搜索算法模块转储被测试应用内存至文件或者直接内存搜索;
(3)Shellcode检测模块扫描转储的文件来发现shellcode;
(4)日志输出模块输出有关shellcode信息。
本发明具有以下积极进步效果:本发明基于内存搜索然后进行shellcode检测,能够有效的检测复杂的应用文档格式中编码、加密藏匿的shellcode。大大的提高了恶意攻击样本的检测率,见效误报率和漏报率。对于pdf复杂文档格式中,如FlateDecode压缩编码、stream 关键字#转义对抗、内嵌javascript中含有shellcode等等其他各种对抗检测手法都可以完美解决,且不存在新的对抗问题。当然本发明的技术不限于检测上述应用的复杂格式藏匿shellcode,因为漏洞触发的最终形态必然决定了shellcode必须以原始形态存放于内存中,从而可以从根本上解决该类问题。
附图说明
图1是本发明基于内存搜索的shellcode的检测系统的方框图;
图2是本发明基于内存搜索的shellcode检测的防御检测方法的流程图。
具体实施方式
下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。
参考图1,其中示出根据本发明一个实施实例的基于内存搜索的shellcode的检测系统的方框图。请注意,在整个说明书和权利要求书中,“应用程序”和“软件”表示相同的含义,并且能够互换地进行使用。在本发明的实施例中,所述基于内存搜索的shellcode的检测系统运行在Windows操作系统中。然而,作为一种通用的检测测试系统,所述基于内存搜索的shellcode的检测系统能够运行在任何操作系统中。
所述基于内存搜索的shellcode的检测系统包括堆栈内存搜索模块104、堆内存搜索模块106、调度模块108、shellcode检测模块110,日志输出模块112,堆栈内存搜索模块104和堆内存搜索模块106一起构成了内存搜索算法模块102。
调度模块108主要调度被测试应用打开要检测的文档样本。内存搜索算法模块102通过堆内存搜索模块106和堆栈内存搜索模块104实现有效的内存转储至文件中。Shellcoed检测模块110扫描转储的文件来发现shellcode。日志输出模块112输出最终的检测结果,shellcode具体的一些信息。
图2示出根据本发明一个实施例的基于内存搜索的shellcode的检测方法的流程图。下面结合图1的基于内存搜索的shellcode的检测系统来详细说明图2的检测方法的流程图。
在步骤202中,调度模块108调度被测试应用打开要检测的样本文档。在本发明的实施例中,调度模块108可以调度adobe reader、office文档所有应用等等,包括但不限于以上所列应用程序。
在步骤204中,内存搜索算法模块102 搜索有效的内存块转储文件中。该内存搜索102模块分为2个部分,一部分是堆栈内存搜索模块104,另一部分是堆内存搜索模块106。
其中堆栈内存搜索模块104通过分析相应线程的TEB结构,获取相应offset所在的StackBase字段,来获取线程堆栈的起始地址和大小。
其中堆内存搜索模块106通过分析进程的PEB结构,获取相应offset所在的ProcessHeaps字段和NumberOfHeaps字段来获取堆的范围地址,在进一步分析具体堆块的结构从而搜索出有效的堆内存。
在步骤206中,调用shellcode检测模块110去扫描已经转储至文件的内存,从而检测shellcode。
在步骤208中,shellcode检测模块110在检测到内存中包含shellcode时输出有关shellcode的一些具体信息供人工进一步确认分析等。
以上参考附图示出并描述了本发明的实施例,但是本发明不限于此。显然,本领域的技术人员可以对本发明进行各种修改、变型和替换而不脱离本发明的精神范围。因此,只要本发明的这些修改、变型和替换属于本发明的权利要求书及其等同技术方案的范围之内,则本发明也意图包含这些修改、变型和替换。