ACID は、Snort が MySQL データベースに出力したログを、ブラウザで視覚的に確認できる PHP スクリプトです。ACID を利用するには、Snort が MySQL データベースに検出結果を出力している必要があります。
グラフ化して視覚的に表示したり、ログを検索、集計、削除などの操作が行えます。また、アーカイブ用のデータベースを用意すれば重要なログだけを記録する事もブラウザで行えるようになります。
ACID は php スクリプトです。ここでは、Webサーバが構築済みであり、PHP も導入済みである事を前提に説明しています。Webサーバは、Snort 、MySQLと同一ホストである必要はありませんが、ネットワークを介す場合は通信経路のセキュリティも考慮してください。
ここでは、Snort / MySQL / Webサーバ が全て同一ホストという事で説明しています。
ACID が必要とするPHPモジュールは以下の通りです。原稿を書き直すにあたって CentOS-4.4 クリーンインストール環境で検証しました。
FedoraCore 4 以降では、PHP-5 が標準となっており、以前、検証した時は動作しませんでした。(最近リリースされた CentOS 4.4 はPHP4です。) PHP5 については未検証です。 2003年以降、ACID のバージョンは止まっています。PHP5で動かすには、ソースの改造が必要になるようです。
phpで画像を扱うためのモジュールです。以下のコマンドでモジュールが組み込み済みか確認して下さい。
CentOS-4.4 の場合、公式リポジトリになかったので、Dries リポジトリから入手しました。非公式リポジトリを yum や apt で利用する場合、登録する必要があります。
png 画像を扱うためのライブラリです。CentOS ではパッケージは提供されていません。(FedraCore はあったと思う) 以下から入手しました。ディストリビューションに適したパッケージをインストールするか、ソースからコンパイルしてインストールしてください。
CentOS 4.4 を開発環境でインストールしていれば入っていると思います。必要なパッケージは以下の通りです。
で確認し、インストールされていなければインストールします。
PHP でデータベース制御に必要なモジュールです。
で確認し、なければインストールしてください。
GDを制御に必要なライブラリです。先にGDがインストールされている必要があります。 RHEL であればパッケージが提供されています。
インストールされていなければ、インストールします。
CentOS-4 にインストールされている PHP は、GD モジュールが認識していませんでした。 src.rpm の php.spec を見ると FedoraCore と異なっており、
--with-gd=shared
となっています。
で php-gd をインストールすれば、PHP の再コンパイルの必要はありません。
再度
で GD が有効になっているか確認して下さい。
実際に動作させるには httpデーモンの再起動が必要です。また、足りないパッケージについては、FedoraCore など RHLE4 系のソースパッケージ(src.rpm )からコンパイルで対応しました。
必要なモジュール、環境が準備できたら、ACID をセットアップします。ACID は以下から入手します。(2003年以降、出ていません。PHP5未対応のまま)
PHP実行可能な Apache の公開ディレクティブに設置するだけですが、Apache 側で適切な接続制限は行うようにして下さい。ACID を一般に公開するお馬鹿さんはいないと思いますが、外部ネットワークからアクセスする場合は、SSLで通信経路を暗号化するなどして下さい。
ACID は以下から入手できます。
URL => http://www.andrew.cmu.edu/user/rdanyliw/snort/snortacid.html
インストールといってもApache の公開ディレクティブに設置するだけですが、CentOS 4.4 では 公式リポジトリで ACID のパッケージが提供されていますので、今回はこれを利用します。
以前に自分で ACID 設置して利用していた場合、Apche の設定ファイルが上書きされて意しまいますので注意して下さい。
yum を利用した場合、依存関係により必要なパッケージが自動でインストールされるので楽です。(Dries リポジトリを使用)
上記、パッケージ(CentOS-4.4の場合) を使用してインストールした場合、Apache の設定ファイルディレクトリに、公開に必要な設定ファイルが作成されます。
/etc/httpd/conf.d/acid.conf
ACID の設定を行う前に、必ず適切なアクセス制限を行うなどの設定は行って下さい。Apache 2.0 設定のポイントは以下で説明しています。ここでは割愛します。
参照 => Apache2初期導入時の管理・設定例
ACID 自体の設定は、Snort が書き出す MySQL データベースを指定するだけです。上記、rpm で ACID をインストールした場合のディレクトリは
/var/www/acid
となっています。Apache 側で Alias (マッピング)処理して公開されています。このディレクトリに、acid_conf.php がありますので、Snort が出力に使用している MySQLデータベースのアクセスコード を直接記述します。
*/
$alert_dbname = "snort_db";
$alert_host = "localhost"; ← MySQL と Apache が同一ホストの場合
$alert_port = "";
$alert_user = "snort"; ← MySQL ユーザー
$alert_password = "mypassword"; ← 上記ユーザのパスワード
X Window 備え付けのテキストエディタ (gedit や kedit) などで編集する場合、デフォルトで自動的にバックアップファイル が作成されます。
例えば、acid_conf.php~ こんな風に拡張子の末尾に余計なものが。
このファイルにブラウザでアクセスした場合、php コードがテキストとして露出してしまい、MySQL データベースのアクセスコードが流出してしまいます。余計なお節介かもしれませんが、、
snort セットアップ時についでに作成しておいたアーカイブ用のデータベースを指定します。ACID 上で snort_db に記録された任意のログをアーカイブ用データベースに移す事が出来るようになります。
特に、Snort IDS の初期運用段階は不正パケットの識別と snort のチューニング作業に負われますので、選別用のアーカイブデータベースは役に立ちます。同じ要領で以下の個所を修正します。
/* Archive DB connection parameters */
$archive_dbname = "snort_archives";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "snort";
$archive_password = "mypassword";
DBlib と ChartLib のパスを指定します。 ここで使用した Dries リポジトリの rpm のパスでは以下のようになります。
$DBlib_path = "/var/www/adodb";
$ChartLib_path = "/var/www/jpgraph-1.19";
FedoraCore の公式リポジトリの rpm では、
$DBlib_path = "/usr/share/adodb";
$ChartLib_path = "/usr/share/jpgraph";
になると思います。ディレクトリを確認して下さい。
以上で、ACID のセットアップは終了です。実際にブラウザでアクセスして動作確認して下さい。特に統計グラフが描けているか確認して下さい。
snort センサを設置する場所やルールセットにもよりますが、プロミスキャスモードで監視するケースやインターネット側からくるパケットを監視するケースでは短期間で厖大なログが蓄積されます。MySQL サーバを圧迫しますので定期的なメンテナンスも必要になります。
ACID を使用する事で定期的にログを削除する事も出来ます。またアーカイブ用のデータベースを用意すれば、ACID 上から残したいログのみをフィルタリングし、アーカイブ用データベースへバックアップする事も出来ます。
ACID はデータベースの統計で分かりやすく把握したり、過去の不正パケットを追いかけるのに利用できますが、不正アクセス、攻撃をリアルタイムにサーバ管理者に報告してくれる訳ではありません。
次は、snort がMySQL データベースと同時に出力するログを使ってログ監視ツール Swatch でメールアラートを出す仕組みを作ります。