
出版社: 清华大学
原售价: 29.00
折扣价: 21.50
折扣购买: 漏洞扫描与防护/网络空间安全重点规划丛书
ISBN: 9787302517160
第5章第5章数据库系统漏洞及其 防范措施 本章将重点介绍数据库系统的漏洞以及其防范措施,包括常见的数据库漏洞类型和漏洞成因、数据库漏洞扫描的方法和技术,以及数据库漏洞的处理方式和安全防护体系。5.15.1数据库常见漏洞5.1.1数据库漏洞类型 数据库软件常常十分复杂,包含了大量的逻辑,数据库设计开发人员在设计和开发这些逻辑的过程中难免出现疏忽或遗漏,导致数据库存在大量的安全漏洞,使得*击者能够成功*陷数据库。典型的数据库入侵方式有数据库端SQL注入、提权、缓冲区溢出等。 本文所说的数据库漏洞范围相对较窄,只涉及数据库本身的漏洞,不涉及应用和数据库之间的安全漏洞。该范围内的数据库漏洞可以划分为两类: 数据库软件漏洞和应用程序逻辑漏洞。其中,应用程序逻辑漏洞虽然出现在应用程序上,但*终入侵的是数据库,SQL注入就是此类漏洞的代表。 数据库软件主要包含3个主要组件: 网络监听组件、关系型数据库管理系统和SQL编程组件。网络监听组件一般是数据库通信的中心,其不仅负责接收网络请求,还要进行数据库访客身份的验证。关系型数据库管理系统主要用来保障整个数据库能够高效、有序地运行。SQL编程组件主要带给数据库一定的SQL扩展能力,如Oracle的PL/SQL。PL/SQL是把数据*作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等*作实现复杂的功能或者计算的程序语言,该编程组件可以实现存储过程、创建自定义函数、实现触发器和以外部库的方式调用C和J**a函数等功能。 这3个组件是数据库的核心,同时也是数据库*易*到安全威胁的部分。根据数据库被入侵的方式来分,可以将数据库漏洞分为以下4种。 1. 网络*击的安全问题 网络监听组件不仅定义了数据库和客户端之间的通信协议,*负责对客户端进行身份验证(确认客户端用于通信的用户名和密码是否合法)。所有数据库平台都包含至少一个网络监听组件,该组件可以是一个独立的可执行文件(如Oracle),也可以是主数据库引擎进程的一部分(如微软的SQL Server)。网络监听组件的漏洞主要包括以下3类。漏洞扫描与防护第5章数据库系统漏洞及其防范措施网络监听组件被触发缓冲区重写,导致数据库服务器无法响应客户端,造成双方通信失败。简单说,就是使网络监听组件崩溃,漏洞CVE20075507就是这种类型的代表。 绕过网络监听组件身份验证,获得合法数据库账号和密码。这个类型主要有3种方式: 其一,通过劫持网络监听组件信息,把数据库的登录信息劫持到*击者机器,获取敏感信息,甚至获取数据库管理员账号密码;其二,直接对在网络监听组件中加密的数据库登录密钥进行破解;其三,在远程登录过程中对数据库服务器进行SQL注入,利用某些特殊函数创建新的数据库账号,并为新账号创建DBA权限。 通过向网络监听组件发送含有异常数据的包,触发缓冲区溢出,夺取数据库所在*作系统控制权限。 另外,数据库的网络监听组件被*击的可能性与其协议的复杂性成正比,通信协议越复杂,被*击的可能性越高。TNS Listener是Oracle的网络监听组件,截至目前已被发现至少有20个漏洞,且其带来的危害都比较大,如CVE20020965、CVE20020965、CVE20075507、CVE20120072都是可以直接夺取*作系统权限的缓冲区漏洞。 2. 数据库引擎的安全问题 数据库引擎囊括了能够保证数据库高效平稳运行所需的多种不同处理逻辑和过程,复杂度很高;同时,它还包含了实现与用户交互的大量部件,包括语法分析器和优化器,以及可以让用户创建程序在数据库内部执行的运行环境。由于设计的逻辑过于复杂,程序中出现的设计错误往往会成为安全漏洞,且易被入侵者利用。从恰当的授权验证到允许*击者获取数据库所有控制权的缓冲区溢出,这类程序设计错误难以避免。 其中较有代表性的是2007年7月Oracle公布的一个错误授权验证漏洞。该漏洞允许被篡改的SQL语句绕过执行用户被授权的权限,能够在没有相应权限的情况下对数据表执行*新、插入和删除*作。SQL Server 2005的CVE20080107也是这种类型的漏洞。该漏洞允许*击者通过整数型缓冲区溢出漏洞控制SQL Server所在服务器。 3. 内存存储对象的安全问题 许多数据库系统都提供大量内建的存储过程和软件包,这些存储过程对象提升了数据库的性能和效率,同时也帮助管理员和开发者管理数据库系统。默认情况下,一个Oracle数据库在安装时默认拥有多达30000个可以公开访问的对象,这些对象为许多任务(包括访问OS文件、发送HTTP请求、管理XML对象、J**a服务以及支持复制等)提供相应的功能。这些功能都会在网络上开启对应端口,而每多开一个网络端口,就多了一份被入侵威胁,其中包括了SQL注入、缓冲区溢出和应用程序逻辑问题等异常情况。 4. SQL编程组件的安全问题 SQL编程组件是一个比较宽泛的概念,在每种不同的数据库中功能效果存在差异,这里以Oracle的PL/SQL为例进行说明。 PL/SQL给函数和存储过程分配了两种不同权限,这使得Oracle的安全性存在大量的隐患。PL/SQL带来的*多的问题就是低权限账户提升为高权限的问题。通过Web或其他方式拿到数据库的一组低权限用户后,*击者可以通过PL/SQL中的一些方法对低权限用户进行提权,*终控制整个数据库以及*作系统。DBMS_METADATA、CTXSYS DRILOAD、CTXSYS DRILOAD、DBMS_CDC_SUBSCRIBE、DBMS_METADATA、MDSYS、SYS.LT、LT_CTX_PKG、USER_SDO_LRS_METADATA、DBMS_EXPORT_EXTENSION、DBMS_SQL等开发工具包都出现过容许*击者将低权限账号提权到DBA权限的漏洞。 5.1.2数据库漏洞的发展趋势 目前,数据库漏洞在数据安全中的威胁*严重。数据库漏洞的影响范围*不仅仅是存在漏洞的数据库自身,还包括数据库所在*作系统和数据库所在局域网的安全。漏洞的问题和时间之间是密切关系的,随着时间的推移,旧的漏洞会被修复,新的漏洞会不断出现,因而漏洞不会**消失,会长期存在。数据库漏洞影响广、威胁大,防护者除了积极*新补丁外,还可通过合理配置提高入侵难度。对数据库漏洞进行研究探索有助于预知数据库可能出现0day漏洞的位置,尽早和客户沟通,帮助客户对数据库可能被入侵组件进行加固。下面从数据库漏洞的时间分布、威胁类型分布、*击途径分布、利用趋势分布4个角度介绍数据库漏洞的发展趋势。 1. 按发布时间分布 从1996年开始,数据库进入安全团队的视野。同年4月,Oracle被披露出**个安全漏洞。从1999年的4个漏洞开始,漏洞数量每年稳步增长,到2012年一年被爆出116个漏洞。由于不同数据库研究开始时间和研究深度各不相同,所以下面选取2012—2017年中5个主流数据库(Oracle、msSQL、MySQL、DB2、PostgreSQL)的漏洞进行分析,如图51所示。每年被确认的数据库漏洞数量呈震荡趋势: 数据库发布新功能的年份,漏洞数量会有一定提高;不发布或少发布新功能的年份,漏洞数量明显降低。截至2017年12月初,近6年被确认的数据库漏洞共有666个,其中2017年被确认的数据库漏洞数量为121个。 图512012—2017年数据库漏洞数量 2017年比2016年数据库漏洞数量有少量下降,减少了15个漏洞。这是因为2016年各家数据库开发了一些新功能,并且也出现了一些新的*击手段;而2017年各家数据库主要致力于修补漏洞。2017年的121个数据库漏洞的厂商分布如图52所示。 图522017年的121个数据库漏洞的厂商分布 2. 按威胁程度分布 数据库漏洞按照对数据库的机密性、完整性和可用性的威胁程度进行分类,可分成4大类: 超高危漏洞、高危漏洞、中危漏洞和低危漏洞。其中,高危漏洞必须及时处理,低危漏洞和中危漏洞虽然没有高危漏洞严重,但在某些特定情况下也会达到高危漏洞的危害程度,所以不能轻视低危漏洞。2017年被确认的121个漏洞中,Oracle 10个、MySQL 91个、PostgreSQL 6个、Microsoft SQL Server 1个、IBM DB2 10个、Informix 3个。其中,Oracle有4个高危漏洞;MySQL虽然被爆出91个漏洞,但只有7个高危漏洞;Microsoft SQL Server、PostgreSQL和IBM DB2则没有高危漏洞;PostgreSQL 6个漏洞中含5个高危漏洞。此外,国产数据库漏洞信息会由**的漏洞平台认证和发布,截至2017年10月,来自CNNVD和CNVD的国产数据库漏洞一共11个,全部来自安华金和*防实验室,其中达梦数据库漏洞占10个,包含1个超高危、3个高危;Gbase数据库发现1个漏洞。数据库漏洞等级与厂商分布如图53所示。 图53数据库漏洞等级与厂商分布 3. 按*击途径分布 数据库漏洞按*击途径可划分为两类: 远程服务器漏洞和本地漏洞。 远程服务器漏洞主要是指位于提供网络服务的进程中的漏洞。*击者可以通过网络在另一台计算机上直接进行*击,无须用户进行任何*作。 本地漏洞指的是必须登录到安装软件的计算机上才能利用的漏洞。该类漏洞因利用条件苛刻,威胁也*大。 目前,数据库漏洞按照*击途径的分布如图54所示,其中远程漏洞占74%,本地漏洞占17%。在远程漏洞中,需要登录数据库SQL层的漏洞远多于协议层的漏洞。数据库漏洞*击入口分布如图55所示,除去不确定的漏洞,SQL层占据全部漏洞类型的81%,协议层漏洞占据%。SQL层漏洞的利用需要先通过一组弱口令登入到数据库中,然后再使用巧妙的字符串组合进行*击,这样会导致数据库出现拒*服务、数据库泄漏、权限提升、*作系统被控制等多种问题。针对数据库中的SQL层可以采用对问题函数、存储过程进行权限限制等方式规避。 图54数据库漏洞按照*击途径的分布 图55数据库漏洞*击入口分布 4. 利用趋势分布 漏洞往往是多个一起被发现,出现在同一函数、存储过程中。数据库漏洞中的高危漏洞*关键,对高危漏洞出现的函数、存储过程进行安全加固不但有利于防护已发现的漏洞,*可能提高针对0day漏洞的预防能力。2016年,高危漏洞集中于数据库Oracle和MySQL中,分别为CVE20163609、CVE201634**、CVE20163479、CVE20163454、CVE20160639、CVE20163471。 CVE20163454和CVE20163609是Oracle的J**a JVM存在的缓冲区溢出漏洞。该漏洞不需要获得目标数据库的网络访问权限或者数据库所在*作系统的访问权限,就可以导致目标数据库被**控制、存储的所有敏感信息被盗取、数据库被**破坏和数据库服务被停止等问题。 CVE201634**是一个本地漏洞,存在于data pump import组件中。data pump import组件主要用来处理数据库的数据库文件的导入/导出。*击者通过某种手段登录到数据库本地后,可以通过该组件导出某些正常渠道无权限访问的数据,从而盗取某些敏感信息。 CVE20163479是一个远程漏洞,位于Porta**e Clusterware组件中。该漏洞可能导致入侵者仅有一组低权限账号,就可获得数据库的部分表的访问权,获得其中的敏感信息,甚至对数据库稳定性造成一定程度的影响。 CVE20160639、CVE20163471是MySQL的两个安全漏洞,前者是远程漏洞,后者是本地漏洞。两者都是由于相对应组件中存在的变量限制不严格导致的,在某些条件下可能导致数据库信息泄漏。尤其是其中的远程漏洞,其可在无须任何账号密码的情况下,导致MySQL缓冲区溢出。 数据库安全发展到现在,权限控制和输入限制已成为核心和焦点。以上6个高危漏洞中的3个是缓冲区溢出漏洞,特别是CVE20160639,它通过对协议的破解直接对数据库缓冲区发起*击。虽然缓冲区溢出和通信协议破解的漏洞越来越少,但其一旦出现,对数据库的破坏就是致命性的。SQL层入侵依旧是漏洞中的主流, 80%以上的漏洞都属于SQL层入侵范畴,其中主要还是利用数据库系统SQL的漏洞。大部分入侵者还是依赖对低权限用户进行升级权限,以获取*多的数据库敏感信息。数据库管理员需要严格分配用户权限,防止分配给用户过高的权限;对非必要的服务可以禁用或卸载,防止其中存在的漏洞被黑客利用,对数据库造成破坏。5.25.2数据库漏洞扫描数据库漏洞扫描是对数据库系统进行自动化安全评估的专业技术,它能够充分暴露数据库系统的安全漏洞和威胁,并提供智能的修复建议,将企业的数据库安全建设工作由被动的事后追查转变为事前的主动预防,将数据库的安全自查由低效的人工方式提升到高效准确的自动检查方式,并以报表的方式呈现给管理员,适时提出修补方法和安全实施策略,对数据库的安全状况进行持续化监控,从而帮助用户保持数据库的安全健康状态,实现“防患于未然”。 5.2.1数据库漏洞的成因 数据库系统在设计和使用时会出现很多安全隐患,这些安全隐患会直接或间接地造成数据库漏洞的出现。形成数据库漏洞的原因主要有以下5个方面。 1. 数据库管理不当 很多数据库管理人员常常只将注意力放在数据库系统的使用和管理上,对数据库安全不够重视,不能及时察觉数据库系统中可能发生的安全风险。此外,对数据的错误*作和配置也会带来安全隐患。这些管理上的不当很容易给*击者提供可乘之机,使得数据库产生安全隐患。因此,需要提高数据管理人员的业务水平和责任心,在人为因素上避免数据库漏洞的产生。 2. 只注意网络和主机的安全,忽略数据库本身 许多信息安全人员都有一个误解,认为一旦关键的Web服务和主机*作系统漏洞得到修复,数据库就会得到保护。这种错误的想法常常导致数据库安全问题的发生。 所有现代关系数据库系统都是“端口可寻址”的,这意味着任何具有正确查询工具的人都可以规避*作系统的安全性防护机制,直接连接到数据库系统,并威胁数据库的安全。 3. 对数据库权限的管理不够严格 如果数据库系统对数据的访问权限没有严格的定义,网络中的入侵者就可以轻松访问数据库中的机密数据。并且,数据库系统自身的默认用户和密码的问题、数据库自身的安全漏洞以及管理员的后门都可能被入侵者利用,以获得*高的权限,并窃取机密数据。 4. 数据库*应用系统的影响 大部分应用系统在设计时为了节约许可证的数目,数据库中的用户数量往往只有一个或者只有少量的几个,而且不同用户的身份区别是通过建立用户名/密码表实现的。此类系统中登入到数据库的“用户”是同一个数据库用户,所有用户相对数据库平台的权限是一样的,容易造成相互冒用的情况。 5. 数据库本身存在安全漏洞 由于数据库系统功能强大,结构复杂,各种应用程序众多,所以系统本身的漏洞也**多。这些漏洞中的某些漏洞会同时威胁到数据库本身和其所在*作系统的安全。常用的几种数据库也都有很多众所周知的漏洞。恶意用户有可能利用这些漏洞*击数据库,侵入*作系统,以获得系统的重要数据,甚至破坏系统。计算机感染木马、恶性弹出窗口和恶意软件等造成的损失常常很小,但数据库被破坏或者恶意使用造成的后果几乎是无法弥补的。 5.2.2数据库漏洞扫描任务 主流数据库的漏洞在使用中逐步暴露,且数量庞大。为了检测出数据库系统中存在的漏洞,漏洞扫描的任务主要有以下6个方面。 1. 分析内部不安全配置,防止越权访问 通过只读账户登录到数据库服务器,实现由内到外的检测;提供现有数据的漏洞透视图和数据库配置安全评估;初步诊断内外部的非授权访问。 2. 监控数据库安全状况,防止数据库安全状况恶化 建立数据库的安全基线,对数据库进行定期扫描,对所有安全状况发生的变化及时进行报告和分析。 本书共分为9章。首先介绍了漏洞的分类、特征和发展等基本知识,漏洞扫描的技术和流程;然后分析了网络设备的常见漏洞及防范措施,*作系统的常见漏洞及防范措施,数据库的常见漏洞及防范措施,Web系统的常见漏洞及防范措施,用户名及口令猜解的类型与防范措施等方面的内容;*后描述软件配置检查的方法和标准,并结合详细案例对需求和解决方案进行详细分析解读,帮助读者*透彻地掌握漏洞扫描和防护。