不正アクセスに対し、常に監視の目を光らせることはセキュリティを向上させる上で最も効果があり基本的な事です。しかし、人が四六時中システムを監視する事は不可能です。Linux においては、これらの監視の手助けをしてれるツールがあり、ログ監視ツール 「Swatch 」 と ネットワーク型 IDS 「 Snort 」 が有名です。
このコンテンツのメニューは、ページ右を参照して下さい。順を追って説明します。
Snort (スノート)は、GPLで公開されているフリーのネットワーク型 IDS です。IDS とは、ネットワークを流れるパケットを監視する強力なセキュリティ支援ツールで企業向けの製品を導入すれば数百万もの導入コストがかかります。
Snort を用いれば導入コストを掛けずに同じようなシステムを構築することが可能で、市販されているネットワークIDS の中には検出エンジンに Snort を用いた製品も多く存在します。
Snort は、簡単に言えばネットワークを流れるパケットを監視するソフトです。パケットのパターンをリアルタイムに解析し、ルールにマッチするパターンが見つかれば何らかのアクションを起こすことが出来ます。
例えば、ファイアウォール(iptables)と連動するスクリプトを書けば、危険なアクセスに対して自動的に通信を遮断する事も可能になります。
サーバに飛んでくるパケットを監視し、セキュリティを高めることは勿論のこと、NIC をプロミスキャスモードで動かせば、同一セグメント上に存在するパソコンへ流れるパケットを監視するセンサーとしても利用できます。
管理しているネットワーク、サーバに不正行為があった場合、それがどの程度危険なものか、早急に対策が必要か、そうでないかは専門家でなければ判断が難しい現状があります。また、サーバが出力するログを監視するだけでは不正アクセス、不正侵入に対する徴候を全て把握する事は出来ません。
クラッカーは不正侵入を試みる場合、様々な方法で効率的な侵入のルートはないか情報収集を行います。ログで検出できるような明白地なポートスキャンをかけるお馬鹿さんはいません。(たまにいますが、興味本位か使い捨てボットでしょう。放置された自宅サーバ系に多いと思われます)
相手に気付かれないように巧妙にしかけてきますが、パケットレベルで監視すれば徴候を察知する事が出来ます。つまり、相手がどれだけ本気でサーバの不正侵入を狙っているのか事前に察知することで、警戒することが出来ます。
この不正アクセスパターンを検出し、アクションを起こしてくれる Snort は、専門知識のない私たちに変わって監視してくれる頼もしいセキュリティ パートナーとなります。
導入したから安全になるわけではありません。過信は禁物、後の運用が大切です。
ここで紹介する Snort を使用した不正侵入検知システムの概要は以下の通りです。
FedoraCore 2 / 4 及び、CentOS 4 (4.4アップグレード) 4.4 クリーンインストール環境で検証しています。RHEL 系 Linux であれば、特に問題はないと思います。ACID にPHPを使用しますが、PHP 5 については検証していません。
Snort は、パフォーマンスの低いPCでも動作するように設計されていますが、マシンパワーを要求します。特にメモりを消費します。
WAN / LAN に複数のNIC を持つゲートウェイに設置する場合、双方を監視するとなると二つのデーモンが常駐し、それぞれにメモリを消費します。どこにセンサーを設置するか、何に対して何を監視するのか、事前に計画を立てる必要があります。
当然ですが、Snort センサーを設置する場所によって監視できるパケットと設定も異なります。ここでは、複数の NICインターフェイスを持つゲートウェイサーバに設置しています。そのままでは、利用できませんので、適宜、環境に合わせる必要があります。
シグネチャファイルは、Snort を IDS(不正侵入検知システム)として運用する場合に必要となる、攻撃パターンを検出するための定義ファイルです。不正侵入の手口はウイルスと同様に常に同じではなく、新しい脅威に対抗できるように常に最新のシグネチャファイルに更新する必要があります。
最新のワクチン(データベース)に更新しなければアンチウイルスソフトがセキュリティ上、意味をなさないのと同じように、Snort も攻撃パターン検出に必要なシグネチャファイルを更新しなければ意味をなしません。
シグネチャファイルには、大きくコミュニティベースで提供されるものと、VRT(セキュリティ プロフェッショナル チーム)により検証されたシグネチャファイルに分けられます。ここでは、質の高い VRT ライセンスで配布されるシグネチャファイルを使用する方法と、Oinkmaster を使用し常に最新のシグネチャ(ルール)ファイルの常態に保つ方法を紹介します。
FlexResp とは、Snort がオプションでサポートする面白いアクションの一つです。具体的には特定のパケットを検出すると相手に通信終了パケットを強制的に送りつける機能です。これにより、相手は通信を確立することが出来無くなります。言わば、パケットの強制介入により特定の通信をピンポイントで妨害します。
使い方を誤まると簡単にネットワークを痲痺させてしまう事が可能であり、扱いには注意が必要です。このアクションは標準でサポートしてません。
文字列を組み合わせて特定の通信を規制するといった iptables では行えない規制も自分で作成するローカルルールを用いて簡単に行えるので利用可能な方向でセットアップします。
検出した攻撃バターンを MySQL データベースでアーカイブし、統計をブラウザで確認できるように ACID (PHPスクリプト)を導入します。また、ログ監視ツール Swatch を併用し、不正アクセス・攻撃を検出した地点でサーバ管理者にメールでリアルタイムに報告する仕組みも併せて構築します。
関連 => ログ自動監視ツールを導入する~Swatchについて
FedoraCore4 について
FedoraCore 4 については、PHP5 が採用されており、ACID が正常にセットアップできませんでした。SQL サーバーとの接続で問題が発生し、ソースコードレベルでの修正が必要となるため、事実上、PHP5 対応待ちといった所です。その他のコンパイル、Snort → MySQL 出力、に関しては、特に問題は発生しませんでした。
Snort を利用した侵入検知・監視システム構築において有用な情報資源です。ここでは、主に初期導入に主眼を置いて説明しています。後々の運用のためにも是非参考にして下さい。
2006/11/21 改定