2019年12月4日水曜日

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

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

ジュピターテクノロジー株式会社のブログへようこそ!本連載記事の執筆者螺子(ネジ)です。
本連載企画は、楊枝(ヨウジ)とわたくし螺子2名で全20回に渡ってsyslog-ng Store Box及びその最新周辺技術を紹介、読者の皆様と一緒に勉強・検証していくスキルアップブログを目指しております。


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

ここでは、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の評価版はこちらからダウンロードできます。

また、"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 AUTHORITY\SYSTEM!LF!プロセス ID: 0x1068!LF!プロセス名: C:\Windows\System32\CompatTelRunner.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ポート)

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

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

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

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

・では、実際に送信されたログデータを詳しく見てみましょう(図6)。
図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メッセージ)

  • ① Processed timestamp: SSBがログメッセージを受信したタイムスタンプです。これは、ログメッセージには含まれていません。
  • ② Timestamp: ログメッセージのタイムスタンプの値です※1
  • ③ Host: SSBにメッセージを送信したクライアントのIPアドレスまたはホスト名です※1
  • ④ Program[PID]: Programはメッセージを作成したアプリケーションです。ログメッセージのアプリケーションの値になります。PIDはメッセージを作成したアプリケーションのプログラムIDです。ログメッセージのPIDの値になります。
  • ⑤ Facility: ログメッセージを送信したファシリティ値です。ログメッセージのプライオリティの値から算出されます※2
  • ⑥ Priority: ログメッセージのプライオリティ値です。ログメッセージのプライオリティの値から算出されます※2。SSBではPriorityと表示されていますが、この値はセベリティ値になります。
  • ⑦ Unique ID: メッセージの一意なIDです。これは、SSBが動的に作成しログメッセージには含まれていません。
  • ⑧ Tags: パターンデータベースに一致したメッセージに割り当てられたタグです。これは、ログメッセージには含まれていません。
  • ⑨ Message: ログメッセージのテキストです。ログメッセージのメッセージの値になります。
  • ⑩ Dynamic columns: ログメッセージの構造化データがname-valueペアとして認識され動的カラムとして利用できます。

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

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

BSD-syslogメッセージ

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

・[Server]タブを開いて、[Server Port]は"514"に変更します(図8)。
図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プロトコル)

・設定を有効にするのに、サービスを再起動します(図10)。
図10 syslog-ng Agent for Windowsサービスの再起動

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

図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メッセージ)

  • ① Processed timestamp: SSBがログメッセージを受信したタイムスタンプです。これは、ログメッセージには含まれていません。
  • ② Timestamp: ログメッセージのタイムスタンプの値です※1
  • ③ Host: SSBにメッセージを送信したクライアントのIPアドレスまたはホスト名です※1
  • ④ Program[PID]: Programはメッセージを作成したアプリケーションです。ログメッセージのアプリケーションの値になります。PIDはメッセージを作成したアプリケーションのプログラムIDです。ログメッセージのPIDの値になります。
  • ⑤ Facility: ログメッセージを送信したファシリティ値です。ログメッセージのプライオリティの値から算出されます※2
  • ⑥ Priority: ログメッセージのプライオリティ値です。ログメッセージのプライオリティの値から算出されます※2。SSBではPriorityと表示されていますが、この値はセベリティ値になります。
  • ⑦ Unique ID: メッセージの一意なIDです。これは、SSBが動的に作成しログメッセージには含まれていません。
  • ⑧ Tags: パターンデータベースに一致したメッセージに割り当てられたタグです。これは、ログメッセージには含まれていません。
  • ⑨ Message: ログメッセージのテキストですが、改行コードが含まれていません。
  • ⑩ Dynamic columns: ログメッセージに構造化データが含まれていないので、ここには何も表示されません。

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

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

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

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

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


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




syslog-ng Store Boxについての詳細は、製品紹介ページ・製品ガイドをご参照ください。




評価版のダウンロード


問合わせ