本文主要是介绍Oracle LiveLabs实验:DB Security - Unified Auditing,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
概述
此实验申请地址在这里,时间为2小时。
实验帮助在这里。
本实验使用的数据库为19.13。
Introduction
本研讨会介绍 Oracle Unified Auditing 的功能。 它使用户有机会学习如何配置此功能以审计数据库活动。
混合模式审计是新安装的数据库中的默认审计。 混合模式审计支持传统审计工具(即来自早于 12c 版本的审计工具)和新审计工具(统一审计)。
混合模式旨在引入统一审计,以便您了解它的工作原理以及它的细微差别和好处。 混合模式使您能够迁移现有应用程序和脚本以使用统一审计。 一旦您决定使用纯统一审计,您可以重新链接 Oracle 二进制文件并打开统一审计选项,从而将其作为 Oracle 数据库运行的唯一审计工具。 如果您决定恢复到混合模式,您也可以。
在这个环境下,我们已经把这个Oracle数据库迁移到了纯统一审计模式。
目标
- 在您的数据库上启用/禁用统一审计
- 查看不同的审计用例
Task 1: Display the current audit settings
以下显示的是PDB1中的信息:
sudo su - oracle
cd $DBSEC_LABS/unified-auditing
./ua_current_audit_settings.sh
这个脚本的执行结果如下,实际包括4部分:
-- 这意味着我们的数据库处于“纯”统一审计模式,您不再使用传统的审计能力
select parameter, value from v$option where PARAMETER = 'Unified Auditing';
PARAMETER VALUE
-------------------------------------------------- ----------------------------------------
Unified Auditing TRUE-- 第二个查询显示存在多少统一审计策略以及与每个策略关联的审计相关属性的数量
select policy_name, count(*) audited_attributes from audit_unified_policies group by policy_name order by policy_name;POLICY_NAME AUDITED_ATTRIBUTES
---------------------------------------- ------------------
APP_USER_NOT_APP_SERVER 1
EMPSEARCH_SELECT_USAGE_BY_PETE 1
ORA_ACCOUNT_MGMT 9
ORA_ADS$_ADMIN_USER_ACTIVITY 1
ORA_ADS$_CRITICAL_DB_ACTIVITY 50
ORA_ADS$_DB_SCHEMA_CHANGES 84
ORA_ADS$_LOGON_EVENTS 2
ORA_ADS$_LOGON_FAILURES 2
ORA_ADS$_SYS_TOP_ACTIVITY 1
ORA_AV$_ADMIN_USER_ACTIVITY 1
ORA_AV$_CRITICAL_DB_ACTIVITY 49
ORA_AV$_DB_SCHEMA_CHANGES 84
ORA_AV$_SYS_TOP_ACTIVITY 1
ORA_CIS_RECOMMENDATIONS 35
ORA_DATABASE_PARAMETER 3
ORA_DV_AUDPOL 2180
ORA_DV_AUDPOL2 19
ORA_LOGON_FAILURES 1
ORA_RAS_POLICY_MGMT 35
ORA_RAS_SESSION_MGMT 14
ORA_SECURECONFIG 49
PRIVILEGED_ACTIONS 122 rows selected.-- 显示启用了哪些统一审计策略,也就是说上一个查询中存在该策略并不意味着它已启用
-- 使用统一审计策略分为两步:创建和启用审计策略
-- 注意:其中有一些重复的,所以行数才会比上一个多
-- 如果查distinct,输出和上一个是一样的。这表示创建的均启用了select POLICY_NAME as ENABLED_POLICIES from AUDIT_UNIFIED_ENABLED_POLICIES order by 1;ENABLED_POLICIES
----------------------------------------
APP_USER_NOT_APP_SERVER
EMPSEARCH_SELECT_USAGE_BY_PETE
ORA_ACCOUNT_MGMT
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_ADMIN_USER_ACTIVITY
ORA_ADS$_CRITICAL_DB_ACTIVITY
ORA_ADS$_DB_SCHEMA_CHANGES
ORA_ADS$_LOGON_EVENTS
ORA_ADS$_LOGON_FAILURES
ORA_ADS$_SYS_TOP_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_ADMIN_USER_ACTIVITY
ORA_AV$_CRITICAL_DB_ACTIVITY
ORA_AV$_DB_SCHEMA_CHANGES
ORA_AV$_SYS_TOP_ACTIVITY
ORA_CIS_RECOMMENDATIONS
ORA_DATABASE_PARAMETER
ORA_DV_AUDPOL
ORA_DV_AUDPOL2
ORA_LOGON_FAILURES
ORA_RAS_POLICY_MGMT
ORA_RAS_SESSION_MGMT
ORA_SECURECONFIG
PRIVILEGED_ACTIONS40 rows selected.-- 第 4 个查询显示基于上下文的审计
-- 我们有一个名为 TICKETINFO 的策略,它捕获名为 TICKET_ID 的属性
-- 此信息将在 UNIFIED_AUDIT_TRAIL 视图的 APPLICATION_CONTEXTS 列中查看
select NAMESPACE, ATTRIBUTE, USER_NAME from AUDIT_UNIFIED_CONTEXTS order by 1,2,3;NAMESPACE ATTRIBUTE USER_NAME
----------------------------------- ----------------------------------- -------------------------
TICKETINFO TICKET_ID ALL USERS
显示谁具有 AUDIT_ADMIN 和 AUDIT_VIEWER 角色:
$ ./ua_who_audit_roles.sh
实际执行和输出如下:
select b.name con_name, a.grantee, a.granted_role, a.admin_option, a.delegate_option, a.default_role, a.common, a.inheritedfrom cdb_role_privs a, v\$containers b where a.con_id = b.con_idand a.granted_role in ('AUDIT_ADMIN','AUDIT_VIEWER')order by 1,2,3;CON_NAME GRANTEE GRANTED_ROLE ADMIN_OPTION DELEGATE_OPTION DEFAULT_ROLE COMMON INHERITED
------------ ------------------------- ------------------- ------------ ---------------- -------------- --------- ---------
CDB$ROOT C##ZEUS AUDIT_ADMIN NO NO YES YES NO
CDB$ROOT C##ZEUS AUDIT_VIEWER NO NO YES YES NO
CDB$ROOT SYS AUDIT_ADMIN YES NO YES YES NO
CDB$ROOT SYS AUDIT_VIEWER YES NO YES YES NO
PDB1 AVAUDITUSER AUDIT_ADMIN NO NO YES NO NO
PDB1 AVAUDITUSER AUDIT_VIEWER NO NO YES NO NO
PDB1 C##ZEUS AUDIT_ADMIN NO NO YES YES YES
PDB1 C##ZEUS AUDIT_VIEWER NO NO YES YES YES
PDB1 DBSAT_ADMIN AUDIT_VIEWER NO NO YES NO NO
PDB1 ORA_DSCS_ASSESSMENT AUDIT_VIEWER NO NO YES NO NO
PDB1 ORA_DSCS_AUDIT_COLLECTION AUDIT_VIEWER NO NO YES NO NO
PDB1 ORA_DSCS_AUDIT_SETTING AUDIT_ADMIN NO NO YES NO NO
PDB1 SYS AUDIT_ADMIN YES NO YES YES YES
PDB1 SYS AUDIT_VIEWER YES NO YES YES YES
PDB2 AVAUDITUSER AUDIT_ADMIN NO NO YES NO NO
PDB2 AVAUDITUSER AUDIT_VIEWER NO NO YES NO NO
PDB2 C##ZEUS AUDIT_ADMIN NO NO YES YES YES
PDB2 C##ZEUS AUDIT_VIEWER NO NO YES YES YES
PDB2 SYS AUDIT_ADMIN YES NO YES YES YES
PDB2 SYS AUDIT_VIEWER YES NO YES YES YES20 rows selected.
显示您连接到的数据库的现有审计记录(PDB1):
$ ./ua_query_existing_audit_records.sh-- View Audit Data for pdb1-- 审计时间段
-- select min(event_timestamp) oldest_audit_record, max(event_timestamp) newest_audit_record from unified_audit_trail;
OLDEST_AUDIT_RECORD NEWEST_AUDIT_RECORD
---------------------------------------- ----------------------------------------
08-DEC-21 04.46.53.279529 PM 02-APR-22 06.14.35.799402 AM-- 审计记录数
select count(*) total_unified_audit_records from unified_audit_trail;
TOTAL_UNIFIED_AUDIT_RECORDS
---------------------------142-- 审计action分类
select action_name, count(*) from unified_audit_trail group by action_name order by action_name;ACTION_NAME COUNT(*)
---------------------------------------- ----------
ALTER SESSION 1
COMMIT 8
EXECUTE 1
LOGOFF 7
LOGOFF BY CLEANUP 12
LOGON 9
SELECT 1157 rows selected.
最后,展示了 DBMS_AUDIT_MGMT 包的一些细节:
./ua_dbms_audit_mgmt_settings.sh
实际执行和输出如下:
-- 统一审计表是分区表,按季度分区的,目的是能加速查询和写入
select partition_name, tablespace_name, high_value from dba_tab_partitions where table_name = 'AUD\$UNIFIED';
PARTITION_NAME TABLESPACE_NAME HIGH_VALUE
-------------------- -------------------- ------------------------------------------------------------
SYS_P1908 SYSAUX TIMESTAMP' 2022-02-01 00:00:00'
SYS_P1928 SYSAUX TIMESTAMP' 2022-05-01 00:00:00'-- 函数 DBMS_AUDIT_MGMT.GET_AUDIT_COMMIT_DELAY 以秒数形式返回审计提交延迟时间
-- 审计提交延迟时间是将审计记录提交到数据库审计跟踪所需的最长时间
-- 如果提交审计记录的时间比审计提交延迟时间定义的时间长,则审计记录的副本将写入操作系统 (OS) 审计跟踪
select DBMS_AUDIT_MGMT.GET_AUDIT_COMMIT_DELAY from dual;
GET_AUDIT_COMMIT_DELAY
----------------------15-- 第3个查询没有结果,因为 SET_LAST_ARCHIVE_TIMESTAMP 过程仅在只读数据库上可用。-- 为操作系统审核文件配置的最长期限为:5
Task 2: Audit Non App Usage
在本实验中,您将审核谁在应用程序之外使用 EMPLOYEESEARCH_PROD 对象。
确定我们信任的数据库连接。 我们将从 Glassfish 应用程序生成一些活动并查看与会话相关的信息
执行以下代码,在提示时不要回车:
cd $DBSEC_LABS/unified-auditing
./ua_query_employeesearch_usage.sh
上面这个脚本的目的就是捕获v$session
中的输出:
SELECT osuser, machine, module FROM v$session WHERE username = 'EMPLOYEESEARCH_PROD';
在浏览器中通过应用访问数据库:
- 网址: http://<YOUR_DBSEC-LAB_VM_PUBLIC_IP>:8080/hr_prod_pdb1
- http://129.154.203.54:8080/hr_prod_pdb1
- 用户名和口令:hradmin/Oracle123
- 执行操作(更改搜索条件,执行2-3次):Search Employees,Search
回到上一终端,按回车,输出如下:
CON_NAME
------------------------------
PDB1
USER is "SYS". List the session for the user "EMPLOYEESEARCH_PROD"OSUSER MACHINE MODULE
------------------ ------------------------------------------------------- -----------------------------------
oracle dbsec-lab JDBC Thin Client
oracle dbsec-lab JDBC Thin Client
oracle dbsec-lab JDBC Thin Client3 rows selected.
使用SQL Plus产生一些负载,即查询employeesearch_prod.demo_hr_employees表:
./ua_query_employeesearch.sh
创建统一审计策略:
./ua_create_audit_policy.sh
统一审计策略将捕获与您的机器相关的详细信息以创建 WHEN 子句。
在这里,我们基于 SYS_CONTEXT 变量作为标准创建了审计策略 AUDIT_EMPLOYEESEARCH_USAGE:
- SESSION_USER = “EMPLOYEESEARCH_PROD”
- AND OS_USER != “oracle”
- OR MODULE != “JDBC Thin Client”
- 或 HOST!=“dbsec-lab.dbsecvcn.oraclevcn.com”
此审核策略将审核所有尝试从不安全路径(例如,官方 Web 应用程序以外的路径)访问 EMPLOYEESEARCH_PROD.DEMO_HR_USERS 和 EMPLOYEESEARCH_PROD.DEMO_HR_EMPLOYEES 表的会话。
从以上脚本我们学到:
- NOAUDIT POLICY 禁用审计策略
- DROP AUDIT POLICY删除审计策略
- CREATE AUDIT POLICY创建审计策略
- 表AUDIT_UNIFIED_POLICIES存储审计策略
- 策略的名字为:AUDIT_EMPLOYEESEARCH_USAGE
实际的审计策略规则如下:
SYS_CONTEXT('USERENV','SESSION_USER') = 'EMPLOYEESEARCH_PROD'
AND (SYS_CONTEXT('USERENV','OS_USER') != 'oracle'
OR SYS_CONTEXT('USERENV','MODULE') != 'JDBC Thin Client'
OR SYS_CONTEXT('USERENV','HOST') != 'dbsec-lab.dbsecvcn.oraclevcn.com')
启用统一审计策略,使用命令AUDIT POLICY。可查询表AUDIT_UNIFIED_ENABLED_POLICIES中确认:
./ua_enable_audit_policy.sh
运行其他查询以生成流量并查看是否生成了审计记录。首先用浏览器访问,方法同前。
./ua_query_employeesearch_usage.sh
./ua_query_audit_records.sh
由于这是正规的路径,因此此时没有审计记录:
. List the Unified Audit of the Audit policy "AUDIT_EMPLOYEESEARCH_USAGE"no rows selected
然后用SQL Plus执行:
./ua_query_employeesearch.sh
./ua_query_audit_records.sh
这一回有输出了:
. List the Unified Audit of the Audit policy "AUDIT_EMPLOYEESEARCH_USAGE"EVENT_TIMESTAMP OS_USERNAME USERHOST DBUSERNAME CLIENT_PROGRAM_NAME ACTION_NAME
------------------------------- ------------ -------------------- -------------------- --------------------------------- ------------
RETURN_CODE OBJECT_SCHEMA OBJECT_NAME SQL_TEXT
----------- -------------------- -------------------- --------------------------------------------------
05-APR-22 04.07.25.774033 AM oracle dbsec-lab EMPLOYEESEARCH_PROD sqlplus@dbsec-lab (TNS V1-V3) SELECT0 EMPLOYEESEARCH_PROD DEMO_HR_EMPLOYEES select userid, firstname, lastname, emptype,position, ssn, sin, ninofrom emp
最后,删除统一审计策略:
./ua_delete_audit_policy.sh
其过程为:
- NOAUDIT POLICY 禁用审计策略
- DROP AUDIT POLICY删除审计策略
- dbms_audit_mgmt.clean_audit_trail删除审计条目
Task 3: Audit Database Role Usage
审计角色时,Oracle 数据库会审计直接授予该角色的所有系统权限。 您可以审计任何角色,包括用户定义的角色。 如果您使用 ROLES 审计选项为角色创建通用统一审计策略,那么您必须仅在角色列表中指定通用角色(common role)。
启用此类策略后,Oracle 数据库会审计通常直接授予公共角色的所有系统权限。 本地授予普通角色的系统权限不会被审计。 要查找角色是否被普遍授予(commonly granted),请查询 DBA_ROLES 数据字典视图。 要查看授予角色的权限是否被普遍授予,请查询 ROLE_SYS_PRIVS 视图。
首先,创建实例角色MGR_ROLE并赋予权限(后续实际并未用到):
./ua_create_role.sh
创建审计角色MGR_ROLE的策略AUD_ROLE_POL:
./ua_create_role_audit_policy.sh
实际就一个语句:
create audit policy aud_role_pol ROLES mgr_role;
创建用户dba_junior并赋予DBA角色:
./ua_create_junior_dba.sh
创建审计角色DBA的策略AUD_DBA_POL:
./ua_create_dba_audit_policy.sh
实际就一个语句:
create audit policy aud_dba_pol ROLES dba;
启用 MGR_ROLE 和 DBA 角色使用的审计策略(audit policy …):
./ua_enable_audit_policies.sh
查看启用的审计策略(查看AUDIT_UNIFIED_POLICIES和AUDIT_UNIFIED_ENABLED_POLICIES表):
./ua_view_audit_policies.sh
以用户SYS和dba_junior执行将显示在统一审计跟踪中的 SQL 语句:
./ua_generate_audits.sh
操作包括增删表空间,修改系统参数。最后需要Flush Unified Audit Trail:
exec SYS.DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;
显示和审计策略相关的审计条目(即查询表unified_audit_policies):
./ua_review_generated_audits.sh
输出为:
. View Unified Audit dataACTION_NAME DBUSERNAME ACTION_NAME OBJECT_SCH OBJECT_NAME SQL_TEXT
-------------------- ---------- -------------------- ---------- -------------------- --------------------------------------------------------------------------------
ALTER SYSTEM DBA_JUNIOR ALTER SYSTEM alter system set job_queue_processes=100
ALTER SYSTEM DBA_JUNIOR ALTER SYSTEM alter system set job_queue_processes=200
LOGON DBA_JUNIOR LOGON
DROP TABLESPACE SYS DROP TABLESPACE TEST drop tablespace test including contents and datafiles
CREATE TABLESPACE SYS CREATE TABLESPACE TEST create tablespace test datafile '/u01/oradata/cdb1/pdb1/test01.dbf' size 10m
删除审计策略:
./ua_delete_role_audit_policy.sh
实际执行的SQL和输出如下:
. What is auditable for Data Pump
SELECT name FROM auditable_system_actions WHERE component = 'Datapump';NAME
----------------------------------------------------------------
EXPORT
IMPORT
ALL. List the current Audit policies
select * from AUDIT_UNIFIED_ENABLED_POLICIES where POLICY_NAME like '%DP%';POLICY_NAME ENABLED_OPTION ENTITY_NAME ENTITY_ SUC FAI
-------------------- --------------- -------------------- ------- --- ---
ORA_DV_AUDPOL2 BY USER ALL USERS USER YES YES
ORA_DV_AUDPOL BY USER ALL USERS USER YES YES. Create the Audit Policy "DP_POL"
create audit policy DP_POL actions component=datapump all;
Audit policy created.. Enable the Audit policy "DP_POL"
audit policy DP_POL;
Audit succeeded.. List the current Audit policies
select * from AUDIT_UNIFIED_ENABLED_POLICIES where POLICY_NAME like '%DP%';POLICY_NAME ENABLED_OPTION ENTITY_NAME ENTITY_ SUC FAI
-------------------- --------------- -------------------- ------- --- ---
ORA_DV_AUDPOL2 BY USER ALL USERS USER YES YES
ORA_DV_AUDPOL BY USER ALL USERS USER YES YES
DP_POL BY USER ALL USERS USER YES YES
Task 4: Audit Data Pump Usage
在本实验中,您将配置统一审计跟踪并查看 Oracle 数据泵导出的审计。 这是传统审计中没有的统一审计的一个功能。
创建Data Pump审计策略:
./ua_audit_datapump_export.sh
执行Data Pump操作:
./ua_datapump_export_hr_table.sh
实际为两个expdp操作,使用system用户的成功,使用dbsat_admin的失败,因为没有权限。
查看审计记录:
./ua_review_datapump_audit_events.sh
输出为:
...
. View the Unified Audit generated by Data PumpAUDIT_TYPE DBUSERNAME CLIENT_PROGRAM_NAME EVENT_TIMESTAMP ACTION_NAME RETURN_CODE
-------------------- -------------------- ------------------------ ---------------------------------- --------------- -----------
Datapump SYSTEM oracle@dbsec-lab (DW00) 05-APR-22 05.47.34.372117 AM EXPORT 0
删除审计策略:
./ua_delete_dp_audit_policy.sh
Appendix: About the Product
在统一审计中,统一审计跟踪从各种来源捕获的审计信息。
统一审计使您能够从以下来源捕获审计记录:
- 来自统一审计策略和审计设置的审计记录(包括 SYS 审计记录)
- DBMS_FGA PL/SQL 包中的细粒度审计记录
- Oracle Database Real Application Security 审计记录
- Oracle Recovery Manager 审计记录
- Oracle Database Vault 审计记录
- Oracle 标签安全审计记录
- Oracle 数据挖掘记录
- Oracle 数据泵
- Oracle SQL*Loader 直接加载
统一审计跟踪驻留在 SYSAUX 表空间的 AUDSYS 模式中的只读表中,使该信息在 UNIFIED_AUDIT_TRAIL 数据字典视图中以统一格式提供,并且在单实例和 RAC环境中都可用。除了用户 SYS,被授予 AUDIT_ADMIN 和 AUDIT_VIEWER 角色的用户可以查询这些视图。 如果您的用户只需要查询视图而不需要创建审计策略,则授予他们 AUDIT_VIEWER 角色。
当数据库可写时,审计记录被写入统一审计线索。 如果数据库不可写,则将审计记录写入 O R A C L E B A S E / a u d i t / ORACLE_BASE/audit/ ORACLEBASE/audit/ORACLE_SID 目录中的新格式操作系统文件。
统一审计跟踪的好处
启用统一审计后,它不再依赖于以前版本中使用的初始化参数。
Oracle 数据库安装的所有审计组件的审计记录(包括来自 SYS 审计跟踪的记录)都以一种格式放置在一个位置,而您不必在不同的地方查找不同格式的审计跟踪。
通过将其置于单一审计跟踪中,审计跟踪的管理和安全性也得到了改进。
整体审计性能大大提高。 默认情况下,审计记录会自动写入 AUDSYS 模式中的内部关系表。
您可以创建命名审核策略,使您能够审核本节开头列出的受支持组件以及 SYS 管理用户。 此外,您可以在您的政策中建立条件和排除。
如果您使用的是 Oracle Audit Vault and Database Firewall 环境,那么统一的审计跟踪极大地方便了审计数据的收集,因为所有这些数据都来自一个位置。
Want to Learn More?
- Introduction to Auditing
- Monitoring Database Activity with Auditing
Acknowledgements
本实验的作者为Hakim Loumi,数据库安全的PM。贡献者为Angeline Dhanarani, Rene Fontcha。
这篇关于Oracle LiveLabs实验:DB Security - Unified Auditing的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!