缓冲区溢出攻击,是利用“缓冲区溢出漏洞”所进行的攻击行动。“缓冲区溢出”是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用“缓冲区溢出”进行攻击,可以导致程序运行失败、系统关机、重新启动等后果。

缓冲区溢出,是指当计算机向缓冲区内填充数据位数时,超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符。但是绝大多数程序都会假设数据长度,总是与所分配的储存空间相匹配,这就为“缓冲区溢出”埋下了隐患。

操作系统所使用的缓冲区,又被称为“堆栈”,在各个操作进程之间,指令会被临时储存在“堆栈”当中,“堆栈”也会出现缓冲区溢出。

一、 缓冲区溢出攻击的原理

通过往程序的缓冲区,写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的“堆栈”,使程序转而执行其它指令,以达到攻击的目的。造成“缓冲区溢出”的原因是,程序中没有仔细检查用户输入的参数。例如下面程序:

上面的“strcpy()”,将直接把“str”中的内容copy到“buffer”中。这样只要“str”的长度大于16,就会造成“buffer”的溢出,使程序运行出错。存在像“strcpy”这样的问题的标准函数,还有“strcat()、sprintf()、vsprintf()、gets()、scanf()”等。

当然,随便往缓冲区中填东西造成它溢出,一般只会出现“分段错误”,而不能达到攻击的目的。最常见的手段是,通过制造缓冲区溢出,使程序运行一个用户shell(计算机壳层,属于“命令解析器”,用于接收用户的命令),再通过shell执行其它命令。如果该程序属于root且有suid权限的话,攻击者就获得了一个有“root权限”(系统权限的一种,也叫“根权限”)的shell,这样就可以对系统进行任意操作了。

“缓冲区溢出攻击”之所以成为一种常见的攻击手段,其原因在于“缓冲区溢出漏洞”太普遍了,并且易于实现。而且,缓冲区溢出成为远程攻击的主要手段,其原因在于“缓冲区溢出漏洞”给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限,运行有“缓冲区溢出漏洞”的程序,从而得到被攻击主机的控制权。

二、 缓冲区溢出攻击的危害

缓冲区溢出攻击,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。缓冲区溢出攻击,有多种英文名称:“buffer overflow”,“buffer overrun”,“smash the stack”,“trash the stack”,“scribble the stack”, “mangle the stack”,“ memory leak”,“overrun screw”;但它们指的都是同一种攻击手段。

第一个缓冲区溢出攻击是“Morris蠕虫”,大约发生在二十年前,它曾造成全世界6000多台网络服务器瘫痪。

在当前网络与分布式系统安全中,被广泛利用的漏洞,50%以上都是缓冲区溢出。而缓冲区溢出中,最为危险的是“堆栈溢出”,因为入侵者可以利用“堆栈溢出”,在函数返回时,改变返回程序的地址,让其跳转到任意地址。这带来的危害,一种是程序崩溃导致拒绝服务;另外一种就是跳转并且执行一段恶意代码,比如:得到shell,然后为所欲为。

三、 缓冲区溢出攻击的防范方法

缓冲区溢出攻击,占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet(互联网)用户,有机会获得一台主机的部分或全部的控制权。如果能有效地消除“缓冲区溢出”的漏洞,则很大一部分的安全威胁,可以得到缓解。

有四种基本的方法,可以保护缓冲区免受“缓冲区溢出”的攻击和影响。

1、强制写正确的代码的方法

编写正确的代码是一件非常有意义但耗时的工作,特别像编写C语言那种具有容易出错倾向的程序(如:字符串的零结尾),这种风格是由于追求性能而忽视正确性的传统引起的。尽管花了很长的时间使得人们知道了如何编写安全的程序,具有安全漏洞的程序依旧出现。因此人们开发了一些工具和技术来帮助经验不足的程序员编写安全正确的程序。虽然这些工具帮助程序员开发更安全的程序,但是由于C语言的特点,这些工具不可能找出所有的缓冲区溢出漏洞。所以,侦错技术只能用来减少缓冲区溢出的可能,并不能完全地消除它的存在。除非程序员能保证他的程序万无一失,否则还是要用到以下部分的内容来保证程序的可靠性能。

2、通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码

这种方法有效地阻止了很多缓冲区溢出的攻击,但是攻击者并不一定要通过植入攻击代码来实现缓冲区溢出的攻击,所以这种方法还是存在很多的弱点。

3、利用编译器的边界检查,来实现缓冲区的保护

这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言,代价比较大。

4、在程序指针失效前进行完整性检查

虽然这种方法不能使得所有的缓冲区溢出失效,但它能阻止绝大多数的缓冲区溢出攻击;而能够逃脱这种方法保护的缓冲区溢出,也很难实现。

亿速云为用户提供的专业防御DDoS攻击的高防云服务器、高防裸金属服务器,具备“大规模、超大规模的DDoS攻击防御能力;可根据DDoS攻击流量大小的变化,灵活升降服务器的配置;以及全业务场景支持”等特点与优势,防御性能出色,防御效果显著,在业内众多DDoS防护产品中具有较强的竞争力,获得了用户不少口碑。

亿速云在部署高防云服务器、高防裸金属服务器的数据中心高防机房,搭建了高性能、高对抗强度的DDoS攻击流量清洗和防御集群。单个数据中心高防机房具备了T级超大规模的DDoS攻击流量清洗和防御能力;单台高防服务器的DDoS攻击流量清洗和防御峰值,最高可达数百G。华北高防一区的高防云服务器和高防裸金属服务器,最高可达到1000G的DDoS攻击流量清洗和防御能力,同时附有CC攻击的增强防御,可防御大规模、大流量,超大规模、超大流量的DDoS攻击以及高密度的CC攻击。