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 の取り込み認証ファイルを取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [コレクション エージェント] に移動します。
  3. Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。

Google SecOps のお客様 ID を取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [プロファイル] に移動します。
  3. [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。

Bindplane エージェントをインストールする

次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。

Windows のインストール

  1. 管理者としてコマンド プロンプトまたは PowerShell を開きます。
  2. 次のコマンドを実行します。

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. インストールが完了するまで待ちます。

  4. 次のコマンドを実行して、インストールの内容を確認します。

    sc query observiq-otel-collector
    

サービスは RUNNING と表示されます。

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
    
  3. インストールが完了するまで待ちます。

  4. 次のコマンドを実行して、インストールの内容を確認します。

    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+OEnterCtrl+X の順に押します。
    • Windows: [ファイル>保存] をクリックします。

Bindplane エージェントを再起動して変更を適用する

  • Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。

    sudo systemctl restart observiq-otel-collector
    
    1. サービスが実行されていることを確認します。
    sudo systemctl status observiq-otel-collector
    
    1. ログでエラーを確認します。
    sudo journalctl -u observiq-otel-collector -f
    
  • Windows で Bindplane エージェントを再起動するには、次のいずれかのオプションを選択します。

    • 管理者としてコマンド プロンプトまたは PowerShell を開きます。
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • サービス コンソール:
      1. Win+R キーを押して「services.msc」と入力し、Enter キーを押します。
      2. observIQ OpenTelemetry Collector を見つけます。
      3. 右クリックして [再起動] を選択します。
    1. サービスが実行されていることを確認します。
    sc query observiq-otel-collector
    
    1. ログでエラーを確認します。
    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

Oracle Database 統合監査と syslog 転送を構成する

統合監査を有効にする

統合監査がまだ有効になっていない場合は、uniaud_on オプションを使用して Oracle バイナリを再リンクします。これには、Oracle Home から実行されているすべての Oracle プロセス(データベース インスタンスとリスナー)をシャットダウンする必要があります。

  1. oracle オペレーティング システム ユーザーとして Oracle Database ホストに接続します。
  2. Oracle インスタンスとリスナーをシャットダウンします。

    sqlplus / as sysdba <<EOF
    shutdown immediate;
    exit
    EOF
    lsnrctl stop
    
  3. 統合監査を有効にして Oracle バイナリを再リンクします。

    cd $ORACLE_HOME/rdbms/lib
    make -f ins_rdbms.mk uniaud_on ioracle
    
  4. リスナーと Oracle インスタンスを起動します。

    lsnrctl start
    sqlplus / as sysdba <<EOF
    startup;
    exit
    EOF
    
  5. Oracle 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
    
  6. 統合監査が有効になっていることを確認します。SQLplus を使用して Oracle Database に接続します。

    SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
    

コマンドが VALUETRUE に等しい 1 行を返すことを確認します。

統合監査の syslog 出力を構成する

UNIFIED_AUDIT_SYSTEMLOG 初期化パラメータを設定して、統合監査レコードを syslog に書き込みます。このパラメータは Oracle 19c で導入され、非推奨の AUDIT_SYSLOG_LEVEL パラメータ(従来の監査にのみ適用)に代わるものです。

  1. SQLplus を使用して SYSDBA として Oracle Database に接続します。
  2. 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;
    
  3. 省略可: CDB ルート コンテナから UNIX/Linux システムの syslog に共通の統合監査ポリシー レコードを書き込むには、UNIFIED_AUDIT_COMMON_SYSTEMLOG パラメータを設定します。

    ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG = TRUE SCOPE=SPFILE;
    
  4. パラメータの変更を有効にするため、Oracle Database インスタンスを再起動します。

    SHUTDOWN IMMEDIATE;
    STARTUP;
    

Oracle ホストで syslog デーモンを構成する

Oracle Database ホストで、監査ログ エントリを Bindplane エージェントに転送するように syslog デーモンを構成します。

  1. root として Oracle Database ホストにログインします。
  2. syslog 構成ファイルを開きます。

    • rsyslog を使用する RHEL/CentOS/Oracle Linux の場合:
    sudo vi /etc/rsyslog.conf
    
    • syslog を使用する古いシステムの場合:
    sudo vi /etc/syslog.conf
    
  3. UNIFIED_AUDIT_SYSTEMLOG で構成したファシリティと優先度に一致する転送ルールを追加します。たとえば、LOCAL7.INFO を設定した場合:

    • UDP 経由で転送するには(Bindplane udplog レシーバと一致する場合):
    local7.info @<BINDPLANE_HOST_IP>:514
    
    • TCP 経由で転送するには(Bindplane が tcplog レシーバを使用している場合):
    local7.info @@<BINDPLANE_HOST_IP>:514
    

<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`.
  1. 省略可: 監査ログのローカル コピーも保持するには、次の行を追加します。

    local7.info /var/log/oracle_audit.log
    
  2. ファイルを保存して、syslog デーモンを再起動します。

    • rsyslog を使用する RHEL/CentOS/Oracle Linux の場合:
    sudo systemctl restart rsyslog
    
    • syslog を使用する古いシステムの場合:
    sudo service syslog restart
    

監査ログの転送を確認する

  1. Oracle Database で監査可能なアクションを実行して、テスト監査イベントを生成します。たとえば、ユーザーとして接続して、次のコマンドを実行します。

    SELECT * FROM DBA_USERS WHERE ROWNUM = 1;
    
  2. Bindplane エージェントのログで受信 syslog メッセージを確認します。

    sudo journalctl -u observiq-otel-collector -f
    
  3. syslog メッセージに、TYPEDBIDSESIDDBUSERACTIONRETCODE などの Key-Value ペアを含む Oracle Unified Audit タグが含まれていることを確認します。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
ACTION security_result.action_details 未加工ログの ACTION の値は、この UDM フィールドに直接マッピングされます。追加のロジックが適用され、ACTION の値に基づいて security_result.actionsecurity_result.description が決定されます(たとえば、100ALLOWSuccess にマッピングされます)。
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_value または additional.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_typeAUTHENTICATION_TYPE から抽出)が空ではなく、他の条件が満たされている場合、metadata.event_typeUSER_LOGIN として導出するために使用されます。extensions.auth.typeAUTHTYPE_UNSPECIFIED に設定されている。
CLIENT_ADDRESS principal.ipprincipal.portnetwork.ip_protocolintermediary[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_typetarget.resource.resource_subtypetarget.resource.name resource_typeDATABASE に、resource_subtypeOracle Database に設定し、DBNAMEname にマッピングします。
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 RETURNCODE または STATUS から取得されます。
(パーサー ロジック) security_result.action RETURNCODE または STATUS から取得されます。
(パーサー ロジック) target.resource.attribute.labels さまざまなログフィールドの有無と値に基づいて、複数のラベルが追加されます。
(パーサー ロジック) additional.fields さまざまなログフィールドの有無と値に基づいて、複数のフィールドが Key-Value ペアとして追加されます。
(パーサー ロジック) intermediary DBPROXY_USERRNAMECLIENT_ADDRESS の有無と値に基づいて作成され、入力されます。
(パーサー ロジック) network.ip_protocol インクルード ファイル parse_ip_protocol.include を使用して CLIENT_ADDRESS から抽出されたプロトコルから派生。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。