Fortinet FortiClient のログを収集する

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

このドキュメントでは、Bindplane エージェントを使用して Fortinet FortiClient ログを Google Security Operations に取り込む方法について説明します。

FortiClient は、Windows、macOS、Linux、Chromebook のエンドポイントにウイルス対策、ウェブ フィルタリング、VPN、脆弱性スキャン、アプリケーション ファイアウォール機能を提供するエンドポイント セキュリティ ソリューションです。FortiClient は、FortiClient EMS(Endpoint Management Server)を通じて一元管理され、セキュリティ ポリシーと構成プロファイルをエンドポイントにプッシュします。

始める前に

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

  • Google SecOps インスタンス
  • Windows Server 2016 以降、または systemd を使用する Linux ホスト
  • Bindplane エージェントと FortiClient エンドポイント間のネットワーク接続
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
  • FortiClient EMS 管理コンソールへの特権アクセス
  • ライセンスが付与された FortiClient エンドポイントを含む FortiClient EMS バージョン 7.0 以降

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

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [収集エージェント] に移動します。
  3. [ダウンロード] をクリックして、取り込み認証ファイルをダウンロードします。
  4. 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
    

サービスが [アクティブ(実行中)] と表示されます。

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

その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。

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

構成ファイルを見つける

Linux:

sudo nano /etc/bindplane-agent/config.yaml

Windows:

notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"

構成ファイルを編集します。

config.yaml の内容全体を次の構成に置き換えます。

receivers:
    udplog:
    listen_address: "0.0.0.0:514"

exporters:
    chronicle/forticlient:
    compression: gzip
    creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
    customer_id: 'your-customer-id-here'
    endpoint: malachiteingestion-pa.googleapis.com
    log_type: FORTINET_FORTICLIENT
    raw_log_field: body
    ingestion_labels:
        env: production
        source: forticlient

service:
    pipelines:
    logs/forticlient_to_chronicle:
        receivers:
        - udplog
        exporters:
        - chronicle/forticlient

構成パラメータ

各プレースホルダを次のように置き換えます。

レシーバーの構成:

  • listen_address: リッスンする IP アドレスとポート。0.0.0.0:514 を使用して、ポート 514 のすべてのインターフェースをリッスンします。

エクスポータの構成:

  • 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
  • endpoint: リージョン エンドポイント URL:
    • 米国: malachiteingestion-pa.googleapis.com
    • ヨーロッパ: europe-malachiteingestion-pa.googleapis.com
    • アジア: asia-southeast1-malachiteingestion-pa.googleapis.com
    • 完全なリストについては、リージョン エンドポイントをご覧ください。
  • log_type: FORTINET_FORTICLIENT
  • ingestion_labels: YAML 形式のオプションのラベル

構成ファイルを保存する

編集が完了したら、ファイルを保存します。

  • Linux: Ctrl+OEnterCtrl+X の順に押します。
  • Windows: [ファイル>保存] をクリックします。

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

  • Linux

    sudo systemctl restart observiq-otel-collector
    
    1. サービスが実行されていることを確認します。

      sudo systemctl status observiq-otel-collector
      
    2. ログでエラーを確認します。

      sudo journalctl -u observiq-otel-collector -f
      
  • Windows

    次のいずれかのオプションを選択します。

    • 管理者としてコマンド プロンプトまたは PowerShell を使用します。

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Services コンソールを使用する場合:

      1. Win+R キーを押し、「services.msc」と入力して Enter キーを押します。
      2. observIQ OpenTelemetry Collector を見つけます。
      3. 右クリックして [再起動] を選択します。

      4. サービスが実行されていることを確認します。

        sc query observiq-otel-collector
        
      5. ログでエラーを確認します。

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

ログを Bindplane エージェントに送信するように FortiClient エンドポイント ロギングを構成する

FortiClient エンドポイント ロギングは、XML 構成でエンドポイント プロファイルを編集することにより、FortiClient EMS を介して一元的に構成されます。EMS はロギング構成を FortiClient エンドポイントにプッシュします。これにより、ログが Bindplane エージェントの syslog リスナーに直接送信されます。

FortiClient EMS にログインする

  1. FortiClient EMS ウェブ コンソールにログインします。
  2. [Endpoint Profiles] > [Manage Profiles] に移動します。

エンドポイント プロファイルを編集または作成する

  1. 編集する既存のプロフィールを選択するか、[追加] をクリックして新しいプロフィールを作成します。
  2. [プロファイル名] フィールドに、わかりやすい名前(Chronicle-Logging-Profile など)を入力します。
  3. [詳細設定] をクリックします。
  4. [XML 構成] タブをクリックします。
  5. [編集] をクリックします。

XML でリモート ロギングを構成する

EMS には 2 つのペインが表示されます。右側のペインを使用して、XML 構成を編集します。

<system> 内の <log_settings> セクションを見つけます。存在しない場合は追加します。<log_settings> 内で、<remote_logging> セクションを見つけるか追加して、次のように構成します。

<forticlient_configuration>
    <system>
    <log_settings>
        <onnet_local_logging>1</onnet_local_logging>
        <level>6</level>
        <log_events>ipsecvpn,sslvpn,scheduler,update,firewall,av,proxy,shield,webfilter,endpoint,fssoma,configd,vuln,sandboxing,antiexploit</log_events>
        <remote_logging>
        <log_upload_enabled>1</log_upload_enabled>
        <log_protocol>syslog</log_protocol>
        <netlog_server>192.168.1.100</netlog_server>
        <netlog_categories>7</netlog_categories>
        <log_upload_freq_minutes>5</log_upload_freq_minutes>
        </remote_logging>
    </log_settings>
    </system>
</forticlient_configuration>

構成パラメータ:

  • <log_upload_enabled>: リモート ロギングを有効にするには、1 に設定します。
  • <log_protocol>: ログを syslog サーバーに送信するには、syslog に設定します。代わりに faz を使用してログを FortiAnalyzer に送信します。
  • <netlog_server>: Bindplane エージェント ホストの IP アドレスを入力します(例: 192.168.1.100)。このパラメータは、<log_protocol>syslog に設定されている場合にのみ使用されます。
  • <netlog_categories>: アップロードするログカテゴリのビットマスクを入力します。
    • 1 = トラフィック ログ
    • 2 = 脆弱性ログ
    • 4 = イベントログ
    • 7 = すべてのカテゴリ(1 + 2 + 4)
  • <log_upload_freq_minutes>: ログのアップロード頻度を分単位で入力します(例: 5 分ごとに 5)。
  • <level>: FortiClient のロギング レベル。次のいずれかを入力します。
    • 0 = 緊急
    • 1 = アラート
    • 2 = 重大
    • 3 = エラー
    • 4 = 警告
    • 5 = 通知
    • 6 = 情報(推奨)
    • 7 = デバッグ
  • <log_events>: ログに記録する FortiClient イベントまたはプロセスのカンマ区切りリスト。キャプチャするイベント(ipsecvpn,sslvpn,firewall,av,webfilter,endpoint など)を含めます。

プロファイルを保存する

  1. [XML をテスト] をクリックして、XML 構成を検証します。
  2. [保存] をクリックしてプロファイルを保存します。

エンドポイントにプロファイルを適用する

  1. [Endpoint Policies] > [Manage Policies] に移動します。
  2. 既存のポリシーを選択するか、[追加] をクリックして新しいポリシーを作成します。
  3. [Profile] プルダウンで、作成または編集したプロファイルを選択します。
  4. [エンドポイント グループ] セクションで、ポリシーを適用するエンドポイント グループを選択します。
  5. [保存] をクリックします。

EMS は、次のテレメトリー通信でプロファイル構成をエンドポイントにプッシュします。FortiClient エンドポイントが、Bindplane エージェントの syslog リスナーにログの送信を開始します。

ログ転送を確認する

  1. Bindplane エージェント ホストで、エージェント ログを調べて、ログが受信されていることを確認します。

    Linux:

    sudo journalctl -u observiq-otel-collector -f
    

    Windows:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    
  2. FortiClient エンドポイントで、FortiClient ログを確認して、リモート ロギングが有効になっていることを確認します。

    Windows:

    C:\Program Files\Fortinet\FortiClient\logs\
    

    macOS:

    /Library/Application Support/Fortinet/FortiClient/logs/
    

    Linux:

    /var/log/forticlient/
    
  3. Google SecOps コンソールで、FortiClient ログが取り込まれていることを確認します。

    • [検索] に移動します。
    • FortiClient ログの検索クエリを入力します(例: metadata.log_type = "FORTINET_FORTICLIENT")。
    • ログが検索結果に表示されることを確認します。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
emsserial、devid、usingpolicy、itime、fctsn、logver、site、fctver、browsetime、event_id、SubjectUserName、SubjectLogonId、ThreadID additional.fields 各フィールドのキーと値で作成されたラベルが additional.fields に統合されます
timestamp metadata.collected_timestamp UNIX タイムスタンプとして解析
ts metadata.event_timestamp 「MMM d HH:mm:ss」、「MMM d HH:mm:ss」、「yyyy-MM-dd HH:mm:ss」の形式を使用して日付フィルタで解析されます
deviceip、client_ip、devicemac、hostname、user、uid metadata.event_type ユーザー/UID が存在し、マシン ID が存在する場合は USER_RESOURCE_ACCESS、マシン ID が存在する場合は USER_UNCATEGORIZED、それ以外の場合は GENERIC_EVENT に設定します。
eventtype metadata.product_event_type 値を直接コピー
id metadata.product_log_id 文字列に変換され、値がコピーされました
サービス network.application_protocol 大文字に変換し、リストと一致する場合は事前定義されたプロトコルに設定します(例: 「22」、「SSH」、「SSHD」の場合は「SSH」、「80」、「8080」、「HTTP」の場合は「HTTP」)、拡張リストにある場合はサービス、それ以外の場合は空
direction network.direction (?i)inbound と一致する場合は INBOUND、(?i)outbound と一致する場合は OUTBOUND に設定します。
proto network.ip_protocol proto == "6" の場合は "TCP" に設定
rcvdbyte network.received_bytes uinteger に変換され、空または 0 でない場合は値がコピーされます
sentbyte network.sent_bytes uinteger に変換され、空または 0 でない場合は値がコピーされます
sessionid network.session_id 値を直接コピー
pcdomain principal.administrative_domain 値を直接コピー
srcproduct principal.application 値を直接コピー
hostname principal.hostname 値を直接コピー
deviceip、client_ip principal.ip deviceip の値(空でない場合)、または client_ip の値(有効な IP の場合)
devicemac principal.mac MAC 形式に変換され、有効な場合は値がコピーされます
os、source principal.platform os/source が (?i)windows と一致する場合は WINDOWS、(?i)mac|ios と一致する場合は MAC、(?i)linux と一致する場合は LINUX に設定します。
source_ver principal.platform_version 値を直接コピー
srcport principal.port 整数に変換され、値がコピーされました
ProcessId principal.process.pid 値を直接コピー
srcname、source_type、type principal.resource.attribute.labels 各フィールドのキーと値で作成されたラベルが attribute.labels に統合されます
devname principal.resource.name 値を直接コピー
ProviderGuid principal.resource.product_object_id 値を直接コピー
subtype principal.resource.resource_subtype 値を直接コピー
URL principal.url 値を直接コピー
uid、fctuid principal.user.product_object_id uid が空でない場合は uid の値、それ以外の場合は fctuid
ユーザー principal.user.user_display_name 値を直接コピー
ユーザー principal.user.userid 値を直接コピー
SubjectUserSid principal.user.windows_sid SID の正規表現に一致する場合に値をコピー
utmaction security_result.action [accept,allow,passthrough,pass,permit,detected] の場合は ALLOW、[deny,dropped,blocked,block] の場合は BLOCK、それ以外の場合は UNKNOWN_ACTION に設定します。
utmevent security_result.category_details 値を直接コピー
utmaction security_result.description 「utmaction:"」に設定
userinitiated security_result.detection_fields キー「userinitiated」と userinitiated の値で作成されたラベル(マージ済み)
レベル security_result.severity level == "info" の場合、INFORMATIONAL に設定
脅威 security_result.threat_name 値を直接コピー
emshostname、remotename target.hostname emshostname が空でない場合はその値、それ以外の場合は remotename
dstip target.ip dstip から有効な IP を抽出しました
dstport target.port 整数に変換され、0 でない場合は値がコピーされます
metadata.product_name 「FORTINET_FORTICLIENT」に設定
metadata.vendor_name 「FORTINET_FORTICLIENT」に設定

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