Oracle DB のログを収集する

以下でサポートされています。

このドキュメントでは、Bindplane を使用して Oracle DB ログを Google Security Operations に取り込む方法について説明します。パーサーは、grok パターンと Key-Value 解析を使用して複数の形式を処理し、SYSLOG メッセージからフィールドを抽出します。次に、抽出されたフィールドを統合データモデル(UDM)にマッピングし、ベンダー名やプロダクト名などの静的メタデータでデータを拡充し、ACTIONUSERID などの特定のフィールド値に基づいてイベントタイプを動的に設定します。また、文字の置換やデータ型の変換など、さまざまなデータ クリーニング オペレーションも処理します。

始める前に

次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス
  • Windows 2016 以降、または systemd を使用する Linux ホスト
  • プロキシの背後で実行されている場合、ファイアウォール ポートが開いている
  • Oracle データベースへの特権アクセス(AUDIT_SYSTEM ロール)

Google SecOps の取り込み認証ファイルを取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [コレクション エージェント] に移動します。
  3. Ingestion Authentication File をダウンロードします。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
    

その他のインストール リソース

その他のインストール オプションについては、インストール ガイドをご覧ください。

Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する

  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. /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 Database の監査を有効にする

  1. SQLplus を使用して Oracle Database に接続します。
  2. 次のコマンドを使用してデータベースをシャットダウンします。

    shutdown immediate
    
  3. 次のコマンドを入力して、Oracle リスナー サービスを停止します。

    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. 次のコマンドを使用して、uniaud オプションで Oracle DB をリンクします。

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. SQLplus を使用して Oracle Database に接続します。

  7. 次のコマンドを使用してデータベースを再起動します。

    startup
    
  8. 次のコマンドを使用して、Oracle リスナー サービスを再起動します。

    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」の 1 行を返すことを確認します。

Oracle Database の 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.description が決定されます(例: 100 は ALLOW と Success にマッピングされます。
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_type を USER_LOGIN として導出するために使用されます。extensions.auth.type が AUTHTYPE_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_type を DATABASE に、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 から抽出された protocol から派生。

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