收集 Oracle 資料庫記錄

支援以下發布途徑:

本文說明如何使用 BindPlane 將 Oracle DB 記錄擷取至 Google Security Operations。剖析器會從 SYSLOG 訊息中擷取欄位,並使用 grok 模式和鍵/值剖析功能處理多種格式。接著,系統會將這些擷取的欄位對應至統一資料模型 (UDM),並利用供應商和產品名稱等靜態中繼資料豐富資料,並根據 ACTIONUSERID 等特定欄位值動態設定事件類型。剖析器也會處理各種資料清理作業,例如取代字元和轉換資料類型。

事前準備

請確認您已完成下列事前準備:

  • Google SecOps 執行個體
  • Windows 2016 以上版本,或搭載 systemd 的 Linux 主機
  • 如果在 Proxy 後方執行,防火牆通訊埠會開啟
  • Oracle 資料庫的特殊存取權 (AUDIT_SYSTEM 角色)

取得 Google SecOps 擷取驗證檔案

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「收集代理程式」
  3. 下載擷取驗證檔案。請在將要安裝 Bindplane 的系統上,安全地儲存檔案。

取得 Google SecOps 客戶 ID

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「設定檔」
  3. 複製並儲存「機構詳細資料」部分中的客戶 ID

安裝 Bindplane 代理程式

Windows 安裝

  1. 以系統管理員身分開啟命令提示字元PowerShell
  2. 執行下列指令:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Linux 安裝

  1. 開啟具有 root 或 sudo 權限的終端機。
  2. 執行下列指令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

其他安裝資源

如需其他安裝選項,請參閱安裝指南

設定 Bindplane 代理程式,以便擷取系統記錄檔並傳送至 Google SecOps

  1. 存取設定檔:
    • 找出 config.yaml 檔案。通常位於 Linux 的 /etc/bindplane-agent/ 目錄或 Windows 的安裝目錄。
    • 使用文字編輯器 (例如 nanovi 或記事本) 開啟檔案。
  2. 按照下列方式編輯 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
    
  3. 視基礎架構需求替換通訊埠和 IP 位址。

  4. <customer_id> 替換為實際的客戶 ID。

  5. 在「取得 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 資料庫的稽核功能

  1. 使用 SQLplus 連線至 Oracle 資料庫。
  2. 使用下列指令關閉資料庫:

    shutdown immediate
    
  3. 輸入下列指令即可停止 Oracle Listener 服務:

    lsnrctl stop
    
  4. 選用:僅在適用的情況下,使用下列指令停止 Enterprise Manager:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl stop oms
    
  5. 使用下列指令,將 Oracle DB 連結至 uniaud 選項:

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. 使用 SQLplus 連線至 Oracle 資料庫。

  7. 使用下列指令重新啟動資料庫:

    startup
    
  8. 使用下列指令重新啟動 Oracle Listener 服務:

    lsnrctl start
    
  9. 選用:如有需要,請使用下列指令重新啟動 Enterprise Manager:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl start oms
    
  10. 確認已啟用統一稽核功能,並使用 SQLplus 連線至 Oracle 資料庫,然後輸入下列指令:

    select * from v$option where PARAMETER = 'Unified Auditing';
    
  11. 確認指令傳回一列資料,其中 VALUE 值等於「TRUE」

為 Oracle 資料庫設定 Syslog

  1. 登入 Oracle 執行個體。
  2. 使用 vi 開啟以下檔案:

    vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
    
  3. 輸入下列 syslog 設定指令:

    *.audit_trail='os'
    *.audit_syslog_level='local0.info'
    
  4. 請確認 Oracle 主機上的 syslog 守護程序已設定為轉送稽核記錄。

  5. 在 Red Hat Enterprise 上,使用 vi 開啟下列檔案 /etc/syslog.conf,然後輸入以下行:

    local0.info @ <bindplane-ip>:514
    
  6. 儲存並結束檔案:

    :wq
    
  7. 在 Red Hat Enterprise 上,輸入下列指令重新載入 syslog 設定:

    kill -HUP /var/run/syslogd.pid
    
  8. 連線至 SQLplus 並以 sysdba 身分登入,以便重新啟動:

    sys as sysdba
    
  9. 使用下列指令關閉資料庫:

    shutdown immediate
    
  10. 使用下列指令重新啟動資料庫:

    startup
    

UDM 對應表

記錄欄位 UDM 對應 邏輯
ACTION security_result.action_details 原始記錄檔中的 ACTION 值會直接對應至這個 UDM 欄位。系統會套用額外邏輯,根據 ACTION 的值 (例如 security_result.actionsecurity_result.description100 會對應至「允許」和「成功」)。
ACTION_NAME metadata.product_event_type 直接對應。
ACTION_NUMBER additional.fields[action_number].value.string_value 直接對應至鍵 Source Event。也可與其他欄位搭配使用,以產生 metadata.event_typemetadata.product_event_type
APPLICATION_CONTEXTS additional.fields[application_contexts_label].value.string_value 直接對應至鍵 APPLICATION_CONTEXTS
AUDIT_POLICY additional.fields[audit_policy_label].value.string_valueadditional.fields[AUDIT_POLICY_#].value.string_value 如果 AUDIT_POLICY 包含半形逗號,系統會將其拆分為多個標籤,並使用 AUDIT_POLICY_0AUDIT_POLICY_1 等鍵。否則,系統會直接將其對應至鍵 AUDIT_POLICY
AUDIT_TYPE additional.fields[audit_type_label].value.string_value 直接對應至鍵 AUDIT_TYPE
AUTHENTICATION_TYPE metadata.event_typeextensions.auth.type 如果 auth_type (從 AUTHENTICATION_TYPE 擷取) 不為空白且符合其他條件,則會用來擷取 metadata.event_type 做為 USER_LOGIN。extensions.auth.type 已設為 AUTHTYPE_UNSPECIFIED。
CLIENT_ADDRESS principal.ipprincipal.portnetwork.ip_protocolintermediary[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_typetarget.resource.resource_subtypetarget.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.actionsecurity_result.description
RETURNCODE security_result.summary 直接對應。邏輯會套用至衍生 security_result.actionsecurity_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.actionsecurity_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.hostnameprincipal.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 系統會根據 ACTIONACTION_NUMBERsource_eventOSUSERIDUSERIDSQLTEXTAUTHENTICATION_TYPEDBUSERNAMEdevice_host_namedatabase_name 的值來決定。如果未符合特定條件,則預設為 USER_RESOURCE_ACCESS。
(剖析器邏輯) metadata.product_event_type 根據 ACTIONACTION_NUMBERsource_eventp_event_typeACTION_NAME 的值決定。
(剖析器邏輯) metadata.log_type 已硬式編碼至 ORACLE_DB
(剖析器邏輯) extensions.auth.mechanism 根據 ACTIONACTION_NUMBERsource_eventOSUSERID 的特定條件,將其設為 USERNAME_PASSWORD。
(剖析器邏輯) extensions.auth.type 根據 ACTIONACTION_NUMBERAUTHENTICATION_TYPE 的特定條件,將其設為 AUTHTYPE_UNSPECIFIED。
(剖析器邏輯) security_result.description 衍生自 RETURNCODESTATUS
(剖析器邏輯) security_result.action 衍生自 RETURNCODESTATUS
(剖析器邏輯) target.resource.attribute.labels 系統會根據各個記錄欄位的值和是否存在,新增多個標籤。
(剖析器邏輯) additional.fields 系統會根據各種記錄欄位的存在與值,新增多個欄位做為鍵/值組合。
(剖析器邏輯) intermediary 根據 DBPROXY_USERRNAMECLIENT_ADDRESS 的存在與值建立並填入。
(剖析器邏輯) network.ip_protocol 使用包含檔案 parse_ip_protocol.includeCLIENT_ADDRESS 擷取的 protocol 衍生而來。

異動

2025-03-18

改善項目:

  • 新增 Grok 模式,用於剖析 SYSLOG 記錄。
  • 已將 org_idcomp_id 對應至 additional.fields
  • 已將 host_addr 對應至 principal.ipprincipal.asset.ip
  • 已將 host_id 對應至 principal.hostnameprincipal.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

改善項目:

  • 如果 ACTIONGRANT,請將 metadata.event_type 設為 USER_RESOURCE_UPDATE_PERMISSIONS
  • 如果 ACTIONDROPDELETE,請將 metadata.event_type 設為 USER_RESOURCE_DELETION
  • 如果 ACTIONCREATE,請將 metadata.event_type 設為 USER_RESOURCE_CREATION
  • 如果 ACTIONALTERINSERT,請將 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

改善項目:

  • LENGTHLOGOFFDEADLOGOFFLREADLOGOFFLWRITELOGOFFPREADSESSIONCPUCLIENT_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.ipprincipal.port

2022-10-13

改善項目:

  • 新增 grok 模式,以便處理 SYSLOG 和 KV 記錄。

2022-08-01

改善項目:

  • 新增下列欄位的對應項目:
  • hostname 已對應至 principal.hostname
  • 如果 returncode0,則 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 專家尋求解答。