oinkmaster メモ
snortのルールの自動アップデートを行うperlスクリプト
[oinkmster]のメモです。
公式サイト
http://oinkmaster.sourceforge.net/
使用環境
Ubuntu : 9.04
Perl : 5.10.0
まずは、[oinkmster]とルールのダウンロードを行います。
ダウンロードは、[/usr/local/src]以下にディレクトリを作成し、行っています。
cd /usr/local/src
mkdir oinkmaster
cd oinkmaster
wget http://downloads.sourceforge.net/project/oinkmaster/oinkmaster/2.0/oinkmaster-2.0.tar.gz?use_mirror=jaist
ダウンロードが完了したら、展開と配置です。
配置のために作成するのは
・[oinkmaster]本体・設定ファイル
・ルールアップデート前に使用していたルールファイルのバックアップ
の二つを格納するディレクトリです。
tar zxvf oinkmaster-2.0.tar.gz
cd oinkmaster-2.0
mkdir /usr/local/oinkmaster
mkdir /usr/local/oinkmaster/backup
cp oinkmaster.pl oinkmaster.conf /usr/local/oinkmaster/
次に設定ファイルの編集を行います。
vi /usr/local/oinkmaster/oinkmaster.conf
51行目付近から[url = http://~]のような記述が沢山並んでいます。
ここは[oinkmaster]がダウンロードするルールのURLを記述する箇所です。
snort2.8系の場合は下記のように記述します。
http://www.snort.org/pub-bin/oinkmaster.cgi/[oinkcode]/snortrules-snapshot-2.8.tar.gz
# [oinkcode]の部分には自身のコードを記述してください。
もう少し、細かい設定も見ていきましょう。
187行目付近から始まる skipfile の設定です
手動で変更を加えたファイルなど上書きされたくない場合があるかと思います。
そんな場合に使用する設定項目で、ここに記述されているファイルは
アップデートによる一切の変更がスキップされます。
デフォルトでは以下のように三つのファイルがスキップ対象となっています。
skipfile local.rules
skipfile deleted.rules
skipfile snort.conf
skipfileは上記のように一行に一つのファイルを指定することもできますが
「,」(カンマ)で区切ることで一行で複数のファイルを指定することも可能です。
skipfile a.rules, b.rules, c.rules
ファイル単位での無効は skipfile で管理できますが
運用の中ではシグネチャ単位の有効無効を管理しておきたい場合もでてくるかと思います。
そんな場合には
「modifysid」「localsid」「enablesid」「disablesid」を用います。
これらを一つずつ見ていきましょう。
[modifysid]
modifysid ではSID単位で置換を行うことができます。
シンタックスは
modifysid 置換するSID "置換対象文字列" | "置換後文字列"
。
複数のSIDを指定したい場合は
modifysid 置換するSID1, 置換するSID2 "置換対象文字列" | "置換後文字列"
のように「,」(カンマ)でSIDを区切ります。
ルールセット内すべてに置換を適用したい場合は
modifysid exploit.rules "置換対象文字列" | "置換後文字列"
のようにSIDの部分にルールセット名を指定することも可能です。
こちらも「,」(カンマ)区切りで複数指定することが可能です。
また、SIDを指定するところに「*」(アスタリスク)のようにワイルドカードを使用することができます。
[localsid]
localsidではSID単位で更新をしないという管理ができます。
Snortのシグネチャはリビジョンが上がっていく場合があるのですが
このリビジョンが上がっても更新したくない場合にこれを用います。
シンタックスは
localsid SID
となり複数指定する場合は
localsid SID1, SID2, SID3
というように指定します。
[enablesid]
enabledsidではSID単位で無効(コメントアウト)にされているシグネチャを有効にします。指定の方法は他のものと同じく単一のSID指定の場合は
enablesid SID
とし、複数の場合は「,」(カンマ)区切りで
enablesid SID1, SID2
とします。
[disablesid]
disablesidはenablesidと逆でSID単位でシグネチャを無効にします。
これによりカスタマイズにより無効化したシグネチャを更新によって
有効になることを防ぐことができるわけです。
指定の方法はenablesidと同じく単一のSID指定の場合は
disablesid SID
複数の場合は、これまでのものと同じくカンマ区切りにします。
disablesid SID1, SID2
設定ファイルに関する説明は以上です。
次に[oinkmaster]の実行オプションです。
オプションは以下の通りです。
-b : 更新前まで使用していたルールセットを保存するディレクトリを指定
-c : 更新のチェックのみを実行し、実際の更新は行わない
-C : 設定ファイルへのパスを指定
-e : デフォルトで無効にされているルールすべてを有効にする
-h : ヘルプを表示
-i : 対話モードでの実行
-m : 結果表示を最小にする
-q : 更新の際に変化がない場合は結果を表示しない
-Q : -qの上位コマンド(?)必要最小限の結果表示
-r : 既存のルールのチェックのみを行う
-s : 追加、変更されたシグネチャのSIDや名前を表示
-S : 変数を定義されたファイルを指定(指定なき場合はsnort.confが使用される)
-T : 設定ファイルが正しく記述されているかのチェック
-u : ルールをダウンロードするURLを指定
-U : 指定したファイルを最新のルールファイルに含まれるsnort.confの代わりに使用する
-v : 冗長モードで実行
-V : バージョンを表示
上記オプションを参考にアップデートを行ってください。
殆どの場合以下のような実行で間に合うかと思います。
cd /usr/local/oinkmaster
oinkmaster.pl -C ./oinkmaster.conf -o /usr/local/snort/rules/
自動でアップデートを行いたい場合は、[cron]などに登録するといいと思いますが
反映するには、[snort]を再起動する必要があります。
# アップデートされたルールによっては[snort]が対応していないため
# 起動エラーになる場合が稀にありますので、そこのあたりは、注意してください。