初遇缓冲区溢出(Stack Buffer Overflow)攻击
那天晚上,某种业务有好几个服务端进程在短时间内崩溃了。
同事上去看了,发现都是在处理来自同一个地方东莞的同一个IP地址过来的请求时发生core dump。
恩,诡异,当时我们先跟运维同事联系,在该业务的几个服务器上 临时紧急禁掉该IP的连接。
我也上去看了,用GDB查看core文件。看了trace back基本上知道,都是在处理某个类型的消息请求时出的问题。再查看了一下当时的一些临时变量,然后明白了。
接收到客户端发来的这种类型的请求消息后,进入处理函数。 服务端会根据请求消息中的一个字段 ,做某种计算,计算的结果放到一个函数中声明的长度为100的数组。
计算的结果的长度和请求消息中的字段的长度有关,请求消息中的数据越长,计算结果越长。
调试器中显示,当时计算结果有576个字节,显然长度为100字节的数组装不下(正常客户端发的都不会超过这个长度), 导致栈空间被胡写....
这不就是经常听说的缓冲区溢出攻击吗? 只要它重写了该函数本次调用的返回地址,就可以返回后执行攻击者的代码。而服务端进程基本都以root权限运行,所以这样攻击者可以做很多事情。
不过还好,正因为缓冲区溢出很经典,C/C++先驱们也有了一些对策。GCC编译器做了Stack-Smashing Protector机制,在单字节数组后插入一些金丝雀(Canary, 因为大家在矿井作业时,会用金丝雀来预警,如果金丝雀死了,那证明有毒气),如果canary被改掉,在函数执行完成返回之前会检查一下Canary,发现被篡改则不再继续执行,中止程序,避免执行攻击者的代码。
所以我们的程序出现这个log:
“*** stack smashing detected ***
并且进程崩溃掉了,证明GCC的保护起作用了。缓冲区溢出攻击没有得逞。
GCC编译器的Stack-Smashing Protector机制由编译选项-fstack-protector(或-fstack-protector-all)来开启,在那之前我们并没有刻意增加这个编译选项,幸好Ubuntu
linux默认是打开-fstack-protector选项的。
http://soc.if.usp.br/doc/gcc-4.1-doc/gcc.html:
On Ubuntu the default is-fstack-protector, to
turn it off use-fno-stack-protector.
事后,增加简单的长度检查就可以修复这个问题。因为这个代码来自服务区比较公用的一个基本库,所以我猜测其他和客户端直接连接的服务端进程也存在类似问题。虽然邮件抄送给大佬,不过没引起重视,不久之后其他组果然也发现类似问题.....
其实,平时在代码中有访问数组的地方,可以多考虑边界检查,从编程规范上预防类似问题。
-------------------------------------------------------------------------------------------------
更多博文请订阅RSS,更多微博请关注@千里孤行Nerd
分享到:
相关推荐
就是计算机系统基础的那个缓冲区溢出实验的实验报告很详细。
缓冲区溢出攻击 在Windows XP平台上,根据CCproxy缓冲区溢出的原理,编程实现向CCproxy发送ping命令,导致CCproxy产生缓冲区溢出。
3.缓冲区溢出演示 4.溢出攻击结果与危害 5.防御手段 适合人群: 具备一定编程基础,作业时间不够的学生,对缓冲区溢出原理不了解的初学者 环境: IDA pro7.6, vc++ ,x32dbg。 阅读建议: 有一点 x32dbg逆向工具...
而且,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:殖入并且执行攻击代码。被殖入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。
详细介绍缓冲区溢出攻击的原理和实验方法,内容包括1)缓冲区溢出的概念;2)程序的内存组织与缓冲区溢出类型;3)缓冲区溢出攻击的三个案例
缓冲区溢出攻击及防范实例,网络攻击与防御课程使用
缓冲区溢出攻击:原理,防御及检测.PDF
缓冲区溢出攻击实验,有基本的攻击和shellcode的攻击
经典缓冲区溢出攻击源代码,包含详细的分析文档,不可多得的 <br>资源,对于理解缓冲区溢出原理以及汇编语言有很好的帮助。《 <br>深入理解计算机系统》一书中使用到的例子,我将这个例子进行 <br>了详细的...
缓冲区溢出攻击ppt 详细讲述缓冲区溢出攻击的原理和实现
缓冲区溢出攻击与防止技术缓冲区溢出攻击与防止技术缓冲区溢出攻击与防止技术
缓冲区溢出攻击是网络攻击事件中最常用的一种攻击方式,成为系统和网络安全中亟待解决的重要问题。在分析缓冲区溢出攻击原理的基础上,说明了攻击的成因,然后描述了目前常见的攻击类型,最后给出了现有的防范措施,...
BufferOverflow缓冲区溢出攻击原理实例源代码,Visual C++6.0环境下调试通过
CIW-02(缓冲区溢出攻击、暴力破解密码)
通过视频讲解C语言程序的运行时结构以及缓冲区溢出攻击原理。
网络攻防原理 课件 教学PPT 作者 吴礼发 第06讲-缓冲区溢出攻击
网络攻击与防御技术之缓冲区溢出攻击
[黑客防线2009缓冲区溢出攻击与防范专辑,主讲缓冲区溢出与如何防范
Linux系统缓冲区溢出攻击的机理分析.pdf