Oracle DB ログを収集する
このガイドでは、Bindplane エージェントを使用して Oracle DB ログを Google Security Operations に取り込む方法について説明します。
パーサーは、grok パターンと Key-Value 解析を使用して複数の形式を処理し、SYSLOG メッセージからフィールドを抽出します。次に、抽出されたフィールドを統合データモデル(UDM)にマッピングし、ベンダー名やプロダクト名などの静的メタデータでデータを拡充し、ACTION や USERID などの特定のフィールド値に基づいてイベントタイプを動的に設定します。
始める前に
次の前提条件を満たしていることを確認してください。
Google SecOps インスタンス
Windows Server 2016 以降、または
systemdを使用する Linux ホストBindplane エージェントと Oracle Database ホスト間のネットワーク接続
プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します
Oracle Database インスタンスへの特権アクセス(SYSDBA または AUDIT_ADMIN ロール)
統合監査が有効になっている Oracle Database 19c 以降(または Oracle 12c ~ 18c の混合モード監査)
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
[組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。
Windows のインストール
- 管理者としてコマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
sc query observiq-otel-collector
サービスは RUNNING と表示されます。
Linux のインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shインストールが完了するまで待ちます。
次のコマンドを実行して、インストールの内容を確認します。
sudo systemctl status observiq-otel-collector
サービスが [active (running)] と表示されます。
その他のインストール リソース
その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルを見つける
Linux:
```bash
sudo nano /etc/bindplane-agent/config.yaml
```
Windows:
```cmd
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
```
構成ファイルを編集します。
config.yaml の内容全体を次の構成に置き換えます。
```yaml
receivers:
udplog:
listen_address: "0.0.0.0:514"
exporters:
chronicle/oracle_db:
compression: gzip
creds_file_path: '/path/to/ingestion-authentication-file.json'
customer_id: '<customer_id>'
endpoint: malachiteingestion-pa.googleapis.com
log_type: ORACLE_DB
raw_log_field: body
ingestion_labels:
log_type: 'ORACLE_DB'
service:
pipelines:
logs/oracle_to_chronicle:
receivers:
- udplog
exporters:
- chronicle/oracle_db
```
構成パラメータ
- 各プレースホルダを次のように置き換えます。
レシーバの構成:
* listen_address: リッスンする IP アドレスとポート:
- 1 つのインターフェースでリッスンする場合は、0.0.0.0 を特定 IP アドレスに置き換えます。すべてのインターフェースでリッスンする場合は、0.0.0.0 のままにします(推奨)。
- 514 を Oracle Syslog 転送構成と一致するポート番号に置き換えます。
エクスポート構成:
* creds_file_path: 取り込み認証ファイルのフルパス:
- Linux: /etc/bindplane-agent/ingestion-auth.json
- Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
* customer_id: Google SecOps の顧客 ID を取得するセクションでコピーした顧客 ID
* endpoint: リージョン エンドポイント URL:
- 米国: malachiteingestion-pa.googleapis.com
- ヨーロッパ: europe-malachiteingestion-pa.googleapis.com
- アジア: asia-southeast1-malachiteingestion-pa.googleapis.com
- 完全なリストについては、リージョン エンドポイントをご覧ください
構成ファイルを保存する
- 編集後、ファイルを保存します。
- Linux:
Ctrl+O、Enter、Ctrl+Xの順に押します。 - Windows: [ファイル>保存] をクリックします。
- Linux:
Bindplane エージェントを再起動して変更を適用する
Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。
sudo systemctl restart observiq-otel-collector- サービスが実行されていることを確認します。
sudo systemctl status observiq-otel-collector- ログでエラーを確認します。
sudo journalctl -u observiq-otel-collector -fWindows で Bindplane エージェントを再起動するには、次のいずれかのオプションを選択します。
- 管理者としてコマンド プロンプトまたは PowerShell を開きます。
net stop observiq-otel-collector && net start observiq-otel-collector- サービス コンソール:
Win+Rキーを押して「services.msc」と入力し、Enter キーを押します。- observIQ OpenTelemetry Collector を見つけます。
- 右クリックして [再起動] を選択します。
- サービスが実行されていることを確認します。
sc query observiq-otel-collector- ログでエラーを確認します。
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Oracle Database 統合監査と syslog 転送を構成する
統合監査を有効にする
統合監査がまだ有効になっていない場合は、uniaud_on オプションを使用して Oracle バイナリを再リンクします。これには、Oracle Home から実行されているすべての Oracle プロセス(データベース インスタンスとリスナー)をシャットダウンする必要があります。
oracleオペレーティング システム ユーザーとして Oracle Database ホストに接続します。Oracle インスタンスとリスナーをシャットダウンします。
sqlplus / as sysdba <<EOF shutdown immediate; exit EOF lsnrctl stop統合監査を有効にして Oracle バイナリを再リンクします。
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk uniaud_on ioracleリスナーと Oracle インスタンスを起動します。
lsnrctl start sqlplus / as sysdba <<EOF startup; exit EOFOracle Enterprise Manager Cloud Control が同じホストで実行されている場合は、再起動します。
cd /u01/app/oracle/product/middleware/oms export OMS_HOME=/u01/app/oracle/product/middleware/oms $OMS_HOME/bin/emctl start oms統合監査が有効になっていることを確認します。SQLplus を使用して Oracle Database に接続します。
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
コマンドが VALUE が TRUE に等しい 1 行を返すことを確認します。
統合監査の syslog 出力を構成する
UNIFIED_AUDIT_SYSTEMLOG 初期化パラメータを設定して、統合監査レコードを syslog に書き込みます。このパラメータは Oracle 19c で導入され、非推奨の AUDIT_SYSLOG_LEVEL パラメータ(従来の監査にのみ適用)に代わるものです。
- SQLplus を使用して SYSDBA として Oracle Database に接続します。
UNIFIED_AUDIT_SYSTEMLOGパラメータを設定します。- UNIX/Linux システムでは、パラメータを
facility.priority値に設定します。
ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = 'LOCAL7.INFO' SCOPE=SPFILE;- Windows システムで、Windows イベント ビューアに書き込むには、パラメータを
TRUEに設定します。
ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = TRUE SCOPE=SPFILE;- UNIX/Linux システムでは、パラメータを
省略可: CDB ルート コンテナから UNIX/Linux システムの syslog に共通の統合監査ポリシー レコードを書き込むには、
UNIFIED_AUDIT_COMMON_SYSTEMLOGパラメータを設定します。ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG = TRUE SCOPE=SPFILE;パラメータの変更を有効にするため、Oracle Database インスタンスを再起動します。
SHUTDOWN IMMEDIATE; STARTUP;
Oracle ホストで syslog デーモンを構成する
Oracle Database ホストで、監査ログ エントリを Bindplane エージェントに転送するように syslog デーモンを構成します。
rootとして Oracle Database ホストにログインします。syslog 構成ファイルを開きます。
- rsyslog を使用する RHEL/CentOS/Oracle Linux の場合:
sudo vi /etc/rsyslog.conf- syslog を使用する古いシステムの場合:
sudo vi /etc/syslog.confUNIFIED_AUDIT_SYSTEMLOGで構成したファシリティと優先度に一致する転送ルールを追加します。たとえば、LOCAL7.INFOを設定した場合:- UDP 経由で転送するには(Bindplane
udplogレシーバと一致する場合):
local7.info @<BINDPLANE_HOST_IP>:514- TCP 経由で転送するには(Bindplane が
tcplogレシーバを使用している場合):
local7.info @@<BINDPLANE_HOST_IP>:514- UDP 経由で転送するには(Bindplane
<BINDPLANE_HOST_IP> は、Bindplane エージェントを実行しているシステムの IP アドレスまたはホスト名に置き換えます。
Note: A single `@` prefix indicates UDP forwarding. A double `@@` prefix indicates TCP forwarding. Ensure this matches the receiver type in the Bindplane `config.yaml`.
省略可: 監査ログのローカル コピーも保持するには、次の行を追加します。
local7.info /var/log/oracle_audit.logファイルを保存して、syslog デーモンを再起動します。
- rsyslog を使用する RHEL/CentOS/Oracle Linux の場合:
sudo systemctl restart rsyslog- syslog を使用する古いシステムの場合:
sudo service syslog restart
監査ログの転送を確認する
Oracle Database で監査可能なアクションを実行して、テスト監査イベントを生成します。たとえば、ユーザーとして接続して、次のコマンドを実行します。
SELECT * FROM DBA_USERS WHERE ROWNUM = 1;Bindplane エージェントのログで受信 syslog メッセージを確認します。
sudo journalctl -u observiq-otel-collector -fsyslog メッセージに、
TYPE、DBID、SESID、DBUSER、ACTION、RETCODEなどの Key-Value ペアを含むOracle Unified Auditタグが含まれていることを確認します。
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 から抽出されたプロトコルから派生。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。