「Wiresharkでsyslogプロトコルパケットを覗く」syslog-ng Store Box活用連載企画vol.4

本記事は2019年12月3日に公開したものをアップデートしたものです。

ジュピターテクノロジー株式会社のブログへようこそ!本連載記事の執筆者螺子(ネジ)です。

本連載企画は、楊枝(ヨウジ)とわたくし螺子2名で全20回に渡ってsyslog-ng Store Box(SSB)及びその最新周辺技術を紹介、読者の皆様と一緒に勉強・検証していくスキルアップブログを目指しております。

まえがき

これまでの連載記事(2021年12月全20回公開)

全て表示する

今回のお題と事前準備

今回は、Wiresharkを使って実際のsyslogプロトコルのネットワークパケットを覗いてみます。メッセージのフォーマットの違いや、SSBでsyslogメッセージがどのように表示されるかがわかりますよ(ただし、Wiresharkを使ってメッセージを盗聴するなどの悪用は厳禁です!)。

syslog-ng Agent for Windowsのダウンロード

ここでは、syslog-ng Agent for Windowsを使用して、Windowsイベントログをsyslogメッセージに変換してSSBに送信します。syslog-ng Agent for Windowsについては、過去記事「syslog-ng Agent for Windowsのご紹介」または、過去記事「syslog-ng Store Box(SSB) ライセンスで無料で利用できるsyslogエージェント!」をご覧ください。syslog-ng Agent for Windowsの評価版はこちらからダウンロードできます。

batファイルの準備

また、”eventcreate”コマンドを使用して下記のようにWindowsイベントログを作成(batファイルに保存して管理者として実行)しています。batファイルはここからダウンロードできます。

rem !LFは改行
SETLOCAL ENABLEDELAYEDEXPANSION
SET LF=^


eventcreate /ID 100 /L APPLICATION /SO testevent /T Information /D "This is test event log from Win10 application info(テストイベントログ)!LF!!LF!IP: 192.168.0.1!LF!セキュリティ ID: NT AUTHORITYSYSTEM!LF!プロセス ID: 0x1068!LF!プロセス名: C:WindowsSystem32CompatTelRunner.exe"

さっそくパケットを覗いてみる

IETF-syslog(RFC 5424)メッセージを覗く

それでは、まず、IETF-syslog(RFC 5424)メッセージのパケットを覗いてみましょう。

syslog-ng Agent for Windowsインストールして、宛先ログサーバーを設定(ここでは、SSBのIPアドレス)した後、[Properties]を確認します。

[Server]タブを開くと、[Server Name or Address (IPv4)]フィールドにはSSBのIPアドレス、[Server Port]は”601″が設定されています(図1)。

図1 syslog-ng Agent for Windowsの設定(IETF-syslogポート)
図1 syslog-ng Agent for Windowsの設定(IETF-syslogポート)

[Messages]タブを開くと、[Protocol]セクションの[Protocol]が”Syslog Protocol”になっています(図2)。これは、syslog-ng Agent for Windowsのデフォルトの設定です。

図2 syslog-ng Agent for Windowsの設定(IETF-syslogプロトコル)
図2 syslog-ng Agent for Windowsの設定(IETF-syslogプロトコル)

Wiresharkを起動して、パケットをキャプチャします(図3)。

図3 Wiresharkによるパケットキャプチャ例
図3 Wiresharkによるパケットキャプチャ例

“eventcreate”コマンドを使用してWindowsイベントログを生成します。イベントログはsyslog-ng Agent for Windowsによってsyslogメッセージとしてシスログサーバー(SSB)に送信されます。

キャプチャしたパケットを表示します。イベントログを送信したTCPパケットを特定して、[分析]>[追跡]>[TCPストリーム]を選択します(図4)。

図4 WireshakのTCPストリームメニュー
図4 WireshakのTCPストリームメニュー

syslogメッセージ(イベントログ)のTCPパケットを特定するには、Wiresharkのフィルター設定で下記のように送信元IPアドレス、宛先IPアドレス、およびポートを指定すると特定しやすくなります。この例では、syslogメッセージ(イベントログ)を送信しているクライアントのIPアドレスが”192.168.93.33″、ログサーバー(SSB)のIPアドレスが”192.168.91.127″、TCPポートを”601″でフィルターしています。

Wiresharkフィルター例:
ip.src == 192.168.93.33 and ip.dst == 192.168.91.127 and tcp.port == 601

“UTF-8形式”を選択すると日本語(マルチバイト文字)も読めるようになります(図5)。syslog-ng Agent for Windowsはマルチバイト文字をUTF-8に変換して送信します。SSBはデフォルトでUTF-8形式を認識します。

図5 TCPストリームのURF-8形式表示
図5 TCPストリームのURF-8形式表示

では、実際に送信されたログデータを詳しく見てみましょう(図6)。

図6 TCPストリーム(IETFメッセージ)
図6 TCPストリーム(IETFメッセージ)

IETF-syslogメッセージは、以下の部分と値で構成されています。各値は半角スペースで区切られています。IETF-syslog(RFC 5424)メッセージフォーマットについては、過去記事「IETF-syslog(RFC 5424)メッセージフォーマット」も合わせてご覧ください。

HEADER部

  • ① プライオリティ: メッセージのファシリティおよびセベリティを表します。プライオリティ値は<>で囲まれています。
  • ② バージョン: syslogプロトコルのバージョン番号を表します。現在、この値は1のみになります。
  • ③ タイムスタンプ: ISO8901互換のタイムスタンプ形式になります。
  • ④ ホスト名: メッセージを最初に送信したマシン名を表します。
  • ⑤ アプリケーション: メッセージを生成したデバイスあるいはアプリケーションを表します。
  • ⑥ PID: syslogアプリケーションのプロセス名あるいはプロセスIDを表します。
  • ⑦ メッセージID: メッセージのID番号を表します。この例では番号が割り当てられていないため’-‘になります。

STRUCTURED-DATA部

  • ⑧ 構造化データ: syslog-ngメッセージに関するメタ情報、あるいはトラフィックカウンターやIPアドレスのようなアプリケーション固有の情報を表します。構造化データは[]で囲まれています。

MSG部

  • ⑨メッセージ: プログラム[プログラムID]と:(コロン半角スペース)に続いてメッセージテキストを表します。

その他

  • ⑩メッセージサイズ: マルチラインメッセージを含むメッセージの境界を認識するためのメッセージサイズを表します。

受信したログメッセージがSSBでどのように表示されるか確認してみましょう(図7)。SSBで受信したログメッセージを閲覧する方法については、過去記事「syslog-ng Store Box(SSB)のログ閲覧・検索」をご覧ください。

図7 SSBのメッセージ表示(IETF-syslogメッセージ)
  1. Processed timestamp: SSBがログメッセージを受信したタイムスタンプです。これは、ログメッセージには含まれていません。
  2. Timestamp: ログメッセージのタイムスタンプの値です※1
  3. Host: SSBにメッセージを送信したクライアントのIPアドレスまたはホスト名です※1
  4. Program[PID]: Programはメッセージを作成したアプリケーションです。ログメッセージのアプリケーションの値になります。PIDはメッセージを作成したアプリケーションのプログラムIDです。ログメッセージのPIDの値になります。
  5. Facility: ログメッセージを送信したファシリティ値です。ログメッセージのプライオリティの値から算出されます※2
  6. Priority: ログメッセージのプライオリティ値です。ログメッセージのプライオリティの値から算出されます※2。SSBではPriorityと表示されていますが、この値はセベリティ値になります。
  7. Unique ID: メッセージの一意なIDです。これは、SSBが動的に作成しログメッセージには含まれていません。
  8. Tags: パターンデータベースに一致したメッセージに割り当てられたタグです。これは、ログメッセージには含まれていません。
  9. Message: ログメッセージのテキストです。ログメッセージのメッセージの値になります。
  10. Dynamic columns: ログメッセージの構造化データがname-valueペアとして認識され動的カラムとして利用できます。
※1 ソースオプション[Trusted]有効時

[Log]>[Sources]>[<各ソース>]の[Hostname and timestamp related settings]セクション以下の[Trusted]を有効にした場合。無効の場合は、メッセージを受信した時間、およびメッセージの送信元IPアドレスまたはDNSで名前解決している場合はDNSで返されたホスト名になります。

※2 プライオリティ値

※2 プライオリティ値は=ファシリティx8 + セベリティになります。ここでは、プライオリティ値は134ですので、ファシリティ=16、セベリティ=6になります。

BSD-syslogメッセージを覗く

次に、”BSD-syslog メッセージ”のパケットを覗いてみましょう。

[Server]タブを開いて、[Server Port]は”514″に変更します(図8)。

図8 syslog-ng Agent for Windowsの設定(BSD-syslogポート)
図8 syslog-ng Agent for Windowsの設定(BSD-syslogポート)

[Messages]タブで、[Protocol]セクションの[Protocol]を”Legacy BSD Syslog Protocol”に変更します([Template]は自動的に”<${PRI}>${BSDDATE} ${HOST} ${MSGHDR}${MSG}”に設定されます)。[OK]をクリックして設定を保存します。(図9)。

図9 syslog-ng Agent for Windowsの設定(BSD-syslogプロトコル)
図9 syslog-ng Agent for Windowsの設定(BSD-syslogプロトコル)

設定を有効にするのに、サービスを再起動します(図10)。

図10 syslog-ng Agent for Windowsサービスの再起動

上述と同様に”eventcreate”コマンドを使用してWindowsイベントログを生成し、パケットをキャプチャしてTCPストリームを表示します(図11)。

図10 syslog-ng Agent for Windowsサービスの再起動
図11 TCPストリーム(BSDメッセージ)

BSD-syslog メッセージは、以下の部分と値で構成されています。各値は半角スペースで区切られています。BSD-syslog メッセージフォーマットについては、過去記事「BSD-syslog メッセージフォーマット」も合わせてご覧ください

PRI部

  • ① プライオリティ値: メッセージのファシリティおよびセベリティを表します。プライオリティ値は<>で囲まれています。

HEADER部

  • ② タイムスタンプ: Mmm dd:hh:mm:ss形式で表します。
  • ③ ホスト名: ホスト名あるいはデバイスのIPアドレスを表します。

MSG部

  • ④ メッセージ: プログラム[プログラムID]と:(コロン半角スペース)に続いてメッセージテキストを表します。

受信したログメッセージがSSBでどのように表示されるか確認してみましょう。SSBで受信したログメッセージを閲覧する方法については、過去記事「syslog-ng Store Box(SSB)のログ閲覧・検索」をご覧ください。

図12 SSBのメッセージ表示(BSDメッセージ)
図12 SSBのメッセージ表示(BSDメッセージ)
  1. Processed timestamp: SSBがログメッセージを受信したタイムスタンプです。これは、ログメッセージには含まれていません。
  2. Timestamp: ログメッセージのタイムスタンプの値です※1
  3. Host: SSBにメッセージを送信したクライアントのIPアドレスまたはホスト名です※1
  4. Program[PID]: Programはメッセージを作成したアプリケーションです。ログメッセージのアプリケーションの値になります。PIDはメッセージを作成したアプリケーションのプログラムIDです。ログメッセージのPIDの値になります。
  5. Facility: ログメッセージを送信したファシリティ値です。ログメッセージのプライオリティの値から算出されます※2
  6. Priority: ログメッセージのプライオリティ値です。ログメッセージのプライオリティの値から算出されます※2。SSBではPriorityと表示されていますが、この値はセベリティ値になります。
  7. Unique ID: メッセージの一意なIDです。これは、SSBが動的に作成しログメッセージには含まれていません。
  8. Tags: パターンデータベースに一致したメッセージに割り当てられたタグです。これは、ログメッセージには含まれていません。
※1 ソースオプション[Trusted]有効時

[Log]>[Sources]>[<各ソース>]の[Hostname and timestamp related settings]セクション以下の[Trusted]を有効にした場合。無効の場合は、メッセージを受信した時間、およびメッセージの送信元IPアドレスまたはDNSで名前解決している場合はDNSで返されたホスト名になります。

※2 プライオリティ値

※2 プライオリティ値は=ファシリティx8 + セベリティになります。ここでは、プライオリティ値は134ですので、ファシリティ=16、セベリティ=6になります。

まとめ

如何でしたでしょうか?
syslogメッセージの内容と受信したsyslogメッセージがSSBでどう表示されるかが理解できたでしょうか?

syslog-ng Agent for Windowsを使用してWindowsのイベントログをsyslogメッセージとして送信する場合、構造化データがあり、柔軟な検索や閲覧が可能なIETF-syslog(RFC 5424)メッセージによる送信をお勧めします。

それでは、次回連載記事をお楽しみに!


SSBは、高信頼ログ管理アプライアンスです。様々なデバイスおよびアプリケーションからログメッセージを収集、分類、フィルタリング、正規化して安全に保存可能です。ログデータの信頼性を担保し、膨大なログが発生する高負荷環境、あるいはログロストが許されない企業・組織のログ管理に最適です。

お問い合わせもお気軽にどうぞ。

こんな記事も読まれています

最新記事

おすすめ記事

  1. 産業スパイを発見し、防ぐ方法とは

  2. Flexible NetFlowとは?を5分で理解する

  3. WinSyslog 使い方ガイド#2 受信時刻とデバイスタイムスタンプ両方を出力する

製品カテゴリー

JTC IT用語集
TOP