缓冲区溢出攻击技术系统介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
缓冲区溢出攻击技术
文伟平博士副教授
weipingwen@
北京大学软件与微电子学院信息安全系北京大学信科学院软件所信息安全实验室
课程内容
缓冲区溢出相关背景概念 缓冲区溢出原理
溢出保护技术
安全编程技术
引子
988o s蠕虫事件 1988Morris
CERT统计数据
缓冲区
¾从程序的角度,缓冲区就是应用程序用来保存用户输入数据程序临时数据的内存间
输入数据、程序临时数据的内存空间
¾缓冲区的本质
z数组
¾存储位置
z Stack
z Heap
z数据段
缓冲区溢出
¾如果用户输入的数据长度超出了程序为其分配的内存空间,这些数据就会覆盖
存间,这些数据就会覆程序为其它数据分配的内存空间,形成所谓的缓冲区溢出
缓冲区溢出攻击的发展历史 1980s
¾Morris蠕虫-fingerd缓冲区溢出攻击
1996
¾Aleph One,Smashing the Stack for Fun
and Profit,Phrack49
1998
¾Dildog:提出利用栈指针的方法完成跳转
¾The Tao of Windows Buffer Overflows
1999
¾Dark Spyrit:提出使用系统核心DLL中的Jmp
ESP指令完成跳转,Phrack55
¾M.Conover:基于堆的缓冲区溢出教程
缓冲区溢出攻击背景知识与技巧 编译器调试器的使用
编译器、调试器的使用
¾Linux:gcc+gdb
¾Win32:VC6.0+OllyDbg
VC60+OllyDbg
进程内存空间结构
汇编语言基本知识
栈的基本结构
函数调用过程
GCC编译器基础
著名的的/编译器著名的GNU的Ansi c/c++编译器¾gcc[options][filenames]
¾编译:gcc c test.c生成test.o
-c test c test o
¾连接:gcc-o test test.o
¾同时搞定:gcc test.c o test
test c-o
make:用于控制编译过程
¾Makefile How To
GDB调试器的使用 断点相关指令
/,//
¾break/clear,disable/enable/delete
¾watch–表达式值改变时,程序中断
执行相关指令
¾run/continue/next/step
¾attach–调试已运行的进程
¾finish/return
信息查看相关指令
reg/break/files/args/frame/functions/¾info reg/break/files/args/frame/functions/…
¾backtrace–函数调用栈
¾print/f exp–显示表达式的值
/f dd
¾x/nfu addr–显示指定内存地址的内容
¾list–列出源码
¾disass func–反汇编指定函数
VC6.0命令行
环境变量
我的电脑属性高级环境变量
¾我的电脑-属性-高级-环境变量
¾PATH:
z C:\Program Files\Microsoft Visual Studio\VC98\Bin;
z C:\Program Files\Microsoft Visual
Studio\Common\MSDev98\Bin;
¾INCLUDE:
z C:\Program Files\Microsoft Visual
Studio\VC98\Include
¾LIB:
z C:\Program Files\Microsoft Visual Studio\VC98\Lib 命令行指令
¾cl sourcefilename–编译并链接
Win32平台调试器
OllyDbg
¾32-bit assembler level analysing debugger by Oleh Yuschuk
¾Free
¾支持插件机制
z OllyUni:查找跳转指令功能
z Uiltra String Referennce:查找字符串
Softice
Syser Debugger
WinDbg
P W32DASM
IDA Pro,W32DASM
简单溢出实例#include
int main()
{
char name[8]={0};
printf(Your name:);
printf(“Your name:”);
gets(name);
printf(Hello,%s!,name);
printf(“Hello%s!”name);
return0;
}
test0.c
缓冲区溢出的危害
应用程序异常
系统不稳定甚至崩溃
统稳定甚崩溃
程序跳转到恶意代码,控制权被窃