[发明专利]一种Shellcode的动态检测方法在审
申请号: | 201510134654.8 | 申请日: | 2015-03-25 |
公开(公告)号: | CN104731708A | 公开(公告)日: | 2015-06-24 |
发明(设计)人: | 陈漠;刘渊;王潇茵;李宁 | 申请(专利权)人: | 北京信息控制研究所;中国工程物理研究院计算机应用研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F21/56;G06F9/455 |
代理公司: | 中国航天科技专利中心 11009 | 代理人: | 陈鹏 |
地址: | 100037*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 shellcode 动态 检测 方法 | ||
技术领域
本发明涉及信息安全技术领域,特别是一种Shellcode的动态检测方法。
背景技术
随着网络攻击技术的发展,缓冲区溢出的代码注入攻击越来越受到攻击者们的重视,已经成为主要的攻击计算机系统的手段,其中,缓冲区溢出的代码注入包括了Shellcode注入。Shellcode注入,就是向目标主机中存在漏洞的应用程序发送包含Shellcode的恶意数据,从而改变存在漏洞的应用程序的执行流程,甚至控制整个计算机系统。抵御这种攻击的关键在于能否精确地发现网络数据流中Shellcode的存在,而现有的检测Shellcode的技术方法可以分为静态检测方法和动态检测方法两大类。
检测Shellcode的静态检测方法大多基于特征匹配的方法,即事先对一些已经存在的Shellcode通过特定的算法提取其特征,然后与网络数据流进行特征匹配,进而检测Shellcode。虽然这种方法简单高效,但是它很难检测到使用了代码混淆技术而使特征不再明显的Shellcode。
检测Shellcode的基于虚拟化技术的动态检测方法可以检测出使用了代码混淆技术的Shellcode。这种方法的核心思想是使用一个CPU模拟器来直接执行网络数据流。Shellcode是一串有效的指令链,所以在执行过程中不会导致操作系统异常,网络数据流对于CPU来说大部分是一些无效的或非法的指令,所以在执行过程中会引起大量的操作系统异常。同时即使在网络数据流中存在有效的指令链,也可以通过明显的行为差异与Shellcode区别开来。因此,当恶意行为被发现而所执行的网络数据流没有引发操作系统异常时,可以认定当前网络数据流中存在Shellcode。动态检测方法是一种非常有效的检测Shellcode的方法,目前绝大多数的基于动态检测方法的Shellcode检测方法都使用了虚拟化技术为执行网络数据流搭建虚拟执行环境。但是Shellcode很有可能通过先检测是否存在虚拟化环境,来决定是否真正执行Shellcode的有效部分,以此逃避检测。因此,需要一种可以解决现有Shellcode动态检测方法容易被发现的问题,即不使用虚拟化技术的动态检测方法,进一步提高Shellcode检测的隐蔽性。
发明内容
本发明解决的技术问题是:克服现有动态检测方法存在的不足,提供了一种不使用任何虚拟化技术、网络数据流直接在CPU上执行的Shellcode动态检测方法,可以有效检测具备发现虚拟化环境的Shellcode,降低了检测暴露的可能性。
本发明的技术解决方案是:一种Shellcode的动态检测方法,包括步骤如下:
(1)令待检测主机执行能够引起breakpoint异常的指令,将此时寄存器值和内存内容作为重置待检测主机状态的初始寄存器值和内存内容并存储;
(2)从待检测主机的网络通信信道中抓取网络数据流,并存储至待检测主机的内存中;
(3)对抓取的网络数据流进行划分,得到多个执行链,并使用初始寄存器值和内存内容开始执行第一个执行链;
(4)执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环,则当前执行链没有Shellcode且当前执行链检测完成,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤(6),如果出现操作系统异常,则当前执行链没有Shellcode且当前执行链检测完成,在产生对应的操作系统异常处理信号并送至操作系统内的异常处理程序之前,中止该操作系统异常对应的异常处理流程,输出未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内容并转入步骤(6),如果没有出现死循环或者操作系统异常,则转入步骤(5);
(5)使用Heuristics方法检测当前执行链,如果检测到Shellcode,则输出检测到Shellcode信号,转入步骤(6),否则输出未检测到Shellcode信号,转入步骤(6);
(6)重复步骤(4)-步骤(5)执行下一执行链直至网络数据流划分得到的所有执行链被遍历。
所述的死循环的检测方法为:记录当前执行链开始执行时计数器变量的初始值为A,当前执行链执行过程中每次时钟中断时,比较此时计数器变量与A的差值,如果差值大于1,则当前执行链陷入死循环;如果差值不大于1,则当前执行的执行链没有陷入死循环。
所述的Heuristics方法为PEB Heuristics方法。
本发明与现有技术相比的优点在于:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京信息控制研究所;中国工程物理研究院计算机应用研究所;,未经北京信息控制研究所;中国工程物理研究院计算机应用研究所;许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510134654.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种缓存系统和方法
- 下一篇:NAND FLASH管理软件的测试方法