Fortinet FortiWeb のログを収集する
このドキュメントでは、Bindplane を使用して Fortinet FortiWeb ログを Google Security Operations に取り込む方法について説明します。
このパーサーは、Fortinet FortiWeb KV 形式のログからフィールドを抽出します。grok または kv を使用してログ メッセージを解析し、これらの値を統合データモデル(UDM)にマッピングします。また、イベントのソースとタイプのデフォルトのメタデータ値も設定します。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- Windows Server 2016 以降、または
systemdを使用する Linux ホスト - プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
- Fortinet FortiWeb ウェブ インターフェースへの特権アクセス
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
サービスが [アクティブ(実行中)] と表示されます。
その他のインストール リソース
その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルを見つける
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
構成ファイルを編集します。
config.yamlの内容全体を次の構成に置き換えます。receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'FORTINET_FORTIWEB' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
構成パラメータ
各プレースホルダを次のように置き換えます。
レシーバーの構成:
udplog: UDP Syslog にはudplog、TCP Syslog にはtcplogを使用します。0.0.0.0: リッスンする IP アドレス(すべてのインターフェースでリッスンする場合は0.0.0.0)514: リッスンするポート番号(標準の syslog ポート)
エクスポータの構成:
creds_file_path: 取り込み認証ファイルのフルパス:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: 「顧客 ID を取得する」セクションの顧客 IDendpoint: リージョン エンドポイント URL:- 米国:
malachiteingestion-pa.googleapis.com - ヨーロッパ:
europe-malachiteingestion-pa.googleapis.com - アジア:
asia-southeast1-malachiteingestion-pa.googleapis.com - 完全なリストについては、リージョン エンドポイントをご覧ください。
- 米国:
log_type: Chronicle に表示されるログタイプ(FORTINET_FORTIWEB)
構成ファイルを保存する
- 編集後、ファイルを保存します。
- 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 -f
Windows で 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"
Fortinet FortiWeb の syslog 転送を構成する
- FortiWeb ウェブ インターフェースにログインします。
- [Log & Report] > [Log Config] > [Other Log Settings] に移動します。
- [Syslog Policy] で、[Create New] をクリックして新しい syslog ポリシーを追加します。
- 次の構成の詳細を指定します。
- ポリシー名: わかりやすい名前を入力します(例:
Google-SecOps-Bindplane)。 - IP アドレス: Bindplane エージェント ホストの IP アドレスを入力します。
- ポート: 「
514」と入力します。 - 有効にする: [有効にする] を選択します。
- ファシリティ: local0(または任意のファシリティ)を選択します。
- ログレベル: [情報](または任意のレベル)を選択します。
- ポリシー名: わかりやすい名前を入力します(例:
- [ログの種類] セクションで、次の項目を有効にします。
- 攻撃ログ
- イベントログ
- トラフィック ログ
- [OK] をクリックして保存します。
- Bindplane エージェントのログを確認して、syslog メッセージが送信されていることを確認します。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| アクション | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| アクション | security_result.action_details | アクションが「Allow」または「accept」の場合、security_result.action_details は「ALLOW」に設定されます。アクションが「Denied」、「deny」、「block」、「Block」の場合、security_result.action_details は「BLOCK」に設定されます。 |
| アプリ | network.application_protocol | 値は大文字に変換された後、直接マッピングされます。値が HTTPS、HTTP、DNS、DHCP、SMB のいずれかの場合のみ。 |
| app_name | additional.fields[].key | キーが「appName」に設定されます。 |
| app_name | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| backend_service | additional.fields[].key | キーが「backend_service」に設定されます。 |
| backend_service | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| 猫 | security_result.category_details | 値は直接マッピングされます。 |
| client_level | security_result.category | client_level が「Malicious」の場合、security_result.category は「NETWORK_MALICIOUS」に設定されます。 |
| cn1 | additional.fields[].value.string_value | threatWeight フィールドにマッピングされます。 |
| cn1Label | additional.fields[].key | キーが cn1Label 値に設定されます。 |
| cn2 | additional.fields[].value.string_value | length フィールドにマッピングされます。 |
| cn2Label | additional.fields[].key | キーが cn2Label 値に設定されます。 |
| cn3 | additional.fields[].value.string_value | signatureID フィールドにマッピングされます。 |
| cn3Label | additional.fields[].key | キーが cn3Label 値に設定されます。 |
| cs1 | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| cs1Label | additional.fields[].key | キーが cs1Label 値に設定されます。 |
| cs1 | principal.user.product_object_id | cs1Label が「userID」と一致する場合(大文字と小文字を区別しない)、値は直接マッピングされます。 |
| cs2 | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| cs2Label | additional.fields[].key | キーが cs2Label 値に設定されます。 |
| cs2 | principal.user.userid | cs2Label が「userName」(大文字と小文字を区別しない)と一致し、suid が空の場合、値は直接マッピングされます。 |
| cs3 | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| cs3Label | additional.fields[].key | キーが cs3Label 値に設定されます。 |
| cs3 | metadata.severity | cs3Label が「level」で、cs3 が空でない場合、値は直接マッピングされます。 |
| cs4 | additional.fields[].value.string_value | subType フィールドにマッピングされます。 |
| cs4Label | additional.fields[].key | キーが cs4Label 値に設定されます。 |
| cs5 | additional.fields[].value.string_value | threatLevel フィールドにマッピングされます。 |
| cs5Label | additional.fields[].key | キーが cs5Label 値に設定されます。 |
| cs6 | additional.fields[].value.string_value | owaspTop10 フィールドにマッピングされます。 |
| cs6Label | additional.fields[].key | キーが cs6Label 値に設定されます。 |
| 日付 | metadata.event_timestamp.seconds | 時刻と組み合わされ、解析されてエポック秒が生成されます。 |
| dev_id | principal.resource.id | 値は直接マッピングされます。 |
| devname | principal.resource.name | 値は直接マッピングされます。 |
| device_event_class_id | metadata.product_event_type | CEF の解析で使用されます。 |
| device_product | metadata.product_name | CEF の解析で使用されます。 |
| device_vendor | metadata.vendor_name | CEF の解析で使用されます。 |
| device_version | metadata.product_version | CEF の解析で使用されます。 |
| dhost | target.hostname | 値は直接マッピングされます。 |
| dpt | target.port | 値は直接マッピングされ、整数に変換されます。 |
| dst | target.ip | 値は直接マッピングされます。 |
| dst_port | target.port | 値は直接マッピングされ、整数に変換されます。 |
| dstepid | target.process.pid | 値は直接マッピングされます。 |
| dsteuid | target.user.userid | 値は直接マッピングされます。 |
| event_name | metadata.product_event_type | CEF の解析で使用されます。 |
| http_agent | network.http.parsed_user_agent | 値はユーザー エージェント文字列として解析されます。 |
| http_method | network.http.method | 値は直接マッピングされます。 |
| http_refer | network.http.referral_url | 値は直接マッピングされます。 |
| http_session_id | network.session_id | 値は直接マッピングされます。 |
| http_url | target.url | 値は直接マッピングされます。 |
| http_version | metadata.product_version | 値は直接マッピングされます。 |
| 長さ | additional.fields[].key | キーが「length」に設定されます。 |
| 長さ | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| log_type | metadata.log_type | 「FORTINET_FORTIWEB」にハードコードされます。 |
| main_type | additional.fields[].key | キーが「mainType」に設定されます。 |
| main_type | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| メッセージ | 各種フィールド | grok フィルタと kv フィルタを使用して解析し、さまざまなフィールドを抽出します。 |
| ml_allow_method | additional.fields[].key | キーが「ml_allow_method」に設定されます。 |
| ml_allow_method | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_arg_dbid | additional.fields[].key | キーが「ml_arg_dbid」に設定されます。 |
| ml_arg_dbid | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_domain_index | additional.fields[].key | キーは「ml_domain_index」に設定されます。 |
| ml_domain_index | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_log_arglen | additional.fields[].key | キーは「ml_log_arglen」に設定されます。 |
| ml_log_arglen | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_log_hmm_probability | additional.fields[].key | キーは「ml_log_hmm_probability」に設定されます。 |
| ml_log_hmm_probability | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_log_sample_arglen_mean | additional.fields[].key | キーは「ml_log_sample_arglen_mean」に設定されます。 |
| ml_log_sample_arglen_mean | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_log_sample_prob_mean | additional.fields[].key | キーは「ml_log_sample_prob_mean」に設定されます。 |
| ml_log_sample_prob_mean | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_svm_accuracy | additional.fields[].key | キーは「ml_svm_accuracy」に設定されます。 |
| ml_svm_accuracy | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_svm_log_main_types | additional.fields[].key | キーは「ml_svm_log_main_types」に設定されます。 |
| ml_svm_log_main_types | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_svm_log_match_types | additional.fields[].key | キーは「ml_svm_log_match_types」に設定されます。 |
| ml_svm_log_match_types | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| ml_url_dbid | additional.fields[].key | キーは「ml_url_dbid」に設定されます。 |
| ml_url_dbid | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| monitor_status | additional.fields[].key | キーが「monitor_status」に設定されます。 |
| monitor_status | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| msg | metadata.description | 値は直接マッピングされます。 |
| owasp_top10 | additional.fields[].key | キーは「owaspTop10」に設定されます。 |
| owasp_top10 | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| principal_app | principal.application | 値は直接マッピングされます。 |
| principal_host | principal.hostname | 値は直接マッピングされます。 |
| proto | network.ip_protocol | 値は、大文字に変換された後で直接マッピングされます。 |
| リクエスト | target.url | 値は直接マッピングされます。 |
| requestMethod | network.http.method | 値は直接マッピングされます。 |
| rt | metadata.event_timestamp.seconds | エポックからのミリ秒数として解析され、秒数に変換されます。 |
| security_result.severity | security_result.severity | severity_level から取得されます。未加工のログ値に基づいて、さまざまな UDM の重大度値にマッピングされます。一致するものが見つからない場合、デフォルトは UNKNOWN_SEVERITY です。 |
| server_pool_name | additional.fields[].key | キーは「server_pool_name」に設定されます。 |
| server_pool_name | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| サービス | network.application_protocol | 値は大文字に変換された後、直接マッピングされます。 |
| サービス | target.application | HTTPS、HTTP、DNS、DHCP、SMB のいずれでもない場合、値は大文字に変換されてから直接マッピングされます。 |
| 重要度 | security_result.severity | 重大度が空で、cs3Label が「level」の場合、cs3 の値が使用されます。次に、UDM の重大度値(LOW、HIGH など)にマッピングされます。 |
| signature_id | security_result.rule_id | 値は直接マッピングされます。 |
| signature_subclass | security_result.detection_fields[].key | キーが「signature_subclass」に設定されます。 |
| signature_subclass | security_result.detection_fields[].value | 値は直接マッピングされます。 |
| src | principal.ip | 値は直接マッピングされます。 |
| src_country | principal.location.country_or_region | 値は直接マッピングされます。 |
| src_ip | principal.ip | 値は直接マッピングされます。 |
| src_port | principal.port | 値は直接マッピングされ、整数に変換されます。 |
| srccountry | principal.location.country_or_region | 値は直接マッピングされます。 |
| sub_type | additional.fields[].key | キーが「subType」に設定されます。 |
| sub_type | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| subtype | target.resource.resource_subtype | 値は直接マッピングされます。 |
| suid | principal.user.userid | 値は直接マッピングされます。 |
| threat_level | additional.fields[].key | キーが「threatLevel」に設定されます。 |
| threat_level | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| threat_weight | security_result.detection_fields[].key | キーは「threat_weight」に設定されます。 |
| threat_weight | security_result.detection_fields[].value | 値は直接マッピングされます。 |
| 時間 | metadata.event_timestamp.seconds | 日付と組み合わされ、解析されてエポック秒が生成されます。 |
| user_id | principal.user.product_object_id | 値は直接マッピングされます。 |
| user_name | additional.fields[].key | キーが「userName」に設定されます。 |
| user_name | additional.fields[].value.string_value | 値は直接マッピングされます。 |
| user_name | principal.user.userid | 値は直接マッピングされます。 |
| なし | metadata.event_type | principal.ip と target.ip の両方が存在する場合は、「NETWORK_CONNECTION」に設定されます。principal.ip と principal.user が存在する場合は、「USER_UNCATEGORIZED」に設定されます。principal.ip のみが存在する場合は「STATUS_UPDATE」に設定されます。それ以外の場合は、「GENERIC_EVENT」に設定されます。 |
| なし | metadata.log_type | 「FORTINET_FORTIWEB」にハードコードされます。 |
| なし | metadata.product_name | ログ形式に基づいて「FORTINET FORTIWEB」または「FortiWEB Cloud」にハードコードされます。 |
| なし | metadata.vendor_name | ログ形式に基づいて「FORTINET」または「Fortinet」にハードコードされます。 |
| なし | principal.resource.resource_type | dev_id が存在する場合は「DEVICE」にハードコードされます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。