セキュリティ対策の基本的方針としては、
-----------------------------------
◆攻撃対象にならないようにする
不要なデーモンを起動しない
ソフトウェアの種類・バージョンを隠蔽する
特定パターンのアクセスを禁止する(IPS等)
◆侵入経路減らす
ファイアーウォールによる防御(iptables等)
セキュリティパッチの定期的な適用(RHN等)
◆侵入された事をいち早く検知する
不正侵入検知(IDS等)
ログ監視(いろいろ)
ファイル変更監視(AIDE等)
◆侵入されても操作できる範囲を限定し被害拡大を防ぐ
権限の限定化(SELinux等)
-----------------------------------
*物理的・ソーシャル的な対策は除く
等々ありますが、今回はAIDEを使って「侵入された事をいち早く検知する」で「ファイル変更監視」を行う簡単な方法を紹介。
AIDE(Advanced Intrusion Detection Environment)
AIDEはオープンソースのホスト侵入検知システムで、ファイルシステムの状態データベースを作成し、cron等で定期的にデータベースと現状を比較。ポリシー違反が発生した場合に管理者への通知を行う。
これで予期せぬ設定ファイルの編集や、コマンドの差し替え、Rootkitのインストール等をチェックしていくことが可能。
RHEL5以降(Cent5, SL5含む)には標準パッケージに含まれている。
AIDEの導入
標準リポジトリに登録されているので導入は簡単。
# yum install aide
インストールメディアにも含まれているので以下でも可能。
# rpm -ihv aide-xxxxxxx.rpm
で終わり。複雑な依存関係も持っていない。
基本的な使い方
aide というコマンドがインストールされます。使うのはこのコマンドのみ。
# aide -h
Aide 0.14 Usage: aide [options] command Commands: -i, --init Initialize the database -C, --check Check the database -u, --update Check and update the database non-interactively --compare Compare two databases Miscellaneous: -D, --config-check Test the configuration file -v, --version Show version of AIDE and compilation options -h, --help Show this help message Options: -c [cfgfile] --config=[cfgfile] Get config options from [cfgfile] -B "OPTION" --before="OPTION" Before configuration file is read define OPTION -A "OPTION" --after="OPTION" After configuration file is read define OPTION -r [reporter] --report=[reporter] Write report output to [reporter] url -V[level] --verbose=[level] Set debug message level to [level]
そして /etc/aide.conf に設定ファイルが配置されます。これはaideの動作ポリシーを決める。
# cat /etc/aide.conf # Example configuration file for AIDE. @@define DBDIR /var/lib/aide @@define LOGDIR /var/log/aide # The location of the database to be read. database=file:@@{DBDIR}/aide.db.gz # The location of the database to be written. #database_out=sql:host:port:database:login_name:passwd:table #database_out=file:aide.db.new database_out=file:@@{DBDIR}/aide.db.new.gz # Whether to gzip the output to database gzip_dbout=yes # Default. verbose=5 ~~~省略~~~
初期データベースの作成
まず最初に初期データベースを作成する必要がある。これはネットワーク接続前に行うのが望ましい。
# aide -i
AIDE, version 0.14 ### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
これにより /var/lib/aide にデータベースが作成される。このコマンドは既存DBを上書きするので注意。
[root@lamp ~]# ll -h /var/lib/aide/
合計 5.1M -rw-------. 1 root root 5.1M 11月 3 21:34 2011 aide.db.new.gz
ファイルチェック
ファイルチェックを行うには -C で起動してやればいいが、このままだと監視ができない。
# aide -C
Couldn't open file /var/lib/aide/aide.db.gz for reading
データベースにnewがついているので名前を変えてコピーしてやる。
# cp aide.db.new.gz aide.db.gz
# aide -C
AIDE found differences between database and filesystem!! Start timestamp: 2011-11-03 21:38:51 Summary: Total number of files: 70110 Added files: 0 Removed files: 0 Changed files: 29 --------------------------------------------------- Changed files: --------------------------------------------------- changed: /var/log/lastlog changed: /usr/sbin changed: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib changed: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/jli changed: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/bin changed: /usr/lib/cups/filter changed: /usr/lib64 changed: /usr/lib64/pm-utils/bin changed: /usr/lib64/perl5/CORE changed: /usr/lib64/sa changed: /usr/lib64/gettext changed: /usr/lib64/nss/unsupported-tools changed: /usr/bin changed: /usr/libexec changed: /usr/libexec/certmonger changed: /usr/libexec/gstreamer-0.10 changed: /usr/libexec/polkit-1 changed: /usr/libexec/sssd changed: /usr/libexec/gcc/x86_64-redhat-linux/4.4.4 changed: /usr/libexec/getconf changed: /usr/libexec/awk changed: /usr/libexec/oddjob changed: /usr/libexec/utempter changed: /lib/udev changed: /lib64 changed: /lib64/security/pam_krb5 changed: /lib64/dbus-1 changed: /bin changed: /sbin -------------------------------------------------- Detailed information about changes: --------------------------------------------------- File: /var/log/lastlog Mtime : 2011-11-03 20:46:52 , 2011-11-03 21:31:48 Ctime : 2011-11-03 20:46:52 , 2011-11-03 21:31:48 MD5 : 6J8fQ+PuBzPa403ddvc71Q== , 5ivxGExNOaNwfna16MfFSQ== SHA256 : XyBfW5o+lreS8jsHpqJmy0umcQNenFrf , uiNU7pRqgZ14XhtutaIKdPfT9kBqtJ4z Directory: /usr/sbin Mtime : 2011-11-03 21:18:34 , 2011-11-03 21:28:43 Ctime : 2011-11-03 21:18:34 , 2011-11-03 21:28:43 Directory: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib Mtime : 2011-10-30 19:52:53 , 2011-11-03 21:28:48 Ctime : 2011-10-30 19:52:53 , 2011-11-03 21:28:48 Directory: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/jli Mtime : 2011-10-30 19:52:38 , 2011-11-03 21:28:52 Ctime : 2011-10-30 19:52:38 , 2011-11-03 21:28:52 ~~~省略~~~
戻り値によるチェック
チェック結果はコマンドの戻り値で確認できる。上の例ではファイルの変更が検知されている。
# echo $?
4
戻り値の意味は、
1 * (new files detected?) +
2 * (removed files detected?) +
4 * (changed files detected?)
Additionally, the following exit codes are defined for generic error conditions:
14 Error writing error
15 Invalid argument error
16 Unimplemented function error
17 Invalid configureline error
18 IO error
19 Version mismatch error
データベースの更新
ファイルのチェックを行い、仮に問題ない変更のみの検知であればデータベースを更新する必要がある。
# aide -C
# aide -i
# cp aide.db.new.gz aide.db.gz
もしくは、チェックと同時にDBの更新を行う場合、
# aide -u
# cp aide.db.new.gz aide.db.gz
でも可能。
設定を編集する
AIDEはデフォルトで、/var 以下も含めてチェックをかけるので予期せぬ検知が非常に多い。対象ディレクトリは/etc/aide.conf で設定される。
# vim /etc/aide.conf
~~~抜粋~~~ # Next decide what directories/files you want in the database. /boot NORMAL /bin NORMAL /sbin NORMAL /lib NORMAL /lib64 NORMAL /opt NORMAL /usr NORMAL /root NORMAL # These are too volatile !/usr/src !/usr/tmp ~~~抜粋~~~
この設定ファイルにはかなり丁寧に例が記載されているので設定に困ることは無いはず。
対象ディレクトリやファイルの指定には正規表現も利用できる上、パーミッションの変更だけでなくSELinuxコンテキストのチェックまで可能なため柔軟なチェックが行える。
設定ファイルは複数作成して、aide -c conf_file としてチェック方法を分ける事ができる。
DBの保存場所
重要なのがこのDBをどこに保存するか?という事になる。このファイルが改竄されてしまったらAIDEは全くの無力になってしまう。
推奨なのが別サーバに配置しReadOnlyでNFSマウントしておく事。
チェックのタイプ
設定ファイルは複数持てるので、2パターンのチェックタイプとDBを用意しておくのがお勧め。
インストール直後や、サービス開始直前に/ 以下の完全なDBを作成し、万一に侵入が発覚した場合に全ファイルシステムを検索できるような設定ファイル。
もう一つは、日々のチェックで行う簡単なもの。これは提供するサービスによって大きく異なるが、
・本来なら絶対変更が発生しないパス(/bin /lib /boot 等)
・サービスに関連するファイル類
・/etc 以下
等をチェックする。この方法は合わせてSELinuxによるプロセスのアクセス範囲を限定しておかないとあまり意味が無いので注意。
AIDEに関する情報
パッケージをインストールすると以下のファイルが配置される。マニュアルやサンプルが充実している。
/usr/share/doc/aide-0.14/README
/usr/share/doc/aide-0.14/README.quickstart
/usr/share/doc/aide-0.14/contrib/bzip2.sh
/usr/share/doc/aide-0.14/contrib/gpg2_check.sh
/usr/share/doc/aide-0.14/contrib/gpg2_update.sh
/usr/share/doc/aide-0.14/contrib/gpg_check.sh
/usr/share/doc/aide-0.14/contrib/gpg_update.sh
/usr/share/doc/aide-0.14/contrib/sshaide.sh
/usr/share/doc/aide-0.14/manual.html
/usr/share/man/man1/aide.1.gz
/usr/share/man/man5/aide.conf.5.gz
0 件のコメント:
コメントを投稿