● 无法鉴别应用程序的访问是否合法
对于合法的数据库用户,通过合法的业务系统访问数据是正常的行为,但是数据库的一个缺陷在于,无法鉴别应用程序的合法性。
在现实系统维护或开发过程中,应用系统后台使用的合法数据库用户,常由于人为因素或管理不善,用户名及口令很容易泄露给第三方,第三方则可以通过命令行或管理工具直接访问密文数据,批量窃取数据。
典型数据库泄密案例:陕西移动1400万手机用户个人信息泄漏
今年3月以来,周双成利用职务之便,多次侵入陕西移动用户数据库,盗取手机用户个人信息,贩卖给侦探公司。
周双成利用工作之便,能在研发和维护系统过程中获知数据库口令,数据库口令泄漏后,完全可以绕开合法的业务系统,直接使用该用户通过其他程序(自己编写的木马程序)定期访问数据库,进而窃取数据库中的客户隐私信息。
4、数据库产品bug
● 缓冲区溢出
这类漏洞是由于不严谨的编码,使数据库内核中存在对于过长的连接串、函数参数、SQL语句、返回数据不能严谨的处理,造成代码段被覆盖。
通过覆盖的代码段,黑客可以对数据库服务器进行各种操作,最常见的是使数据库崩溃,引起拒绝服务。
例如,SQL Server中利用缓冲区溢出,攻击者可以通过以下函数或存储过程执行任意代码:RAISERROR、FORMATMESSAGE、xp_sprintf、 sp_Mscopyscriptfile、xp_sqlinventory、xp_sqlagent_monitor、sp_OACreate、sp_OAMethod、sp_OAGetProperty、sp_OASetProperty、sp_OADestroy;另外,xp_peekqueue、xp_displayparamstmt、xp___execresultset等40多个函数或扩展存储过程也存在缓冲区溢出。
● 拒绝服务攻击漏洞
数据库中存在多种漏洞,可以导致服务拒绝访问,如命名管道拒绝服务、拒绝登录、RPC请求拒绝服务等。
例如Microsoft SQL 7.0服务允许一个远程攻击者通过不正确格式的TDS数据包引起拒绝服务;本地或远程用户通过向命名管道发送一个长请求引发拒绝服务。
例如MySQL中Data_format()函数在处理用户提交的参数时存在漏洞,畸形的参数数据会导致MySQL服务器崩溃。
● 权限提升漏洞
黑客攻击者可以利用数据库平台软件的漏洞将普通用户的权限转换为管理员权限。漏洞可以在存储过程、内置函数、协议实现甚至是SQL语句中找到。
例如,Oracle中一系列系统对象如PL/SQL包,缺省赋予了Public角色的执行权限,借助这些包执行注入了” grant dba to user”的函数或过程,或直接作为参数执行即可。有PUBLIC执行权限的包共计30多个,例如:ctxsys.driload.validate_stmt()将grant语句作为参数即可完成权限提升。
例如,在SQL Server中,通过Job输出文件覆盖,没有权限的用户可以创建job并通过SQL Server代理的权限提升执行该job。
例如,一个金融机构的软件开发人员可以利用有漏洞的函数来获得数据库管理权限。使用管理权限,恶意的开发人员可以禁用审计机制、开设伪造的账户以及转账。