それではSnort自体のチューニングについて考えてみよう。誤検知を減らすという観点からいえば、下記の点が重要となる。
このうち、設置場所についてはすでに説明しているので、シグネチャとプラグインについて考えていこう。
まずシグネチャについて考えていく。誤検知を減らすための一番の近道は、「不要なプラグインは使用しない」ということにほかならない。
例えば、Linux上でApacheを運用しているサーバがあり、それを監視するSnortをセットアップする場合を考えてみよう。この場合、IISに関するシグネチャやFTPなどのシグネチャは不要である。このような場合は、IISに関するシグネチャ(rules/web-iis.rules)を無効にすることで、IIS関連のシグネチャによって生じる誤検知をなくすことができる。
ルールファイル単位(rules/*.rules)の無効化が難しい場合もあると思う。先の例でいえば、Apache上でPHPを使用している場合、いくら誤検知が多いとはいってもPHP関連のシグネチャ(rules/web-php.rules)全体を無効化することは現実的ではないだろう。その場合は、各ルールファイル内で定義されているシグネチャ単位で無効化することになる。
シグネチャを選定するときのアプローチとしては、2つの方法がある。1つ目は「すべてのシグネチャを有効にし、不要なものを徐々に無効化していく」方法である。2つ目は「一度すべてのシグネチャをチェックし、不要なものを先に無効化しておく」という方法である。
個人的には前者のアプローチを推奨したい。すでにシグネチャの量は大量であり、それらを実運用前にすべてチェックするのはコストが掛かるし、不要だと考えていたものが実は重要であったという場合も考えられるからである。もちろん、各シグネチャについて十分な知識がある場合は、後者のアプローチを採用しても問題はない。
前者のアプローチを採用する場合は、数週間テスト期間を設け、すべてを有効にした状態でどのようなアラートが検出されるかを収集し、それを基に不要なシグネチャを選定するとよいだろう。
どちらのアプローチを採用するにせよ、それらを継続して行う場合はかなりの手間となる。IDSはウイルス対策ソフトと似ている。ウイルス対策ソフトを利用した経験があればお分かりいただけると思うが、ウイルス対策ソフトはインストールしただけでは効果を発揮しない。パターンファイルを常に最新の状態にすることで初めて効力を発揮するものである。IDSについても同様で、ルールファイルを常に最新の状況にしておく必要がある。
しばらく運用していくと分かると思うが、このルールファイル更新はかなりの手間となる。多くの方は「できれば自動化させたい」と思うのではないだろうか。これを自動化するためのソフトウェアがすでに存在する。「Oinkmaster」がそれである。Oinkmasterについては次回以降で詳しく紹介したいと思う。
手前みそで恐縮であるが、日本Snortユーザ会にOinkmasterのドキュメントもあるので、併せて参照してほしい。
Snortには多彩なプリプロセッサが用意されており、各パケットに対し非常に柔軟な処理を行うことができる。その半面、プリプロセッサに起因する誤検知も多く発生する。それを防ぐための最も簡単な方法は、「不要なプリプロセッサを無効化する」というものである。
例えば、ポートスキャンを検出するためのプリプロセッサに「portscan」や「flow-portscan」というものがある。これらは設定を誤ると正常な接続もポートスキャンと見なされる場合がある。もし、ポートスキャンを検出する必要がない場合は、無効化しておいた方がよい。
ポートスキャンに限らず、必要がない、もしくは必要性が低いものは無効化しておいた方がよいだろう。もし必要になったら、そのタイミングで有効化すればよい。そうすることで、誤検知を減らすことができ、本来の業務に集中できるようになるはずだ。
ただし、無効化するときは、一見すると不要に思えるものであっても、そのプリプロセッサに依存したシグネチャが存在する場合があるので注意してもらいたい。特に「stream4」や「http_inspect」は不用意に無効化しないようにした方がよい。これらのプリプロセッサについては、無効化するのではなく設定を最適化することで対処することになるであろう。
stream4プリプロセッサを例に考えてみよう。このプリプロセッサは「detect_state_problems」というオプションを指定することができる。このオプションはTCPの状態に問題がある場合にアラートを発生させるか否かを設定するものである。
正しいTCPの実装を行っていれば、このオプションを有効にしておいて問題はない。しかしながら、正しく実装されていないプロダクトも存在している。そのような環境下でこのオプションを有効にすると、数多くの誤検知が発生することであろう。
今回はSnortを稼働させるシステムについて、およびSnortのチューニングを通して誤検知を減らす方法について考えてみた。実際のところ、誤検知を減らすための絶対的な方法というのは存在しない。ネットワークごとに細かく最適化していくほかないのである。そのためにはSnortを使用するネットワークやSnort自体への知識が必須となる。すべてを一度に理解するのは困難であると思われるので、運用を通して少しずつ理解を深めていけばよいのではないだろうか。
次回は今回簡単に触れたプリプロセッサについての解説を行っていこうと思う。各プリプロセッサに用意されているオプションなどの解説により、より最適化されたSnortを運用できるよう考えていきたいと思う。
誤検知を減らすためのSnortチューニング
Snortを稼働させるマシン(ハードウェア)
Snortを稼働させるマシン(ソフトウェア)
Snortを配置する場所
Page2
Snortのチューニング
使用するシグネチャの選定
使用するプリプロセッサの選定
誤検知を減らすための絶対的な方法はない
Copyright © ITmedia, Inc. All Rights Reserved.