收集 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 安裝
- 開啟具有根層級或 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。將
/path/to/ingestion-authentication-file.json
更新為「取得 Google SecOps 擷取驗證檔案」一節中驗證檔案的儲存路徑。
重新啟動 Bindplane 代理程式,以套用變更
如要在 Linux 中重新啟動 Bindplane 代理程式,請執行下列指令:
sudo systemctl restart bindplane-agent
如要在 Windows 中重新啟動 Bindplane 代理程式,可以使用「服務」控制台,或輸入下列指令:
net stop BindPlaneAgent && net start BindPlaneAgent
啟用 Oracle 資料庫的稽核功能
- 使用 SQLplus 連線至 Oracle 資料庫。
使用下列指令關閉資料庫:
shutdown immediate
輸入下列指令,停止 Oracle 接聽程式服務:
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
使用下列指令,透過 uniaud 選項連結 Oracle DB:
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk uniaud_on ioracle
使用 SQLplus 連線至 Oracle 資料庫。
使用下列指令重新啟動資料庫:
startup
使用下列指令重新啟動 Oracle 接聽程式服務:
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 資料庫的系統記錄
- 登入 Oracle 執行個體。
使用
vi
開啟下列檔案:vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
輸入下列指令來設定系統記錄:
*.audit_trail='os' *.audit_syslog_level='local0.info'
確認 Oracle 主機上的系統記錄精靈已設定為轉送稽核記錄。
在 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 對應至 ALLOW 和 Success)。 |
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 |
衍生自使用 include 檔案 parse_ip_protocol.include 從 CLIENT_ADDRESS 擷取的 protocol 。 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。