缓冲区溢出攻击

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

见的是利用栈
8
内存
Stack Heap High

段属性
– Text: E – Data:R/W – Stack:R/W/E

栈需要E属性
– Signal Handling
– Trampoline code
Data
Text
Low
9
控制程序转移到攻击代码的方 法

利用活动记录
– 溢出栈中的局部变量,使返回地址指向攻击

– 不使用root身份来运行apache,named等服务程

16
实验内容

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

5
缓冲区溢Leabharlann Baidu攻击原理
对于使用C语言开发的软件,缓冲区溢出 大部分是数组越界或指针非法引用造成的。 有时并不引发溢出也能进行攻击。 现存的软件中可能存在缓冲区溢出攻击, 因此缓冲区溢出攻击短期内不可能杜绝。 缓冲区溢出的危害很大:

– 可以植入并运行攻击代码 – 比大部分DoS攻击危害严重

4
缓冲区溢出攻击原理
类似函数有strcat、sprintf、vsprintf、gets、 scanf等 一般溢出会造成程序读/写或执行非法内 存的数据,引发segmentation fault异常退 出. 如果在一个suid程序中特意构造内容,可 以有目的的执行程序,如/bin/sh,得到 root权限。
6
缓冲区溢出攻击要素
在进程的地址空间安排适当的代码 通过适当的初始化寄存器和内存,跳转到 以上代码段执行

7
安排代码的方法

利用进程中存在的代码
– 传递一个适当的参数 – 如程序中有exec(arg),只要把arg指向
“/bin/sh”就可以了

植入法
– 把指令序列放到缓冲区中 – 堆、栈、数据段都可以存放攻击代码,最常
Linux/Solaris都可以设置
– 202.38.64.10/11都设置了
能杜绝绝大部分,但不是所有缓冲区溢出 攻击 Linux在以下情况下栈必须可执行:
– Signal – gcc在线重用
15
防范缓冲区攻击的普遍方法
关闭不需要端口和服务 安装最新的补丁 检查关键程序 以最小的权限运行软件
最早的攻击1988年UNIX下的Morris worm 最近的攻击

– – – –
Codered 利用IIS漏洞 SQL Server Worm 利用SQL Server漏洞 Blaster 利用RPC漏洞 Sasser利用LSASS漏洞
3
缓冲区溢出攻击原理
向缓冲区写入超过缓冲区长度的内容,造成缓 冲区溢出,破坏程序的堆栈,使程序转而执行 其他的指令,达到攻击的目的。 原因:程序中缺少错误检测: void func(char *str) { char buf[16]; strcpy(buf,str); } 如果str的内容多于16个非0字符,就会造成buf的 溢出,使程序出错。
信息安全综合实验
1
第四章 缓冲区溢出

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

Buffer overflow attack 缓冲区溢出攻击
– 缓冲区溢出漏洞大量存在于各种软件中 – 利用缓冲区溢出的攻击,会导致系统当机,获得系
统特权等严重后果。
代码 栈溢出攻击 Stack Smashing Attack
10
控制程序转移到攻击代码的方 法

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

长跳转缓冲区 longjmp buffers
– Setjmp/longjmp语句 – 覆盖setjmp/longjmp的缓冲区内容
12
常见的攻击技术

一个字符串中完成代码植入和跳转
– 一般修改活动记录
13
缓冲区溢出攻击的避免

缓冲区不可执行
– 植入的攻击代码无法执行,不能产生大的危

编写正确的代码 编译器进行类型、边界检查,实现缓冲区 的保护

– java

运行时(Runtime)指针、边界检查
14
缓冲区不可执行

相关文档
最新文档