收集 Oracle 資料庫記錄
本文說明如何使用 BindPlane 將 Oracle DB 記錄擷取至 Google Security Operations。剖析器會從 SYSLOG 訊息中擷取欄位,並使用 grok 模式和鍵/值剖析功能處理多種格式。接著,系統會將這些擷取的欄位對應至統一資料模型 (UDM),並利用供應商和產品名稱等靜態中繼資料豐富資料,並根據 ACTION
和 USERID
等特定欄位值動態設定事件類型。剖析器也會處理各種資料清理作業,例如取代字元和轉換資料類型。
事前準備
請確認您已完成下列事前準備:
- Google SecOps 執行個體
- Windows 2016 以上版本,或搭載
systemd
的 Linux 主機 - 如果在 Proxy 後方執行,防火牆通訊埠會開啟
- Oracle 資料庫的特殊存取權 (AUDIT_SYSTEM 角色)
取得 Google SecOps 擷取驗證檔案
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「收集代理程式」。
- 下載擷取驗證檔案。請在將要安裝 Bindplane 的系統上,安全地儲存檔案。
取得 Google SecOps 客戶 ID
- 登入 Google SecOps 控制台。
- 依序前往「SIEM 設定」>「設定檔」。
- 複製並儲存「機構詳細資料」部分中的客戶 ID。
安裝 Bindplane 代理程式
Windows 安裝
- 以系統管理員身分開啟命令提示字元或 PowerShell。
執行下列指令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 安裝
- 開啟具有 root 或 sudo 權限的終端機。
執行下列指令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
其他安裝資源
如需其他安裝選項,請參閱安裝指南。
設定 Bindplane 代理程式,以便擷取系統記錄檔並傳送至 Google SecOps
- 存取設定檔:
- 找出
config.yaml
檔案。通常位於 Linux 的/etc/bindplane-agent/
目錄或 Windows 的安裝目錄。 - 使用文字編輯器 (例如
nano
、vi
或記事本) 開啟檔案。
- 找出
按照下列方式編輯
config.yaml
檔案:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: 'ORACLE_DB' raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
視基礎架構需求替換通訊埠和 IP 位址。
將
<customer_id>
替換為實際的客戶 ID。在「取得 Google SecOps 攝入驗證檔案」部分,將
/path/to/ingestion-authentication-file.json
更新為驗證檔案的儲存路徑。
重新啟動 Bindplane 代理程式以套用變更
如要在 Linux 中重新啟動 Bindplane 代理程式,請執行下列指令:
sudo systemctl restart bindplane-agent
如要在 Windows 中重新啟動 Bindplane 代理程式,您可以使用「Services」主控台,或輸入下列指令:
net stop BindPlaneAgent && net start BindPlaneAgent
啟用 Oracle 資料庫的稽核功能
- 使用 SQLplus 連線至 Oracle 資料庫。
使用下列指令關閉資料庫:
shutdown immediate
輸入下列指令即可停止 Oracle Listener 服務:
lsnrctl stop
選用:僅在適用的情況下,使用下列指令停止 Enterprise Manager:
cd /u01/app/oracle/product/middleware/oms export OMS_HOME=/u01/app/oracle/product/middleware/oms $OMS_HOME/bin/emctl stop oms
使用下列指令,將 Oracle DB 連結至 uniaud 選項:
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk uniaud_on ioracle
使用 SQLplus 連線至 Oracle 資料庫。
使用下列指令重新啟動資料庫:
startup
使用下列指令重新啟動 Oracle Listener 服務:
lsnrctl start
選用:如有需要,請使用下列指令重新啟動 Enterprise Manager:
cd /u01/app/oracle/product/middleware/oms export OMS_HOME=/u01/app/oracle/product/middleware/oms $OMS_HOME/bin/emctl start oms
確認已啟用統一稽核功能,並使用 SQLplus 連線至 Oracle 資料庫,然後輸入下列指令:
select * from v$option where PARAMETER = 'Unified Auditing';
確認指令傳回一列資料,其中 VALUE 值等於「TRUE」。
為 Oracle 資料庫設定 Syslog
- 登入 Oracle 執行個體。
使用
vi
開啟以下檔案:vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
輸入下列 syslog 設定指令:
*.audit_trail='os' *.audit_syslog_level='local0.info'
請確認 Oracle 主機上的 syslog 守護程序已設定為轉送稽核記錄。
在 Red Hat Enterprise 上,使用
vi
開啟下列檔案/etc/syslog.conf
,然後輸入以下行:local0.info @ <bindplane-ip>:514
儲存並結束檔案:
:wq
在 Red Hat Enterprise 上,輸入下列指令重新載入 syslog 設定:
kill -HUP /var/run/syslogd.pid
連線至 SQLplus 並以 sysdba 身分登入,以便重新啟動:
sys as sysdba
使用下列指令關閉資料庫:
shutdown immediate
使用下列指令重新啟動資料庫:
startup
UDM 對應表
記錄欄位 | UDM 對應 | 邏輯 |
---|---|---|
ACTION |
security_result.action_details |
原始記錄檔中的 ACTION 值會直接對應至這個 UDM 欄位。系統會套用額外邏輯,根據 ACTION 的值 (例如 security_result.action security_result.description 100 會對應至「允許」和「成功」)。 |
ACTION_NAME |
metadata.product_event_type |
直接對應。 |
ACTION_NUMBER |
additional.fields[action_number].value.string_value |
直接對應至鍵 Source Event 。也可與其他欄位搭配使用,以產生 metadata.event_type 和 metadata.product_event_type 。 |
APPLICATION_CONTEXTS |
additional.fields[application_contexts_label].value.string_value |
直接對應至鍵 APPLICATION_CONTEXTS 。 |
AUDIT_POLICY |
additional.fields[audit_policy_label].value.string_value 或additional.fields[AUDIT_POLICY_#].value.string_value |
如果 AUDIT_POLICY 包含半形逗號,系統會將其拆分為多個標籤,並使用 AUDIT_POLICY_0 、AUDIT_POLICY_1 等鍵。否則,系統會直接將其對應至鍵 AUDIT_POLICY 。 |
AUDIT_TYPE |
additional.fields[audit_type_label].value.string_value |
直接對應至鍵 AUDIT_TYPE 。 |
AUTHENTICATION_TYPE |
metadata.event_type 、extensions.auth.type |
如果 auth_type (從 AUTHENTICATION_TYPE 擷取) 不為空白且符合其他條件,則會用來擷取 metadata.event_type 做為 USER_LOGIN。extensions.auth.type 已設為 AUTHTYPE_UNSPECIFIED。 |
CLIENT_ADDRESS |
principal.ip 、principal.port 、network.ip_protocol 、intermediary[host].user.userid |
系統會使用 grok 模式擷取 IP、通訊埠和通訊協定。如果 CLIENT_ADDRESS 欄位中含有使用者名稱,系統會將其對應至 intermediary[host].user.userid 。 |
CLIENT_ID |
target.user.userid |
直接對應。 |
CLIENT_PROGRAM_NAME |
additional.fields[client_program_name_label].value.string_value |
直接對應至鍵 CLIENT_PROGRAM_NAME 。 |
CLIENT_TERMINAL |
additional.fields[CLIENT_TERMINAL_label].value |
直接對應至鍵 CLIENT_TERMINAL 。 |
CLIENT_USER |
target.user.user_display_name |
直接對應。 |
COMMENT$TEXT |
additional.fields[comment_text_label].value.string_value |
將「+」替換為「:」後,直接使用索引鍵 comment_text 進行對應。 |
CURRENT_USER |
additional.fields[current_user_label].value.string_value |
直接對應至鍵 current_user 。 |
CURUSER |
additional.fields[current_user_label].value.string_value |
直接對應至鍵 current_user 。 |
DATABASE_USER |
principal.user.user_display_name |
如果不是空白或 / ,則直接對應。 |
DBID |
metadata.product_log_id |
移除單引號後直接對應。 |
DBNAME |
target.resource.resource_type 、target.resource.resource_subtype 、target.resource.name |
將 resource_type 設為 DATABASE、resource_subtype 設為 Oracle Database ,並將 DBNAME 對應至 name 。 |
DBPROXY_USERRNAME |
intermediary[dbproxy].user.userid |
直接對應。 |
DBUSERNAME |
target.user.user_display_name |
直接對應。 |
ENTRYID |
target.resource.attribute.labels[entry_id_label].value |
直接對應至鍵 Entry Id 。 |
EXTERNAL_USERID |
additional.fields[external_userid_label].value.string_value |
直接對應至鍵 EXTERNAL_USERID 。 |
LENGTH |
additional.fields[length_label].value.string_value |
直接對應至鍵 length 。 |
LOGOFF$DEAD |
target.resource.attribute.labels[LOGOFFDEAD_label].value |
直接對應至鍵 LOGOFFDEAD 。 |
LOGOFF$LREAD |
target.resource.attribute.labels[LOGOFFLREAD_label].value |
直接對應至鍵 LOGOFFLREAD 。 |
LOGOFF$LWRITE |
target.resource.attribute.labels[LOGOFFLWRITE_label].value |
直接對應至鍵 LOGOFFLWRITE 。 |
LOGOFF$PREAD |
target.resource.attribute.labels[LOGOFFPREAD_label].value |
直接對應至鍵 LOGOFFPREAD 。 |
NTIMESTAMP# |
metadata.event_timestamp |
已剖析並轉換為 RFC 3339 或 ISO8601 格式。 |
OBJCREATOR |
target.resource.attribute.labels[obj_creator_label].value |
直接對應至鍵 OBJ Creator 。 |
OBJNAME |
target.resource.attribute.labels[obj_name_label].value |
直接對應至鍵 OBJ Name 。 |
OS_USERNAME |
principal.user.user_display_name |
直接對應。 |
OSUSERID |
target.user.userid |
直接對應。 |
PDB_GUID |
principal.resource.product_object_id |
直接對應。 |
PRIV$USED |
additional.fields[privused_label].value.string_value |
直接對應至鍵 privused 。 |
PRIVILEGE |
principal.user.attribute.permissions.name |
直接對應。 |
RETURN_CODE |
security_result.summary |
直接對應。邏輯會套用至衍生 security_result.action 和 security_result.description 。 |
RETURNCODE |
security_result.summary |
直接對應。邏輯會套用至衍生 security_result.action 和 security_result.description 。 |
RLS_INFO |
additional.fields[rls_info_label].value.string_value |
直接對應至鍵 RLS_INFO 。 |
SCHEMA |
additional.fields[schema_label].value.string_value |
直接對應至鍵 schema 。 |
SESSIONCPU |
target.resource.attribute.labels[SESSIONCPU_label].value |
直接對應至鍵 SESSIONCPU 。 |
SESSIONID |
network.session_id |
直接對應。 |
SESID |
network.session_id |
直接對應。 |
SQL_TEXT |
target.process.command_line |
直接對應。 |
SQLTEXT |
target.process.command_line |
直接對應。 |
STATEMENT |
target.resource.attribute.labels[statement_label].value |
直接對應至鍵 STATEMENT 。 |
STATUS |
security_result.summary |
直接對應。邏輯會套用至衍生 security_result.action 和 security_result.description 。 |
SYSTEM_PRIVILEGE_USED |
additional.fields[system_privilege_used_label].value.string_value |
直接對應至鍵 SYSTEM_PRIVILEGE_USED 。 |
TARGET_USER |
additional.fields[target_user_label].value.string_value |
直接對應至鍵 TARGET_USER 。 |
TERMINAL |
additional.fields[CLIENT_TERMINAL_label].value |
直接對應至鍵 CLIENT_TERMINAL 。 |
TYPE |
additional.fields[type_label].value.string_value |
直接對應至鍵 type 。 |
USERHOST |
principal.hostname 、principal.administrative_domain |
主機名稱和網域會使用 grok 模式擷取。 |
USERID |
principal.user.userid |
直接對應。 |
device_host_name |
target.hostname |
直接對應。 |
event_name |
metadata.product_event_type |
轉換為大寫後直接對應。 |
file_name |
target.file.full_path |
直接對應。 |
hostname |
principal.hostname |
直接對應。 |
length |
additional.fields[length_label].value.string_value |
直接對應至鍵 length 。 |
log_source_name |
principal.application |
直接對應。 |
message |
多項政策 | 用於 grok 剖析,用來擷取多個欄位。 |
returncode |
RETURNCODE |
直接對應。 |
src_ip |
principal.ip |
直接對應。 |
t_hostname |
target.hostname |
直接對應。 |
(剖析器邏輯) | metadata.vendor_name |
已硬式編碼至 Oracle 。 |
(剖析器邏輯) | metadata.product_name |
已硬式編碼至 Oracle DB 。 |
(剖析器邏輯) | metadata.event_type |
系統會根據 ACTION 、ACTION_NUMBER 、source_event 、OSUSERID 、USERID 、SQLTEXT 、AUTHENTICATION_TYPE 、DBUSERNAME 、device_host_name 、database_name 的值來決定。如果未符合特定條件,則預設為 USER_RESOURCE_ACCESS。 |
(剖析器邏輯) | metadata.product_event_type |
根據 ACTION 、ACTION_NUMBER 、source_event 、p_event_type 、ACTION_NAME 的值決定。 |
(剖析器邏輯) | metadata.log_type |
已硬式編碼至 ORACLE_DB 。 |
(剖析器邏輯) | extensions.auth.mechanism |
根據 ACTION 、ACTION_NUMBER 、source_event 和 OSUSERID 的特定條件,將其設為 USERNAME_PASSWORD。 |
(剖析器邏輯) | extensions.auth.type |
根據 ACTION 、ACTION_NUMBER 和 AUTHENTICATION_TYPE 的特定條件,將其設為 AUTHTYPE_UNSPECIFIED。 |
(剖析器邏輯) | security_result.description |
衍生自 RETURNCODE 或 STATUS 。 |
(剖析器邏輯) | security_result.action |
衍生自 RETURNCODE 或 STATUS 。 |
(剖析器邏輯) | target.resource.attribute.labels |
系統會根據各個記錄欄位的值和是否存在,新增多個標籤。 |
(剖析器邏輯) | additional.fields |
系統會根據各種記錄欄位的存在與值,新增多個欄位做為鍵/值組合。 |
(剖析器邏輯) | intermediary |
根據 DBPROXY_USERRNAME 和 CLIENT_ADDRESS 的存在與值建立並填入。 |
(剖析器邏輯) | network.ip_protocol |
使用包含檔案 parse_ip_protocol.include 從 CLIENT_ADDRESS 擷取的 protocol 衍生而來。 |
異動
2025-03-18
改善項目:
- 新增 Grok 模式,用於剖析 SYSLOG 記錄。
- 已將
org_id
和comp_id
對應至additional.fields
。 - 已將
host_addr
對應至principal.ip
和principal.asset.ip
。 - 已將
host_id
對應至principal.hostname
和principal.asset.hostname
。 - 已將
level
對應至security_result.severity_details
。
2025-02-12
改善項目:
- 新增日期篩選器,以支援新的 syslog 記錄模式。
2025-01-15
改善項目:
- 已將
ID
對應至metadata.event_timestamp
。
2024-12-19
改善項目:
- 新增支援 syslog 記錄的新模式。
2024-12-12
改善項目:
- 新增
gsub
模式,以處理新的 KV 記錄格式。 - 新增 Grok 模式,以便處理新的 KV 記錄格式。
- 已將
ORACLE_DB
對應至metadata.log_type
。
2024-10-25
改善項目:
- 如果
ACTION
是GRANT
,請將metadata.event_type
設為USER_RESOURCE_UPDATE_PERMISSIONS
。 - 如果
ACTION
是DROP
或DELETE
,請將metadata.event_type
設為USER_RESOURCE_DELETION
。 - 如果
ACTION
是CREATE
,請將metadata.event_type
設為USER_RESOURCE_CREATION
。 - 如果
ACTION
是ALTER
或INSERT
,請將metadata.event_type
設為USER_RESOURCE_UPDATE_CONTENT
。
2024-09-25
改善項目:
- 新增支援 KV 記錄的新模式。
2024-07-24
改善項目:
- 將
AUDIT_POLICY
對應為單一字串,而非分割為多個值。additional.fields
2024-06-06
改善項目:
principal.user.user_display_name
有輕微變動。
2024-05-30
改善項目:
- 新增對 exadata 欄位的支援。
2024-04-03
改善項目:
- 新增對部分未涵蓋的屬性的支援。
2023-10-25
改善項目:
- 將
LENGTH
、LOGOFFDEAD
、LOGOFFLREAD
、LOGOFFLWRITE
、LOGOFFPREAD
、SESSIONCPU
、CLIENT_TERMINAL
對應至target.resource.attribute.labels
。 - 已將
ACTION
對應至security_result.summary
。 - 當
RETURNCODE
為 0 或STATUS
為 0 時,請將security_result.description
設為Success
。 - 當
RETURNCODE
為 1 或 -1,或是STATUS
為 1 或 -1 時,請將security_result.description
設為Failure
。 - 已從
CLIENT_ADDRESS
對應principal.ip
和principal.port
。
2022-10-13
改善項目:
- 新增 grok 模式,以便處理 SYSLOG 和 KV 記錄。
2022-08-01
改善項目:
- 新增下列欄位的對應項目:
hostname
已對應至principal.hostname
。- 如果
returncode
為0
,則 security_result.action 會對應至ALLOW
;如果為-1
,則會對應至BLOCK
。 ACTION
已對應至metadata.product_event_type
。DATABASE USER
已對應至principal.user.user_display_name
。PRIVILEGE
已對應至principal.user.attribute.permissions
。CLIENT USER
已對應至target.user.user_display_name
。file_name
已對應至target.file.full_path
。event_name
已對應至metadata.product_event_type
。ACTION_NUMBER
已對應至event.idm.read_only_udm.additional.fields
。length
已對應至event.idm.read_only_udm.additional.fields
。DBID
已對應至metadata.product_log_id
。
還有其他問題嗎?向社群成員和 Google SecOps 專家尋求解答。