Next Up Previous Contents References
基本

2.1 基本

Snortは柔軟性に富み、強力であるにも関わらず、シンプルで軽量なルール 記述言語を採用しています。Snortルールを記述する際に覚えておくと役立つ 多くの簡単なガイドラインがあります。

ほとんどのSnortのルールは1行で記述されています。1.8より前のバージョンでは、 この方法でしか記述できませんでした。 Snortの現行バージョンでは、行の終わりにバックスラッシュ を追加することで、複数行にわたるルールを記述できます。

Snortのルールは、ルールヘッダ部とルールオプション部という2つの論理セクションに 分かれています。ルールヘッダ部にはルールのアクション、プロトコル、送信元/ 宛先IPアドレスおよびネットマスク、送信元/宛先ポート情報が含まれます。 ルールオプション部にはアラートメッセージと、ルールに記述されたアクションの 実施を判断するために検査するパケットの一部に関する情報が含まれます。

1はSnortルールのサンプルです。

alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg:"mountd access";)

Figure 1: Snortルールのサンプル

1つ目の括弧までの文字列がルールヘッダ部で、括弧で囲まれた部分がルール オプション部です。ルールオプション部の中でコロンの前の単語はオプション キーワードと呼ばれます。ただし、ルールオプション部は必須ではなく、 特定のパケットの収集、アラート出力(または遮断)の際に厳密な定義を 行うために利用されます。

ルール全体を構成する要素は、論理積(and)命令文を構成すると 見なされます。同時に、Snortルールファイル群に含まれる様々なルールは 大規模な論理和(or)命令文を構成するものと見なされます。

2.1.1 Include文

includeキーワードを利用することで、Snortのコマンドラインで指定された ルールファイルから他のルールファイルを読み込むことができます。この 機能はC言語の#includeと同様に機能し、includeが含まれるファイルの 当該箇所に指定されたファイルの内容を読み込みます。

書式

include: <include file path/name>

この行末にはセミコロンがないことに注意してください。読み込まれる ファイルは事前に定義された変数を独自の変数リファレンスに代入します。 Snortルールファイルにおける変数の定義と利用方法について、 詳しくは第2.1.2節をご参照ください。

2.1.2 変数

Snortでは変数を定義できます。図2に示した ように、varキーワードを用いて簡単に代入を行うことができます。

2.1.2.1 書式

var: <name> <value>

var MY_NET [192.168.1.0/24,10.1.1.0/24]
alert tcp any any -> $MY_NET any (flags:S; msg:"SYN packet";)

Figure 2: 変数の定義および利用例

ルール変数名は様々な方法で修飾できます。$演算子を利用してメ タ変数を定義し、変数修飾演算子?および-と共に利用できます。 * $var - メタ変数を定義します。 * $(var)- 変数varの内容で代入します。 * $(var:-default)-変数varの内容、 またはvarが未定義の場合はdefaultの値を代入します。* $(var:?message) -変数varの内容を代入するか、またはエラーメッセージ messageを出力して終了します。

これらのルール修飾子の例については、図??をご参照ください。

var MY_NET 192.168.1.0/24
log tcp any any -> $MY_NET 23

Figure 3: 高度な変数の利用例

2.1.3 設定

Snortの多くの設定およびコマンドラインオプションは設定ファイルで 指定することができます。

2.1.3.1 書式

config <directive> [: <value>]

2.1.3.2 ディレクティブ

order
ルールをパスする順序を変更します (snort -o)
alertfile
アラート出力ファイルを指定します。例:config alertfile: alerts
classification
ルールの分類(classifications)を行います (表2を参照)
decode_arp
arp デコードを行います (snort -a)
dump_chars_only
キャラクターダンプを行います (snort -C)
dump_payload
アプリケーション層の情報をダンプします (snort -d)
decode_data_link
Layer2ヘッダをデコードします (snort -e)
bpf_file
BPFフィルタを指定します (snort -F). 例: config bpf_file: filename.bpf
set_gid
GIDを変更します (snort -g). 例: config set_gid: snort_group
daemon
デーモンとしてforkします (snort -D)
reference_net
ホームネットワークを指定します (snort -h). 例: config reference_net: 192.168.1.0/24
interface
ネットワークインタフェースを指定します (snort -i). 例: config interface: xl0
alert_with_interface_name
アラートにインタフェース名を付加します(snort -I)
logdir
ログ出力ディレクトリを指定します (snort -l). 例: config logdir: /var/log/snort
umask
実行時にumaskを設定します (snort -m). 例: config umask: 022
pkt_count
Nパケット後に終了します (snort -n). 例: config pkt_count: 13
nolog
ログ取得を行いません。注: アラートは出力されます(snort -N)
obfuscate
IPアドレスを隠蔽化します (snort -O)
no_promisc
promiscuousモードを利用しません (snort -p)
quiet
バナーおよびステータスレポートを無効にします (snort -q)
checksum_mode
チェックサムを計算するパケットのタイプ。 値: none, noip, notcp, noicmp, noudp, all
utc
タイムスタンプとしてローカル時間の代わりにUTC(協定世界時)を利用します (snort -U)
verbose
標準出力へ冗長なログ出力を行います (snort -v)
dump_payload_verbose
生パケットをデータリンク層からダンプします (snort -X)
show_year
タイムスタンプに西暦年を表示します (snort -y)
stateful
stream4(たぶん)に対してassuranceモードを指定します。表7も併せて参照して下さい。
min_ttl
Snortが処理する最小TTLを指定します。
disable_decode_alerts
Snortのデコード段階で生成されるアラートを無効にします
disable_tcpopt_experimental_alerts
実験的なTCPオプションによって生成されるアラートを無効にします
disable_tcpopt_obsolete_alerts
obsolete tcpオプションによって生成されるアラートを無効にします
disable_tcpopt_ttcp_alerts
T/TCPオプションによって生成されるアラートを無効にします
disable_tcpopt_alerts
(訳注:TCP)オプション長検証アラートを無効にします
disable_ipopt_alerts
IPオプション長検証アラートを無効にします
detection
検知エンジンを指定します (例: search-method lowmem )
reference
新しいリファレンスシステムをSnortに追加します


Next Up Previous Contents References