Amazon EC2でIDS(侵入検知システム)を導入する – AIDE –

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

IDS(侵入検知システム)とは

IDS(Intrusion Detection System)は、不正な第三者からの侵入を検知して通知する仕組みです。主にネットワーク型とホスト型があり、前者の代表的なツールはsnort、後者はtripwireです。始めは、自前でセットアップしたsnortから試そうと思ったのですが、Amazon EC2はプロミスキャスモード(ネットワークに流れる全てのパケットを受信するモード)を禁止しているため使えません。解決方法として、商用snortを提供しているSourcefire社の専用AMIを使う必要がありそうです(プロミスキャスモードで動くのかな?)。よし、じゃぁこのAMIを使おうと思ったら、このAMIは東京リージョンには無いw。そこで、ネットワーク型のIDSは別の機会として、今回は、ホスト型IDSの動作確認をすることにしました。ホスト型IDSで、Amazon Linuxにリストされているのは、AIDEだったのでこれを試してみます。ちなみに、EPELを有効にすればtripwireも出てきます。

AIDE(Advanced Intrusion Detection Environment)をインストールする

AIDEは、ホスト型のIDSです。ファイルの改竄を検知してシステムへの不正侵入を検知します。ある時点のファイル構成をスナップショットとしてデータベースに保存して、任意の時点との差分を検知しています。設定ファイルの記述も簡単で、Amazon Linuxから直ぐにインストールして使う事が出来ます。早速インストールしてみましょう。

$ yum install aide

これでインストールは完了。次に設定ファイルを見てみます。

$ vi /etc/aide.conf

ここには監視ルールの定義と監視場所の指定を行います。AIDEは、主にシステム関連のファイルに対する改竄を検知するようにしますので、常に書き込まれることを前提としたプログラムやログなどは指定しないようにしましょう。例えば、/etcや/rootを監視し、/usr/localや/var/logなどは監視しません。ちなみに、リアルタイムにログを監視するツールは別の機会でご紹介します。

AIDEを動作させる

AIDEは、ユーザが実行を指示することでファイル改竄をチェックします。まず始めに、初期処理としてスナップショットを取得します。これは、ある時点の指定されたファイル群の情報を保存し、次回チェック時の変化の差分を見つけます。どのディレクトリを監視するかは設定ファイルで記述します。

$ vi /etc/aide.conf

設定ファイルを開くと、データベースの場所とログの場所が設定されています。次に基本ルールが記述されていて、この基本ルールを組み合わせたカスタムルールが設定されています。最後に、どのディレクトリやファイルを監視するか指定します。!マークを先頭に記述すると監視から除外します。なんでも監視してしまうと処理が重くなりますので、大事なファイルやシステム関連で更新されないもののみに絞ったほうがよいですね。例えば以下のような。

/boot   NORMAL
/bin    NORMAL
/sbin   NORMAL
/lib    NORMAL
/lib64  NORMAL
/opt    NORMAL
/usr    NORMAL
/root   NORMAL
!/usr/src
!/usr/tmp
!/usr/share

それでは、データベースを初期化します。結構待ちます。完了したらデータベースファイルが生成されたか確認してください。生成されたファイルはスナプショットですから、リネームしてマスターのデータベースとします。

$ aide --init
AIDE, version 0.14

### AIDE database at /var/lib/aide/aide.db.new.gz initialized.

$ ll /var/lib/aide/ 
-rw------- 1 root root 857431 Mar 17 18:07 aide.db.new.gz
$ cd /var/lib/aide/
$ mv aide.db.new.gz aide.db.gz

監視対象のファイルを改竄する

AIDEの動作確認をするために監視対象のファイルを改竄したいと思います。/etc/hosts.allowをviで開いて上書き保存します。さらに、/root/.bash_profileを編集します。

$ vi /etc/hosts.allow
$ vi /root/.bash_profile 

改竄を検知する

それでは、改竄されたかチェックしてみましょう。

$ aide --check
AIDE found differences between database and filesystem!!
Start timestamp: 2012-03-17 22:46:59

Summary:
  Total number of files:        12850
  Added files:                  0
  Removed files:                0
  Changed files:                3


---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /etc/hosts.allow
changed: /root
changed: /root/.bash_profile

--------------------------------------------------
Detailed information about changes:
---------------------------------------------------


File: /etc/hosts.allow
  Size     : 372                              , 371
  Mtime    : 2012-03-17 17:28:43              , 2012-03-17 22:44:34
  Ctime    : 2012-03-17 17:28:43              , 2012-03-17 22:44:34
  Inode    : 16831                            , 20581
  MD5      : RCqHwsd4ClomAwttyHcA5g==         , XgdcLxUkoML7eycoNLh1Pw==
  RMD160   : 5tFsd3x9UhFQZRXdm+gdaX8zHjA=     , uCxdi3+ACQzBjvnv7FO7C8WlYA4=
  SHA256   : vy2xBzCjLgyH2m8KsHvW20Xa1FcoUIO1 , rzLsCaNismeScTAcr58OmIfFoo7FikFS

Directory: /root
  Mtime    : 2012-03-16 17:46:32              , 2012-03-17 22:46:12
  Ctime    : 2012-03-16 17:46:32              , 2012-03-17 22:46:12

File: /root/.bash_profile
  Inode    : 4100                             , 17553

たしかに、改竄した場所が検出されていますね。この情報はログとして、/var/log/aide/aide.logにも出力されています。

AIDEを使って侵入検知を運用する

AIDEのcheckコマンドは、スナップショットと現在のファイル構成を比較して改竄を検知していますので、スナップショットを取得してデータベースを更新しないと変更した部分がどんどん溜まってしまいます。そこで、定期的にデータベースを最新状態に更新しましょう。改竄の検知とデータベースの初期化をセットで行うのがupdateコマンドとなります。これとあわせてデータベースファイルを差し替えれば、毎回、最新のスナップショットとの差分が取れます。さらに、ログについては上書きしてしまっているようですので、毎回日時を付けて履歴を残します。

$ aide --update
$ mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
$ mv /var/log/aide/aide.log /var/log/aide/aide.log.`date --date '1 days ago' +%Y%m%d`

まとめ

今回は、IDS(侵入検知システム)について学びました。IDSには、ネットワーク型とホスト型があり、ホスト型としてAIDEをインストールして動作を確認しました。OSにとって重要なファイルの改竄を検知することで不正利用の継続を防止します。なお、IDSは検知するのみで防御はしません。防御する仕組みはIPS(Intrusion Prevention System)と呼ばれています。そもそも、侵入されてしまっているということは、何かしら突破されたワケですので、突破されないように防御する必要がありそうです。思いつくのは総当たり攻撃(ブルートフォース攻撃)とか、ソーシャルエンジニアリングによってパスワードが外部に漏れることでしょうか。さらに侵入後にrootkitを仕込まれてバックドアが開いたり、、、あぁ怖い。まぁここら辺は次の機会に検討したいと思っています。セキュリティ対策はいたちごっこだと思いますが、最低限の対策をしっかりと行い、安全で安心のサーバーを提供したいですね。今日から君もサーバーエンジニア!

参考資料

AIDE

Snort, IDS installation on Amazon Instance

RHEL 4 でホストベースの侵入検知(IDS)ツール「aide」を運用する