Azure Monitor エージェントを使用して Syslog と CEF のメッセージを Microsoft Sentinel に取り込む

この記事では、AMA 経由の Syslog コネクタと AMA 経由の Common Event Format (CEF) コネクタを使って、Linux マシンから、またネットワークとセキュリティ デバイスおよびアプライアンスから、Common Event Format (CEF) のものを含む Syslog メッセージをすばやくフィルター処理して取り込む方法について説明します。

これらのコネクタにより、Syslog や CEF メッセージを収集する Linux マシンに Azure Monitor エージェント (AMA) がインストールされます。 このマシンは、メッセージの送信元の場合もあれば、ネットワークまたはセキュリティ デバイスとアプライアンスなどの他のマシンからメッセージを収集するフォワーダーの場合もあります。 コネクタは、ユーザーが定義するデータ収集ルール (DCR) に基づいてエージェントに指示を送信します。 DCR では、監視対象のシステムと、収集するログまたはメッセージの種類が指定されており、パフォーマンスの向上およびクエリと分析の効率化のためにメッセージを取り込む前に適用するフィルターが定義されています。

重要

2023 年 2 月 28 日に、CommonSecurityLog テーブル スキーマの変更を導入しました。 この変更に伴い、カスタム クエリの確認と更新が必要になる場合があります。 詳細については、このブログ投稿の「推奨アクション」セクションを参照してください。 すぐに使用できるコンテンツ (検出、ハンティング クエリ、ブック、パーサーなど) が、Microsoft Sentinel によって更新されました。

概要

Syslog と CEF は、さまざまなデバイスとアプリケーションからデータをログするための 2 つの一般的な形式です。 それらは、システム管理者とセキュリティ アナリストが、ネットワークの監視とトラブルシューティングを行い、潜在的な脅威やインシデントを特定するのに役立ちます。

Syslog とは

Syslog は、ネットワークを経由して異なるデバイス間またはアプリケーション間でメッセージを送受信するための標準プロトコルです。 もともとは Unix システム用に開発されましたが、現在ではさまざまなプラットフォームやベンダーによって広くサポートされています。 Syslog メッセージには、優先順位、タイムスタンプ、ホスト名、アプリケーション名、プロセス ID、メッセージ テキストで構成される定義済みの構造があります。 Syslog メッセージは、構成とセキュリティの要件に応じて、UDP、TCP、または TLS 経由で送信できます。

Common Event Format (CEF) の概要

CEF (Common Event Format) は、ファイアウォール、ルーター、検出と対応ソリューション、侵入検出システムなどのネットワークとセキュリティのデバイスとアプライアンスから、および Web サーバーなどの他の種類のシステムからのデータをログするための、ベンダーに依存しない形式です。 Syslog を拡張したものであり、特にセキュリティ情報イベント管理 (SIEM) ソリューション用に開発されました。 CEF メッセージには、デバイスのベンダー、デバイス製品、デバイスのバージョン、イベント クラス、イベントの重大度、イベント ID などの情報を含む標準ヘッダーがあります。 CEF メッセージには、送信元と送信先の IP アドレス、ユーザー名、ファイル名、実行されたアクションなど、イベントに関する追加の詳細を提供する可変数の拡張部分もあります。

Microsoft Sentinel が Azure Monitor エージェントを使用して Syslog と CEF のメッセージを収集する方法

次の図は、Microsoft Sentinel での Syslog と CEF のメッセージ収集のアーキテクチャを示したものであり、AMA 経由の Syslog コネクタと AMA 経由の Common Event Format (CEF) コネクタを使っています。

この図は、Azure Monitor エージェント (AMA) がインストールされている単一の個々の Linux 仮想マシンから収集される Syslog メッセージを示したものです。

Diagram of Syslog collection from single source.

Azure Monitor エージェントを使用するデータ インジェスト プロセスでは、次のコンポーネントとデータ フローが使用されます。

  • ログ ソース: Syslog メッセージを生成する、環境内のさまざまな Linux VM です。 これらのメッセージは、ローカル Syslog デーモンによって TCP または UDP ポート 514 (またはユーザー設定の別のポート) で収集されます。

  • ローカル Syslog デーモン (rsyslog または syslog-ng) は、TCP または UDP ポート 514 (またはユーザー設定の別のポート) でログ メッセージを収集します。 その後、デーモンはこれらのログを Azure Monitor エージェントに送信します (下の注を参照)。

  • Syslog メッセージ収集元の各 Linux VM にインストールする Azure Monitor エージェント後述する手順に従ってデータ コネクタを設定します。 エージェントはログを解析し、Microsoft Sentinel (Log Analytics) ワークスペースに送信します。

  • Microsoft Sentinel (Log Analytics) ワークスペース: ここに送信された Syslog メッセージは、最終的に Syslog テーブルに格納されます。そこでは、ログのクエリを実行し、ログの分析を実行して、セキュリティ上の脅威を検出して対応できます。

Note

  • Azure Monitor エージェントでは、Syslog の RFC 3164 と 5424 がサポートされています。

  • Syslog と CEF のメッセージを受信するために 514 以外のポートを使う場合は、Syslog デーモンでのポート構成が、メッセージを生成するアプリケーションのものと一致していることを確認してください。

  • Syslog デーモンは、AMA のバージョンに応じて、2 つの異なる方法でログを Azure Monitor エージェントに送信します。

    • AMA バージョン 1.28.11 以降では、TCP ポート 28330 でログを受信します。
    • これより前のバージョンの AMA では、Unix ドメイン ソケット経由でログを受信します。

データ コネクタを設定する

AMA 経由の Syslog コネクタを設定する

AMA 経由の Syslog コネクタの設定プロセスには、次の 2 つの部分があります。

  1. Azure Monitor エージェントをインストールし、データ収集ルール (DCR) を作成します。

  2. ログ フォワーダーを使って他のマシンからログを収集する場合は、ログ フォワーダーで "インストール" スクリプトを実行して、他のマシンからのメッセージをリッスンするように Syslog デーモンを構成し、必要なローカル ポートを開きます。

前提条件

  • 適切な Microsoft Sentinel ソリューション (SyslogCommon Event Format のどちらか一方または両方) を有効にする必要があります。

  • お使いの Azure アカウントに、次のロール/アクセス許可が必要です。

    組み込みのロール Scope 理由
    - Virtual Machine Contributor
    - Azure Connected Machine
       リソース管理者
  • 仮想マシン
  • Virtual Machine Scale Sets
  • Azure Arc 対応サーバー
  • エージェントをデプロイするため
    次のアクションを含む任意のロール
    Microsoft.Resources/deployments/*
  • サブスクリプション
  • Resource group
  • 既存のデータ収集ルール
  • Azure Resource Manager テンプレートをデプロイするには
    Monitoring Contributor
  • サブスクリプション
  • Resource group
  • 既存のデータ収集ルール
  • データ収集ルールを作成または編集するには

ログ フォワーダーの前提条件

ログ フォワーダーからメッセージを収集する場合は、次の追加の前提条件が適用されます。

  • ログを収集するには、指定された Linux VM (ログ フォワーダー) が必要です。

  • ログ フォワーダーが Azure 仮想マシン "でない" 場合、Azure Arc Connected Machine エージェントがインストールされている必要があります。

  • Linux ログ フォワーダー VM に Python 2.7 または 3 がインストールされている必要があります。 python --version または python3 --version コマンドを使用して確認してください。 Python 3 を使用している場合は、マシンで既定のコマンドとして設定されていることを確認するか、'python' ではなく 'python3' コマンドを使用して次のスクリプトを実行します。

  • ログ フォワーダーでは、syslog-ng または rsyslog デーモンのいずれかが有効になっている必要があります。

  • ログ フォワーダーの領域要件については、「Azure Monitor エージェントのパフォーマンス ベンチマーク」を参照してください。 また、スケーラブルなインジェストの設計に関する記載を含むこのブログ投稿も確認することをお勧めします。

  • ログ ソース (セキュリティ デバイスとアプライアンス) は、ローカル Syslog デーモンではなく、ログ フォワーダーの Syslog デーモンにログ メッセージを送信するように構成する必要があります。

データ インジェストの重複を回避する

Syslog メッセージと CEF メッセージの両方に同じ機能を使用すると、CommonSecurityLog テーブルと Syslog テーブル間でデータ インジェストが重複する可能性があります。

このシナリオを回避するには、次のいずれかの方法を使用します。

  • ソース デバイスでターゲット ファシリティの構成を有効にする場合: CEF 形式でログ フォワーダーにログを送信する各ソース マシンで、Syslog 構成ファイルを編集し、CEF メッセージの送信に使用されているファシリティを削除します。 これで、CEF で送信されるファシリティは、Syslog では送信されません。 次の手順で構成する各 DCR で、CEF または Syslog の該当するファシリティがそれぞれ使用されていることを確認してください。

    同じエージェントから Syslog と CEF 両方のメッセージを取り込むように DCR を調整する方法の例については、この記事で後述する「同じ DCR での Syslog と CEF のストリーミング」をご覧ください。

  • ソース アプライアンスのファシリティを変更できない場合: 次のクエリ例で示すように、取り込み時の変換を使って、Syslog ストリームから CEF メッセージを除外し、重複を回避します。 データはコレクター マシンからワークスペースに 2 回送信されます。

    source |
    where ProcessName !contains "CEF"
    

ログ フォワーダーのセキュリティに関する考慮事項

組織のセキュリティ ポリシーに従って、コンピューターのセキュリティを構成してください。 たとえば、企業のネットワーク セキュリティ ポリシーに合わせてネットワークを構成し、デーモンのポートとプロトコルを要件に合わせて変更することができます。 マシンのセキュリティ構成を向上させるには、Azure で VM をセキュリティで保護するか、ネットワーク セキュリティに関するこれらのベスト プラクティスを確認してください。

デバイスが TLS 経由で Syslog および CEF ログを送信する場合 (ログ フォワーダーがクラウド内にある場合など) は、TLS で通信するように Syslog デーモン (rsyslog または syslog-ng) を構成する必要があります。

AMA をインストールし、データ収集ルール (DCR) を作成する

この手順は、次の 2 つの方法のいずれかで実行できます。

  • Microsoft Sentinel ポータルAMA 経由の Syslog データ コネクタをデプロイして構成します。 このセットアップでは、ワークスペースごとに DCR を作成、管理、削除できます。 AMA は、コネクタ構成で選択した VM に自動的にインストールされます。
    —または—
  • ログ インジェスト API に HTTP 要求を送信します。 このセットアップでは、DCR を作成、管理、削除できます。 このオプションは、ポータルよりも柔軟です。 たとえば、API では、特定のログ レベルでフィルター処理できます。一方、UI で選択できるのは、最小ログ レベルのみです。 欠点は、DCR を作成する前に、ログ フォワーダーに Azure Monitor エージェントを手動でインストールする必要があることです。

下の適切なタブを選択して、それぞれの方法の手順を表示します。

コネクタ ページを開き、DCR ウィザードを開始する

  1. Azure portal を開き、Microsoft Sentinel サービスに移動します。

  2. ナビゲーション メニューから [データ コネクタ] を選択します。

  3. [検索] ボックスに、「Syslog」と入力します。 結果から AMA 経由の Syslog コネクタを選びます。

  4. 詳細ウィンドウで [コネクタ ページを開く] を選択します。

  5. [構成] 領域で、[+データ収集ルールの作成] を選びます。

    Screenshot showing the CEF via AMA connector page.

  6. [基本] タブで次の操作を行います。

    • DCR 名を入力します。
    • サブスクリプションを選択します。
    • DCR を置くリソース グループを選びます。

    Screenshot showing the DCR details in the Basic tab.

  7. [次へ: リソース]> を選択します。

リソースの定義 (VM)

[リソース] タブで、AMA をインストールするマシン (この場合はログ フォワーダー マシン) を選択します。 (ログ フォワーダーが一覧に表示されない場合は、Azure Connected Machine エージェントがインストールされていない可能性があります。)

  1. 使用可能なフィルターまたは検索ボックスを使用して、ログ フォワーダー VM を見つけます。 一覧でサブスクリプションを展開するとそのリソース グループを表示でき、リソース グループを展開するとその VM を表示できます。

  2. AMA をインストールするログ フォワーダー VM を選択します。 (VM 名にマウス ポインターを合わせると、VM 名の横にチェック ボックスが表示されます。)

    Screenshot showing how to select resources when setting up the DCR.

  3. 変更内容を確認し、[Next: Collect > (次へ: 収集 >) を選択します。

機能と重大度を選択し、DCR を作成する

Note

Syslog メッセージと CEF メッセージの両方に同じファシリティを使用すると、データ インジェストで重複が発生する場合があります。 「データ インジェストの重複を回避する」方法をご確認ください。

  1. [収集] タブで、各機能の最小ログ レベルを選択します。 ログ レベルを選択すると、Microsoft Sentinel によって、選択したレベルと、重大度がより高いその他のレベルのログが収集されます。 たとえば、[LOG_ERR] を選択すると、Microsoft Sentinel によって、LOG_ERRLOG_CRITLOG_ALERTLOG_EMERG レベルのログが収集されます。

    Screenshot showing how to select log levels when setting up the DCR.

  2. 選択内容を確認し、[次へ: 確認と作成] を選択します。

  3. [レビューと作成] タブで、 [作成] を選択します。

    Screenshot showing how to review the configuration of the DCR and create it.

  • コネクタにより、DCR の作成時に選択したマシンに Azure Monitor エージェントがインストールされます。

  • DCR が作成され、エージェントがインストールされると、Azure portal から通知が表示されます。

  • コネクタ ページで [最新の情報に更新] を選択して、DCR が一覧に表示されていることを確認します。

機能とログ レベルのセクションの例

機能とログ レベルの設定について、次の例をご確認ください。 name フィールドにはフィルター名が含まれます。

CEF メッセージのインジェストの場合、"streams" の値は "Microsoft-Syslog" ではなく "Microsoft-CommonSecurityLog" にする必要があります。

この例では、crondaemonlocal0local3、および uucp の各機能から WarningErrorCriticalAlert、および Emergency の各ログ レベルのイベントを収集します。

    "dataSources": {
      "syslog": [
        {
        "name": "SyslogStream0",
        "streams": [
          "Microsoft-Syslog"
        ],
        "facilityNames": [ 
          "cron",
          "daemon",
          "local0",
          "local3", 
          "uucp"
        ],
        "logLevels": [ 
          "Warning", 
          "Error", 
          "Critical", 
          "Alert", 
          "Emergency"
        ]
      }
    ]
  }
同じ DCR での Syslog と CEF のストリーミング

この例では、同じ DCR で Syslog と CEF のメッセージを収集する方法を示します。

1 つのエージェントと DCR を使って Syslog と CEF のメッセージを取り込む場合の手順について詳しくは、この記事で前に出てきた「データ インジェストの重複を回避する」をご覧ください。

DCR は、次の場合に CEF イベント メッセージを収集します。

  • InfoNoticeWarningErrorCriticalAlert、および Emergency の各ログ レベルの authpriv および mark 機能
  • WarningErrorCriticalAlert、および Emergency の各ログ レベルの daemon 機能

次の場合に Syslog イベント メッセージを収集します。

  • CriticalAlert、および Emergency の各ログ レベルの kernlocal0local5、および news 機能
  • Emergency ログ レベルの mail および uucp 機能
    "dataSources": {
      "syslog": [
        {
          "name": "CEFStream1",
          "streams": [ 
            "Microsoft-CommonSecurityLog"
          ],
          "facilityNames": [ 
            "authpriv", 
            "mark"
          ],
          "logLevels": [
            "Info",
            "Notice", 
            "Warning", 
            "Error", 
            "Critical", 
            "Alert", 
            "Emergency"
          ]
        },
        {
          "name": "CEFStream2",
          "streams": [ 
            "Microsoft-CommonSecurityLog"
          ],
          "facilityNames": [ 
            "daemon"
          ],
          "logLevels": [ 
            "Warning", 
            "Error", 
            "Critical", 
            "Alert", 
            "Emergency"
          ]
        },
        {
          "name": "SyslogStream3",
          "streams": [ 
            "Microsoft-Syslog"
          ],
          "facilityNames": [ 
            "kern",
            "local0",
            "local5", 
            "news"
          ],
          "logLevels": [ 
            "Critical", 
            "Alert", 
            "Emergency"
          ]
        },
        {
          "name": "SyslogStream4",
          "streams": [ 
            "Microsoft-Syslog"
          ],
          "facilityNames": [ 
            "mail",
            "uucp"
          ],
          "logLevels": [ 
            "Emergency"
          ]
        }
      ]
    }

"インストール" スクリプトを実行する

"インストール" スクリプトは実際には何かをインストールするのではなく、ログを収集するようにログ フォワーダーで Syslog デーモンを適切に構成します。

  1. コネクタ ページで、横にある "コピー" アイコンを選択して、[次のコマンドを実行して、CEF コレクターをインストールして適用します] の下に表示されるコマンド ラインをコピーします。

    Screenshot of command line on connector page.

    ここからコピーすることもできます。

    sudo wget -O Forwarder_AMA_installer.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/Syslog/Forwarder_AMA_installer.py&&sudo python Forwarder_AMA_installer.py
    
  2. AMA をインストールしたばかりのログ フォワーダー マシンにログインします。

  3. 最後の手順でコピーしたコマンドを貼り付けて、インストール スクリプトを起動します。
    スクリプトは、必要なプロトコルを使用するように rsyslog または syslog-ng デーモンを構成し、デーモンを再起動します。 このスクリプトは、UDP および TCP プロトコルの両方で受信メッセージをリッスンするために、ポート 514 を開きます。 この設定を変更するには、マシン上で実行されているデーモンの種類に応じた Syslog デーモン構成ファイルを参照してください。

    • Rsyslog: /etc/rsyslog.conf
    • Syslog-ng: /etc/syslog-ng/syslog-ng.conf

    Note

    エージェントが機能できないディスクがいっぱいになるシナリオを回避するため、不要なログを格納しないように syslog-ng または rsyslog の構成を設定することをお勧めします。 ディスクがいっぱいになるシナリオでは、インストールされている AMA の機能が中断されます。 RSyslog または Syslog-ng の詳細をご確認ください。

接続をテストする

  1. syslog デーモンが UDP ポートで実行されていること、および AMA がリッスンしていることを検証するには、次のコマンドを実行します。

    netstat -lnptv
    

    rsyslog または syslog-ng デーモンがポート 514 でリッスンしていることが示されます。

  2. ロガーまたは接続されているデバイスから送信されたメッセージをキャプチャするには、バックグラウンドで次のコマンドを実行します。

    tcpdump -i any port 514 -A -vv &
    
  3. 検証が完了したら、fg を入力し、Ctrl+C を選択して tcpdump を停止することをお勧めします。

  4. デモ メッセージを送信するには、次のいずれかを実行します。

    • netcat ユーティリティを使用します。 この例では、ユーティリティは、改行スイッチをオフにして、echo コマンドで投稿されたデータを読み取ります。 次に、このユーティリティは、タイムアウトなしで localhost の UDP ポート 514 にデータを書き込みます。 netcat ユーティリティを実行するには、追加のパッケージをインストールすることが必要な場合があります。

      echo -n "<164>CEF:0|Mock-test|MOCK|common=event-format-test|end|TRAFFIC|1|rt=$common=event-formatted-receive_time" | nc -u -w0 localhost 514
      
    • ロガーを使用します。 この例では、ローカル ホスト上のポート 514 に対して重大度レベル Warninglocal 4 機能に CEF RFC 形式でメッセージを書き込みます。 -t--rfc3164 フラグは、予期されている RFC 形式に準拠するために使用されます。

      logger -p local4.warn -P 514 -n 127.0.0.1 --rfc3164 -t CEF "0|Mock-test|MOCK|common=event-format-test|end|TRAFFIC|1|rt=$common=event-formatted-receive_time"
      
  5. コネクタが正しくインストールされていることを確認するには、次のコマンドのいずれかを使用してトラブルシューティング スクリプトを実行します。

    • CEF ログの場合は、次を実行します。

       sudo wget -O Sentinel_AMA_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/Syslog/Sentinel_AMA_troubleshoot.py&&sudo python Sentinel_AMA_troubleshoot.py --cef
      
    • Cisco Adaptive Security Appliance (ASA) ログの場合は、次を実行します。

      sudo wget -O Sentinel_AMA_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/Syslog/Sentinel_AMA_troubleshoot.py&&sudo python Sentinel_AMA_troubleshoot.py --asa
      
    • Cisco Firepower Threat Defense (FTD) ログの場合は、次を実行します。

      sudo wget -O Sentinel_AMA_troubleshoot.py https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/DataConnectors/Syslog/Sentinel_AMA_troubleshoot.py&&sudo python Sentinel_AMA_troubleshoot.py --ftd