# 01、等保2.0_Oracle数据库测评

LLMS index: [llms.txt](/wikis/llms.txt)

---

## 一、Oracle介绍
Oracle Database，又名Oracle RDBMS，或简称Oracle。是甲骨文公司的一款关系数据库管理系统。

本次安装环境为Windows10专业版操作系统，数据库版本为11.2.0.1，单机部署过程比较简单就不在此进行讲解。本文针对Oracle 11g等保测评进行实际操作，不妥之处还恳请留言指正，共同学习。



**二、等保测评**

## 身份鉴别
### a) 应对登录的用户进行身份标识和鉴别，身份标识具有唯一性，身份鉴别信息具有复杂度要求并定期更换；
1）登录Oracle检查是否采用用户名和口令登录。  
![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/e34b484a6bacd384f8b6523bdae2a1ae_MD5.png)2）执行命令：

(1)密码有效期：“select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';”

(2)密码失效后锁定时间：“select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_REUSE_TIME';”

(3)失效后保留次数：“select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_REUSE_MAX';”

(4)失效后密码保留时间：“select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_GRACE_TIME';”

(5)复杂度：“select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_VERIFY_FUNCTION';”

查看输出结果：

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/85bbf3cb5a47b7ab855feeb188b0017d_MD5.png)

如果为null表示未设置。

如果不为null,其中：  
PASSWORD_LOGIN_ATTEMPTS =  登录尝试次数；  
PASSWORD_LIFE_TIME = 设置口令有效期；  
PASSWORD_ROUSE_MAX =设置重新启用一个先前用过的口令前必须对该口令进行重新设置的次数（重复用的次数）;  
PASSWORD_VERIFY_FUNCITON =设置口令复杂度校验函数；  
PASSWORD_GRACE_TIME=口令修改的宽限期天数，一般为7天；

备注：

“PASSWORD_VERIFY_FUNCTION”的Profile字段值为Default，某用户要使用Default的相关配置，就要设置DBA_USERS表中的Profile字段值为Default。

“PASSWORD_VERIFY_FUNCTION”表示该函数对口令进行校验，默认值是null，即不使用任何函数对口令进行校验。

3)执行命令：“Select username，account_status from dba_users;”查看用户名信息是否唯一：

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/5219380cb22120a6979ec2e3fef45a17_MD5.png)

  


4）执行命令：“select username, account_status, profile from dba_users where account_status NOT like '%LOCKED';”查看未锁定的所有用户:

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/065208c007bfb93d0cb9481d11f3b5fc_MD5.png)

### b) 应具有登录失败处理功能，应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施；
![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/5fed48d48d5b8b930992a3420ff930c8_MD5.png)

1）执行命令：“select limit from dba_profiles where profile='DEFAULT' and resource_name='FAILED_LOGIN_ATTEMPTS';检查登录失败次数。

2）执行命令：“select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LOCK_TIME';“登录失败锁定时间：

结果为“unlimited”，表示未配置；结果为“1”，重试失败后锁定一天。

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/d191cd939160568d56435a00e3024691_MD5.png)

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/7f64f134651dae9a9123d292cbf6e82c_MD5.png)

3）执行命令：“SELECT LIMIT FROM DBA_PROFILES WHERE PROFILE='DEFAULT' AND RESOURCE_NAME='IDLE_TIME';”查询输出结果。若为’UNLIMITED’则无登录超时限制。

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/fa98eaab51021e90a239a509642c0d25_MD5.png)

若为’UNLIMITED’则无登录超时限制。

4）可在sqlnet.ora配置文件中设置空闲超时时间。  


![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/2a996dc29958df34d435e4ee4c6861c4_MD5.png)

### c) 当进行远程管理时，应采取必要措施防止鉴别信息在网络传输过程中被窃听；
1)是否采用加密等安全方式对系统进行远程管理是否用户都是localhost，全为localhost则为本地管理，可判定为不适用。

2）远程管理根据实际管理情况进行判定（如了解数据库管理工具采用什么措施防止鉴别信息在传输过程中被窃听）。采用sqlplus或PL/SQL连接数据库，对数据库进行管理，客户端与服务器端之间通信是加密的，故Oracle该项符合。

### d) 应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别，且其中一种鉴别技术至少应使用密码技术来实现。
访谈管理员并进行验证，是否采用双因子身份鉴别技术，鉴别技术是什么 。实际实现双因素认证比较困难，一般情况判定为不符合。

## 访问控制  
a) 应对登录的用户分配账户和权限；
执行命令“**Select username，account_status from dba_users；**”或点菜单栏“用户”，查看账户的管理权限：

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/5219380cb22120a6979ec2e3fef45a17_MD5.png)

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/d5bfe2ff0ee3d448a2d8302c93ab737a_MD5.png)

  


### b) 应重命名或删除默认账户，修改默认账户的默认口令
执行命令：**Select username，account_status from dba_users where account_status='OPEN'；查看**账户列表，是否存在默认账户如下：  


![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/67090a20cba233db2b3e7c06ce6dc93e_MD5.png)

### c) 应及时删除或停用多余的、过期的账户，避免共享账户的存在
1）询问管理员数据库中的账户使用情况，是否存在无人使用的账户，如果存在建议删除。  


2)检查网络管理员，安全管理员、系统管理员不同用户是否采用不同账户登录数据库。

### d) 应授予管理用户所需的最小权限，实现管理用户的权限分离
点击菜单栏”用户“查看已启用的账户，查看账户的权限分配情况，账户的管理权限是否不同，是否建立三员。  


![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/d5bfe2ff0ee3d448a2d8302c93ab737a_MD5.png)

### e) 应由授权主体配置访问控制策略，访问控制策略规定主体对客体的访问规则
1）访谈和查看管理员是否制定了访问控制策略

2）查看管理员权限；（此测评点如果Oracle已经启用身份鉴别，且具备权限分离可判定为符合）

### f) 访问控制的粒度应达到主体为用户级或进程级，客体为文件、数据库表级
结合a）、b）、c）、d）、e）项，并访谈管理员并核查访问控制粒度主体是否为用户级，客体是否为数据库表级。

（此测评点多数测评机构默认判定为符合）

### g)应对重要主体和客体设置安全标记，并控制主体对有安全标记信息资源的访问
通过访谈管理员是否对重要主体和客体设置安全标记。Oracle自身应该不具备这个功能，可能需要依赖操作系统或者第三方来实现。该项一般默认都不符合。

## 安全审计
### a) 应启用安全审计功能，审计覆盖到每个用户，对重要的用户行为和重要安全事件进行审计
1）执行命令：select value from v$parameter where name='audit_trail';检查是否开启审计。

2）执行命令："show parameter audit_file_dest;"和“show parameter audit;”和检**查审计数据存储路径。**

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/7069d3b54e3f959fac7d079cfe1c1dcd_MD5.png)

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/aa9d39ea41fb983645ac4ce9c1ac3fdb_MD5.png)

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/74887111add27a0e8d5d12a3d9d29508_MD5.png)

3）访谈管理员是否通过第三方工具（数据库审计系统）收集审计数据进行分析。

### b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息
1）

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/f61343051116d8160226c400e3dd2d88_MD5.png)

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/1378379ededf0d4c86e2902fafc54ceb_MD5.png)

![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/e2cdb344a110b562745bf36d0e76b70d_MD5.png)

  


2)核查是否部署第三方工具（数据库审计系统）增强MySQL日志功能。记录第三方审计工具的审计内容，查看是否包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。

### c) 应对审计记录进行保护，定期备份，避免受到未预期的删除、修改或覆盖等
应保证各个管理员尽可以访问与自身相关的日志文件，如关键日志仅允许特权账户访问

1)访谈管理员对审计记录如何保护，对审计记录是否定期备份，备份策略。

是否采取了备份、转存等手段对审计记录进行保护，避免未预期的删除、修 改或覆盖，数据库本地日志保存时间超过6个月。采用第三方数据库审计产品，审计记录保存时间超过6个月。

2)是否严格限制用户访问审计记录的权限，可以通过普通用户登录然后是否能够访问修改删除日志。

### d) 应对审计进程进行保护，防止未经授权的中断
根据Oracle可以根据权限建立各类型的账户，可以防止审计进程未经授权的终端

##   
入侵防范
### a) 应遵循最小安装的原则，仅安装需要的组件和应用程序
查看数据库是否安装了不必要的组件。

### b) 应关闭不需要的系统服务、默认共享和高危端口
数据库系统此测评项不适用。

### c) 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制
可在sqlnet.ora配置文件中设信任IP地址。  
![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/40030e7276cee9810275f11d74cd15d0_MD5.png)

### d) 应提供数据有效性检验功能，保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求
数据库系统此测评项不适用。

### e) 应能发现可能存在的已知漏洞，并在经过充分测试评估后，及时修补漏洞
01、 访谈管理员是否定期或不定期进行漏洞扫描或渗透测试，周期按照天/月/季度/半年/年等方式（建议漏洞扫描周期最长半年一次）。  
02、通过本次漏洞扫描是否发现与数据库相关的高危漏洞，若存在，是否及时进行漏洞修补。

执行命令：”select banner from sys.v_$version;“检查数据库版本。![](/wikis/_resources/1%E3%80%81%E7%AD%89%E4%BF%9D2.0_Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%84/35157a61269509c14ef8b7350e74a75d_MD5.png)

### f) 应能够检测到对重要节点进行入侵的行为，并在发生严重入侵事件时提供报警
数据库系统此测评项不适用。

## 恶意代码防范
### a）应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为，并将其有效阻断
数据库系统此测评项不适用。

## 可信验证
### a）可基于可信根对计算设备的系统引导程序、 系统程序、重要配置参数和应用程序等进行可信验证，并在应用程序的关键执行环节进行动态可信验证，在检测到其可信性受到破坏后进行报警，并将验证结果形成审计记录送至安全管理中心
通过访谈管理员，是否采取了可信技术，可信技术主要是基于可信芯片、可信根，目前实现此技术的可能性不大，一般判定为不符合。

##   
数据完整性
### a)应采用密码技术保证重要数据在传输过程中的完整性，包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等；
传输过程中的完整性一般是通过通信协议来实现的，常见的包括TLS、SSH等协议，对数据库而言，查看是否启用了安全协议进行数据通信，同时询问管理员，确认是否还有其他保证数据传输过程中的完整性措施。

（本地管理判定为不适用，远程管理根据实际情况判定）  


### b)应采用密码技术保证重要数据在存储过程中的完整性，包括但不限于鉴别数据、重要业务数据和重要个人信息等。
对数据库配置文件进行一个完整性检测，需要配置文件初始可信状态时的哈希值，然后再根据目前的文件生成一个哈希值，对比前后的一致性，确认数据是否被篡改过，根据了解一般数据库自身不带这种机制，询问管理人员是否使用了第三方软件对数据库重要数据进行了完整性校验。

实际操作中可核查数据库表中的业务数据、审计数据有无存在哈希字段，据了解数据在前端一般通过json或xml格式进行传输，相关数据库表字段中具有完整性校验字段。目前一般做不到，判定为不符合。

## 数据保密性
### a)应采用密码技术保证重要数据在传输过程中的保密性，包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等；
若password是以明文密码传送给数据库，建议不在生产环境中使用。若数据库未开启SSL时，我通过Wireshare对数据库认证过程的数据包进行抓取，可能发现传输的密码字段信息。

总结，最直接验证的办法就是抓包验证重要的加密数据（鉴别数据、需要加密的业务数据、个人信息等）是否明文传输。  


### b)应采用密码技术保证重要数据在存储过程中的保密性，包括但不限于鉴别数据、重要业务数据和重要个人信息等。
检查数据库表中的重要数据是否明文存储，根据经验除鉴别数据外，业务数据、审计数据实际很少加密存储，所以一般不符合或者部分符合。如果使用数据库加密功能，就可以符合符合，数据库加密主要分库内加密和库外加密，库内加密主要是调用的数据库本身的加密功能，库外加密主要通过第三方厂家的数据库加密功能。

此处主要针对鉴别信息（其他像业务数据、审计数据和配置数据一般情况未加密）传输相关的参数大致有下类三个：

SCRAM-SHA-256属于挑战-响应架构， 可防止密码在不可信连接上嗅探，并支持以密码散列的形式将密码存储在服务器上， 这种形式被认为是安全的。

MD5使用自定义安全性较低的质询-响应机制。 它可以防止密码嗅探，并避免以纯文本形式将密码存储在服务器上， 但如果攻击者设法从服务器窃取密码哈希，则不提供保护。（MD5哈希算法现在不再被认为是安全的算法）

据了解，Oracle数据库加密方式有两种，其中a)加密 API 例如包和 dbms_crypto （在 Oracle 数据库 10g 第 1 版和更高版本中）。使用这些包，我们可以构建我们自己的基础架构，对数据进行加密。这种方法的灵活性最强，但是构建和管理却相当复杂。DBMS_CRYPTO支持DES加密、双密钥的3DES以及三密钥的3DES加密，采用三个不同大小的AES和RC4加密算法。

b)透明的数据加密是 Oracle 数据库 10g 第 2 版和更高版本的一个特性；使用该特性后，我们就不必手动进行密码管理了。数据库管理密码，但是正如名称所指，加密是透明的——数据仅仅以加密的方式存储而已。当我们选择了这种方式，扩展性比较差。

## 数据备份恢复
### a)应提供重要数据的本地数据备份与恢复功能；
1）访问管理员配置数据、审计数据、业务数据的备份策略，检查备份策略的备份情况与管理员所说是否一致，是否具有恢复测试记录。

2）可以通过数据库管理工具进行备份，如navicat等工具，工具具备Oracle自带的逻辑备份。它的备份原理是通过协议连接到Oracle数据库，将需要备份的数据查询出来。

### b)应提供异地实时备份功能，利用通信网络将重要数据实时备份至备份场地；
部署异地备份机房，并符合备份策略通过网络定期进行异地备份。

### c)应提供重要数据处理系统的热冗余，保证系统的高可用性；
集群部署、双机热备均可判定为符合。

## 剩余信息保护
### a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除；
一般情况下数据库系统内核层默认无法实现剩余信息保护功能，需要第三方工具才能实现。

### b)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。
一般情况下数据库系统内核层默认无法实现剩余信息保护功能，需要第三方工具才能实现。

## 个人信息保护
### a)应仅采集和保存业务必需的用户个人信息；
检查数据库中是否存储个人信息，若有，检查个人信息保护机制和个人信息保护管理制度

### b)应禁止未授权访问和非法使用用户个人信息。
检查个人信息保护机制和个人信息保护管理制度，验证非授权人员是否可以访问个人信息存储的相关组件内容。
