缓冲区溢出原理浅析以及防护

缓冲区溢出原理浅析以及防护,第1张

缓冲区溢出原理浅析以及防护,第2张

【摘要】从程序设计语言本身的缺陷和缺乏健壮性的角度,详细分析了缓冲区溢出攻击的基本原理,描述了黑客利用缓冲区漏洞进行系统攻击的一般过程,最后简要讨论了几种防止溢出攻击的策略。

【关键词】缓冲区溢出;程序跳转;跳远缓冲;

近年来,黑客攻击频繁发生,尤其是缓冲区溢出攻击占网络远程攻击的绝大多数。因为这种攻击可以让任何人获得对系统主机的完全控制,所以它代表了一种非常严重的攻击。

缓冲区溢出攻击之所以常见,是因为它太常见,太容易实现,是软件开发中不可避免的问题。缓冲区漏洞是程序员在编写程序时不检查内存空而导致的内存泄漏。我们先简单看一下:

1.了解缓冲区溢出

缓冲区是系统攻击的一种手段。通过在程序缓冲区中写入超过其长度的代码,造成溢出,从而破坏其堆栈,使程序执行攻击者在程序地址空中已经安排好的代码,达到目的。一般黑客攻击root程序,然后执行类似exec(sh)的代码,获取root的外壳。它会导致两个严重的后果:

1.覆盖电池堆的相邻电池。使程序执行失败,严重的会导致系统崩溃。

2.可以执行识别指令代码,最后获得系统root权限。

现在很多人用C或者C++写程序,但同时也有太多人忽略了数组边界检查和类型安全检查,所以大部分溢出都和C语言有关。C语言中可能导致溢出的函数有:char s [n],strlen (s),strcpy (dst,src),p = malloc (n),strcat (s)所以我们要尽可能的避免使用这些危险的函数,即使使用也要做严格的检查。为了便于理解,让我们看一个简单的程序:

/*
* example.c
*由Devil _ Angel
* gcc–o example example . c
*/
void func(char * str)
{
char buf[8];
strcpy(buf,str);
printf("%sn ",buf);
}
int main(int argc,char * argv[])
{
If(argc > 1)
Func(argv[1]);
}//main的结尾

程序输入时,不检查str的大小,直接将STR送入数组buf。一旦输入超过buf长度,最简单的溢出就发生了。当然,像这样的溢出通常只会造成一个分段故障错误,并不能达到攻击的目的。这里没有进一步深入分析,只是给大家一个溢出的大概,以后会进一步分析。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 缓冲区溢出原理浅析以及防护

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情