Imperva Database のログを収集する
このドキュメントでは、Bindplane を使用して Imperva データベースのログを Google Security Operations に取り込む方法について説明します。パーサーは、まず CEF、LEEF、JSON などのさまざまな構造化ログ形式からフィールドを抽出します。これらの形式が見つからない場合は、grok パターンを使用して非構造化 syslog メッセージからフィールドを抽出し、最終的に抽出されたデータを統合データモデル(UDM)にマッピングします。Imperva Database Security は、包括的なデータベース アクティビティのモニタリング、監査、保護機能を提供します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Windows 2016 以降、または
systemd
を使用する Linux ホスト - プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します
- Imperva SecureSphere 管理コンソールへの特権アクセス
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 log_type: 'IMPERVA_DB' raw_log_field: body ingestion_labels: 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
Imperva Database で Syslog 転送を構成する
- Imperva SecureSphere Management Console にログインします。
- [構成> アクション セット] に移動します。
- [追加] をクリックして新しいアクション セットを作成するか、既存のアクション セットを編集します。
- [アクションを追加] をクリックし、次の構成の詳細を指定します。
- 名前: わかりやすい名前を入力します(例:
Google SecOps Syslog
)。 - アクション タイプ: [GW Syslog] を選択します。
- ホスト: BindPlane エージェントの IP アドレスを入力します。
- ポート: BindPlane Agent のポート番号(デフォルトは
514
)を入力します。 - プロトコル: BindPlane エージェントの構成に応じて、[UDP] または [TCP] を選択します。
- Syslog Log Level: 包括的なロギングを行うには、[DEBUG] を選択します。
- Syslog Facility: LOCAL0 または適切なファシリティを選択します。
- アクション インターフェース: SYSLOG+JSON 形式の場合は [Gateway Log - Security Event - System Log (syslog) - JSON format (Extended)] を選択し、標準の SYSLOG 形式の場合は [Gateway Log - Security Event - System Log (syslog)] を選択します。
- 名前: わかりやすい名前を入力します(例:
- アクション構成を保存します。
- [ポリシー] > [セキュリティ ポリシー] または [ポリシー] > [データベース監査ポリシー] に移動します。
- 関連するポリシーを編集し、syslog アクションを含むアクション セットを追加して、イベントが Google SecOps に転送されるようにします。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
acct | principal.user.userid | acct が「admin」の場合は target.user.userid にマッピングし、それ以外の場合は principal.user.userid にマッピングします。マッピングの前に、acct から引用符とスペースを削除します。 |
アクション | security_result.action_details | 未加工ログの action フィールドの値 |
alertSev | security_result.severity | alertSev が「Informative」の場合は「INFORMATIONAL」としてマッピングし、それ以外の場合は alertSev の大文字としてマッピングします。 |
アプリケーション | principal.application | application が「pam_unix(sudo:session)」または description に「pam_unix」が含まれている場合は、「pam_unix」としてマッピングします。message に「run-parts」が含まれている場合は、「run-parts」としてマッピングします。message に「audispd」が含まれている場合は、「audispd」としてマッピングします。message に「FSS audit」が含まれている場合は、「FSS audit」としてマッピングします。それ以外の場合は、未加工ログの application フィールドとしてマッピングします。 |
application-name | target.application | 未加工ログの application-name フィールドの値 |
audit-policy | security_result.category_details | 未加工ログの audit-policy フィールドの値 |
bind-variables | additional.fields.bind_variables_label.value.string_value | 未加工ログの bind-variables フィールドの値 |
category | security_result.category_details | 未加工ログの category フィールドの値 |
COMMAND | target.process.command_line | exe が空でない場合は、未加工ログの exe フィールドとしてマッピングします。それ以外の場合は、未加工ログの COMMAND フィールドとしてマッピングします。 |
createTime | マッピングされません | |
db-schema-pair | additional.fields.DB Name_{index} .value.string_value、additional.fields.Schema Name_{index} .value.string_value |
未加工ログ内の各 db-schema-pair オブジェクトについて、db-name フィールドと schema-name フィールドを抽出し、UDM の DB Name_{index} と Schema Name_{index} にそれぞれマッピングします。ここで、index は配列内のオブジェクトのインデックスです。 |
db-user | principal.user.userid | db-user が空でない場合は、未加工ログの db-user フィールドとしてマッピングします。それ以外の場合(os-user が空ではなく、db-user が空の場合)、未加工ログの os-user フィールドとしてマッピングします。 |
dbName | target.resource.name | 未加工ログの dbName フィールドの値 |
dest-ip | target.ip、target.asset.ip | 未加工ログの dest-ip フィールドの値 |
dest-port | target.port | 未加工ログの dest-port フィールドの値 |
説明 | metadata.description | description に「user:」が含まれている場合は、description から userid を抽出し、userid にマッピングします。userid が空ではなく、description に「Invalid」または「invalid」が含まれている場合は、「Invalid user」を「Invalid」に置き換えます。application が「sshd」の場合、description から「from」と「by」を削除します。それ以外の場合は、未加工ログの description フィールドとしてマッピングします。 |
dst | target.ip、target.asset.ip | 未加工ログの dst フィールドの値 |
dstIP | target.ip、target.asset.ip | 未加工ログの dstIP フィールドの値 |
dstPort | target.port | 未加工ログの dstPort フィールドの値 |
event-type | metadata.product_event_type | 未加工ログの event-type フィールドの値 |
eventType | metadata.product_event_type、metadata.event_type | eventType が空でなく、srcIP と dstIP が空でない場合、eventType を metadata.product_event_type にマッピングし、「NETWORK_CONNECTION」を metadata.event_type にマッピングします。 |
evntDesc | security_result.description | 未加工ログの evntDesc フィールドの値 |
exe | target.process.command_line | 未加工ログの exe フィールドの値 |
ソース: | network.email.from | from から「<」と「>」を削除して network.email.from にマッピングします |
グループ | target.user.group_identifiers | 未加工ログの group フィールドの値 |
gw-ip | intermediary.ip、intermediary.asset.ip | 未加工ログの gw-ip フィールドの値 |
ホスト | target.hostname、target.asset.hostname | 未加工ログの host フィールドの値 |
host-name | principal.hostname、principal.asset.hostname | 未加工ログの host-name フィールドの値 |
hostname | principal.hostname、principal.asset.hostname | 未加工ログの hostname フィールドの値 |
ip | target.ip、target.asset.ip | 未加工ログの ip フィールドの値 |
mx-ip | intermediary.ip、intermediary.asset.ip | 未加工ログの mx-ip フィールドの値 |
objects-list | additional.fields.Object_{index} .value.string_value |
未加工ログ内の各 objects-list オブジェクトについて、オブジェクトを抽出し、UDM の Object_{index} にマッピングします。ここで、index は配列内のオブジェクトのインデックスです。 |
オペレーション | about.labels.Operation.value | 未加工ログの Operation フィールドの値 |
Operation type |
about.labels.Operation Type .value |
未加工ログの Operation type フィールドの値 |
os-user | principal.user.userid、additional.fields.OS User .value.string_value |
os-user が空ではなく、db-user が空の場合は、未加工ログから os-user フィールドとしてマッピングします。それ以外の場合は、未加工ログの OS User フィールドとしてマッピングします。 |
解析されたクエリ | target.process.command_line | 未加工ログの Parsed Query フィールドの値 |
parsed-query | additional.fields.Parsed Query .value.string_value |
未加工ログの parsed-query フィールドの値 |
pid | target.process.pid | 未加工ログの pid フィールドの値 |
policy-id | security_result.detection_fields.Policy_ID_{index} .value |
未加工ログ内の各 policy-id オブジェクトについて、ポリシーを抽出し、UDM の Policy_ID_{index} にマッピングします。ここで、index は配列内のオブジェクトのインデックスです。 |
policyName | security_result.detection_fields.policyName_label.value | 未加工ログの policyName フィールドの値 |
ポート | target.port | 未加工ログの port フィールドの値 |
特権付き | about.labels.Privileged.value | Privileged が true の場合は「True」にマッピングし、それ以外の場合は「False」にマッピングします。 |
proto | network.ip_protocol | 未加工ログの proto フィールドの値 |
プロトコル | network.ip_protocol | protocol が「TCP」または「UDP」の場合、未加工ログの protocol フィールドとしてマッピングします。 |
PWD | target.file.full_path | 未加工ログの PWD フィールドの値 |
Raw Data |
target.resource.attribute.labels.raw_Data.value | 未加工ログの Raw Data フィールドの値 |
raw-query | additional.fields.Raw Query .value.string_value |
未加工ログの raw-query フィールドの値 |
ruleName | security_result.rule_name | 未加工ログの ruleName フィールドの値 |
server-group | additional.fields.serve_group_label.value.string_value | 未加工ログの server-group フィールドの値 |
service-name | additional.fields.service_name_label.value.string_value | 未加工ログの service-name フィールドの値 |
Service Type |
additional.fields.Service Type .value.string_value |
未加工ログの Service Type フィールドの値 |
サイズ | network.received_bytes | 未加工ログの size フィールドの値 |
Stored Proc |
about.labels.Stored_Proc.value | Stored Proc が true の場合は「True」にマッピングし、それ以外の場合は「False」にマッピングします。 |
Table Group |
target.group.group_display_name | 未加工ログの Table Group フィールドの値 |
timestamp | metadata.event_timestamp | 未加工ログの timestamp フィールドの値 |
~ | network.email.to | to から「<」と「>」を削除して network.email.to にマッピングします |
USER | principal.user.userid、target.user.userid | USER が空でなく、USER が「admin」の場合、未加工ログの USER フィールドを target.user.userid にマッピングします。それ以外の場合、USER が空でなければ、未加工ログの USER フィールドを principal.user.userid にマッピングします。 |
user-authenticated | security_result.detection_fields.user_authenticated.value | 未加工ログの user-authenticated フィールドの値 |
user-group | additional.fields.user_group_label.value.string_value | 未加工ログの user-group フィールドの値 |
ユーザー名 | principal.user.user_display_name | 未加工ログの username フィールドの値 |
usrName | principal.user.userid | 未加工ログの usrName フィールドの値 |
extensions.auth.mechanism | description に「authentication failure」、「check pass; user unknown」、「Invalid user」、「invalid user」が含まれている場合、または error が空でない場合は、「USERNAME_PASSWORD」にハードコードされます。 |
|
extensions.auth.type | has_principal が「true」、has_target が「true」、event-type が「Login」の場合、「AUTHTYPE_UNSPECIFIED」にハードコードされます。 |
|
metadata.event_type | PWD が空でない場合は「PROCESS_OPEN」にハードコードされます。message に「starting」が含まれている場合、または application が「pman」、「CROND」、「run-parts」のいずれかで、event_type が空の場合、「PROCESS_OPEN」にハードコードされます。description が「Syslog connection established」、「Syslog connection broken」、「Syslog connection failed」の場合、「NETWORK_CONNECTION」にハードコードされます。application が「postfix/qmgr」、「postfix/local」、「postfix/pickup」の場合、「EMAIL_UNCATEGORIZED」にハードコードされます。application が「postfix/local」または「postfix/pickup」で、status が「sent (delivered to mailbox)」の場合、「EMAIL_TRANSACTION」にハードコードされます。application が「sshd」で、description に「check pass; user unknown」が含まれておらず、description に「authentication failure」が含まれておらず、description に「invalid」が含まれていない場合は、「NETWORK_HTTP」にハードコードされます。description に「authentication failure」、「check pass; user unknown」、「Invalid user」、「invalid user」が含まれている場合、または error が空でない場合、「USER_LOGIN」にハードコードされます。file_path が空でない場合は「FILE_SYNC」にハードコードされます。message に「reconfigure」が含まれており、application が「pman」の場合は、「PROCESS_UNCATEGORIZED」にハードコードされます。message に「exit code 1」が含まれていて、application が「pman」の場合、「PROCESS_TERMINATION」にハードコードされます。eventType が空でなく、srcIP と dstIP が空でない場合、「NETWORK_CONNECTION」にハードコードされます。has_principal が「true」で、has_target が「true」で、event-type が「Login」の場合、「USER_LOGIN」にハードコードされます。has_principal が「true」で、has_target が「true」で、protocol が空でない場合、「NETWORK_CONNECTION」にハードコードされます。has_principal が「true」の場合は「STATUS_UPDATE」にハードコードされます。event_type が空の場合、または「GENERIC_EVENT」の場合は、「GENERIC_EVENT」にハードコードされます。 |
|
metadata.log_type | 「IMPERVA_DB」にハードコードされています | |
metadata.product_name | 「IMPERVA DB」にハードコードされています | |
metadata.vendor_name | 「IMPERVA DB」にハードコードされています | |
security_result.action | description に「authentication failure」、「check pass; user unknown」、「Invalid user」、「invalid user」が含まれておらず、error が空の場合、「ALLOW」にハードコードされます。description に「authentication failure」、「check pass; user unknown」、「Invalid user」、「invalid user」のいずれかが含まれている場合、または error が空でない場合は、「BLOCK」にハードコードされます。 |
|
security_result.rule_id | description に「alert_score」または「new_alert_score」が含まれている場合は、description から ruleid を抽出し、security_result.rule_id にマッピングします。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。