缓冲区溢出攻击技术系统介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

缓冲区溢出的危害

应用程序异常

系统不稳定甚至崩溃

统稳定甚崩溃

程序跳转到恶意代码,控制权被窃

相关文档
最新文档