数据库系统安全之漏洞发掘

数据库系统安全之漏洞发掘,第1张

数据库系统安全之漏洞发掘,第2张

如今,在病毒肆虐、黑客无处不在的网络环境下,软件的安全性已经成为一个备受关注的话题。传统的软件安全侧重于权限和角色的管理,如访问控制,或数据的机密性和完整性,如加密和解密。但是一个软件系统在应用了这些安全措施之后还能安全吗?答案似乎没那么简单。其中一个重要的(甚至是致命的)问题在于软件系统的漏洞。往往在一个看似牢不可破的系统中,仅仅因为有一个小小的漏洞,整个安全系统就很容易被黑客攻破,整个系统的控制权完全丧失。

所谓漏洞,通常是指软件中的一些bug,但这种bug不同于普通软件测试中的bug。常见软件测试中的bug是指功能性或逻辑性错误,如对话框弹出错误、系统无法执行某项功能等。这些bug只是影响用户体验,并不会对系统的安全性造成威胁。软件的安全漏洞是指一些别有用心的用户对软件的非正常使用,使得软件执行一些自己设计的恶意代码,或者解析畸形文件。当软件存在安全漏洞时,改变程序的正常执行过程,从而获得系统控制权或窃取机密数据。

数据库是操作系统平台上最重要的系统软件,数据库系统的安全性非常重要。有一种说法,如果互联网上到处都是钱,那就是在数据库服务器里。随着无纸化商务环境的不断扩大,人们在数据库中存储越来越多的敏感信息:银行账户、医疗记录、政府文件、军事机密等。数据库系统成为越来越有价值的目标。因此,保证数据库系统的安全变得越来越重要。

作为一种大型系统软件,数据库系统存在各种各样的安全漏洞,其中缓冲区溢出、堆溢出和SQL注入是危害最大的。

1.缓冲区溢出

缓冲区溢出是一个非常常见和古老的安全漏洞。早在20世纪80年代,缓冲区溢出就已为人所知,但时至今日,仍能发现大量的缓冲区溢出漏洞。最Morris蠕虫是利用Unix系统上fingerd程序的缓冲区溢出漏洞。在Oracle 9i发布之初,Oarcle公司曾宣称其数据库“牢不可破”,但没过几个月,就曝出Oracle 9i中的oracle.exe、XDB等程序存在多处缓冲区溢出漏洞。

C语言中最常见的缓冲是字符数组,操纵字符数组的函数有gets、strcpy、sprintf等。这些函数在复制字符串的过程中不检查字符串的长度,所以很容易出现超长字符串溢出缓冲区的情况。一开始这种设计是为了效率,现在看来这些函数的使用已经成为C语言软件漏洞的重要因素。如果程序员没有良好的编程习惯,在函数调用时总是关注超过缓冲区长度的字符串是否被复制,那么缓冲区溢出是不可避免的。对于存在缓冲区溢出漏洞的程序,当普通用户输入超长字符串时,通常只会使程序崩溃。例如,对于下面的一小段代码:

以下是引用的片段:
/* vul Prog */
# include
int main(int argc,char * argv[])
{
char buff[8];
strcpy(buff,argv[1]);
}


如果用户执行。/vul Prog aaaaaaaaaaaaaaaaaa,Linux上会出现一个段错误,因为用户输入了一个超长的字符串,不仅填满了缓冲区,还覆盖了其他程序正常退出所需的数据。研究这个问题,需要知道Linux系统中进程的内存空。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 数据库系统安全之漏洞发掘

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情