Shellcode静态检测技术研究

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

R E S E A R C HO NS H E L L C O D ES T A T I CD E T E C T I O NT E C H N I Q U E S
G eJ i S h i H o n g X uL i a n g h u a
( J i a n g n a nI n s t i t u t e o f C o m p u t i n gT e c h n o l o g y , W u x i 2 1 4 0 8 3 , J i a n g s u , C h i n a )
1 . 1 S h e l l c o d e 的构成
以典型的栈溢出为例, 攻击者在发起攻击时, 向目标系统发 送的数据一般包括随机数据、 N O P填充字段、 S h e l l c o d e 功能主 体和新的函数返回地址, 一般将后三部分称为 S h e l l c o d e , 如图 1 所示。
第2 7卷第 2期 2 0 1 0年 2月
Fra Baidu bibliotek
计算机应用与软件 C o m p u t e r A p p l i c a t i o n s a n dS o f t w a r e
V o l 2 7N o . 2 1 0 F e b . 2 0
S h e l l c o d e 静态检测技术研究
执行代码被称为 S h e l l c o d e , 一般实现开启 S h e l l 、 下载并执行攻 击程序、 添加系统帐户等功能。 针对缓冲区溢出攻击的不同阶段, 出现了多种防护技术, 主
[ 2 ] 要包括: 如S t a c k G u a r d ; ①返回地址保护技术, ② 地址空间随 [ 3 ] [ 4 ] 机化技术 ; ③数据执行保护技术 ;④ 某些安全软件厂商采
0 引 言 1 S h e l l c o d e 的构成和检测原理
利用缓冲区溢出安全漏洞是进行网络攻击、 获取系统控制 权的重要手段, 因此, 针对缓冲区溢出攻击的防御技术也就成为 网络安全领域研究的重要内容。 攻击者一般通过向目标进程有限长度的缓冲区内写入超长 的数据, 覆盖函数的返回地址或函数指针, 使程序跳转到攻击者
图2 J M PE S P实现跳转
系统之间实现的方法不同, 可以被绕过。 基于特征码的检测技术实现最为简单, 检测速度最快, 但是 由于检测特征的不完整性, 只采用基于特征码的检测技术无法 取得良好的检测效果, 容易被绕过。
1 . 2 . 2 N O P填充字段的变形 由简单的 N O P指令组成的填充字段很容易被入侵检测系 统检测, 攻击者找到了多种指令来代替 N O P指令实现填充字段 的功能, 如单字节指令, 特定的双字节、 三字节甚至四字节指令, 带跳转的填充指令等, 一般称这些指令为类 N O P指令。各种变 形的填充字段在文献[ 5 ] 中有详细的描述。变形的填充字段给 S h e l l c o d e 检测增加了难度。 1 . 2 . 3 功能字段的编码 为了满足特定缓冲区溢出漏洞对攻击数据的要求和躲避基 于特征码匹配的检测, 攻击者对 S h e l l c o d e 的功能字段进行编
2 0 1 0年
由于功能字段在进程空间中的位置难以精确地得到, 因此 在功能字 段 前 增 加 了 N O P填 充 字 段, 包含一些空指令( 如 0 x 9 0 ) , 当函数返回时, 跳转到这些指令上仍然可以正确地执行 到S h e l l c o d e 的功能字段。 同时, 通用性较强的 S h e l l c o d e 执行后一般会执行一个被称 为“ 自定位” 的操作, 以得到自身在进程空间中的位置, 来进行 数据的存取操作。 可见, S h e l l c o d e 的各个部分都有明显的特征, 可以利用这些 特征来对其进行检测。
2 . 1 基于特征码的检测技术
在入侵检测系统 S n o r t 中, 基于 N O P字段的 S h e l l c o d e 检测
8 ] 被作为一个插件 [ , 如果网络流中连续出现的 N O P指令数量超
过一定的阈值则认为该网络流中包含 S h e l l c o d e 。这种检测方法 对于简单的 S h e l l c o d e 具有一定的检测效果, 但其漏报率和误报 率完全依赖于阈值的大小, 难以同时获得较好的结果。而且, 这 种检测方法难以完全包括多种类 N O P指令, 同时对不需要 N O P 字段的攻击无能为力, 可以被轻易地绕过。
A b s t r a c t B u f f e r o v e r f l o wa t t a c ki s o n eo f t h em o s t s e r i o u s t h r e a t s f o r I n t e r n e t s e c u r i t y , a n dS h e l l c o d ed e t e c t i o ni s a ne f f e c t i v em e t h o dt o c o m b a t t h i s k i n do f a t t a c k . S t a r t i n gf r o mt h es t r u c t u r ea n dc h a r a c t e r i s t i c s o f S h e l l c o d e , d i f f e r e n t k i n d s o f s t a t i cd e t e c t i o nt e c h n i q u e s o nS h e l l c o d ea r es t u d i e d , t h e i r a d v a n t a g e s a n ds h o r t c o m i n g s a r e a n a l y s e da n dc o m p a r e d , a n df i n a l l y a d e t e c t i o ns c h e m e b a s e do nt h e s e s t u d i e s i s p r o p o s e da n di t s p r o t o t y p ei s i m p l e m e n t e d . K e y w o r d s B u f f e r o v e r f l o wa t t a c k S h e l l d o c e I n t r u s i o nd e t e c t i o n D i s a s s e m b l y V i r t u a l e x e c u t i o n 静态检测方法, 并实现了一个 S h e l l c o d e 静态检测原型系统。
图1 S h e l l c o d e 构成
其中功能字段实现攻击者的意图, 如下载执行攻击程序、 开 启S h e l l 、 添加帐户等。因为要以较短的代码实现其功能, 它一 般需要调用系统提供的 A P I 函数。由于系统的不同版本中 A P I 函数的地址是不固定的, 为了使 S h e l l c o d e 得到通用, 它需要一 种方法来实现 A P I 函数地址的查找。 返回地址字段用来覆盖本函数原本 的 返 回 地 址, 是指向 S h e l l c o d e 功能字段的指针, 当函数返回时, 进程将跳转到 S h e l l c o d e 的功能字段继续执行。对于已知的缓冲区溢出漏洞, 这个 返回地址的位置是固定的或者变化很小。
用的 A P I 函数调用来源追踪技术等。这些技术对进程的执行进 行实时保护, 可以有效地抵御很大一部分缓冲区溢出攻击, 但是 它们仍然存在被绕过的可能, 同时由于实现的难度和开销问题, 这些技术的推广进展缓慢。 由于缓冲区溢出攻击具体功能的实现需要 S h e l l c o d e 来完 成, 攻击者发送的攻击数据中一定包含 S h e l l c o d e , 所以可以将检 测S h e l l c o d e 是否 存 在 作 为 判 断 是 否 存 在 缓 冲 区 溢 出 攻 击 的 依据。 S h e l l c o d e 静态检测技术是指在攻击者发送的攻击数据到达 目标进程之前, 根据其特征将其识别出来以阻止攻击的继续进 行。静态检测技术的优点在于可以在 S h e l l c o d e 影响目标进程 之前将其拦截, 不会对目标进程带来额外开销, 并且部署的难度 较小。本文研究了 S h e l l c o d e 的构成和特点, 总结分析了现有的
收稿日期: 2 0 0 8-0 7-3 1 。国 家 高 技 术 研 究 发 展 计 划 基 金 项 目 ( 2 0 0 6 A A 0 1 Z 4 3 1 ) 。戈戟, 硕士生, 主研领域: 信息安全。
4 8
计算机应用与软件
节对不同发展阶段的 S h e l l c o d e 检测技术进行分析。
[ 9 ] B u t t e r c u p 是一种基于返回地址的检测方法, 由于利用已
1 . 2 S h e l l c o d e 的发展
随着对缓冲区溢出攻击和防御的研究的深入, 攻击者构造 出变形的 S h e l l c o d e来 更 好 地 利 用 缓 冲 区 溢 出 漏 洞 或 者 躲 避 检测。 1 . 2 . 1 取消 N O P填充字段 在 Wi n d o w s 系统下, 由于溢出发生时某些寄存器指向栈中 的特定位置, 可以用寄存器来实现对功能字段的精确定位, 不再 需要 N O P填充字段, 这使得依赖于 N O P填充字段的 S h e l l c o d e 检测技术变得无效。以栈溢出为例, 函数返回时 E S P寄存器指 向返回地址的下一个地址, 这就可以用图 2所示的 S h e l l c o d e 结 构来实现溢出, 其中用 J M PE S P的地址覆盖函数返回地址, 功 能字段跟在后面。
知的缓冲区溢出漏洞时, 返回地址字段的值固定或者变化很小, 可以根据 网 络 流 中 是 否 存 在 这 些 地 址 来 判 断 其 中 是 否 包 含 S h e l l c o d e 。这种方法对于已知的漏洞利用有一定的检测效果, 但是无法检测利用未知漏洞进行的攻击。同时, 由于覆盖返回 地址的值有一定的变化范围, 所以需要一段地址范围来作为特 征码, 这可能会带来较多的误报。与这种检测方法类似的是通 过检测 J M PE S P指令的地址来判断 S h e l l c o d e 的存在, 但是对于 具体的漏洞, 可以用其他指令来替换 J M PE S P指令, 而每一条 指令在进程空间中可能存在于多个位置, 这种方法不可能把每 一个地址都作为检测特征, 不然会带来较严重的误报。 某些安全系统把 S h e l l c o d e 功能字段中的一些特征字节作 为检测依据, 如在 U n i x 系统下开启 S h e l l 需要的“ / b i n / s h ” 等字 符串。但是实现同一功能可能存在多种方法, 而且不同的操作
戈 戟 史 洪 徐良华
( 江南计算技术研究所 江苏 无锡 2 1 4 0 8 3 )
摘 要 缓冲区溢出攻击是网络安全的重大威胁, 事先检测是否存在 S h e l l c o d e 是对抗缓冲区溢出攻击的有效手段。从 S h e l l c o d e 构成和特征出发, 分类研究各种 S h e l l c o d e 静态检测技术, 分析比较它们的优缺点, 在此基础上提出了一种检测方案并实现了一个原 型系统。 关键词 缓冲区溢出攻击 S h e l l c o d e 入侵检测 反汇编 虚拟执行
1 ] 精心构造的可执行代码中执行 [ 。这段攻击者精心构造的可
S h e l l c o d e 的检测一般从 S h e l l c o d e 的构成出发, 根据其各个 组成部 分 区 别 于 正 常 数 据 流 的 特 征 来 进 行 检 测。本 节 分 析 S h e l l c o d e 的构成、 特征和最新发展。
相关文档
最新文档