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

豆豆网   技术应用频道   2008年01月09日  【字号: 收藏本文

内容摘要:作为一种大型的系统软件,数据库系统中也存在着各种各样的安全漏洞,其中危害性较大的有缓冲区溢出、堆溢出和SQL注入等。

  从上面的这些例子可以看出,如果编程中不注意缓冲区边界的检查,就很可能导致被溢出攻击。

  由于缓冲区溢出攻击的频繁爆发,迫使很多操作系统厂商推出了不可执行堆栈、更新C库函数等措施。这些措施一定程度上遏制了普通的缓冲区溢出,但道高一尺,魔高一丈,黑客们很快就将注意力转移到新的溢出攻击上,如堆溢出。从最初的溢出重要变量(如函数指针、文件指针)到dlmalloc中malloc-free类型的堆溢出到ptmalloc中的堆溢出,层出不穷。其实不管这些手法有多高明,最终的根源只有一个:利用程序中未对缓冲区边界进行有效检查。

  2.SQL注入

  数据库系统除了可能受到缓冲区溢出的攻击外,近几年又出现了SQL注入的攻击方式,这种攻击方式被称为 “ SYSDBA的恶梦”。SQL注入可能导致数据库系统中的普通用户窃取机密数据(如获得SYSDBA密码)、进行权限提升(如获得SYSDBA特权)等,而这种攻击方式又不需要太多计算机方面的知识,一般只要能熟练使用SQL语言即可,因此对数据库的安全构成了很大的威胁。

  SQL注入的攻击方式比较简单,一般是将一些特权语句注入到有漏洞的存储过程或触发器中导致这些语句被非法执行。例如在Oracle中由SYS创建如下存储过程并将执行权限授予普通用户:

以下是引用片段:
  CREATEORREPLACEPROCEDUREPROC1(INPUTVARCHAR2)AS
  ......
  STMT:='SELECTTITLESFROMBOOKSWHEREAUTHOR='''||INPUT||'''';
  EXECUTEIMMEDIATESTMT;
  ......

  正常情况下用户可以通过执行:EXEC SYS.PROC1('DICKENS')来查询DICKENS的著作,但如果恶意用户这样执行该存储过程:

  EXEC SYS.PROC1( 'DICKENS'' UNION SELECT PASSWORD FROM USERS_TABLE WHERE ''A'' = ''A'),那么他就非法地查出了所有用户的密码。

  虽然这只是一个简单的例子,但它表明在编写系统存储过程、函数和触发器时一定要注意防止SQL注入的可能。

  数据库是信息系统的基石,一旦被黑客入侵,后果将不堪设想。而抵抗黑客入侵的最好办法就是克服软件编程中存在的各种漏洞,让黑客无机可乘。通过源码审计、漏洞跟踪等方式可以较好的修正现存系统中的各种安全隐患。目前我们正在达梦数据库中积极开展漏洞发掘的相关工作,努力使达梦数据库成为真正牢不可破的数据库,为国家的信息安全构筑坚强的基石。

来源:IT专家网    作者:周淳    责编:豆豆技术应用

正在加载评论...