出力モジュールはバージョン1.6から新たに導入された機能です。出力 モジュールを利用することで、Snortの書式や提示方法の柔軟性が 高まります。出力モジュールはプリプロセッサや侵入検知エンジンに 続き、Snortのアラートやログ取得サブシステムが呼び出された際に 実行されます。ルールファイル中のディレクティブの形式はプリ プロセッサのものに非常に類似しています。
Snort設定ファイルには複数の出力プラグインを指定することができます。 同一のタイプ(log、alert)に複数のプラグインが指定されている場合は、 イベントが発生した時点で、プラグインが順次スタックされ、呼び出さ れます。 標準のログ取得およびアラートシステムと同様に、出力プラグインは そのデータをデフォルト設定の/var/log/snortに出力するか、あるいは (-lコマンドラインスイッチを利用して)ユーザが指定したディレクトリに 出力します。
出力モジュールは、ルールファイルにoutputキーワードを指定することで 実行時に読み込まれます。
output <name>: <options>
output alert_syslog: LOG_AUTH LOG_ALERT
このモジュールはsyslog機能にアラートを送信します(-sコマンドライン スイッチに酷似しています)。また、このモジュールを利用すれば、 ユーザはSnortのルールファイル内でログ取得ファシリティや優先度を 指定できるようになり、アラートを記録する際の柔軟性が高まります。
alert_syslog: <facility> <priority> <options>
これはSnortのアラートを高速な1行形式で指定された出力ファイルに 出力します。この方式はパケットヘッダのすべてを出力ファイルに 出力する必要がないため、完全なアラートよりも高速にアラートを 出力できる方式です。
alert_fast: <output filename>
output alert_fast: alert.fast
パケットヘッダ全体を含んだSnortのアラートメッセージを出力します。 アラートは標準のログ取得先ディレクトリ(/var/log/snort)、または コマンドラインで指定されたログ取得先ディレクトリに書き込まれます。
ログ取得先ディレクトリの下には、IPアドレス毎にディレクトリが1つ 作成されます。これらのファイルは、アラートを引き起こしたパケットの デコード済みパケットダンプとなります。これらのファイルを作成する ようにすると、Snortの性能が大幅に低下します。この出力方式は、 ほとんどトラフィックがない状況以外にはお勧めできません。
alert_full: <output filename>
output alert_full: alert.full
このプラグインは、WinPopupアラートメッセージをこの出力プラグインの 引数として指定されたファイルで指定されたNETBIOSマシンに送信します。 このプラグインは(一般にroot権限である)Snortと同じ特権レベルで、 外部の実行形式のバイナリ(smbclient)を実行するため、このプラグインの 使用はお勧めできません。Workstationファイルの書式は、アラートを 受信させたいホストのNETBIOS名を1行につき1つ記述したリストです。
alert_smb: <alert workstation filename>
output alert_smb: workstation.list
UNIXドメインソケットを設定し、アラートレポートをUNIXドメインソケットに 送信します。外部プログラムやプロセスは、このソケットをリッスンし、 Snortのアラートやパケットデータをリアルタイムに受信できます。現在、 この機能は実験段階のインタフェースです。
alert_unixsock
output alert_unixsock
log_tcpdumpモジュールは、パケットをtcpdump形式のファイルに記録します。 この機能は、後日、収集されたトラフィックの分析をtcpdump形式のファイル 読み込みに対応した多数のツールで行う場合に有効です。
このモジュールでは、出力ファイル名を単一の引数として指定できます。 ファイル名の末尾にはUNIXタイプスタンプの秒数が付加されることに 注意してください。このことにより、個別のSnortの実行結果のデータを はっきり区別できます。
log_tcpdump: <output filename>
output log_tcpdump: snort.log
Jed Pickel氏から提供された本モジュールは、各種SQLデータベースに Snortデータを送信します。このモジュールのインストール、設定方法に 関する詳細は[91]Incident.org Webページで入手できます。この プラグインに対する引数は、ログ保存先のデータベース名とパラメータ リストです。パラメータはパラメータ=引数という初期で指定されます。 利用例については、図48をご参照ください。
database: <log | alert>, <database type>, <parameter list>以下のパラメータが利用できます。
さらに、ログ取得方式やデータベースタイプを定義する必要があります。 ログ取得のタイプにはlogとalertという2つのタイプがあります。log タイプを設定すると、データベースに対するログ取得機能をプログラムの ログ機能に追加します。タイプをlogに設定した場合、ログ出力チェーンで プラグインが呼び出されます。タイプをalertに設定すると、プラグインを プログラム内のアラート出力チェーンに追加します。
現在のバージョンのプラグインは以下の4つのデータベースタイプに 対応しています。MySQL, PostgreSQL, Oracle, unixODBC準拠データベースの 4種類が対応データベースです。利用するデータベースに適合したタイプを 設定してください。
注: この出力プラグインにはtagキーワードを用いて生成されたアラートを 処理する機能がありません。詳細については、第2.3.32節を ご参照ください。
output database: log, mysql, dbname=snort user=snort host=localhost password=xyz
CSV出力プラグインを利用すれば、データベースに容易にインポート可能な 書式でアラートデータを出力することが可能となります。このプラグイン にはファイルへのフルパス、出力書式オプションの2つの引数が必要です。
書式オプションのリストは次の通りです。書式オプションがデフォルト設定の 場合、書式オプションリストに記載された順に出力されます。
output alert_CSV: <filename> <format>
output alert_CSV: /var/log/alert.csv default output alert_CSV: /var/log/alert.csv timestamp, msg
統合(Unified)出力プラグインは、Snortイベントを記録する最速方式を 目指したものです。本プラグインは、イベントをalertファイルと packet logファイルに記録します。alertファイルには、イベントの 高いレベルの詳細情報が含まれています(ip, protocol, port, message id)。一方、logファイルには詳細なパケット情報が含まれます(関連する event idを含むパケットダンプ)。
両ファイルともspo_unified.hに記載されているバイナリ形式で書かれて います。Barnyardが利用可能になれば、Barnyardは現行の出力プラグインを 新しいアーキテクチャに組み込み、ログ記録を行います。近いうちに、 統合出力フォーマットは活動量の多いセンサーのSnortデータを記録する 標準方式となるでことしょう。Snortはリアルタイムなデータ収集に フォーカスする一方で、Barnyardはセンサーの効率を低下させることなく、 複雑なログ記録方式を可能にします。
各ファイルを書き込む際に、ファイル名の末尾にはUNIXタイプスタンプの 秒数が付加されることにご注意ください。
output alert_unified: <file name> output log_unified: <file name>
output alert_unified: snort.alert output log_unified: snort.log
特定のタイプのトラフィックに対しては、アラートは出力するものの パケットログを登録しないルールを作成できると好都合な場合が あります。Snort 1.8.2では、log_nullプラグインが導入されました。 これは、-Nコマンドラインオプションに相当するものですが、 ルールタイプ内で動作させることができます。
output log_null
output log_null # like using snort -N
ruletype info {
type alert
output alert_fast: info.alert
output log_null
}