一种SHELLCODE的动态检测方法.pdf

上传人:1*** 文档编号:1750265 上传时间:2018-07-09 格式:PDF 页数:7 大小:387.13KB
返回 下载 相关 举报
摘要
申请专利号:

CN201510134654.8

申请日:

2015.03.25

公开号:

CN104731708A

公开日:

2015.06.24

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 11/36申请日:20150325|||公开

IPC分类号:

G06F11/36; G06F21/56(2013.01)I; G06F9/455

主分类号:

G06F11/36

申请人:

北京信息控制研究所; 中国工程物理研究院计算机应用研究所

发明人:

陈漠; 刘渊; 王潇茵; 李宁

地址:

100037北京市海淀区阜成路14号

优先权:

专利代理机构:

中国航天科技专利中心11009

代理人:

陈鹏

PDF下载: PDF下载
内容摘要

一种Shellcode的动态检测方法,首先抓取网络数据流并进行划分,得到多个执行链;然后触发一个操作系统breakpoint异常,将异常触发时的寄存器值和内存内容作为初始寄存器值和内存内容并存储;最后依次执行执行链,同时在每一执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环或系统异常,则当前执行链没有Shellcode,否则使用启发式方法检测当前执行链是否含有Shellcode,完成检测。本发明方法不仅能够检测到使用了代码混淆技术的Shellcode,而且未采用虚拟化技术、易于部署,能有效检测到可发现虚拟化环境的Shellcode,大大降低了Shellcode检测暴露的可能性。

权利要求书

权利要求书
1.  一种Shellcode的动态检测方法,其特征在于包括步骤如下:
(1)令待检测主机执行能够引起breakpoint异常的指令,将此时寄存器 值和内存内容作为重置待检测主机状态的初始寄存器值和内存内容并存储;
(2)从待检测主机的网络通信信道中抓取网络数据流,并存储至待检测主 机的内存中;
(3)对抓取的网络数据流进行划分,得到多个执行链,并使用初始寄存器 值和内存内容开始执行第一个执行链;
(4)执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出 现死循环,则当前执行链没有Shellcode且当前执行链检测完成,输出未检测 到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存 内容并转入步骤(6),如果出现操作系统异常,则当前执行链没有Shellcode 且当前执行链检测完成,在产生对应的操作系统异常处理信号并送至操作系统 内的异常处理程序之前,中止该操作系统异常对应的异常处理流程,输出未检 测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内 存内容并转入步骤(6),如果没有出现死循环或者操作系统异常,则转入步骤 (5);
(5)使用Heuristics方法检测当前执行链,如果检测到Shellcode,则输 出检测到Shellcode信号,转入步骤(6),否则输出未检测到Shellcode信号, 转入步骤(6);
(6)重复步骤(4)-步骤(5)执行下一执行链直至网络数据流划分得到 的所有执行链被遍历。

2.  根据权利要求1所述的一种Shellcode的动态检测方法,其特征在于: 所述的死循环的检测方法为:记录当前执行链开始执行时计数器变量的初始值 为A,当前执行链执行过程中每次时钟中断时,比较此时计数器变量与A的差 值,如果差值大于1,则当前执行链陷入死循环;如果差值不大于1,则当前 执行的执行链没有陷入死循环。

3.  根据权利要求1或2所述的一种Shellcode的动态检测方法,其特征在 于:所述的Heuristics方法为PEB Heuristics方法。

说明书

说明书一种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方法。
本发明与现有技术相比的优点在于:
(1)本发明方法与现有静态检测技术相比,克服了静态检测技术在检测使 用代码混淆技术而使特征不再明显的Shellcode时失效的缺陷,能够检测到 使用了代码混淆技术的Shellcode;
(2)本发明方法与现有动态检测技术相比,未采用虚拟化技术,不使用任 何CPU模拟器或者虚拟机,实现直接基于硬件的动态检测方法,易于部署;
(3)本发明方法与现有动态检测技术相比,克服了传统的动态监测技术中 Shellcode通过先检测是否存在虚拟化环境来逃避检测的问题,能有效检测 到可发现虚拟化环境的Shellcode,大大降低了Shellcode检测暴露的可能性。
附图说明
图1为本发明一种Shellcode的动态检测方法流程图。
具体实施方式
本发明提出一种Shellcode的动态检测方法,不使用任何虚拟化技术,使 网络数据流直接在CPU上执行,并能有效检测Shellcode。本发明方法直接令 网络数据流在CPU上执行,一般的网络数据流对CPU来说大多是无效的或非 法的指令,直接在CPU上执行会引发当前使用的操作系统异常或陷入死循环, 然而执行到Shellcode则不会引起操作系统异常。因此为了使网络数据流能够 顺利地连续执行,需要处理操作系统异常和系统陷入死循环这两种情况。
判断执行链是否处于死循环状态,其核心思想就是查看当前操作系统的计 数器变量,检查刚开始执行一条执行链时的计数器数值和执行过程中发生时钟 中断时的计数器数值的差值,如果差值大于1,则说明系统陷入死循环,即当 前执行的执行链内没有Shellcode,如果差值不大于1,则说明当前执行的执行 链可能有Shellcode,并继续执行本执行链。
判断执行链执行时操作系统是否发生异常,首先当执行一个执行链操作系 统产生异常时(例如,divide error,page fault),CPU就会产生对应的异常中 断向量;然后,操作系统内核根据CPU产生的异常中断向量,通过中断描述 符表(IDT),计算出对应的异常处理程序的入口地址,进行相应的异常处理。 为了防止执行链执行时由于触发系统异常,接收到异常信号导致无法连续执行 执行链,本发明在操作系统即将处理异常信号时,截断异常信号的发送来中止 该操作系统异常对应的异常处理流程,并重置到初始的寄存器值和内存内容, 然后立即返回继续执行下一个执行链。
本发明中初始产生的以及重置时使用的寄存器值和内存内容,是在执行网 络数据流中第一个执行链之前,触发一个操作系统breakpoint异常,将异常触 发时的寄存器值和内存内容作为初始寄存器值和内存内容并存储;然后开始依 次执行执行链,每当发生系统异常或陷入死循环时,即终止当前执行链执行, 使用存储的初始寄存器值和内存内容替换当前寄存器值和内存内容,执行下一 条执行链,避免了前一执行链执行后对后一执行链的执行环境的影响,保证了 所有执行链都能有相同的执行环境。
如果执行执行链引发异常或者陷入死循环,说明当前执行链中没有 Shellcode,那么操作系统会使用初始寄存器值和内存内容开始执行下一条执行 链。如果既没有引发异常也没有陷入死循环,那么可以判断该执行链中可能存 在Shellcode,需要进一步利用其它方法进行判别。本发明采用的是启发式 (Heuristics)方法,例如PEB启发式(Heuristics)方法,通过检查与PEB 相关内存地址是否被注入的Shellcode所访问,来判断当前执行链是否有 Shellcode。
本发明一种Shellcode的动态检测方法如图1所示,具体步骤包括:
1.从网络通信信道中抓取网络数据流,并存储至待检测主机的内存中;
2.令待检测主机执行能够引起breakpoint异常的指令,将此时寄存器值和 内存内容作为重置待检测主机状态的初始寄存器值和内存内容并存储;
3.根据Polychronakis M.等人在文献《Network-level Polymorphic  Shellcode Detection using Emulation》中提出的执行链(Execution Chain)概 念,对抓取的网络数据流进行划分,得到多个执行链,并使用步骤(2)得到的 初始寄存器值和内存内容开始执行第一个执行链;
4.执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现 死循环,则当前执行链没有Shellcode且当前执行链检测完成,输出未检测到 Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值和内存内 容并转入步骤6,如果出现操作系统异常,则当前执行链没有Shellcode且当 前执行链检测完成,并在CPU产生对应的操作系统异常处理信号并送至操作 系统内的异常处理程序之前,中止该操作系统异常对应的异常处理流程,输出 未检测到Shellcode信号,读取初始寄存器值和内存内容,替换当前寄存器值 和内存内容并转入步骤6,否则(没有出现死循环或者操作系统)转入步骤5; 其中,死循环的检测方法为查看当前操作系统的计数器变量,记录当前执行链 开始执行时计数器变量的初始值为A,当前执行链执行过程中每次时钟中断时, 比较此时计数器变量与A的差值,如果差值大于1,则当前执行链陷入死循环 (即当前执行链没有Shellcode)且当前执行链不再继续执行;如果差值不大 于1,则说明当前执行的执行链没有陷入死循环(即当前执行链可能有 Shellcode),并继续执行直至当前执行链执行完毕;如果操作系统执行一个执 行链时产生异常,则CPU产生对应的操作系统异常信号,操作系统将该信号 传输到内部自带的异常处理程序,将此时刻设定为检测出操作系统异常的时刻 且当前执行链不再继续执行,但是因为异常处理程序处理异常信号后,会导致 操作系统无法继续执行下一条执行链,本发明在操作系统即将处理异常信号时, 截断异常信号的发送来中止该操作系统异常对应的异常处理流程,如果一个执 行链没有产生异常,则继续执行直至当前执行链执行完毕。
5.使用PEB启发式(Heuristics)方法检测当前执行链,如果检测到 Shellcode,则输出检测到Shellcode信号,转入步骤(6),否则输出没有检测 到Shellcode信号,转入步骤(6)。
6.重复步骤4-步骤5执行下一执行链直至网络数据流划分得到的所有 执行链被遍历。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。

一种SHELLCODE的动态检测方法.pdf_第1页
第1页 / 共7页
一种SHELLCODE的动态检测方法.pdf_第2页
第2页 / 共7页
一种SHELLCODE的动态检测方法.pdf_第3页
第3页 / 共7页
点击查看更多>>
资源描述

《一种SHELLCODE的动态检测方法.pdf》由会员分享,可在线阅读,更多相关《一种SHELLCODE的动态检测方法.pdf(7页珍藏版)》请在专利查询网上搜索。

一种Shellcode的动态检测方法,首先抓取网络数据流并进行划分,得到多个执行链;然后触发一个操作系统breakpoint异常,将异常触发时的寄存器值和内存内容作为初始寄存器值和内存内容并存储;最后依次执行执行链,同时在每一执行链执行过程中,检测是否出现死循环或者操作系统异常,如果出现死循环或系统异常,则当前执行链没有Shellcode,否则使用启发式方法检测当前执行链是否含有Shellcode。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1