相変わらずのまったり更新でもはや目も当てられないのですが根本からやる気のない人間なのでしょうがないのですよ!!
さて、 前回 は Snort with PostgreSQL を動作させるところまでやったのですよ。
だがしかし、今世間のネットワークは常に新たな脆弱性、それに対する攻撃が生まれているのですよ。それが、ぢ・いんたーねっつ。それらの攻撃に対応するため、 Snort のルールも常に更新されているのですよ。
今回はそんな常に更新される Snort のルールを、自動でダウンロードして更新してくれる Oinkmaster というものを入れてみるのですよ。
無駄な前置き書いちゃった! てへっ♥
またまた適当にダウンロードしてインストールするのですよ。
> wget http://jaist.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster-1.2.tar.gz > gzcat oinkmaster-1.2.tar.gz | tar xf - > cd oinkmaster-1.2/ > su Password: # cp oinkmaster.pl /usr/local/bin/ # cp oinkmaster.conf /usr/local/etc/
Oinkmaster の設定ファイルをいじるのですよ。
# cd /usr/local/etc/ # vim oinkmaster.conf今回、 Snort 公式の registered user release なルール(無料だけどユーザー登録が必要、 subscription release より 5日遅れて更新されるらしい)と Bleeding Snort のルールを自動更新させるのですよ。
公式の subscription release なルールはお金無いので使用できないのですよ。
registered user release なルールを取得する場合は snort 本家 の Snort.org Registration でアカウント登録をするのですよ。
登録が完了すると送付されるメールにパスワードが記載されているのですよ。それを使ってログインして ユーザーページ 内の Oink Code 欄にある「Get Code」ボタンを押せば、その場で Oink Code が交付されるのですよ。
その Oink Code を URL 中に貼り付けるだけなのですよ。
url = http://www.snort.org/pub-bin/oinkmaster.cgi/<Oink Code>/snortrules-snapshot-2.4.tar.gz url = http://www.bleedingsnort.com/bleeding.rules.tar.gz公式ルールの 〜〜_s.tar.gz なファイルは subscription release なので、お金が必要なのですよ。せいぜい気をつけるのですよ。
なお、 oinkmaster.pl から gzip, tar, wget コマンドが呼び出されるので、同コマンドのパスが同 oinkmaster.conf の
path = /bin:/usr/bin:/usr/local/binに含まれていない場合はてきとーに path の行末に追加するのですよ。
その他にもルールの無効化やルールの文字列置換なども、同設定ファイルに記述すればポリシーチューニングまで自動化できるのですよ。わくわくなのですよ。
まぁチューニングは置いといて、ルールを手動で更新させてみるのですよ。
# cd /usr/local/snort/rules/ # cp sid-msg.map.orig sid-msg.map ↑ 退避していた公式ルールのみを含むマップに戻すのですよ。 Oinkmaster は既存と新規の sid-msg.map から、新規追加/更新/削除されたルールをチェックして提示してくれるのですよ。 でも、 前回導入時 に公式の sid-msg.map と Bleeding Snort の bleeding-sid-msg.map を結合していたのですが、 Oinkmaster 実行によってダウンロードされる公式の sid-msg.map には Bleeding Snort のルールなんか含まれるわけないのですよ。 そのままにすると Oinkmaster 実行時に「これこれのルールが Remove されちゃいましゅた!」というメッセージが Bleeding Snort のルールの件数だけ(1000 件ほど)出力されるのですよ。 それを回避するための手順、なのですよ。 本当は Oinkmaster で Bleeding Snort の bleeding-sid-msg.map もチェックしてくれるとうれしいのですよ。 ふぁぁぁあっ、こまんどのちゅうしゃくなのにしゅごくながくなっちゃってましゅぅぅ! # mkdir _backup # /usr/local/bin/oinkmaster.pl -o /usr/local/snort/rules -b /usr/local/snort/rules/_backup # cp sid-msg.map sid-msg.map.orig # cat sid-msg.map.orig bleeding-sid-msg.map | sort -un > sid-msg.map ↑ 公式と Bleeding Snort の sid-msg.map を結合するのですよ。snort を再起動してルールを読み直しさせるのですよ。
# /etc/init.d/snort restart
ルール更新を cron で自動化できるようにスクリプトを作るのですよ。
#!/bin/sh
BIN="oinkmaster.pl"
PROG="/usr/local/bin/${BIN}"
RULEDIR="/usr/local/snort/rules"
BKUPDIR="${RULEDIR}/_backup"
FLAG="-o $RULEDIR -b $BKUPDIR"
DIFFCHK=0
test ! -d $RULEDIR && echo "Nothing $RULEDIR directory, aborted." >&2 && exit
test ! -d $BKUPDIR && mkdir $BKUPDIR
cd $RULEDIR
test -f sid-msg.map.orig && cp sid-msg.map.orig sid-msg.map
test -f bleeding-sid-msg.map && cp bleeding-sid-msg.map bleeding-sid-msg.map.orig
$PROG $FLAG
diff sid-msg.map.orig sid-msg.map > /dev/null || DIFFCHK=1
diff bleeding-sid-msg.map.orig bleeding-sid-msg.map > /dev/null || DIFFCHK=1
cp sid-msg.map sid-msg.map.orig
cat sid-msg.map.orig bleeding-sid-msg.map | sort -un > sid-msg.map
test $DIFFCHK -eq 1 && /etc/init.d/snort restart && sleep 20
/etc/init.d/snort status
最後に snort の再起動とステータス確認もさせているのですよ。ルールの更新があった場合は snort が起動しない場合もまれにあるらしいので気をつけるのですよ(特に Bleeding Snort)。
スクリプトができたら適当に cron 登録するのですよ。時間は適当なのですよ。
Oinkmaster は実行のたびに各ルールアーカイブを丸ごとダウンロードしてしまうので、負荷をかけないように一日一回程度にしておくのですよ。
# crontab -e
0 19 * * * /usr/local/bin/oinkmaster.shルールの更新がどれくらいの頻度であるのかまだ良くわかっていないのですが、最悪でも一日一回程度の snort 再起動なら良いかもと思ったりしているのですよ。
ぷはぁ、これでいつでもルールは最新なのですよ。
そろそろいいかげんに解析ツールを入れないと IDS の意味が全くないのですよ。
でも解析ツールもいろいろあって迷ってしまうのですよ。
というわけで、次回のメモはいつになるか相変わらずわからないのですよ。
参考リンク:
Oinkmaster
にわか鯖管のメモ - Bleedingsnort Rules
※たすかりましゅた、っていうかほとんどそのままつかっちゃいましゅた、ご、ごめ、ごめんなしゃいぃぃ! あみゃ(以下自粛
---- 10/10 更新
oinkmaster.sh スクリプト間違ってた(汗