为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于缓冲溢出漏洞的攻击及其预防研究综述

2011-11-20 5页 pdf 221KB 24阅读

用户头像

is_561413

暂无简介

举报
基于缓冲溢出漏洞的攻击及其预防研究综述 收稿日期 :2002 - 12 - 18。刘绍翰 ,博士生 ,主研领域 :网络通信 ,信 息检索。 基于缓冲溢出漏洞的攻击及其预防研究综述 刘绍翰  许建真  张福炎 (南京大学软件新技术国家重点实验室 南京大学多媒体计算技术研究所 南京 210093) 摘  要   近十几年来 ,由操作系统缓冲区溢出漏洞导致的攻击带来了严重的网络安全问题 ,它的安全危害级别相当高。如何有效 地消除基于缓冲区溢出的攻击 ,可以消除一个相当普遍的安全隐患。本文针对缓冲区溢出漏洞的基本原理 ,系统分析了攻击过程 , 比较了不同的防御手段及...
基于缓冲溢出漏洞的攻击及其预防研究综述
收稿日期 :2002 - 12 - 18。刘绍翰 ,博士生 ,主研领域 :网络通信 ,信 息检索。 基于缓冲溢出漏洞的攻击及其预防研究综述 刘绍翰  许建真  张福炎 (南京大学软件新技术国家重点 南京大学多媒体计算技术研究所 南京 210093) 摘  要   近十几年来 ,由操作系统缓冲区溢出漏洞导致的攻击带来了严重的网络安全问题 ,它的安全危害级别相当高。如何有效 地消除基于缓冲区溢出的攻击 ,可以消除一个相当普遍的安全隐患。本文针对缓冲区溢出漏洞的基本原理 ,系统分析了攻击过程 , 比较了不同的防御手段及其优缺点。最后介绍了综合利用现有的方法防止该攻击的发生。 关键词   缓冲区溢出  不可执行缓冲区  Shellcode  Stackguard A SURVEY OF BUFFER OVERFLOW ATTACKS AND DEFENSES Liu Shaohan  Xu Jianzhen  Zhang Fuyan ( State Key Laboratory for Novel Software Technology , Institute of Multimedia Computing Technology , Nanjing University , Nanjing 210093) Abstract   Buffer overflow vulnerabilities have endangered seriously the network security for the past decade. In the first place of this paper ,the principles and causes of the buffer overflow is introduced. Secondly how the buffer overflow attacks happened are analyzed. Thirdly ways to prevent the buffer overflow attacks are viewed at different angles. Finally ,ways to eliminate the buffer overflow by several composite defense measures are proposed. Keywords   Buffer overflow No - executable buffer  Shellcode  Stackguard 0  引  言 从 1988 年蠕虫病毒 [15 ,18 ]到近来“红色代码”病毒 ,堆栈溢出 作为一种安全危害级别相当高的计算机安全问题而一直存在。 由缓冲区溢出漏洞导致的攻击占了远程网络攻击和渗透的绝大 多数。它使得匿名的 Internet 用户有机会获得远程主机的部分 或全部控制权。缓冲溢出漏洞非常普遍 ,攻击易于实现因而非 常常见。 从 1999 - 2001 年的 cert (www. cert. org)中与缓冲溢出有 关的一直占最大的比例 [25 ] 。绿盟科技 (www. nsfocus. com) 的 1895 条有关漏洞中 ,溢出漏洞占了 410 条 ,几乎涉及到所有 类型的操作系统 ,包括 Netware、Windows、Unix的各种系统和应用 程序 [20 ] 。如果能够克服缓冲溢出漏洞 ,可有效地解决相当部分 的网络安全问题。 1  缓冲区溢出的原理 鉴于 Unix操作系统在 Internet 上应用的广泛性以及与 C 语 言结合的紧密性 ,本文以 Unix 操作系统为背景 ,同时其原理在 Windows系列操作系统上也有很强的借鉴意义。缓冲区溢出是 由于 C语言缺乏类型安全引起的 ,溢出过程由右边列出的程序 代码所示。 需要说明的是 ,该例子造成了两处不同类型的溢出 ,现实攻 击中并不需要这么特殊。   主程序 main 调用函数 overflow将 longstr 中的内容拷贝到函   void overflow(char 3 longstr) {   void ( 3 f) () ;   char shortstr[16 ] ;   strcpy(shortstr ,longstr) ; } void main() {   char lstr[64 ] ;   int i ;   for (i = 0 ;i < strlen (lstr) ;i + + )     lstr[ i ] =″b″;    overflow(lstr) ;    ⋯    others code. . . } overflow 的程序示例 数 overflow 的局部变量 shortstr 中去。标准 C 语言函数 strcpy 不 检查数组的边界 ,尽管 longstr 的长度大于 shortstr ,仍然进行了复 制。 一个运行的程序在内存中的存储通常包括三部分 :程序段 是只读的 ,用来存储程序指令 ;数据段存储静态的数据变量 ;堆 栈段存储运行的中间结果 [12 ] 。调用函数 overflow 时候 ,程序在 第 21 卷第 1 期     计算机应用与软件 Vol121 ,No11 2004 年 1 月    Computer Applications and Software Jan1 ,2004 © 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved. 堆栈段存储 longstr ,然后将指令寄存器的地址和基址寄存器的 内容入栈 ,作为 overflow 返回时 main 继续执行的程序代码地 址 [1 ] 。 由于 lstr 的长度大于 shortstr 的长度 ,函数 strcpy在对字符串 数组进行复制时 ,按照字符串 longstr 的长度 ,在串增长方向上 (堆栈增长的反方向)将 longstr 的内容复制到从 shortstr 地址开始 的区域 ,覆盖了局部变量 f 和程序的返回地址 ( sfp ret) ,内容都 变成 0x62626262 (字母 b 的 ASCII 码) ,导致缓冲区溢出。执行 strcpy前后的堆栈形式图 1、2 所示。 图 1  执行 strcpy 前    图 2  堆栈状态和变量的值 如果 longstr 前面的内容为可执行代码 ,后面部分为指向 shortstr 的地址 ,函数指针 f 和返回地址的内容被指向 shortstr 的 地址覆盖。overflow函数执行返回后 ,就转而执行由 shortstr 包含 的代码 ,该攻击方式同时完成代码的加载和执行流程改变 ,通常 叫作“堆栈溢出”。由于 C语言中以字符串传递参数的形式非常 常见 ,使得该攻击方式非常普遍 [12 ] 。 由于 shortstr 的顺序存储并与函数指针 f 相邻 ,f 的内容也被 longstr 的内容覆盖。函数 f 被再次调用时 ,就转而执行修改后指 针所指的代码。如果是静态函数指针则位于 BSS段 ,缓冲区溢 出覆盖该指针导致的溢出 ,通常叫作“HEAP/ BSS 溢出”[21 ] 。造 成上述溢出的条件尽管比较特殊 ,但并不少见 ,尤其是开放源代 码的操作系统比如 Linux , FreeBSD 等 ,可以分析每个程序源代 码 ,发现漏洞。 当缓冲区溢出后 ,恶意代码被执行。通常恶意代码为执行 一个 shell ,如果 main 程序有 root 权限 ,恶意代码便继承该权限 , 攻击者就控制了整个系统。因而攻击者编写并加载恶意代码 , 研究有缓冲区溢出漏洞的程序 ,设法使之溢出即可攻击。 2  缓冲区溢出漏洞攻击的原理 恶意代码称为 shellcode ,是由可执行机器码组成的字符串 , 对 exec (sh)之类的代码 ,利用反汇编后的结果结合操作系统的 特点经反复调整而成 [22 ] 。本地用户造成溢出执行 shellcode 获 得一个本地的 shell ;而远程用户网络连接 ,生成一个远程 shell。 缓冲溢出给了攻击者进行远程渗透的全部条件 :在程序的地址 空间里注入恶意的可执行代码、利用该程序的缓冲溢出漏洞改 变执行流程转而执行之。 211 Shellcode 的加载 Shellcode 作为可执行代码 ,必须事先加载到程序的地址空 间中 ,通常采用如下两种方法 :将 Shellcode 作为参数传递给被攻 击的程序 ,加载到被攻击程序的空间 (通常位于堆栈段) ;如果攻 击代码已被加载 ,就将该段代码的指针作为参数进行传递 ,使程 序执行流程跳转到该段代码 [21 ] 。 212 控制程序流程转移到攻击代码 当恶意代码加载之后 ,通过缓冲溢出改变程序的执行流程 跳转到该代码 ,就可对系统造成极大的威胁。一般通过修改要 执行的程序指令的地址改变执行流程。 21211 堆栈溢出 当函数被调用时 ,调用者首先将当前的执行地址入栈作为 函数结束后的返回地址 [1 ] ,通过溢出相邻的函数变量覆盖返回 地址。被调用函数结束返回时 ,程序跳转到返回地址指向的代 码 ,如图 3 所示。 图 3  堆栈溢出  图 4  函数指针溢出 21212 覆盖函数指针 “void( 3 f) ()”声明了一个返回值为 void 函数指针的变量 , 可以定位任何地址空间 ,只要在该指针附近找到可溢出的缓冲 区 ,以 Shellcode 地址溢出覆盖函数指针 ,如图 4 所示 ,下一次该 函数指针被调用时就跳转到 Shellcode[21 ] 。同样在 Linux 的C+ + 语言中的虚拟函数也有类似的现象 ,对局部变量的溢出可导致 虚拟函数指针的修改 [20 ] 。 21213 覆盖长跳转缓冲区 C语言中的检验/ 恢复系统 :setjmpΠlongjmp ,是在检验点设定 “setjmp (buffer)”,用“longjmp (buffer)”来恢复检验点。如果攻击者 找到与之相邻的缓冲区溢出覆盖 buffer 的内容 ,那么“longjmp”就 转而执行恶意代码 [21 ] 。与函数指针一样 ,longjmp 缓冲区可指向 内存中任何可执行代码的位置。 上述的三种方法在本质上是一样的 ,返回地址、函数指针和 setjmpΠlongjmp 中的 buffer ,被覆盖的内容都是指向可执行代码的 指针。 213 综合代码植入和流程控制技术 缓冲溢出漏洞的攻击是代码植入和流程控制相结合的结 果。最常见的缓冲区溢出攻击是在一个字符串里存放代码和代 码地址 ,然后传递给可溢出的函数变量 ,引发缓冲区溢出改变返 回地址 [12 ] 。 当可供溢出的缓冲区不能放下全部代码或者程序对缓冲区 边界进行检查时 ,可将代码植入和缓冲区溢出分别进行 ,在另外 的缓冲区内放置代码 ,通过溢出其它程序的指针将执行流程转 向该段代码。如果恶意代码已经驻留在内存中 ,只要将代码有 关的参数传递给该程序即可 ,在文[21 ]中有详细分析。 3  缓冲区溢出的原因 缓冲区的溢出与程序在内存中的组织分布有关 ,在冯·诺依 曼计算机体系结构中程序的数据和执行代码混合存储 ,对数据 的修改可造成程序代码的修改。其直接原因是 C 语言本身缺 乏类型安全 ,追求性能而忽视正确性 ,不检查边界直接对内存进 行操作。如果只允许执行类型安全的操作 ,就不能对变量进行 强制操作 ,无法造成溢出 ,在系统软件中采用强制类型安全的语 言来防卫缓冲区溢出有很好的效果。 C语言中数组的概念和通用指针是混用的 ,指针是一个机 器字存储的独立对象 ,没有与特定边界关联的条件和信息 ,很难 确定数组边界 ,对数组的顺序存储造成了程序执行顺序的修改。   84        计算机应用与软件 2004 年 © 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved. 4  缓冲区溢出的预防措施 对缓冲区的溢出利用了 C 语言不对数组边界进行检查的 缺点 ,导致程序运行流程的改变。对于缓冲溢出的预防主要从 如下四个方面进行 :1)尽量编写正确的程序 ;2)防止数组越界访 问 ;3)防止程序转移地址的改变 ;4)禁止恶意代码的执行。本文 以程序的编写、测试和运行的顺序介绍防止缓冲区溢出的各种 措施。 411 程序员安全 编写安全的代码是防止安全问题的根本途径 ,程序员必须 对该问题有一个全面的认识。在系统程序开发的过程中对该问 题的高度重视 ,可避免许多严重的安全问题。 41111 检查数组边界 安全问题层出不穷 [5 ] ,许多标准的库函数都有溢出漏洞包 括 :strcpy ,strcat ,sprintf ,gets ,scanf 以及循环执行 getc ,fgetc ,getchar 等 ,各个版本的 C标准库函数都不能避免。尽管采用了 strncpy 和 snprintf 等函数来替代 ,但是它们本身又有许多安全上的漏 洞 [29 ] 。基于缓冲区溢出的攻击中改变程序的执行顺序是必须 的 ,执行流程改变的根本原因是 C 语言在数据操作时忽视对边 界的检查 ,只要强制对数组边界进行检查 ,保证数组不被溢出攻 击也就无从谈起。为确保数组操作地址范围的合法 ,最简单的 方法就是在源代码中调用有漏洞的函数时 ,对数组的操作进行 限制防止越界。 然而边界检查非常低效 ,目前有以下的几种辅助工具帮助 程序员检查代码中的漏洞 :Compaq 公司开发的 C 编译器 [2 ]支持 数组边界检查 ,但不能杜绝溢出漏洞的发生 ; Richard Jones 和 Paul Kelly 开发了一个 gcc 的补丁 ,对程序的数组边界进行检 查 [11 ] ;从每个指针的达式中导出了一个“基”指针 ,依此来检 查指针表达式的结果是否在容许的范围内 ,由于指针的含义没 有改变 ,所以具有很好的兼容性。两者对程序的执行性能影响 很大 [23 ] 。 41112 检测程序代码的缺陷 在代码完成之后与程序运行之前 ,可通过静态分析程序代 码的方法检测漏洞。根据避免变量缓冲区溢出时限制条件 ,对 容易造成缓冲区溢出的函数比如 strcpy ,进行分析测试检测溢出 漏洞 [30 ] 。 412 软件测试 程序完成之后 ,可利用软件测试技术检测已存在的漏洞。 Purify是查看存储器使用的情况的调试工具 ,使用“目标代码植 入”技术来检查所有的存储器存取 [10 ] ,保证数组操作的合法性 ; 文[31 ]采用错误代码植入技术 ,模拟缓冲区溢出的操作检测漏 洞 ;Fault injection[9 ]通过随机产生缓冲区溢出来寻找代码的安全 漏洞。这些工具可以辅助程序员开发更安全的程序 ,减少安全 隐患的发生。 413 程序指针的完整性检查 与防止程序指针内容被覆盖不同 ,程序指针完整性检查是 在程序编写和测试完成后的运行过程中、在指针被引用之前进 行检查。与数组边界检查相比 ,该方法不能解决所有的缓冲区 溢出问题 ,但在性能和实现方式上有很大的优势 ,而且兼容性也 很好 [23 ] 。 41311 MemGuard Synthetix通过“准不变量”的方式对特定变量的内存 (页面) 进行保护 ,缓冲溢出被系统认为是非法的内存访问而被禁止 ,保 护函数指针 [33 ] 。 41312 StackGuard 与 PointGuard 作为编译器 gcc 的补丁 ,StackGuard 在返回地址后面附加额 图 5  StackGuard 的原理 外的字节 ,如图 5 所示 ,通过检查该字节 的完整性来确定是否溢出 ,保护函数的 返回地址 [3 ,4 ] 。Canary 通常采用终止符 号和随机数作为内容 ,防止该附加字节 被伪造。C 语言中的终止符号如 0 (null) ,CR ,LF , - 1( EOF)通常作为字符串 的结束符 ,字符串函数以这些符号作为 操作的结束 ,可阻断字符串的继续复制 ; 或者在参考系统时间产生随机数作为 canary 的内容 ,使得攻击 者不可能猜测和预测。实验表明 ,堆栈保护可以很好地预防基 于堆栈溢出的攻击 ,并有较好的兼容性和系统性能 [23 ] ,但不能 保护非堆栈溢出导致的攻击 [19 ] 。 PointGuard 是 StackGuard 的一般化方法 ,在函数指针、longjmp 缓冲区之后增加 canary 保护函数指针 ,防止被缓冲溢出操作所 改写 ,并与编译器整合优化。该方法结合 StackGuard 可有效地 防止缓冲区溢出。少数溢出其它变量的攻击 ,可以通过强制对 某一变量加入附加字符来保护 [23 ] 。 41313 Libsafe 与 LibVerify Libsafe 与 LibVerify 是贝尔实验室开发的用于监控程序运行 时堆栈指针的变化。Libsafe 与需要保护的程序同时执行 ,监控 指针的合法性 [28 ] 。因为指针和局部变量位于堆栈 ,其地址必须 满足一定的条件 :局部的变量存取地址范围不能超过 sfp 地址的 值、不能对 ret 和 sfp 的内容进行修改、不能对大于 sfp 指针的内 容进行存储操作等 ,可以防止数组的非法操作。由于对其它的 程序干扰较少 ,不需要重新编译所有的程序 ,保持对用户的透明 性。LibVerify类似于 StackGuard ,函数调用开始时在 HEAP 段保 存 Canary ,在返回时验证其合法性 ,保证指针的完整性 ,兼容性 也很好。 与边界检查相比 ,指针完整性检查并不能防止所有的缓冲 区溢出问题 ,但在性能和兼容性上具有相当的优势 ;边界检查对 每次数组的操作都进行检查 ,程序指针检查只在被引用时进行 检查 ,无论在 C还是在C ++ 中 ,后者的引用频率都要小的多。 41314 堆栈监测 Snarskii 为 FreeBSD 开发的通过监测堆栈来保护缓冲区溢出 的函数 [14 ] ,以类似于 StackGuard 的方式来保护函数的返回地址。 该方式对于 libc 库函数的溢出能很好的防卫 ,但不适用于其它 程序和函数。 41315 StackShield StackShield创建特别的栈对函数返回地址进行备份 ,在受保 护的函数的开头和结尾分别增加代码 :对函数返回地址备份和 恢复 ,保证函数执行流程的正确返回 [24 ] 。 414 缓冲区不可执行 即使发生缓冲区溢出 ,通过使攻击程序的空间不可执行 ,使 得程序即使被溢出也不能导致攻击 ,这种技术被称为不可执行 缓冲区技术。 41411 不可执行堆栈保护 多数程序不会在堆栈段里放置可执行代码 , Solar Designer 通过禁止堆栈段内代码的执行 [6 ] ,提高系统的安全性。不可执   第 1 期     刘绍翰等 :基于缓冲溢出漏洞的攻击及其预防研究综述 85    © 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved. 行堆栈保护检查返回地址如果在堆栈中 ,禁止执行在堆栈中的 代码 ,报告错误并记录。为保持兼容 ,信号中断和 gss 在线重用 都要执行在堆栈段中的代码 ,此时只要允许堆栈段可执行即可。 但是 shellcode 位于代码段或可执行的数据段就可绕过该方法的 保护 ,保护不彻底 [17 ] 。 41412 不可执行堆保护 近来 Unix和 Windows 操作系统为实现更好的性能和灵活 性 ,在数据段中动态地植入可执行代码 ,使得攻击者可绕过不可 执行的堆栈保护。而老式的 Unix 操作系统数据段代码不可执 行 ,可保护函数指针。 以上分析可知 ,边界检查能有效地防止所有的缓冲区溢出 , 但是开销较大。研究结果表明 ,堆栈保护和非执行缓冲区能有 效地防御多数的缓冲区溢出漏洞攻击 ,指针保护的方法可有效 地防御其它的攻击 [23 ] 。最后声明的是对于 Morris 蠕虫的攻击 , 迄今还没有有效的防御手段 [23 ] 。 5  结束语 本文详细描述和分析了缓冲区溢出的攻击和防卫方法。由 于该攻击方式目前很常见 ,难以在短期之内彻底解决 ,并在未来 的多年一直困扰着计算机安全 [32 ] ,因而目前该问题的研究工作 仍具有实际意义。 参 考 文 献 [ 1 ] AlfredV. Aho , R. Hopcroft , and JeffreyD. Ullman , Compilers : Principles , Techniques and Tools ,Addison - Wesley ,Reading ,Mass. ,1985. [ 2 ] Compaq. ccc C Compiler for Linux. http : ∥www. unix. digital . comΠlinuxΠ compaq cΠ,1999. [ 3 ] Crispin Cowan ,Steve Beattie ,RyanFinnin Day ,Calton Pu ,Perry Wagle ,and Erik Walthinsen. Protecting Systems from Stack Smashing Attacks with StackGuad. In Linux Expo ,Raleigh ,NC ,May 1999. [ 4 ] Crispin Cowan ,Calton Pu ,Dave Maier ,Heather Hinton ,Peat Bakke ,Steve Beattie ,Aaron Grier ,Perry Wagle ,and Qian Zhang. StackGuard :Automatic Adaptive Detection and Prevention of Buffer - Overflow Attacks. In 7th USENIX Security Conference , pp . 63 ~ 77 , San Antonio , TX , January 1998. [ 5 ] Michele Crabb ,Curmudgeon’s Executive Summary , In Michele Crabb ,edi2 tor ,The SANS Network Security Digest . SANS ,1997. Contributing Editors : Matt Bishop , Gene Spafford , Steve Bellovin , Gene Schultz , Rob Kolstad , Marcus Ranum ,Dorothy Denning ,Dan Geer ,Peter Neumann ,Peter Galvin. David Harley ,Jean Chouanard. [ 6 ] “Solar Designer”,Non - Executable User Stack. http : ∥www. openwall . comΠlinuxΠ. [ 7 ]“DilDog”,The Tao of Windows Buffer Overflow. http : ∥www. cultdeadcow. comΠcDc filesΠcDc - 351Π,April 1998. [ 8 ] Mark W. , Eichin and JonA , Rochlis. With Microscope and Tweezers : An Analysis of the Internet Virus of November 1988. In Proceedings of the 1990 IEEE Symposium on Research in Security and Privacy , September 1990. [ 9 ] Anup K Ghosh ,Tom OpiConnor ,and Gary McGraw. An Automated Approach for Identifying Potential Vulnerabilities in Software. In Proceedings of the IEEE Symposium on Security and Privacy ,Oakland ,CA ,May 1998. [10 ] Reed Hastings and Bob Joyce ,Purify : Fast Detection of Memory Leaks and Access Errors. In Proceedings of the Winter USENIX Coference ,1992. [11 ] Richard Jones and Paul Kelly ,Bounds Checking for C. http : ∥www. doc. ic. ac. ukΠ~phjkΠBounds Checking. html . [12 ] Aleph One. Smashing The Stack For Fun And Profit . Phrack ,7 (49) ,No2 vember 1996. [13 ] NathanP. Smith ,Stack Smashing vulnerabilities in the UNIX Operating Sys2 tem. http : ∥reality. sgi . comΠnateΠmachines ΠsecurityΠnate - buffers. [14 ] Alexander Snarskii ,FreeBSD Stack Integrity Patch http : ∥www. cse. ogi . eduΠDISCΠprojectsΠimmunixΠStackGuardΠusenixsc98 htmlΠnode22. html . [ 15 ] E. Spafford ,The Internet Worm Program :Analysis. Computer Communication Review ,January 1989. [16 ] David Wagner ,JeffreyS. Foster , EricA , Brewer , and Alexander Aiken. A First Step Towards Automated Detection of Buffer Overrun Vulnerabilities , In NDSS (Network and Distributed System Security) ,San Diego ,CA ,Feb2 ruary 2000. [17 ] Rafel Wojtczuk. Defeating Solar Designer Non - ExecutableStack Ptach. ht2 tp : ∥www. insecure. orgΠsploitsΠnon - executable. stack. problems. html . [18 ] Ipxodi Windows 系统下的堆栈溢出 http : ∥magazine. nsfocus. comΠde2 tail . asp ? id = 439. [19 ] Bulba and Kil3r Bypassing StackGuard and StackShield http : ∥www. phra2 ck. orgΠshow. php ? p = 56&a = 5. [20 ] Rix ,SMASHING C ++ VPTRS http : ∥www. phrack. orgΠshow. php ? p = 56&a = 8. [21 ] Matt Conover &w00w00 Security Team HeapΠBSS 溢出机理分析 http : ∥ www. w00w00. orgΠfilesΠarticlesΠheaptut . txt . [22 ] Warning3 ,书写 linux 下自己的 shellcode. http : ∥security. nsfocus. comΠ showQueryL. asp ? libID = 256. [23 ] Crispin Cowan , Perry Wagle ,Calton Pu ,Steve Beattie ,and Jonathan Wal2 pole. Buffer Overflows : Attacks and Defenses for the Vulnerability of the Decade. http : ∥www. cse. ogi . eduΠDISCΠprojectsΠimmunix. [24 ] “Vendicator”,Stack shield :A“stack smashing”technique protection tool for linux. http : ∥www. angelfire. comΠskΠstackshieldΠ. [25 ] David Wagner ,Jeffrey S. Foster , Eric A. Brewer ,and Alexander Aiken. A first step towards automated detection of buffer overrun vulnerabilities , In Proceedings 7th Network and Distributed System Security Symposium ,Feb2 ruary 2000. [26 ] Arash Baratloo ,Timothy Tsai ,and Navjot Singh ,“Transparent Run - Time Defense Against Stack Smashing Attacks ,”in Proceedings of the USENIX Annual Technical Conference ,June 2000. http : ∥www. research. avayal2 abs. comΠprojectΠlibsafeΠ. [27 ] Hiroaki Etoh and Kunikazu Yoda Protecting from stack - smashing attacks. http : ∥www. trl . ibm. comΠprojectsΠsecurityΠsspΠmain. html . [28 ] Arash Baratloo ,Navjot Singh and Timothy Tsai . Transparent Run - Time De2 fense Against Stack - Smashing Attacks. 9 th USENIX Security Sympos2 ium ,August 2000. [29 ] T. C. Miller ,T. de Raadt ,“strlcpy and strlcat - Consistent ,Safe ,String Copy and Concatenation ,”FREENIXpi99 ,USENIX Assoc. ,Berkeley ,CA. [30 ] David Larochelle ,David Evans ,Statically Detecting Likely Buffer Overflow Vulnerabilities University of Virginia ,Department of Computer Scien. http : ∥www. virginia. eduΠusenix01. pdf . [31 ] Anup K. Ghosh and Tom OpiConnor. ,Analyzing Programs for Vulnerability to Buffer Overrun Attacks. In to Appear in Proceedings of the National In2 formation System Security Conference ,October6 - 9 1998. Crystal City ,VA USA. [32 ] Brian Snow ,Future of Security ,Panel presentation at IEEE Security and Pri2 vacy. May 1999. [33 ] Qian Zhang , The Synthetix MemGuard Kernel Programmerpis Interface ,   86        计算机应用与软件 2004 年 © 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved. http : ∥www. cse. ogi . eduΠDISCΠprojectsΠsynthetixΠtoolkitΠMemGuardΠmem2 guard. html # toc3. (上接第 32 页) 6  结束语 在版权保护领域中 ,要能成功地使用水印技术 ,关键取决于 满足实际应用需求的技术可能性。这些需求能否全部满足还是 个问题 ,原因是对水印技术的局限性 ,目前还了解不多 ,因此研 究人员不要把水印看作是能够解决所有问题的全能。实际 的数字版权保护系统并不需要完美无缺 ,只需要得到一定程度 的保护、这种保护能够方便地分发数字资料即可 ,而不用考虑由 于存在侵犯版权、而损失某些收入的可能性。换句话说 ,不需要 不可能被攻破的水印 ,但是要使攻破水印是件非常困难的事 ,只 有有限的熟练攻击者可以做到。 参 考 文 献 [ 1 ] Swanson ,M. ,Kobayashi ,M. ,and Tewfik ,A. Multimedia data embedding and watermarking technologies. Proceedings of the IEEE ,1998 :86 (6) ,1064~ 10871 [2 ] Fabien ,A. P. ,Petitcolas ,F. ,Ross ,J . Anderson and Markus G. Kuhn. Infor2 mation Hiding - A Survey. Proceedings of the IEEE ,1999 :87 (7) , 1062~   10781 [3 ] Cox ,I. J . ,Kilian ,J . ,and Leighton ,T. ,et al . Secure spread spectrum water2 marking for multimedia. IEEE Trans. on Image Processing ,1997 :6 (12) ,1673 ~16871 [4 ] Wolfgang ,R. B. ,and Delp ,E. J . Fragile watermarking using the VW2D wa2 termark. Proceedings of the SPIE/ IS&T Conference on Security and Water2 marking of Multimedia Contents , SPIE Vol . 3657 , San Jose , CA ,January 1999. [5 ] Friedman , G. L. The trustworthy digital camera : restoring credibility to the photographic image. IEEE Trans. on Consumer Electronics ,Vol . 39 ,Novem2 ber 1993 ,905~9101 [6 ] Smith ,J . R. and Comiskey ,B. O. Modulation and information hiding in imag2 es. Proceedings of First Intern. Workshop on Information Hiding ,R. Anderson ed.Lecture notes in Computer Science ,Vol . 1174 ,Springer Verlag 1996 ,207 ~2261 [7 ] Petitcolas ,F. ,and Anderson ,R. Weaknesses of copyright marking systems. Proceedings of the ACM Multimedia and Security Workshop ,Bristol ,United Kingdom ,September 1998 ,55~621 [8 ] 易开祥 ,“数字图像加密与数字水印技术研究”,《浙江大学博士学位 论文》,2001171 (上接第 41 页) 算机自动句法分析 ; (3) 开放测试曲线上升较快 ,说明系统有一 定的句法分析扩展能力 ; (4) 开放与封闭的测试曲线有一定差 距 ,说明训练语料规模还不够大 ,不能覆盖所有的句法现象。 6  分析正确实例 (1) [ [ [我 RH[ [在 P[ [ [小小 A 的 U1 ]np 船 N]np 里 ND]np ] pp 坐 VI]vp ]sp ,WPDH[ [只 D 看见 VT]vp[ [ [闪闪 AS的 U1 ]np 星 星 N]np[ [蓝蓝 A 的 U1 ]np 天 N]np ]np ]vp ]sp。WPJ H]sp (2) [ [ [ [他 RH[ [低 VT着 UA]vp 头 N ]vp ] sp ,WPDH[ [无可 奈何 IP地U2 ]ap[ [拖VT着UA]vp[ [沉重A 的U1 ]np 步子N]np ] vp ]vp ]sp ,WPDH[ [ [拼 VT着 UA]vp 命 N ]vp [ [拉 VT着 UA ]vp 纤 绳 N]vp[ [往 P前 ND]pp 迈步 VI]vp ]vp ]sp。WPJ H]sp 7  错误实例及原因分析 错误类型 错误实例 正确分析 成组率高但 不成组 贝多芬 NH(走 VT[近 A 茅屋 N]np ]vp 贝多芬 NH[走 VT 近 A]vp 茅屋 N]vp 语义不清无 法识别 [穿着 VT[ [ [红 A 上 衣 N] np 的 U1 ] np 少 年 N]np ]vp [ [ [穿着 vt[红 a 上 衣 n ] np ]vp 的 u1 ] np 少年 n]np 体词性短语 作状语难辨 [她 RH [ 低 A 声 N ] np ] np [问 VT 我 RH] vp 她 RH [ [ 低 A 声 N] [问 VT 我 RH] vp ]vp 规模不够一 些结构无法 识别 蚕 n 一 mc 天 qt 天 qt 地 u2 大 a 起来 vd , wpdh 桑叶 n 也 d 一 mc 天 qt 天 qt 地 u2 剪 vt 得 u3 粗 a 起来 vd。wpjh 造成析句错误的原因 : (1) 相同的词性序列可能有多种组合 ,组合概率也可大可 小 ,由于本系统成组判断采用的是最大似然法 ,所以对小概率成 组的情况不能判定 ,需其它信息支持才能完成正确划分。 (2) 系统只具有现代汉语的句法属性而无语义信息 ,所以 在分析需要语义支持的句子时易造成错误。 (3) 体词性短语做主语或状语的句法特征不明显 ,而系统 是根据句法特征来析句的 ,所以上述情况不易正确划分。 (4) 由于时间原因 ,系统训练语料规模还不够 ,系统还无法 识别所有的句法现象。 8  结  论 通过模型建立和实验测试 ,我们得出以下几个结论 : (1) 将 HMM与层次分析法相结合 ,对实现自动完全句法分 析效果是明显的。其完全句法分析正确率 , 封闭测试为 92143 % ,开放测试为 :651374 %。 (2) 方法对于现代汉语中各类短语具有很强的识别能力 , 其封闭测试中各短语识别精确率都在 89 %以上。 (3) 该方法巧妙地解决了现代汉语嵌套问题。 (4) 该方法中所用的知识表达和知识获取算法是既考虑到 数据的拟合性 ,又考虑到模型的归纳性 ,具有特征明显、分析能 力强、扩展性好等优点。 总之 ,该方法的建立与实现是计算机自动句法分析的一种 新的尝试 ,虽然还存在一些问题有待解决 ,但其实验结果还是令 人满意的 ,有进一步研究的价值。 参 考 文 献 [1 ] 张斌、陈昌来 ,现代汉语 ,华东师范大学出版社 ,2000 年 1 [2 ] 孙宏林、俞士汶 ,浅层句法分析方法概述 1 [3 ] 复旦大学编 ,概率论 ,第三册 ,随机过程 ,高等教育出版社 ,19811 [4 ] 张斌、胡裕树 ,汉语语法研究 ,商务印书馆 ,1989 年 1 [5 ] L. R. Rabiner ,A turtorial on Hidden Markov Models and selected applications in speech recognition ,Proc. IEEE Vol . 77 :2 (1989 ,2) ,257~2861   第 1 期     刘绍翰等 :基于缓冲溢出漏洞的攻击及其预防研究综述 87    © 1995-2004 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
/
本文档为【基于缓冲溢出漏洞的攻击及其预防研究综述】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索