数据库安全漏洞浅析之缓冲区溢出漏洞(1)
作者:安华金和 发布时间:2017-01-23

在数据库面临的安全威胁中,数据库漏洞攻击和SQL注入是两种最为常见的攻击手段,而在漏洞供给方面,危害性较大的一类是缓冲区溢出漏洞。通过缓冲区溢出漏洞不仅可以危害数据库,还可以控制操作系统,以数据库服务器为跳板,控制整个内网系统。缓冲区溢出漏洞,不仅在数据库系统中有,在操作系统上运行的相关应用软件也有,但由于数据库需要提供大量外部访问的接口这些攻击隐藏在数据库的通讯协议中,防火墙、IPS等传统安全手段无法有效实现数据库通讯协议的解析,因此数据库中的缓冲区溢出漏洞具有更大的隐蔽性。

简单来说,缓冲区溢出是指大的数据存入了小缓冲区,又不对存入数据进行边界判断,最终导致小缓冲区被撑爆。大的数据污染了小缓冲区附近的内存。污染的内存可能带来改变程序控制流、夺取操作系统、禁止访问等多种结果。

缓冲区溢出主要可以分成三种:静态数据溢出、栈溢出和堆溢出。产生这三种不同的溢出根源在于windows的内存结构;windows的内存可以被分成两个层面:物理内存和虚拟内存。我们一般看到的其实只是虚拟内存。在XP系统下windows会给所有进程都分配4G内存(无论物理内存真实多大);windows会把4G内存分成代码区、数据区、堆区、栈区。数据区存储的是进程的全局变量。如果利用这里的数据进行缓冲区溢出那么就被称为静态数据溢出。同样利用栈区和堆区进行缓冲区溢出,则相应被称作栈溢出和堆溢出。

静态数据溢出虽然技术难度低但是灵活性和可利用范围也较低,相比之下,堆溢出和栈溢出两类更加复杂,危害更大。在本文简单的概念介绍之后,我们会在后续的系列文章中对利用此类漏洞的攻击方法进行还原,并提出相应的数据库安全思路。