現在地 HOME > 掲示板 > IT6 > 584.html ★阿修羅♪ |
|
Tweet |
(回答先: 無料のIDS=侵入検知システム、もあるんですね。その名は「Snort」【商用だと数十万〜数百万。GPLのお陰です。】 投稿者 クエスチョン 日時 2004 年 10 月 14 日 22:47:27)
第1回、不正侵入検知システムを知る【@IT】
http://www.atmarkit.co.jp/fsecurity/rensai/snort01/snort01.html
早川勇太
日本Snortユーザ会
2004/8/10
※ご注意
本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。また、本稿を利用した行為による問題に関しましては、筆者および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。
「IDS」という言葉をご存じだろうか。IDSとは「Intrusion Detection System」の略で、日本語では「侵入検知システム」と訳される。この連載ではフリーのIDSであるSnortを題材に、IDSのインストールから運用までを解説していきたいと思う。
IDSとは何か
「IDSとは一体何なのか」。そう疑問に思った方は少なくないであろう。簡単にいえば、「ネットワークを流れるパケットに対してあるパターンに合致しているか否かを判定し、合致している場合はあらかじめ定められた処理を行う」ものである。
「あらかじめ定められた処理」とは具体的にどのような処理なのかというと、大抵は「警告を発する」という処理が行われる。あくまで「警告を発する」だけであることに注意してほしい。その警告を受けてどう動くかは、ほかならぬIDS管理者次第なのである。
「IDSを導入するメリットは何なのであろうか」という疑問を持たれるかもしれない。最も大きなメリットは「異常に気付かせてくれる」という点である。 IDSがなければ、何か異常が発生したとしてもそれに気付くことは容易ではない。IDSを導入した後にそれが発する警告を眺めてほしい。恐らくその量の多さに驚くことだろう(後ほど述べるが、これらすべてが不正アクセスであるとは限らない)。
IDSとファイアウォールは何が違うのか
次に浮かんでくる疑問は、「IDSがあればファイアウォールは不要なのではないか」、あるいは「ファイアウォールがあるからIDSは不要なのではないか」といったものだろう。答えは「否」である。そもそもIDSとファイアウォールはお互いを補完する関係にある。もちろん、それぞれを単体で運用しても有益であるが、両者を組み合わせればさらに有益なものとなる。理想的にはファイアウォールとIDSの両方を設置することが望ましいといえる。
強引な例えを用いるとすれば、ファイアウォールは「自動改札」であるといえる。チケットを持たない者は通さないが、チケットさえ持っていれば通行を許可してしまう。HTTP(Port 80)のみが許可されたファイアウォールであれば、SSH(Port 22)は遮断されるが HTTPは遮断されない。もしそのHTTPパケットが悪意のあるものであったとしてもだ。
一方IDSはというと、「有人改札」であるといえる。チケットを持っているか否かに加え、そのチケットの持ち主が例えば指名手配犯でないかどうかといったことをチェックする。もし指名手配犯であれば、警察に通報することだろう。このようにIDSは、あるパケットがバッファオーバーフローを引き起こす脆弱性を狙ったものであるかどうかを判断し、そうであればIDS管理者に警告する。
IDSと誤検知(False PositiveとFalse Negative)
IDSには誤検知がつきものである。ネットワークに対し最適化されていないならなおさらである。一般に「誤検知」といわれるものには、大きく分けて2つの種類が存在する。「False Positive」と「False Negative」である。
False Positiveとは、「正当なパケットを不正なものであると判断してしまう」ことである。False Negativeとは「不正なパケットであるにもかかわらず見逃してしまう」ことである。どちらも「誤検知」であることには変わりないが、IDSの観点から見れば前者の方が問題は少ない。
「誤検知があっても問題はないのではないか」と考える方がいらっしゃるかもしれないが、それは最初だけである。IDSが警告をログに記録する場合で考えてみよう。最初のうちは誤検知があってもそれを無視してログをチェックするであろう。しかし、次第に誤検知の相対量が増えてくると、正規の警告が誤検知に埋もれてしまう。そうすると正規の警告を見逃しやすくなってしまう。探すのも面倒になる。その結果どうなるか。IDSの警告を無視するようになる。正しく侵入を検知しているものもそうでないものも、すべて無視するようになる。
極端な例だと思われるかもしれないが、多かれ少なかれそのようになっていくものである。また、ログを保存するストレージの容量を無駄に消費することにつながったり、余計なリソースを消費したりする結果にもなる。
このことから導き出される結論はただ1つ。「誤検知は極力減らすべし」。では、どうやって誤検知を減らしていけばよいのか。答えは単純である。ネットワークに最適化すればよい。しかしながら、単純であることと簡単であることは等価ではない。より具体的な方法については、今後紹介していきたいと思う。
ネットワーク型IDSとホスト型IDS
IDSはその形態によって分類することができる。IDSが監視する対象によって分類すると、「ネットワーク型(NIDS)」と「ホスト型(HIDS)」に分けられる。
ネットワーク型のIDSが監視するのは、その名のとおり「ネットワーク」である。例えば、192.168.0.0/24のネットワークを監視するように設定されたIDSであれば、そのネットワークに流れるパケットすべてが監視対象となる。ちなみに Snortは「ネットワーク型」のIDSである。
ネットワーク型のIDSは、一般的に「ステルスモード」で運用される。ステルスモードとは、NICにIPアドレスを割り振らずに運用する方法である。これにより、外部からIDSを認識することは事実上不可能になる。
一方、ホスト型のIDSが監視するのは、「IDSが稼働しているコンピュータ自身」である。つまり、IDSが稼働しているコンピュータ以外は監視対象とならない。このタイプのIDSとして有名なのは、「Tripwire」であろう。
ホスト型のIDS(HIDS)は単一のホストのみを対象とするのに対し、ネットワーク型のIDS(NIDS)はネットワーク全体が対象となる
シグネチャ型IDSとアノマリ型IDS
ここまでは「監視する対象」で分類してきたが、「分析方法」という観点からも分類することができる。その場合、「シグネチャ型」と「アノマリ型」に分類することができる。
シグネチャ型とは「○○○○の場合は不正アクセスである」といった情報(シグネチャ)と現在のパケットを照らし合わせ、合致した場合に「不正アクセスである」と判断する方法である。
例えば「パケット中にAAAが含まれていたら不正アクセスである」と定義されたシグネチャがあるとしよう。 IDSはそのシグネチャとパケットを照らし合わせる。もし、そのパケット中にAAAが含まれていた場合、IDSは不正アクセスであると判断し、警告を発する。ちなみにSnortはシグネチャ型のIDSである。
アノマリ型とは「○○○○という状態が正常である」といった情報を何らかの手段により蓄積しておき(例えば管理者が定義した「正常な状態」において、統計情報を収集する)、それと現在の状況を照らし合わせて、ある一定の閾(いき)値を超えた場合に、「異常である」と判断する方法である。
例えば、「1秒当たりに10MBの通信量が存在する状態」が平常時であると定義されており、かつ「それを超過した場合異常と見なす」と定義されていた場合、1秒間の通信量が10MBを超えた時点でIDSは異常であると判断し、警告を発する。
Snortの特徴
ここまでIDSについて簡単に解説をしてきた。これからはこの連載で取り上げるSnortについて簡単に紹介をしていく。次回以降、詳細な解説をしていく予定である。
●フリーソフトである
SnortはGPL(GNU Public License)で配布されているため、当該ライセンスを順守している限り、自由に使用することができる。これはSnortが個人でも気軽に使用できるということを示している。
もし、GPLが悪影響を及ぼすような場合は、商用版のSnortを選択することも可能である(この連載では商用版についての解説は行わないので注意してほしい)。
●パケットスニファ/パケットロガーとしても使用できる
そもそもSnortはパケットスニファ/パケットロガーとして開発された。Snortをコマンドラインから適切なオプションを付けて実行すれば、すぐに高機能なパケットスニファ/パケットロガーとして使用可能である(ただし、パケットスニファ/パケットロガーとしての使用方法については、この連載では触れない)。
●豊富なプリプロセッサが用意されているため、柔軟な解析を行うことができる
Snortにはプリプロセッサという概念がある。このプリプロセッサは、パケットのデコードが行われた後に実行され、プリプロセッサが実行された後にSnortの侵入検知エンジンが実行される。
プリプロセッサには下記のようなものが用意されている。ここで紹介したものを含め、プリプロセッサについての詳細は、Tarball中に含まれる「snort_manual.pdf」を参照していただきたい(英文だが、設定方法を含め、詳しく書かれている)。
portscan:ポートスキャンの検出を行う
frag2:IPフラグメントの再構築を行う
stream4:TCPストリームの再構築とステートフルな解析を行う
telnet_decode:Telnetの制御文字を正規化する
●豊富なアウトプットプラグインが用意されているため、さまざまな形式でアラートを出力することができる
Snort には豊富なアウトプットプラグインが用意されており、それらを使うことでさまざまな形式でアラートを出力することができる。テキスト形式のほかにもバイナリ形式、XML、データベースなどにも出力できるため、アラートの利用目的や連携するツールに合わせた柔軟な運用を行うことができる。
この連載では、Snortをデータベース(MySQL)とACIDというツールと組み合わせた運用について解説していく予定であるが、このようなことが可能となるのもこのアウトプットプラグインのおかげなのである。
●さまざまなOS上で動作する
Snort はGNU/Linux、Windows(NT/2000/XP)、*BSD(FreeBSD、OpenBSD、 NetBSDなど)、UNIX(Solaris、SunOS、IRIXなど)で動作する。つまり、IDS管理者が最も得意とするOS上でSnortを運用することができる。
●さまざまなプロトコルに対応している
SnortはTCP、UDP、ICMP、IPの解析を行うことができる。通常の運用上はこれで十分なはずである。これ以外のプロトコルについては解析が行われない。記録のみが行われ、Snortは統計解析にのみこれらの情報を使用する。
Snortに関する情報源
最後にSnortに関する情報源を2つ紹介しておきたいと思う。
■Snort( http://www.snort.org/ )
Snortのオフィシャルサイト。Snortに関する最新の情報はここにあると考えて間違いない。最新のルールファイルもここから入手できる。
■日本Snortユーザ会( http://www.snort.gr.jp/ )
日本語でSnortに関する情報を交換するなら外せない。初心者から上級者まで、どんなレベルでも参加しやすい空気が漂っている。
もしSnortについての知識を深めたいのであれば、日本Snortユーザ会に入会することを強くお勧めする。上級者にとっては非常にコアな情報を日本語で交換できるという大きなメリットがあるだろう。初心者にとっては上級者からの有益な情報を得る貴重な場になるであろう(ただし、自助努力を怠った場合はこの限りではない)。
今回はIDSとSnortについて簡単に紹介した。次回は、実際にSnortをインストールする方法について解説していく。GNU/LinuxシステムとWindowsで、SnortとACIDを用いたIDS構築を行う予定だ。
第2回 Snortのインストールと初期設定
http://www.atmarkit.co.jp/fsecurity/rensai/snort02/snort01.html