根据国家漏洞库(CVE)数据安全漏洞统计,Oracle、SQL Server、MySQL等主流数据库的漏洞数量在逐年上升,以Oracle为例,数据库漏洞总数已超过7000个。数据库漏洞攻击主要涉及以下几类。
第一类是拒绝服务攻击,典型代表有Oracle TNS监听服务远程利用漏洞(CVE-2012-1675)。攻击者可以自行创建一个和当前生产数据库同名的数据库,用伪数据库向生产数据库的监听模块进行注册,这样将导致用户连接被路由指向攻击者创建的实例,造成业务响应中断。还有MySQL:sha256_password认证长密码拒绝式攻击(CVE-2018-2696),该漏洞源于MySQL sha256_password认证插件。该插件没有对认证密码的长度进行限制,如果传递一个很长的密码,就会导致CPU资源耗尽(参见6.2.10节)。
第二类是提权攻击,如Oracle 11g with as派生表越权、Oracle 11.1-12.2.0.1自定义函数提权、PostgreSQL高权限命令执行漏洞(CVE-2019-9193)。通过此类漏洞,攻击者可获得数据库或操作系统的相关高级权限,进而对系统造成进一步的破坏。
第三类是特权命令执行漏洞,攻击者可利用该漏洞在数据库中执行任意命令。比较有名的有postgres9.x的利用pg_copy执行操作系统命令、MSSQL的利用xp_cmdshell命令执行操作系统命令。
第四类是缓冲区溢出漏洞,某些数据库软件由于编程缺陷,可能存在缓冲区溢出漏洞,被利用可能导致拒绝服务、数据损坏甚至远程代码执行。MySQL客户端栈溢出(CVE-2015-3152),当MySQL客户端试图连接一个返回了过长认证插件名称的服务器时,客户端会在栈上分配一个较小的缓冲区来存储这个名称,导致栈溢出。这个漏洞可以让攻击者在客户端程序中执行任意代码。