Snort+ACIDによる不正アクセス監視


Snortは優れたIDSであるが、いくつかの欠点も存在する。特にユーザーインターフェース環境は恵まれているとは言いがたい状況である。幸いなことにアラート監視に関しては、AirCERTプロジェクトの開発したACIDを利用することによって、多少は改善することが可能である。このドキュメントではACIDの使用方法について解説することにする。

1.ACIDの基本的な使用法
ACID起動後の画面は以下の通りである。



画面上、青色の文字はそれぞれACIDの集計画面へのリンクである。

例えば画面左枠内のUniqueAlerts:の数字をクリックすることにより下のように、全部のアラート毎の集計結果が表示される。

この画面から<Total#>、Sensor#、<Src Addr.>、<Dest Addr.>、<First>、<Last>以下のそれぞれの値は、それらアラートの詳細情報を表示するためのリンクとなっている。それぞれのリンクは、そのアラートを一覧表示、センサー毎に集計して表示、Source IP Address、Destination IP Address毎に集計して表示、そして最初、最後に検知されたアラートを表示、以上の集計画面へのリンクとなる。

また <Total#> のように <> で囲まれているフィールドに関しては、それら <> をクリックすることによって、そのフィールドの値でアラート一覧を昇順、降順にソートすることができる。



以下の画面はアラート一覧を表示させたものである。

各アラートの項目 ID のリンク先はアラートの詳細情報を表示する。<Source Address>、<Dest. Address>のリンクはそれぞれのIPアドレスに関する集計情報を表示するためのリンクとなっている。



アラートの詳細画面は以下のようになる。各アラートのレイヤ3以上の情報に関して詳細に表示される。

実際にSnortのアラートを監視する場合には、これらの情報を詳しく調査する必要がある。



2.ACIDによるアラート監視
それではACIDを使って不正アクセス監視を実施する際の手順を解説する。

通常の監視ではACIDの初期画面から ・Snapshot の ・Last 24 Hours: か ・Today's: の alerts unique を選択する。これらは最後の24時間、本日の0時以降に検知されたアラートを、アラートの種類ごとに集計するものである。

最後にアラートを確認してから、時間が経過しているのであれば Last 72 Hours: を参照すると良い。



ここでは ・Last 24 Hours: alerts unique を表示させてみる。

過去24時間内に検知されたアラートが、アラートの種類ごとに集計されて表示される。Classificationのドキュメントで解説してあるように、まず <Classification> に注意する。この集計画面でのアラート表示順には特に意味が無いので、大量のアラートが検知された場合に監視作業の効率が悪い。よって<Classification> の <> をクリックして Classificaton に従って並び替えると良い。

Classification のドキュメントに従って、この画面のアラートを見てみると、 misc-attack、bad-unknown が注意すべきアラートであることがわかる。

この例での MS-SQL Worm propagation attempt のアラートは正しく MS-SQL Worm を検知しているが、これらは過去のワームであり、十分に対処してあるはずである。注意すべきは、自分の組織のコンピュータから発せられたことを示すアラートである。

CodeRedやNimdaなどを含むWorm系のアラートは、ルールを書き換えて、自分のネットワークから外部に向けて発されたトラヒックに対してのみ監視すると、不要なアラートを減らすことができて良いだろう。

続いて ATTACK-RESPONSES id check returned userid のアラートを調査してみる。 <Total#> の列に表示された値 3 をクリックする。



過去24時間に検知された ATTACK-RESPONSES id check returned userid のアラートが一覧表示される。

ここで <Source Address> に注意してみる。いづれも組織内の IP アドレスで 80/HTTP が送信元である。さらに <Dest. Address> に目を向けると、いづれも組織外の High Port であるので、これらは単なる HTTP トラヒックであり、誤検知であることがわかる。

念のためにアラートの詳しい情報を調査してみる。いづれかのアラートの ID フィールドの値をクリックする。



このアラートは特にパケットの詳細情報を参照するまでもないが、念のため調べてみたところ、サーバのコンテンツ内に "uid=" の文字を含む物が存在したようで、これにSnortが反応してしまったことがわかる。

このアラートのSnortの該当するルールを調べてみたところ以下のように "uid=" と "gid=" が同じパケット内に現れた場合に反応するように構成されている。

alert ip $HOME_NET any -> $EXTERNAL_NET any (msg:"ATTACK-RESPONSES id check returned userid"; content:"uid="; byte_test:5,<,65537,0,relative,string; content:"gid="; distance:1; within:15; byte_test:5,<,65537,0,relative,string; classtype:bad-unknown; sid:1882; rev:7;)

たまたまこの条件に該当するコンテンツが存在したのである。これは誤検知の典型的な例である。



他の場合でもたいていはこの一覧表示、重要なアラートの調査、判定の作業を繰り返えせば良い。

できれば、普段からセキュリティ情報に注意し、アラートの示す脆弱性や攻撃手法についての詳しい情報をインターネットなどから収集して、何が問題であるのかを把握し、IDSの監視を行なうと良いだろう。