Oracle DB のログを収集する
このドキュメントでは、Bindplane を使用して Oracle DB ログを Google Security Operations に取り込む方法について説明します。パーサーは、grok パターンと Key-Value 解析を使用して複数の形式を処理し、SYSLOG メッセージからフィールドを抽出します。次に、抽出されたフィールドを統合データモデル(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 エージェントを再起動するには、サービス コンソールを使用するか、次のコマンドを入力します。
net stop BindPlaneAgent && net start BindPlaneAgent
Oracle Database の監査を有効にする
- SQLplus を使用して Oracle Database に接続します。
次のコマンドを使用してデータベースをシャットダウンします。
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 Database に接続します。
次のコマンドを使用してデータベースを再起動します。
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 から派生。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。