...

Snort 導入

by user

on
Category: Documents
11

views

Report

Comments

Transcript

Snort 導入
INAS ネットワークの構築に向けた IDS 実運用の中間報告
【 アラートの視覚化を主題として 】
環境情報 3 年
中村拓央 望月洋介
2004 年 7 月 12 日
INAS ネットワークセキュリティー班では今期,INAS ネットワークの構築及び実運用に向けて,IDS と攻
撃の視覚化をするツールのインストールを行った.
1 IDS とは?
1.1 IDS とは?
IDS は Intrusion Detection System の略で,侵入検知システムと呼ばれる.ネットワークやシステム
を監視することで内外からの不正なアクセスなどを検知し,管理者に警告を出したりトラフィックを遮断する
機能を持つシステムや機器のことを指す.
IDS の実起動は NIDS,HIDS 及び DIDS の3つに大別される.NIDS とは,IDS ホストの NIC がプロミ
スキャスモードで作動することにより NIC に届いたパケット全てを解析対象とする起動モードである.対し
て自分の MAC アドレスに届いたものしか監視対象にしないのが HIDS だ.ノン・プロミスキャスモードで
実行するので他のホストへの攻撃行為は検知できないが,逆にそのホストに特化した監視方法を採ることが
可能となる.そのためリソースの使用を最低限に抑えることが出来る.DIDS とは NIDS をセンサーとして
ネットワークに設置する分散型の侵入検知システム構成で,監視対象ネットワークからのアラートを管理コン
ピュータに集めて一元管理する.
今期の研究発表では,mag.keio.ac.jp のネットワークに NIDS として設置したマシンに関して取り扱う.
2 Snort Installation
Snort はライセンスの IDS で,フリーでありながら高機能なツールである.その構成は大別して以下の様で
ある.
• パケットスニファ
• プリプロセッサ
• 検知エンジン
• アウトプットプラグイン
1
パケットスニファと呼ばれるパートでは,NIC に届いたパケットを解析の対象として取り込む.プロミスキャ
スモードで動作していれば自分の MAC アドレス以外へのパケットも監視解析対象にすることが出来るが,そ
のパケットがあるホストに届くことを想定すると,その「そのホストを監視している」とみなすことが出来る.
プリプロセッサでは,例えばフラグメンテーションや URL-ENCODING といった「加工」されたデータを
元に戻し,検知可能な形に変換する.このプリプロセッサの充実により我々はルールセットをより単純で本質
的なものにすることが可能となる.
さらに検知エンジンでは,プリプロセッシングされたパケットデータを解析して不正アクセスであるかどう
かを判断する.Snort はこれをルールセットとのパターンマッチングによって行う.これが Snort をシグネ
チャベース IDS と分類する理由である.
そしてアウトプットプラグインは,検出結果をいかにして我々管理者が認知するかを受け持つパートであ
る.今回のレポートはこの部分についてのものであるため,次章にて詳しく紹介することとする.
今回 IDS を取り上げたのは,冒頭でも述べた通り,INAS の為のセキュアなネットワークを構築するという
きっかけがあったためである.また,日ごろから攻撃と向き合うことで,我々 INAS のセキュリティーへの考
え方や関心を高めることも構想されている.そもそも侵入行為のように本で読んだりログで見るしかないもの
はその実態が掴みにくいものであろう∗1 .そのようなものに慣れるには,やはり実際にやって(自主規制)も
とい,普段からどのような攻撃が自分の NIC に届いているのかを見ていることがもっとも効率的である.
IDS を今回のテーマとしたのにはまだ理由がある.Snort はシグネチャベースだと述べたが,これに対して
アノマリベース IDS と呼ばれるものが存在する.これは,正常動作を学習して異常な振る舞いを検出すると
いう考え方に基づく.この正常な動作のプロファイルを作成するにあたり本研究会で扱われているような方法
を応用できると考え,予め IDS の実態について触れてみることとなった.しかし残念なことに今期は侵入検
知を視覚的に捉えるところまでの発表となる.
3 攻撃の視覚化
前章において取り上げたアウトプットプラグインについて,今回の発表で取り上げた ACID の説明を以っ
て紹介する.ACID は,Snort の吐き出すデータをデータベース管理してブラウザからグラフィカルに,かつ
統計的に攻撃を概観するアウトプットプラグインである.不正なアクセスがあるとその行為を1.攻撃手段別
に分類し,2.さらに攻撃のあった日時,攻撃元・攻撃先のアドレスやパケットの種類,使用されたポート,
その他の IP パケット情報と共にデータベースに保管し,3.PHP によってブラウザ上で情報を引き出せるよ
うにするものである.上記のような特徴を持つアウトプットプラグイン「ACID」を用いて mag.sfc.keio.ac.jp
への不正パケットを収集・分析した結果の一部を以下に示す.
3.1 ケース1:一般的な dhcp によるホスト
このホスト群は,おそらくラップトップなど一時的に mag のネットワークに接続されるものであろう.ア
ラートとしては以下のような発生件数である.
(次ページ)
∗1
一度侵入行為をして成功してみれば間違いなく実感が持てるのになぁ,と考えていることはこの場では伏せさせてください.
2
3.2 ケース2:例外的な dhcp によるホスト
この一群はネットワークとしては先の dhcp 群に属するものである.では,今定義する一群と先のそれとの
違いは何か.それは「アラートの量」である.今回は IDS をルールの絞込みをすることなく運用していて,そ
のため発見したことであるが,殆どのホストが一桁数のアラートしか報告していないのに対し,いくつかのホ
ストはこの 1 週間で 100 を超えるアラートが挙がっている.これらの間には,なんらかの運用的違いがある
と考えられる.
そこでアラートの発生件数が 100 を超えるようなホストに対して,アラートの原因となったパケットを調べ
てみた.具体的には上のリストのうちの 133.27.243.110 のようなホストである.すると圧倒的に多いのが
ICMP パケットによる NMAP としての検出であった.普通はルールセットをカスタマイズして,このような
PING パケットをいちいち検出したりはしない.プレゼンで中村が申した通り,運用コストがかかりすぎる上
に重要なパケットが埋もれて見えなくなってしまうからである.しかしあえて今回これらのルールセットに手
を加えず,推測できることをレポートしようとしたおかげで,ping の到達数が隠れサーバーを検出する手段
となりうることが分かった.これは丁度有事直前にペンタゴンへのピザの配達件数が増えるのに似てはいま
いか.
3
なお,右に示すスクリーンショットはこの「dhcp で IP を
貰っているサーバー」群の中では異例である.この群に所属
する他のホストと違うのは,その受け取るパケットである.
実はこれが本レポートで用いた Snort 用マシンであり,これ
らの危険な攻撃の数々は D1 直江氏による不正アクセスであ
る.上のリストがその攻撃内容である.ルートを取ろうとし
たり cgi-bin にアクセスするなどの試みが見られる.
なお,下は上記の攻撃に対するサーバー側(Snort 側)の
レスポンスである.Apache がエラーコードを返しているの
が分かる.なお,直江氏の用いたこの不正アクセスツールで
あるが,一見そう見えるようにサーバーに振舞うことでその
レスポンスを分析し,web サーバーとしての強度やセキュリ
ティーホールの有無を検出するものである.当然これが侵入
図 1: 直江さんによる不正アクセス
前の下調べとして使われることは有りうる.このようなリア
ルなアラートを見ることが出来たのも直江氏のおかげである.
この場を以って感謝の意を表したい.
図 2: 前頁のアクセスに対する応答例
3.3 ケース3:mag 直下にぶら下がるドメイン名を持つホスト
mag によってドメインネームを貰っているサーバー群へのパケットもやはり,ping のパケットが多かった.
先の dhcp 群と違う点は,SNMP によるネットワークマネジメントのトラフィックが情報リークの試みとして
検出されるという点である.これに関しては,レポートのテーマとしてあまり面白くなかったので,割愛させ
ていただく.
4 インストールメモ
本章では,ACID 環境構築のため(以下「本目的」という)に必要なインストール作業のうち特に明示す
べきと考えた部分について言及する.特別な注意を必要としない部分を含めた詳細なインストール手順は,
INAS の pukiwiki∗2 上に記述されている.本目的に必要なインストールは次のものである.
∗2
http://web.sfc.keio.ac.jp/ naoe/security/pukiwiki/
4
• Snort
• MySQL
• Apache
• PHP
• ACID
• JpGraph
本目的のために特別な設定を要しない MySQL のインストールについては,これを割愛する.なお,MySQL
は Snort を実行するホストのランレベルで自動起動するよう設定されているものとする.
4.1 Apache/PHP のインストール
Apache をインストールする.configure のオプションは次である.(−− はハイフン 2 個)
$ ./configure −−enable-so
PHP のインストールに先立って,libpng-devel をインストールする.これは PHP の configure を通すため
に必要なライブラリであるが,本レポートの趣旨から逸脱するため詳細な説明は省略する.
PHP の configure を,次のオプションをつけて行う∗3 .
$ ./configure
−−with-apxs2=/usr/local/apache2/bin/apxs
−−enable-sockets
−−with-mysql=/usr/local/mysql
−−with-zlib-dir=/usr/lib
−−with-gd
以上のオプションにより,Apache の httpd.conf に PHP をロードするための設定が書き加えられる.もしこ
れが確認できなかった場合,これを httpd.conf に直接書き込む.以下のコマンドで確認・書き込みを行うと
よい.
$ cat /usr/local/apache2/conf/httpd.conf — grep php
# ”LoadModule php4 module
modules/libphp4.so” の 2 つが返ってくる.
# そうでなかった場合は httpd.conf に書き足す.
さらに次の設定を書き足す.
ADDType application/x-httpd-php .php
以上が終わったら Apache のアーカイブに入っていた php.ini-dist を,PHP のインストール先にある lib
ディレクトリに php.ini という名前でコピーする.
$ sudo cp /home/snort/apache/php-4.3.7/php.ini-dist /usr/local/php/lib/php.ini
∗3
PHP の configure オプションに関して,右オペランドに指定すべきパスは Snort のインストール先の環境に合わせる.以下,パ
スに関しては Snort 導入環境に合わせて適宜読み替えていただきたい.
5
こ れ で Apache と PHP の 設 定 は 終 了 で あ る .http デ ー モ ン サ ー バ ー と し て 自 動 起 動 す る た め に ,
/etc/init.d/に起動スクリプトを置いて任意のランレベルから起動出来るようにシンボリックリンクを
張る
$ cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd
$ ln -s /etc/init.d/httpd /etc/rc5.d/S85httpd
$ ln -s /etc/init.d/httpd /etc/rc5.d/K85httpd
4.2 Snort のインストール
Snort を,MySQL を使えるようにして configure する.オプションは以下である.
$ ./configure
−−prefix=/usr/local/snort
−−with-mysql=/usr/local/mysql
こ れ が す ん だ ら make; make install し ,ア ー カ イ ブ 内./etc/デ ィ レ ク ト リ 内 の フ ァ イ ル を す べ
て/usr/local/snort/conf/*へ コ ピ ー す る .ま た ,ル ー ル セ ッ ト を 分 か り や す い 場 所 へ コ ピ ー し パ ス を
通すなど環境を整える.snort.conf ファイルを編集し,ルールセットへのパスの変更と MySQL への出力を行
う設定の追加をする.後者は
output database: log, mysql, user=snort password=snort dbname=snort db host=localhost
という記述を追加するのだが,後に行う MySQL のユーザー登録の際にこのユーザー名,パスワード,ホスト
名を用いることに留意していただきたい.Snort を自動起動するように任意のランレベルに設定する.自動起
動用のファイルは snort アーカイブ内./contrib/S99snort である.これをエディタで展開し,
• SNORT PATH=snort 実行ファイルのパス
• CONFIG=snort.conf へのパス
• IFACE=NIC
• SNORT GID=nogroup この行をコメントアウト
SNORT GID の値をコメントアウトしたので,これを参照する部分は以後すべて削除する.ここまで終わっ
たらこの自動起動用のスクリプトを/etc/rc.d/にコピーし,任意のランレベルへシンボリックリンクを張る.
※現時点ではまだ MySQL への snort の登録が終わっていないため Snort を起動しようとしてもエラーが
出て起動できない.
4.3 MySQL の設定
MySQL にユーザー”snort” を登録する前に,ACID 用のデーターベースとテーブルを作成する.この作業
は通常のデータベース・テーブル作成と同様であるが,テーブル作成に関しては snort のアーカイブの中にス
クリプトがあるので,これを作成した snort db に接続してから実行する.
# snort db の作成 mysql > create database snort db;
# スクリプトを用いたテーブルの作成,snortdb-extra は予め解凍しておく
6
mysql > source /home/snort/snort-2.1.0/contrib/create mysql
mysql > source /home/snort/snort-2.1.0/contrib/snortdb-extra
# ユーザー”snort” の作成,権限の追加,及びユーザー”acid” の作成
mysql > grant INSERT, SELECT on snort db.* to snort@localhost;
mysql > grant UPDATE on snort db.sensor to snort@localhost;
mysql > gran CREATE, INSERT,SELECT UPDATE, DELETE, on snort db.* to acid@localhost;
ここで,ユーザー名”snort” とホストは先ほどの snort.conf の設定に用いたものと一致させる必要がある.こ
こまでが済んだらユーザー”snort” と”acid” のパスワードを設定する.
mysql > set password for ’snort’@’localhost’ = password(’snort’);
mysql > set password for ’snort’@’localhost’ = password(’acid’);
4.4 JpGraph 及び ADOdb のインストール
これらには,特にインストールに際した設定は無いので割愛する.
4.5 ACID のインストール
こちらはインストールに特別なオプションは必要ないが,本体となる PHP スクリプト acid conf.php の書
き換えが一部必要となる.ここで PHP スクリプトのソースをすべて挙げるのも無駄であるしコメントで説明
が書いてあるのでここでは取り上げない.ACID が MySQL にアクセスする際のユーザー名やパスワード,あ
とはパスの関係が解決していれば問題はないと思われる.
4.6 ブラウザからのアクセス
以上で設定は終わりである.マシンを再起動し,必要なデーモンプロセスが起動していることを確認して
から
http://host.domain/acid/acid main.php
にブラウザからアクセスし,[Setup page],[Create ACID AG] の順にクリックする.これでアラートがブラウ
ザから見られるようになった.
5 参考文献
IDS 入門 Snort&Tripwire の基礎と実践単行本: 339 p 出版社: 技術評論社 ; 著者: 日吉龍
Snort2.0 侵入検知単行本: 324 p ; サイズ (cm): 24 出版社: ソフトバンクパブリッシング ; 著者: 渡辺勝
弘/鹿田幸治
7
Fly UP