作者为:
IT系统安全性,特别是数据库系统安全性,成了当下IT行业一个热门话题。本人曾听一位销售同事曾说:“在XX集团计划部,现在只要说申报与安全性相关的项目,准保一路绿灯。”
但也如另外一位同行所说:“安全性是说起来重要,做起来次要,忙起来不要。”无论重要也罢,次要、不要也罢。安全性特别是数据库安全性的确是值得深入探讨的话题,更具有广泛、全面实施空间的领域。
本章就将从数据库安全性需求及现状说起,再对Oracle数据库安全性解决方案进行一番介绍,然后结合某银行客户的安全性需求,制定安全性解决方案策略,最后系统描述了针对该银行的某关键业务系统的安全性评估情况。
数据库安全性需求及现状
IT 系统发展的一大趋势就是业务和数据的大集中。大集中之后的IT系统在系统的高可用性、高性能、可管理性、扩展性、安全性等方面,都将面临更严峻的挑战。具体在数据库安全性方面,在身份鉴别、数据存储层面、访问控制、安全审计和日志管理等诸多方面,IT系统都应得到进一步加强和加固,从而满足不断增长的数据安全管理和合规性需求。
目前,各类IT 系统安全事故的频发,例如客户资料流失等,不仅给各企业带来巨大损失,而且也造成非常不良的社会影响。于是,各行业领导都更高度重视数据库安全性。
安全性是涉及硬件、网络、操作系统、数据库软件、中间件软件、应用软件等各层面的系统工程。但是,据本人的了解,很多行业的安全性解决方案主要在服务器、网络等层面展开实施,例如某通信行业的4A认证体系。而在数据库层面,特别是Oracle数据库中,安全性实施的力度和强度并不充分。在大部分Oracle系统中,我们发现基本只采用了一些传统的安全性技术。例如:
- 防范非法用户访问的身份认证,如操作系统层、数据库层的口令管理。
- 基于数据库对象的防范非授权数据访问的权限控制。包括系统权限(system privileges)以及对象权限(object privileges)的设计,以及便于安全管理的角色(role)设计等。
- 为实现记录级的安全控制,采用了视图(View)方式。
- 关闭操作系统级不必要服务。如telnet、FTP服务等。
这种传统技术的安全保护强度是远远不够的,满足不了日益增长的安全性和合规性需求,导致数据库系统的各种安全风险暴露在外。例如,国内Oracle数据库几乎没有采取加密技术,特别是关键和敏感的客户资料全部是明文存储在数据库中;DBA权限过高,能访问所有应用数据;对重要操作行为缺乏审计等。
为什么在客户最为关注的Oracle数据库领域,客户反而没有充分实施安全解决方案呢?因为商务方面因素?的确Oracle大部分安全产品都需要单独购买。因为技术因素?的确Oracle大部分安全产品在实施方面还是有一定工作量和技术难度的,而且多数技术人员缺乏这方面实施经验。因为体制问题?的确很多行业明确规定安全性技术不能采用国外技术,只能采用国内自有技术体系。
但本人一次与一个国内重要客户DBA有关安全性的沟通内容,则耐人寻味,也有点啼笑皆非。
我问:“为什么你们的系统只在操作系统和网络层面实施安全性,而不在Oracle数据库内部加强安全性呢?”
DBA回答:“你们Oracle数据库现在就那么多Bug,就象个大马蜂窝,我们哪敢还去实施那么多安全性产品,去捅这个马蜂窝啊?你们Oracle更像个核反应堆,我们宁可在外面构筑铜墙铁壁,也不轻易碰你们这个核反应堆。”
我说:“再坚固的钢筋水泥也抵挡不住内部的核泄露啊,就象日本福岛核电站爆炸事故一样。”
DBA无语,但也未必赞同我的解释。
Oracle数据库安全性解决方案
从源头说起
在IT系统日益面临各种内外安全攻击和挑战的严峻环境下,为满足IT系统不断增长的安全需求,为符合各种安全性和合规性要求,Oracle数据库安全性技术和产品也在不断推陈出新,以下就是Oracle在不同版本下安全性技术不断发展的示意图:

其实追根溯源从Oracle数据库诞生之日起,Oracle就非常重视数据库安全性。值得一提的是上图第一行所谓政府客户(Government Customer),实际上就是美国军方。Oracle数据库其实就是来源于当年的RSI公司(Oracle公司前身)为美国中央情报局设计开发的一套专用信息处理系统,因为该项目名称叫Oracle,所以RSI公司更名为寓意更深远、发音也更响亮的Oracle公司,并从此扬名天下。而在数据库安全领域,由于来源于政府和军方的缘故,Oracle具有先天优势,诸多产品如Oracle Label Security等也带有浓郁的美国政府特别是军方色彩。
从总体上而言,Oracle数据库是业界安全性方面最完备的数据库产品。在数据库安全性的国际标准中,Oracle通过了14项标准的测试,是所有数据库产品中通过安全性标准最多、最全面的产品。Oracle在C2级的操作系统上(如商用UNIX、VMS操作系统),不仅满足NCSC C2级安全标准,而且已经正式通过了NCSC C2标准的测试。在B1级的操作系统上不仅满足NCSC B1级安全标准,而且已经通过了NCSC B1级标准的测试。
数据库安全性全面解决方案
以下示意图从一个角度代表了Oracle数据库安全性全面解决方案:

还记得前面一个DBA的话语吗?他把数据库安全性比喻成一个核反应堆。上图不就是非常形象的Oracle数据库安全性的核反应堆吗?
即在核反应堆的最外层,Oracle通过数据库防火墙(Database Firewall)产品构筑了一层坚固的钢筋水泥保护墙,用于阻断(Blocking)和记录(Logging)对数据库的恶意攻击。例如,监视数据库活动,防止未授权的数据库访问、SQL 注入、权限或角色升级、对敏感数据的非法访问等。
而在数据库内部,除传统的数据库用户、口令、角色、权限、审计等功能之外,在安全监控层、访问控制层和数据存储层面,均推出了功能更强、更符合安全性需求的产品和技术,使得Oracle数据库安全性得到全面加强。下图更清晰地展现了各层面的相关技术和产品:

即在安全监控管理层,提供了对企业内部所有数据库的审计数据进行收集、监控、存储、检验和生成报表的集成化平台产品:Audit Vault;也提供了加强对历史数据的安全审计的产品:Total Recall;以及对企业数据库的配置进行集中管理的产品:Configuration Management。
在访问控制层面,不仅有传统的虚拟私有数据库(Virtual Private Database)技术,以及具有美国政府色彩的标签数据库(Oracle Label Security)技术,还有从10g以后发展的用于访问权限控制和职责分离(Seperation of Duty)的新产品:Oracle Database Vault。
在数据存储层面,既有对数据库内部敏感数据进行加密的高级安全产品(Oracle Advanced Security),也有对备份数据进行加密的Secure Backup技术,同时还有对敏感数据进行屏蔽或漂白,用于开发测试环境的Data Masking技术。
Oracle数据库安全性实施基本策略:快速原型法
由上可见,Oracle数据库安全性实施是涉及数据存储、访问控制和安全监控等多层面,由多项技术组成的庞大系统工程。为降低实施风险,特别是降低对应用程序的影响,建议采取如下图所示的快速原型法:

即在全面分析安全性需求基础上,先采用Oracle数据库常规性安全性技术,并依赖现有IT技术框架,先满足数据库安全性基本需求,形成安全性原型系统。在原型系统基础上,根据安全需求的不断变化和分析,逐步采用更全面、深入的安全性产品和技术,丰富安全性原型系统,像滚雪球一样,最终逼近最终的安全性系统,全面满足数据库安全性需求。
17.3 某银行客户安全性需求和Oracle策略
以下我们通过对一个银行客户的安全性需求的详细分析,以及对应的Oracle安全性总体解决策略,来展现数据库安全性解决方案的全面性、系统性和复杂性:
| 类别 |
需求描述 |
Oracle解决方案策略 |
| |
|
|
| 身份鉴别方面 |
应对登录操作系统和数据库的用户进行身份标识和鉴别,严禁匿名登录 |
在Oracle数据库中,可采用审计技术,对登录客户身份进行记录。并可将ANONYMOUS用户状态保持为EXPIRED & LOCKED,严禁匿名登录。 |
| 为操作系统和数据库的不同用户分配不同的用户名 |
在Oracle数据库中,可采取如下安全措施:
l 严禁以IDENTIFIED EXTERNALLY方式创建用户
l REMOTE_OS_AUTHENT参数设置为FALSE,禁止操作系统用户远程登录。 |
| 对服务器进行远程管理时,应采取加密通信方式,防止鉴别信息在网络传输过程中被窃听。 |
通过Oracle Advanced Security的Network Encrption功能实现Oracle Server和Client两段的网络加密传输。 |
| 首次登录应强制要求修改密码,应要求定期更改密码。 |
通过设置profile中的PASSWORD_LIFE_TIME、PASSWORD_GRACE_TIME等参数,并赋予相关用户,可实现定期更改密码需求。 |
| 不应允许用户间存在共用同一个访问帐户及密码的情况。 |
一方面,主要通过安全管理制度和流程控制加以保障。另一方面可根据需求,在技术上通过数据库、操作系统、网络身份认证,以及统一身份认证等技术和产品加以实现。 |
| 应明确禁止共享口令。 |
主要通过安全管理制度和流程控制加以保障。 |
| 对于新建的用户帐号,不同的帐号应设置不同的初始密码。 |
主要通过安全管理制度和流程控制加以保障。 |
| 应要求用户的口令长度最低为6位。 |
通过Oracle提供的缺省的口令复杂度检查函数:verification function,或者通过编写客户化口令复杂度检查函数,实现该功能。 |
| 应要求用户的口令必须包含字母和数字。 |
通过Oracle提供的缺省的口令复杂度检查函数:verification function,可实现该功能。 |
| 应设置用户口令的最长有效期为3个月。 |
通过设置profile中的PASSWORD_LIFE_TIME、PASSWORD_GRACE_TIME等参数,并赋予相关用户,可实现定期更改密码需求。 |
| 应确保对密码进行加密保护,不允许明文密码出现。 |
在Oracle数据库内部数据字典中,用户密码是加密的。为避免在应用程序、批处理和脚本中通过CONNECT命令中出现明文密码,可使用Oracle Wallet技术。 |
| 在收到用户重置密码的请求后,应先对用户身份进行核实在进行后续操作。 |
主要通过安全管理制度和流程控制加以保障。 |
| 访问控制方面 |
根据“业务必需”原则授予不同用户为完成各自承担任务所需的最小权限,并在它们之间形成制约关系。 |
根据对不同应用系统的访问控制需求分析,一方面可通过常规的Oracle权限管理、角色管理等技术实现访问控制基本功能,另一方面,如果需要对内部职责进行更严格的划分和访问控制,例如防止DBA访问应用数据,应用系统管理员之间需要进行职责划分,则需要Database Vault技术才能满足相关需求,例如Realm的创建。 |
| 制定符合业务需求的访问控制制度,并形成访问控制策略的记录。 |
通过Database Vault技术,可实现应用系统管理员之间的职责划分,并对违反职责划分的访问行为进行记录和审计。 |
| 明确系统中每个用户的级别及权限。 |
根据对不同应用系统的访问控制需求分析,一方面可通过常规的Oracle权限管理、角色管理等技术为每个用户定义级别和权限。另一方面,如果需要对内部职责进行更严格的划分和访问控制,例如防止DBA访问应用数据,应用系统管理员之间需要进行职责划分,则需要Database Vault技术才能满足相关需求,例如Realm的创建。 |
| 操作系统和数据库特权用户需进行权限分离 |
主要通过安全管理制度和流程控制加以保障。 |
| 严格限制默认帐户的访问权限,重命名系统默认帐户,修改默认帐户口令。 |
在Oracle数据库安装完成之后,会自动安装管理帐户、非管理帐户、样本帐户等默认帐户,根据Oracle正常运行的需要,除SYSTEM、SYS、DBSNMP、SYSMAN、MGMT_VIEW之外,其它默认帐户均处于Expired and locked状态。
另外,Oracle还提供对默认帐户口令的检查功能。 |
| 及时删除多余的、过期的帐户,避免共享帐户的存在。 |
通过对Oracle帐户口令的有效管理,例如初始化参数和profile参数的有效设置,可将不合规的帐户设置为Expired and locked等状态。通过安全管理制度和流程控制,可及时删除这些帐户。 |
| 对操作系统用户、重要目录及文件进行权限设置。 |
由系统管理员对操作系统用户、重要目录及文件进行权限设置。在Oracle数据库层面,可对CRS Home、Oracle Base、Oracle Home等目录及文件系统进行权限设置和保护。 |
| 严格限制远程登录操作业务范围:实施严格的审批程序,对超出业务范围的操作请求应予以拒绝。 |
首先通过安全管理制度和流程控制加以保障,例如实施严格的审批程序,对超出业务范围的远程操作请求予以拒绝。
在常规技术方面,通过设置REMOTE_OS_AUTHENT参数为FALSE,禁止操作系统用户远程登录。
通过Database Vault的相关要素(IP地址、主机名等)和Command Rule的定义,对远程登录操作方式和操作内容进行限制。 |
| 仅在访问开始前激活远程登录端口,访问结束后应及时关闭。 |
主要通过安全管理制度和流程控制加以保障。 |
| 在进行远程登录操作时,不得将帐户信息通过远程网络存储到本地硬盘、软驱及其它外部存储介质。 |
一方面通过安全管理制度和流程控制加以保障,另一方面通过对应用程序进行规范化管理,禁止将在应用程序中将帐户信息存储到本地硬盘、软驱及其它外部存储介质。 |
| 远程登录操作应采用双因素验证方式,例如支持个人数字证书的VPN等。 |
通过配置SSL,以及使用Oracle Advanced Security的数字证书技术,可实现该功能。 |
| 建立远程登录操作文档记录,至少包括:远程访问人员、工作内容、持续时间,并要求监督人签字确认。 |
主要通过安全管理制度和流程控制加以保障。 |
| 保留对服务器的远程维护记录,对远程维护的内容和时间有严格的管理,完成远程维护后断开远程维护链路。 |
主要通过安全管理制度和流程控制加以保障。在技术方面,也可考虑通过Database Vault的审计功能,对远程维护操作进行记录。 |
| 安全审计方面 |
审计范围应覆盖到服务器和重要客户端上的每个系统用户和数据库用户。 |
通过Oracle标准审计功能,可实现该功能。 |
| 审计范围包括重要用户行为,系统资源的异常使用和重要信息系统命令的使用等系统内重要的安全相关事件。 |
Oracle缺省审计功能就定义了若干重要行为的审计,例如DROP ANY TABLE、DROP USER、ALTER ANY TABLE、ALTER DATABASE 、ALTER SYSTEM等数十项操作的审计,因此建议打开Oracle缺省审计功能。另外,根据应用系统的需要,可定义更多的重大安全相关事件的审计。
通过Oracle资源管理器(Resource Manager),进行资源的合理规划和使用,可防止系统资源的异常使用。 |
| 审计记录包括时间、类型、访问者标识、访问对象标识和事件结果等。 |
Oracle数据库审计结果可存储在数据库内部或操作系统文件系统,并支持XML格式,以及支持支持Windows event viewer 和 SYSLOG。无论存储在何处,均能记录时间、类型、访问者标识、访问对象标识和事件结果等信息。 |
| 能够根据记录数据进行安全分析,并生成审计报表。 |
Oracle提供对审计数据的各种分析工具,例如对DBA_AUDIT_TRAIL、DBA_COMMON_AUDIT_TRAIL等视图的访问。特别是在Audit Vault中,内置了数十种审计报表,提供数据过滤、按条件值的突出显示、丰富多彩的图表功能等,并可创建客户化报表。另外,Audit Vault还具有多种分析模型,支持审计数据的商务智能。Audit Vault同时支持RAC和分区技术,为审计海量信息的分析工作提供了良好的技术基础架构。 |
| 保护审计记录,避免受到未预期的删除、修改或覆盖。 |
Oracle提供对标准审计记录(SYS.AUD$)的保护功能。
如果采用Audit Vault技术,可通过对Audit Vault服务器的数据库进行保护,例如Audit Vault服务器的RMAN备份恢复、访问控制等,可实现对审计数据的全方位保护。 |
| 日志管理方面 |
日志系统应记录用户登录的时间、登录系统的方式、失败的访问尝试、系统管理员的操作、对系统日志的访问记录以及对其他涉及安全的访问记录。 |
在应用层面,需要应用程序能在日志系统中,记录用户登录的时间、登录系统的方式、失败的访问尝试等信息。
在系统层面,Oracle数据库、ASM、Listener、CRS各组件等均能在日志文件中记录重要事件和错误信息,供系统管理员和数据库管理员进行安全审计和故障诊断分析之用。
进一步,通过安全管理制度和流程控制加以保障。 |
| 对操作日志和处理日志进行定期检查,对其中可疑的记录进行分析审核。 |
Oracle数据库、Listener、CRS各组件等均能在日志文件中记录重要事件和错误信息,供系统管理员和数据库管理员进行安全审计和故障诊断分析之用。例如建议定期对数据库alert.log日志进行检查和分析,对诸如ORA-00600、ORA-7445等内部错误信息及时进行分析,并采取相应的解决措施。 |
| 严格控制对系统日志的访问,只有工作需要并通过审批的岗位人员才能查看系统日志。 |
在Oracle系统中,只有DBA组的用户,才能查看Oracle数据库、ASM和Listener日志文件,只有root用户才能查看CRS日志信息。因此,建议严格控制DBA组和root用户使用范围,从而达到对Oracle系统日志的访问控制需求。 |
| 设置日志服务器,方便日志的维护和统一管理 |
建议部署集中的日志服务器,并编写相关应用和脚本,定期将各服务器的日志传输和备份到该日志服务器中,实现日志的统一维护和管理。 |
| 及时将日志备份到日志服务器或安全介质内。 |
建议部署集中的日志服务器,并编写相关应用和脚本,定期将各服务器的日志传输和备份到该日志服务器中,并转储到磁带库等介质中,实现日志的统一维护和管理。 |
| 保证重要系统时钟时间保持同步。 |
保证重要系统时钟时间保持同步,不仅是日志管理方面需要,也是Oracle RAC系统的实施需要。建议部署集中的NTP时钟服务器,保证重要系统的时钟同步。 |
根据上述对该银行客户数据库安全性的需求分析,可总结如下特点:
- 可通过Oracle常规安全性技术,满足大部分安全性需求。
- 部分安全性需求需要通过Oracle 安全性高级技术和产品加以实现。例如数据库内部敏感数据加密、备份数据加密、网络传输加密等需求可通过Oracle Advanced Security,Secure Backup、Data pump加密等技术实现;访问控制需求可通过Oracle Database Vault等新技术加强实现;高级审计需求可通过集中审计平台(Oracle Audit Vault)加以实现。
- 尚未提出数据屏蔽(Data Masking)、记录级访问控制(VPD、Oracle Label Security)、配置管理(Configuration Vault)、历史数据审计分析(Total Recall)等需求。
安全性需求需要通过安全管理制度和流程控制的改造和加强,加以保障。
从安全性评估开始
如前所述,IT系统安全性是涉及硬件、网络、操作系统、数据库软件、中间件软件、应用软件等各层面的系统工程。Oracle数据库安全性也是包括数据库防火墙、安全监控层、访问控制层和数据存储层面等诸多产品和技术。限于篇幅,本书无意介绍具体安全性产品和技术,也避免产品推广之嫌。另外,作为安全性系统工程,应先对现有系统数据库安全性展开评估,发现现有系统存在的各种安全风险和漏洞,然后再展开相对应的安全性加固工作。因此,本章下面将通过以一个银行系统为对象,展开安全性评估的介绍。
安全性评估内容
我们在参考了Oracle官方若干安全性评估文档、国内外若干行业的安全性评估标准、Oracle服务部门在国内若干实施案例,以及结合该银行系统特点,最终提出了如下的安全评估性分类和具体评估项目:
| 类别 |
评估项目 |
评估子项 |
| |
|
|
| 数据库安装及配置安全性评估分析 |
缺省安全设置评估 |
|
| 数据字典保护评估 |
|
| 缺省表空间为系统表空间评估 |
|
| UNLIMITED表空间检查 |
|
| 数据库软件版本显示评估 – 11g |
|
| 版本和安全补丁检查 |
|
| 用户帐号安全性评估分析 |
缺省帐号保护评估 |
|
| 缺省口令检查 |
|
| 口令管理策略评估 |
|
| 口令复杂度评估 |
|
| 外部口令实施评估 |
|
| 用户权限安全性评估分析 |
权限及角色评估 |
|
| 系统权限评估 |
|
| 对象权限评估 |
|
| SYSDBA角色访问控制检查 |
|
| Nologging表检查 |
|
| 用户资源管理检查 |
|
| 文件访问安全检查 |
|
| 相关参数检查 |
|
| 数据库网络传输安全性评估分析 |
网络连接安全性检查 |
动态管理Listener检查 |
| Listener配置SSL检查 |
| Listener配置口令检查 |
| 限制IP地址检查 |
| 连接超时检查 |
| 网络传输加密检查 |
|
| 操作系统认证检查 |
|
| 相关参数检查 |
|
| 数据加密和访问控制评估分析 |
透明数据加密实施检查 |
|
| 文件级加密检查 |
|
| 应用级加密检查 |
|
| 常规访问控制检查 |
|
| 虚拟私有数据库(VPD)实施检查 |
|
| 标签安全数据库(Label Security)实施检查 |
|
| 数据屏蔽实施检查 |
|
| Oracle Database Vault实施检查 |
|
| 数据库审计评估分析 |
标准审计评估 |
|
| FGA审计信息评估 |
|
| 集中审计评估 |
|
| 相关参数检查 |
|
评估方法和举例
该系统的详细评估报告长达近百页,以下我们从每个评估大类中挑选1个评估项目的详细内容,
以舐读者,也让读者了解我们的评估过程,包括评估目的和内容、评估方法、评估结果、安全加固建议等。
10g 数据库在安装完成之后,在初始化参数和Profile参数方面将进行一些缺省的安全设置。通常情况下,应保持这些设置。
这些初始化参数和Profile参数包括:
| 参数名 |
缺省值 |
参数类型 |
| |
|
|
| AUDIT_TRAIL |
NONE |
初始化参数 |
| O7_DICTIONARY_ACCESSIBILITY |
FALSE |
初始化参数 |
| PASSWORD_GRACE_TIME |
UNLIMITED |
Profile参数 |
| PASSWORD_LOCK_TIME |
UNLIMITED |
Profile参数 |
| FAILED_LOGIN_ATTEMPTS |
10 |
Profile参数 |
| PASSWORD_LIFE_TIME |
UNLIMITED |
Profile参数 |
| PASSWORD_REUSE_MAX |
UNLIMITED |
Profile参数 |
| PASSWORD_REUSE_TIME |
UNLIMITED |
Profile参数 |
| REMOTE_OS_ROLES |
FALSE |
初始化参数 |
针对初始化参数检测方法如下:
SQL> show parameter;
NAME TYPE VALUE
------------------------------------ ---------------------- ----------------------
…
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
audit_trail string NONE
remote_os_roles boolean FALSE
…
上述初始化参数符合缺省安全设置。
针对Profile参数检测方法如下:
SQL> select * from dba_profiles;
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
-------------------- ---------------------------------------------------------------- ---------------- ----------DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED
PROFILE_NEW COMPOSITE_LIMIT KERNEL DEFAULT
PROFILE_NEW SESSIONS_PER_USER KERNEL DEFAULT
PROFILE_NEW CPU_PER_SESSION KERNEL DEFAULT
PROFILE_NEW CPU_PER_CALL KERNEL DEFAULT
PROFILE_NEW LOGICAL_READS_PER_SESSION KERNEL DEFAULT
PROFILE_NEW LOGICAL_READS_PER_CALL KERNEL DEFAULT
PROFILE_NEW IDLE_TIME KERNEL DEFAULT
PROFILE_NEW CONNECT_TIME KERNEL DEFAULT
PROFILE_NEW PRIVATE_SGA KERNEL DEFAULT
PROFILE_NEW FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED
PROFILE_NEW PASSWORD_LIFE_TIME PASSWORD DEFAULT
PROFILE_NEW PASSWORD_REUSE_TIME PASSWORD DEFAULT
PROFILE_NEW PASSWORD_REUSE_MAX PASSWORD DEFAULT
PROFILE_NEW PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
PROFILE_NEW PASSWORD_LOCK_TIME PASSWORD DEFAULT
PROFILE_NEW PASSWORD_GRACE_TIME PASSWORD DEFAULT
SQL> select username,profile from dba_users;
USERNAME PROFILE
------------------------------------------------------------ --------------------
PROPS DEFAULT
MONITOR PROFILE_NEW
EXPUSER PROFILE_NEW
BOCRPT PROFILE_NEW
PERFSTAT DEFAULT
ORACLE_OCM DEFAULT
DIP DEFAULT
TSMSYS DEFAULT
DBSNMP DEFAULT
WMSYS DEFAULT
SYSTEM DEFAULT
OUTLN DEFAULT
BOCNET PROFILE_NEW
SYS DEFAULT
可见,该系统的MONITOR、EXPUSER、BOCRPT、BOCNET等用户采用的PROFILE为PROFILE_NEW,而PROFILE_NEW的FAILED_LOGIN_ATTEMPTS设置为UNLIMITED,不符合缺省安全设置。
建议执行如下命令,将PROFILE_NEW的FAILED_LOGIN_ATTEMPTS设置为缺省值10:
SQL> alter profile PROFILE_NEW limit FAILED_LOGIN_ATTEMPTS 10;
上述加固建议将使得客户尝试登录的错误次数上限为10,加强防范恶意用户攻击能力。
该安全加固措施实施难度小,不会产生其它风险。
按照安全规范,用户的口令设置必须符合相关复杂性管理的相关规定。例如:
- 口令不能等同于用户名
- 长度必须为8 – 30位
- 必须包含数据、字母,以及_、$、#等特殊字符
- 必须使用大小写字母(11g)
- 不得包含有意义的单词
- 评估方法
可进行如下检查:
SQL> select * from dba_profiles where resource_name='PASSWORD_VERIFY_FUNCTION';
如果为空或DEFAULT VALUE,则系统没有设置口令复杂度检查。
上述语句检查结果如下:
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
-------------------- ---------------------------------------------------------------- ---------------- ----------DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
PROFILE_NEW PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
可见,DEFAULT和PROFILE_NEW均没有进行口令复杂度检查。
Oracle已经提供了一个脚本utlpwdmg.sql,通过运行该脚本将创建口令复杂度检查函数verify_function,并为DEFAULT profile赋予该口令复杂度检查函数。
SQL> @?/rdbms/admin/utlpwdmg.sql;
SQL> select * from dba_profiles where resource_name='PASSWORD_VERIFY_FUNCTION';
可修改该脚本,为PROFILE_NEW设置口令复杂度检查。
对管理用户如SYS/SYSTEM的口令管理实施难度很小。但是,口令管理各参数涉及业务和按管理需求,另外,该系统各应用程序中直接写入了口令,因此,加强口令管理的难度较大。
根据安全管理规范,一方面可限制SYSDBA角色从远程登录,另一方面在本地以’/as sysdba’登录时,需要输入口令。
为实现上述目标,可将sqlnet.ora文件中的SQLNET.AUTHENTICATION_SERVICES设置为NONE。
检查sqlnet.ora文件中的SQLNET.AUTHENTICATION_SERVICES。
以下是该系统的sqlnet.ora文件内容:
# sqlnet.ora.netdb1 Network Configuration File: /oracle/app/oracle/product/10.2.0/db/network/admin/sqlnet.ora.netdb1
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES)
可见,该系统目前没有进行SYSDBA角色访问控制。
加固实施建议
可在sqlnet.ora文件进行如下配置:
SQLNET.AUTHENTICATION_SERVICES = (none)
该安全加固措施难度很小,并可以限制未获得密码的人员不能以SYSDBA身份登录数据库,但可能会对数据库日常管理造成一定影响。
Oracle可在sqlnet.ora文件中,对tcp.validnode_checking、tcp.excluded_nodes、tcp.invited_nodes等参数进行设置,从而达到指定或限制IP地址访问数据库的目的。
检查sqlnet.ora文件是否包含类似如下的配置:
tcp.validnode_checking = YES
tcp.excluded_nodes = {list of IP addresses}
tcp.invited_nodes = {list of IP addresses}
其中tcp.validnode_checking = Yes将打开IP地址检查功能,tcp.excluded_nodes为禁止访问数据库的IP地址列表,tcp.invited_nodes为允许访问数据库的IP地址列表。
以下是该系统的sqlnet.ora文件内容:
# sqlnet.ora.netdb1 Network Configuration File: /oracle/app/oracle/product/10.2.0/db/network/admin/sqlnet.ora.netdb1
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES)
可见,该系统目前没有进行IP访问地址的限制。
如果根据网络管理规范,需要加强访问数据库的网络连接安全,可直接在sqlnet.ora文件中手工增加上述配置。例如只允许指定WAS服务器、管理监控终端等访问数据库。
但需要重新启动Listener,应用也需要重新连接Oracle数据库服务器。
为加强数据本身存储的安全性,Oracle提供了多种透明加密技术(Transparent Data Encryption),并可在表、字段、表空间(11g)等不同级别进行加密处理。对帐户信息、信用卡号等敏感和关键字段进行加密,将有效提高数据安全性,并满足日益增加的安全性和合规性要求。
执行如下脚本可查询当前数据库已经进行加密处理的字段:
SQL> select * from DBA_ENCRYPTED_COLUMNS;
在11g中,执行如下脚本可查询当前数据库已经进行加密处理的表:
SQL> select * from V$ENCRYPTED_TABLESPACES;
检查结果如下:
SQL> select * from DBA_ENCRYPTED_COLUMNS;
no rows selected
即该系统目前没有采取Oracle的数据透明加密技术。
为了提高数据安全性,特别是实现对关键而敏感数据的存储加密,建议尽快制定完备的数据存储加密实施计划。
为实现Oracle数据存储加密,需要采购Oracle Advanced Security选项,同时对数据库性能、存储空间略有影响。而且加密技术实施涉及安全需求分析,方案设计、测试和上线等工作,因此工作量和难度均较大。
审计的主要功能是实现操作留痕,以此来发现系统可能存在的安全漏洞,辅助管理员及时修补,防止系统未来继续受到类似侵害。标准审计包含以下几种类型:
- 语句审计:对一类特定数据库结构或对象执行的一组相关语句进行审计,而不针对某个数据库结构或对象,其包含对DDL和DML两类语句的审计;语句审计面向所有数据库用户或某些特定用户的操作。
- 权限审计:审计使用了系统权限的语句,只有当用户执行的语句使用了系统权限,才会被审计;权限审计面向所有数据库用户或某些特定用户的操作。
- 对象审计:审计所有具有对象权限执行的相关SELECT和DML语句,控制这些对象权限的GRANT和REVOKE语句也会被审计;引用TABLE、VIEW、SEQUENCE、独立的Procedure、Function和Package等语句可以被审计;而引用CLUSTER、INDEX、DB LINK 、SYNONYM的语句无法被直接审计,但可以审计对应的基表。对象审计只面向所有数据库用户。
- 网络审计:可以揭示一些非连接错误的原因,例如加密配置的错误。
- 管理用户审计:审计以SYSDBA/SYSOPER身份连接数据库的用户。
标准审计提供的功能可以粗粒度地、在数据库对象一级审计所有数据库用户或特定用户执行的语句。为正常操作、可疑操作提供了统计、追逐手段。
查看初始化参数和相关视图确认当前的标准审计配置情况。例如:
SQL> show parameter audit
SQL> select count(*) from sys.aud$;
SQL> select * from ALL_DEF_AUDIT_OPTS;
SQL> select * from DBA_STMT_AUDIT_OPTS
SQL> select * from DBA_PRIV_AUDIT_OPTS;
SQL> select * from DBA_OBJ_AUDIT_OPTS;
SQL> select * from DBA_AUDIT_TRAIL;
SQL> select * from DBA_AUDIT_OBJECT;
SQL> select * from DBA_AUDIT_SESSION;
SQL> select * from DBA_AUDIT_STATEMENT;
SQL> select * from DBA_AUDIT_EXISTS;
检查结果如下:
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
audit_file_dest string /oracle/app/oracle/admin/oraDB
/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
SQL> select count(*) from sys.aud$;
COUNT(*)
----------
0
select * from ALL_DEF_AUDIT_OPTS;
select * from DBA_STMT_AUDIT_OPTS;
select * from DBA_PRIV_AUDIT_OPTS;
select * from DBA_OBJ_AUDIT_OPTS;
select * from DBA_AUDIT_TRAIL;
select * from DBA_AUDIT_OBJECT;
select * from DBA_AUDIT_SESSION;
select * from DBA_AUDIT_STATEMENT;
select * from DBA_AUDIT_EXISTS;
select * from DBA_AUDIT_POLICIES;
select * from DBA_FGA_AUDIT_TRAIL;
All no rows selected
可见,该系统目前没有进行任何标准审计操作。
建议针对不同的数据访问监控需求,合理使用标准审计技术。
审计操作涉及审计需求分析,方案设计、测试和上线工作,工作量和难度较大。
安全性评估总结
以下是针对该系统所发现安全性问题的汇总:
| 评估类别 |
评估项 |
问题描述 |
影响程度 |
解决方式建议 |
难度及风险 |
备注 |
| |
|
|
|
|
|
|
| 数据库安装及配置 |
缺省安全设置 |
PROFILE_NEW的FAILED_LOGIN_ATTEMPTS设置为UNLIMITED |
小 |
将PROFILE_NEW的FAILED_LOGIN_ATTEMPTS设置为缺省值10 |
小,无风险 |
|
| UNLIMITED表空间检查 |
BOCNET、BOCRPT具有UNLIMITED TABLESPACE权限 |
中 |
将不需要UNLIMITED TABLESPACE权限的用户,在指定表空间设置quota |
中等难度和风险 |
|
| 应用级用户对SYSTEM和SYSAUX表空间没有将使用限额设置为0 |
小 |
将应用级用户对SYSTEM和SYSAUX表空间的使用限额设置为0 |
小,无风险 |
|
| 版本和安全补丁检查 |
10.2.0.4版本旧,而且没有实施PSU补丁和CPU补丁 |
高 |
升级到10.2.0.5,以及相应的PSU补丁和小补丁 |
大,有一定风险 |
参照版本和补丁分析报告 |
| 用户帐号安全性 |
缺省帐号保护评估 |
SYSTEM用户状态为LOCKED(TIMED),无法访问SYSTEM用户 |
小 |
将 SYSTEM用户恢复为OPEN状态 |
小,无风险 |
|
| 缺省口令检查 |
处于OPEN状态的PERSTAT为缺省口令 |
小 |
修改缺省口令
删除PERFSTAT用户 |
小,无风险 |
|
| 口令管理策略评估 |
口令管理没有严格的安全限制 |
高 |
根据安全管理需要,设置不同的口令管理参数 |
大,有一定风险 |
需要采购Oracle Advanced Security产品 |
| 口令复杂度评估 |
没有设置口令复杂度检查 |
高 |
运行Oracle提供的utlpwdmg.sql |
大,有一定风险 |
涉及应用程序的改造 |
| 外部口令实施评估 |
没有使用外部口令 |
高 |
通过Oracle高级安全产品,实施外部口令管理 |
大,有一定风险 |
需要采购Oracle Advanced Security产品 |
| 用户权限安全性 |
权限及角色评估 |
角色激活无口令认证 |
小 |
为角色激活增加口令认证 |
大,有一定风险 |
重建角色,并重新为用户分配角色 |
| |
BOCNET、BOCRPT帐号被赋予了DBA角色 |
小 |
确认是否可以收回 |
小,有一定风险 |
|
| 系统权限评估 |
BOCNET、BOCRPT具有UNLIMITED TABLESPACE权限 |
中 |
将不需要UNLIMITED TABLESPACE权限的用户,在指定表空间设置quota |
中等难度和风险 |
|
| SYSDBA角色访问控制 |
没有进行SYSDBA角色访问控制 |
中 |
sqlnet.ora文件进行如下配置:
SQLNET.AUTHENTICATION_SERVICES = (none) |
小,无风险 |
|
| Nologging表检查 |
存在大量设置为nologging方式的表 |
中 |
与应用开发团队确认这些nologging表 |
大,有一定风险 |
|
| 用户资源管理检查 |
没有实施用户资源管理技术 |
中 |
根据不同用户级别资源管理需求,实施资源管理技术 |
大,有一定风险 |
|
| 数据库网络传输安全性 |
网络连接安全性检查 |
没有进行SSL配置 |
中 |
实施SSL配置 |
大,有一定风险 |
需要采购Oracle Advanced Security产品 |
| 没有进行IP访问地址的限制 |
中 |
实施IP访问地址的限制,例如只允许指定WAS服务器、管理监控终端等访问数据库。 |
小,有一定风险 |
重新启动Listener,应用也需要重新连接 |
| 没有进行连接超时检查 |
小 |
实施连接超时检查 |
小,有一定风险 |
重新启动Listener,应用也需要重新连接 |
| 网络传输加密检查 |
服务器与客户端之间传递数据采用明文方式 |
高 |
Net8通讯等实施SSL加密传输 |
大,有一定风险 |
需要采购Oracle Advanced Security产品 |
| 数据加密和访问控制 |
透明数据加密 |
没有实施Oracle的数据透明加密技术 |
高 |
实施Oracle的数据透明加密技术 |
大,有一定风险 |
需要采购Oracle Advanced Security产品 |
| 文件级加密 |
没有采用Secure Backup技术 |
中 |
实施Secure Backup技术 |
大,有一定风险 |
需要采购Oracle Advanced Security产品 |
| Data Pump没有采用加密口令技术 |
中 |
实施Data Pump加密口令技术 |
大,有一定风险 |
需要采购Oracle Advanced Security产品 |
| 应用级加密检查 |
采用应用级数据加密技术 |
中 |
为实现对数据存储更灵活的加密,建议考虑应用级数据加密技术的实施 |
大,有一定风险 |
需要采购Oracle Advanced Security产品 |
| 常规访问控制检查 |
BOCNET、BOCRPT等普通用户对保存在SYS用户中的REPORT_DIR、EXPDP_DIR等表有访问权限 |
小 |
与该系统应用团队沟通,如果不合理,建议改进。 |
中,风险待估 |
|
| |
Recyclbin没有进行定期删除 |
小 |
DBA定期进行Recyclbin清理 |
小,有一定风险 |
|
| |
普通用户对其他普通用户对象的访问权限较多 |
小 |
如无访问必要,建议收回 |
大,有一定风险 |
与应用紧密相关 |
| 虚拟私有数据库(VPD)实施检查 |
目前没有采用VPD技术 |
中 |
实施VPD技术 |
大,有一定风险 |
|
| 标签安全数据库(Label Security)实施检查 |
没有采用Label Security技术 |
中 |
实施Label Security技术 |
大,有一定风险 |
该产品为Oracle安全产品选项 |
| 数据屏蔽实施检查 |
没有实施Data Masking产品 |
中 |
实施Data Masking产品 |
大,有一定风险 |
该产品为Oracle安全产品选项 |
| Oracle Database Vault实施检查 |
没有实施Oracle Database Vault产品 |
中 |
实施Oracle Database Vault产品 |
大,有一定风险 |
该产品为Oracle安全产品选项 |
| 数据库审计 |
标准审计评估 |
没有进行任何标准审计操作 |
中 |
针对不同的数据访问监控需求,合理使用标准审计技术 |
大,有一定风险 |
|
| FGA审计信息评估 |
没有实施FGA审计操作 |
中 |
针对不同的数据访问监控需求,合理使用FGA审计技术 |
大,有一定风险 |
|
| 集中审计评估 |
未实施Audit Vault产品 |
中 |
针对不同的数据访问监控需求,合理使用Audit Vault集中审计技术 |
大,有一定风险 |
该产品为Oracle安全产品选项 |
- 安全性评估汇总
- 虽然该系统存在一定的安全性问题,但在总体上,特别是在不涉及Oracle高级安全选项的常规安全性配置方面,并没有特别严重的安全性问题。
- 该系统版本较低,是需要急待改进的问题。
- 该系统目前存在的大部分安全问题的解决,一方面都涉及到Oracle安全性相关高级产品的采购和实施。例如:Oracle Advanced Security、Data Masking、Oracle Database Vault、Oracle Audit Vault等。另一方面与应用紧密相关,需要与应用开发团队全面合作,共同进行加固方案的设计和实施。
- Oracle安全性相关高级产品的实施,都需要进行安全需求分析、方案设计、测试和上线等工作,工作量和难度均较大。
本章参考资料及进一步读物
本章参考资料及进一步读物:
| 序号 |
资料类别 |
资料名称 |
资料概述 |
| |
|
|
|
| 1. |
Oracle 11g R2联机文档 |
《Oracle® Database Security Guide》 |
这是Oracle联机文档中有关数据库安全性的权威文档,涉及数据层、访问控制层、审计层等多个层面的产品和技术。 |
| 2. |
My Oracle Support |
《Security Checklist: 10 Basic Steps to Make Your Database Secure from Attacks (Doc ID 1545816.1)》 |
“10件防止数据库遭受攻击的基本措施”―――― 看标题就很诱人。 |
| 3. |
My Oracle Support |
《Security Vulnerability FAQ for Oracle Database and Fusion Middleware Products (Doc ID 1074055.1)》 |
“Oracle数据库和中间件安全性和易攻击性常见问题解答”――――题目同样诱人。 |
| 4. |
My Oracle Support |
《All About Security: User, Privilege, Role, SYSDBA, O/S Authentication, Audit, Encryption, OLS, Database Vault, Audit Vault (Doc ID 207959.1)》 |
有关用户、权限、角色、审计、加密等多个Oracle数据库安全性产品和技术的资料集结地。 |
| 5. |
My Oracle Support |
《System Change Number (SCN), Headroom, Security and Patch Information (Doc ID 1376995.1)》 |
什么叫SCN?Headroom?该文档给出了官方解释,包括SCN和Headroom概念、工作原理,以及可能遇到的Bug和patch等。 |
| 6. |
My Oracle Support |
《UNIX: Checklist for Resolving Connect AS SYSDBA Issues (Doc ID 69642.1)》 |
当以SYSDBA方式连接数据库时,可能发生ORA-03113、ORA-01031、ORA-01034等多种错误。该文档给出了这些错误的发生原因和解决办法。 |