●Snortルールの作成

 実際にルールを作成するには、冒頭で触れたように

ルールヘッダ(ルールオプション)

という形で記述する。ルールヘッダには、「alert」のほかに「pass」や「log」といった指定をすることができる。passは文字通りパスすることを指す。たとえば、Webサーバに対するアクセスをすべて記録したくない場合には、passを使用して、ポート80への通信は記録しないようなルールを作成すればよい。また、ルールにマッチングしたものを、アラートを出さずにログディレクトリにのみ残したい場合にはlogを使用する。

 ルールオプションに利用できるキーワードは数多く、今回は一部のみしか紹介しないが、すでに存在するルールセットの中から、参考になるものを取りだしてみるとよいだろう。

 ルールオプションの記述は、()でくくり、

([キーワード]:[値];[キーワード]:[値];[キーワード]:[値];・・・)

のように「[キーワード]コロン:[値]セミコロン;」という形で記述を行う、セミコロンで区切って複数のキーワードを記述することができる。

表3■キーワード(抜粋)

msg アラートメッセージ
content 指定した文字列、バイナリデータ(16進数)とのマッチングを行う。さらにオプションとしてoffset/depthがある
regex contentでワイルドカードを利用する際のキーワード
content-list あらかじめ用意したファイルから読み込みマッチングを行う
nocase 指定することで大文字・小文字を区別して検出する
flags TCPフラグの指定。FIN/SYN/RST/PSH/URG/及び予約ビット(2/1)、TCPフラグなし(0)の指定ができる。またすべてにマッチングする場合(+)、いずれかにマッチングする場合(*)、マッチングしない場合(!)の指定ができる
logto 特定のログファイルを指定する。/var/log/snortへログファイルを作成しておく
dsize パケットペイロードサイズの指定
classtype classification.configにあるタイプを確認し、記述しておけばログにタイプと優先順位(priority)が付記される
priority 優先順位の指定

●単純なルールを作成してみる

 一例として、telnetアクセスでのルールを作成してみよう。下記のルールはtelnetで「/etc/shadow」が含まれるものはアラートを出力するルールだ。しかし実用性はないため、テスト用と考えていただきたい。

 ルールの記述は、テスト用のルールセットを新規(ここではtest.rurles)に作成するか、すでにルールセットにあるローカル用のルールセット「local.rules」などに記述する。ルールを記述したらSnortを再起動し、動作を確認すればよい。なお、新規のルールセットを作成した場合には、snort.confでテスト用ルールセットを読み込むように指定しておく必要がある。第2回を参考にして設定しよう。

# cd /etc/snort
# vi test.rules ←snort.confで新規に作成したルールセットを読み込む設定をしておく


alert tcp any any -> 192.168.1.5 23 (msg:"telnet test"; flags:A+; content:"/etc/shadow"; nocase;)

 記述したら、snortを再起動し、telnet端末で「cat /etc/shadow」とでも入力すれば、アラートが出力されるだろう。

PREV 2/5 NEXT