1 / 17

信息安全综合实验

信息安全综合实验. 张焕杰 中国科学技术大学网络信息中心 james@ustc.edu.cn http://202.38.64.40/~james/nms Tel: 3601897(O). 第四章 缓冲区溢出. 课程目的 学习缓冲区溢出攻击的基本概念和原理 掌握预防和防御缓冲区溢出攻击的方法. 缓冲区溢出攻击. Buffer overflow attack 缓冲区溢出攻击 缓冲区溢出漏洞大量存在于各种软件中 利用缓冲区溢出的攻击,会导致系统当机,获得系统特权等严重后果。 最早的攻击1988年 UNIX 下的 Morris worm 最近的攻击

Download Presentation

信息安全综合实验

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 信息安全综合实验 张焕杰 中国科学技术大学网络信息中心 james@ustc.edu.cn http://202.38.64.40/~james/nms Tel: 3601897(O)

  2. 第四章 缓冲区溢出 • 课程目的 • 学习缓冲区溢出攻击的基本概念和原理 • 掌握预防和防御缓冲区溢出攻击的方法

  3. 缓冲区溢出攻击 • Buffer overflow attack 缓冲区溢出攻击 • 缓冲区溢出漏洞大量存在于各种软件中 • 利用缓冲区溢出的攻击,会导致系统当机,获得系统特权等严重后果。 • 最早的攻击1988年UNIX下的Morris worm • 最近的攻击 • Codered 利用IIS漏洞 • SQL Server Worm 利用SQL Server漏洞 • Blaster 利用RPC漏洞 • Sasser利用LSASS漏洞

  4. 缓冲区溢出攻击原理 • 向缓冲区写入超过缓冲区长度的内容,造成缓冲区溢出,破坏程序的堆栈,使程序转而执行其他的指令,达到攻击的目的。 • 原因:程序中缺少错误检测: void func(char *str) { char buf[16]; strcpy(buf,str); } 如果str的内容多于16个非0字符,就会造成buf的溢出,使程序出错。

  5. 缓冲区溢出攻击原理 • 类似函数有strcat、sprintf、vsprintf、gets、scanf等 • 一般溢出会造成程序读/写或执行非法内存的数据,引发segmentation fault异常退出. • 如果在一个suid程序中特意构造内容,可以有目的的执行程序,如/bin/sh,得到root权限。

  6. 缓冲区溢出攻击原理 • 对于使用C语言开发的软件,缓冲区溢出大部分是数组越界或指针非法引用造成的。 • 有时并不引发溢出也能进行攻击。 • 现存的软件中可能存在缓冲区溢出攻击,因此缓冲区溢出攻击短期内不可能杜绝。 • 缓冲区溢出的危害很大: • 可以植入并运行攻击代码 • 比大部分DoS攻击危害严重

  7. 缓冲区溢出攻击要素 • 在进程的地址空间安排适当的代码 • 通过适当的初始化寄存器和内存,跳转到以上代码段执行

  8. 安排代码的方法 • 利用进程中存在的代码 • 传递一个适当的参数 • 如程序中有exec(arg),只要把arg指向“/bin/sh”就可以了 • 植入法 • 把指令序列放到缓冲区中 • 堆、栈、数据段都可以存放攻击代码,最常见的是利用栈

  9. 段属性 Text: E Data:R/W Stack:R/W/E 栈需要E属性 Signal Handling Trampoline code 内存 Stack High Heap Data Text Low

  10. 控制程序转移到攻击代码的方法 • 利用活动记录 • 溢出栈中的局部变量,使返回地址指向攻击代码 栈溢出攻击 Stack Smashing Attack

  11. 控制程序转移到攻击代码的方法 • 函数指针 • 如果定义有函数指针,溢出函数指针前面的缓冲区,修改函数指针的内容

  12. 控制程序转移到攻击代码的方法 • 长跳转缓冲区 longjmp buffers • Setjmp/longjmp语句 • 覆盖setjmp/longjmp的缓冲区内容

  13. 常见的攻击技术 • 一个字符串中完成代码植入和跳转 • 一般修改活动记录

  14. 缓冲区溢出攻击的避免 • 缓冲区不可执行 • 植入的攻击代码无法执行,不能产生大的危害 • 编写正确的代码 • 编译器进行类型、边界检查,实现缓冲区的保护 • java • 运行时(Runtime)指针、边界检查

  15. 缓冲区不可执行 • Linux/Solaris都可以设置 • 202.38.64.10/11都设置了 • 能杜绝绝大部分,但不是所有缓冲区溢出攻击 • Linux在以下情况下栈必须可执行: • Signal • gcc在线重用

  16. 防范缓冲区攻击的普遍方法 • 关闭不需要端口和服务 • 安装最新的补丁 • 检查关键程序 • 以最小的权限运行软件 • 不使用root身份来运行apache,named等服务程序

  17. 实验内容 • 实验一提示: • ./width1 65536 adfad • 65536 复制给 s后变成 0

More Related