缓冲区溢出原理浅析以及防护
【摘要】本文从程序语言本身的缺陷,不够健壮的角度出发,详细分析了缓冲溢出攻击的基本原理,描述了黑客利用缓冲区漏洞进行系统攻击的一般过程,最后又简单讨论了几种防范溢出攻击的策略.JC@'p)g,T(Q^v8o jlnZ3g2@ ]0\K9Lj R&Up
【关键字】缓冲溢出; 程序跳转; 长跳转缓冲区;#a9LUI.n I^/x~
Vo qpkwl
近些年来,黑客攻击事件频繁发生,尤其是缓冲区溢出漏洞攻击占据了网络远程攻击的绝大多数. 因为这类攻击可以使任何人获得系统主机的完全控制权,所以它代表了一类十分严重的攻击.H6T _4E'}
缓冲区溢出攻击之所以常见,是因为它太常见了,且易于实现, 这完全是软件发展史上不可避免的问题. 缓冲区漏洞是程序员在编写程序时未检查内存空间,导致内存泄漏而引起,以下我们先来简单了解一下它:mY_f^4`R \
一、认识缓冲区溢出
缓冲溢出是一种系统攻击的手段,借着在程序缓冲区编写超出其长度的代码,造成溢出,从而破坏其堆栈,使程序执行攻击者在程序地址空间中早已安排好的代码,以达到其目的. 一般黑客攻击root程序,然后执行类似exec(sh)的代码获得root的shell. 它造成了两种严重的后果:
;Pe)v5Wct N
1. 覆盖堆栈的相邻单元. 使程序执行失败, 严重可导致系统崩溃.t ^le;p*w1Fz
9[Q1kz&`9a
2. 可执行认识指令代码,最后获得系统root特级权限.es5K$a q
现在很多人使用C或C++编写程序,但同时太多的人忽略了对其的数组边界检查和类型安全检查,所以现今的大多数溢出都和C语言有关, C语言中中有可能产生溢出的函数有:char s[n],strlen(s),strcpy(dst, src),p=malloc(n),strcat(s,suffix)等等,所以我们要尽可能地避免使用这些危险函数,即使使用,也一定要做严格的检查.为容易理解,我们来看一个简单的程序:
/*
* example.c8j%ugJXHE0|B~
* written by Devil_Angel <[email]Devil___Angel@126.com[/email]>
* gcc –o example example.ct g6t j&c(V6D
*/
void func(char * str)
{'wd,`4k:]W
char buf[8];