Oracle DB ログを収集する
このドキュメントでは、Bindplane を使用して Oracle DB ログを Google Security Operations に取り込む方法について説明します。このパーサーは、SYSLOG メッセージからフィールドを抽出し、grok パターンと Key-Value 解析を使用して複数の形式を処理します。次に、抽出されたフィールドを統合データモデル(UDM)にマッピングし、ベンダー名やプロダクト名などの静的メタデータでデータを拡充し、ACTION
や USERID
などの特定のフィールド値に基づいてイベントタイプを動的に設定します。また、文字の置換やデータ型の変換など、さまざまなデータ クリーニング オペレーションも処理します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- Windows 2016 以降、または
systemd
を使用する Linux ホスト - プロキシの背後で実行されている場合、ファイアウォール ポートが開いている
- Oracle データベースへの特権アクセス(AUDIT_SYSTEM ロール)
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
- Ingestion Authentication File をダウンロードします。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
その他のインストール リソース
その他のインストール オプションについては、インストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
- 構成ファイルにアクセスします。
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 エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。
net stop BindPlaneAgent && net start BindPlaneAgent
Oracle Database の監査を有効にする
- 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
次のコマンドを使用して、Oracle DB を uniaud オプションにリンクします。
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」の 1 行が返されることを確認します。
Oracle Database の 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 は 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 |
IP、ポート、プロトコルは、grok パターンを使用して抽出されます。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 |
さまざまなログフィールドの存在と値に基づいて、いくつかのフィールドが Key-Value ペアとして追加されます。 |
(パーサー ロジック) | intermediary |
DBPROXY_USERRNAME と CLIENT_ADDRESS の存在と値に基づいて作成され、入力されます。 |
(パーサー ロジック) | network.ip_protocol |
インクルード ファイル parse_ip_protocol.include を使用して CLIENT_ADDRESS から抽出された protocol から派生。 |
変更点
2025-03-18
機能強化:
- SYSLOG ログを解析するための Grok パターンを追加しました。
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
機能強化:
- 新しい形式の KV ログを処理する
gsub
パターンを追加しました。 - 新しい形式の KV ログを処理するための新しい Grok パターンを追加しました。
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
に設定します。principal.ip
とprincipal.port
をCLIENT_ADDRESS
からマッピングしました。
2022-10-13
機能強化:
- SYSLOG ログと KV ログを処理するための Grok パターンを追加しました。
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 のプロフェッショナルから回答を得ることができます。