AIDEとは
AIDEとはAdvanced Intrusion Detection Environment の略で、オープンソースの改ざん・侵入検知システムです。
侵入検知システム(IDS:Intrusion Detection System)にはネットワーク型とホスト型がありますが、AIDEはホスト型のIDSです。
具体的な用途としては、
- ウェブサイトの改ざんの検出
- ルートキットの検出(Linuxのコアファイルの改ざん検出)
が考えられます。
インストール
まずはインストールから見ていきましょう。
yum install aide
設定
AIDEの設定ファイルは比較的簡単なようです。
設定ファイル
設定ファイルの場所です。
/etc/aide.conf
検査規則
/etc/aide.confの中を見ると、検査の規則が書かれています。
# These are the default rules. # #p: permissions #i: inode: #n: number of links #u: user #g: group #s: size #b: block count #m: mtime #a: atime #c: ctime #S: check for growing size #acl: Access Control Lists #selinux SELinux security context #xattrs: Extended file attributes #md5: md5 checksum #sha1: sha1 checksum #sha256: sha256 checksum #sha512: sha512 checksum #rmd160: rmd160 checksum #tiger: tiger checksum #haval: haval checksum (MHASH only) #gost: gost checksum (MHASH only) #crc32: crc32 checksum (MHASH only) #whirlpool: whirlpool checksum (MHASH only) #R: p+i+n+u+g+s+m+c+acl+selinux+xattrs+md5 #L: p+i+n+u+g+acl+selinux+xattrs #E: Empty group #>: Growing logfile p+u+g+i+n+S+acl+selinux+xattrs
記号 | 検査対象 |
---|---|
p | パーミッション |
i | i-node |
n | リンク番号 |
u | ユーザー |
g | グループ |
s | サイズ |
b | ブロックカウント |
a | atime(最終アクセス時刻) |
m | mtime(最終変更時刻) |
c | ctime(最終ステータス変更時刻) |
acl | アクセスコントロール |
S | growing size |
selinux | SElinuxセキュリティ・コンテキスト |
xattrs | 拡張ファイル属性 |
md5 | md5 checksum |
rmd160 | rmd160 checksum |
sha1 | sha1 checksum |
sha256 | sha256 checksum |
sha512 | sha512 checksum |
tiger | tiger checksum |
haval | haval checksum (MHASH only) |
gost | gost checksum (MHASH only) |
crc32 | crc32 checksum (MHASH only) |
whirlpool | whirlpool checksum (MHASH only) |
『p』はパーミッション、『u』はユーザーというようにAIDEに検知させたい項目を表しており、これらを組み合わせてユーザーオリジナルの設定を作ることができます。また、デフォルトでもいくつかの設定が用意されており、わざわざユーザー定義することは少ないかもしれません。以下が設定ファイルに書かれているデフォルトの設定です。
ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger # Everything but access time (Ie. all changes) EVERYTHING = R+ALLXTRAHASHES # Sane, with multiple hashes NORMAL = R+rmd160+sha256 # For directories, don't bother doing hashes DIR = p+i+n+u+g+acl+selinux+xattrs # Access control only PERMS = p+i+u+g+acl+selinux # Logfile are special, in that they often change LOG = > # Just do md5 and sha256 hashes LSPP = R+sha256 # Some files get updated automatically, so the inode/ctime/mtime change # but we want to know when the data inside them changes DATAONLY = p+n+u+g+s+acl+selinux+xattrs+md5+sha256+rmd160+tiger
記号 | 検査内容 |
---|---|
ALLXTRAHASHES | md5以外のハッシュ |
EVERYTHING | atime以外すべての項目 |
NORMAL | 通常モード |
DIR | ディレクトリ |
PERMS | p+i+u+g+acl+selinux |
LOG | ログファイル |
LSPP | NORMALからrmd160を除いた項目 |
DATAONLY | inode/ctime/mtimeの変更は検知しないでデータの中身のみ |
check sumについては、こちらを参照されたい。
http://www.xmisao.com/2014/02/07/linux-file-hash-checksum.html
http://www.mk-mode.com/octopress/2014/02/24/linux-checksum-command
改ざん検知させたいディレクトリの指定
/etc/yum.conf NORMAL /etc/yumex.conf NORMAL
検知させたくないディレクトリの指定
!/etc/.*~
初期設定のまま利用すると、かなり広範囲をチェックするので処理が重たくなる。必要なところだけチェックするように設定することをおすすめします。
データベースファイルの作成
$ aide -i AIDE, version 0.14 ### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
$ aide --init でも可
データベースの保存先、参照先の設定
データベースの保存先は、デフォルトでは以下のような設定になっている。
@@define DBDIR /var/lib/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=file:@@{DBDIR}/aide.db.new.gz
この設定だと、参照するデータベースは/var/lib/aide/aide.db.gzであり、先ほど作成したデータベースの名前を変えないとaideはデータベースを参照できないので、
mv -f /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
としてあげる。
チェックコマンド
$ aide -C AIDE, version 0.14 ### All files match AIDE database. Looks okay!
$ aide --check でも可
試しに、rootにtestというファイルを作って、チェックを実行した結果
$ aide -C AIDE found differences between database and filesystem!! Start timestamp: 2016-03-31 10:56:49 Summary: Total number of files: 68413 Added files: 1 Removed files: 0 Changed files: 1 --------------------------------------------------- Added files: --------------------------------------------------- added: /root/test --------------------------------------------------- Changed files: --------------------------------------------------- changed: /root -------------------------------------------------- Detailed information about changes: --------------------------------------------------- Directory: /root Mtime : 2016-03-31 10:28:30 , 2016-03-31 10:56:46 Ctime : 2016-03-31 10:28:30 , 2016-03-31 10:56:46
ログ
実行結果は以下のファイルに保存されるが、改ざんが検知されない場合は空ファイルに変更されるので注意。実行するごとに中身が更新される。
/var/log/aide/aide.log
アップデートコマンド
ファイルの改ざんのチェックとデータベースの更新を一緒に行ってくれる。(データベースの名前は自分で変更する必要あり)
aide --update
定期チェックのテンプレート
AIDEは定期的にチェックコマンドを実行するようこちら側が設定しないと監視はしてくれません。 そこで、定期チェックの設定の一例を紹介します。
スクリプト
以下のようなスクリプトを適当なところに置きます。
## aidechecker.sh ## #!/bin/bash MAILTO=?????? LOGFILE=/var/log/aide/aide.log AIDEDIR=/var/lib/aide /usr/sbin/aide -u > $LOGFILE cp $AIDEDIR/aide.db.new.gz $AIDEDIR/aide.db.gz x=$(grep "Looks okay" $LOGFILE | wc -l) if [ $x -eq 1 ] then echo "All Systems Look OK" | /bin/mail -s "AIDE OK" $MAILTO else echo "$(egrep "added|changed|removed" $LOGFILE)" | /bin/mail -s "AIDE DETECTED CHANGES" $MAILTO fi exit
メール内容
変更が検知されていない場合は、
subject: AIDE OK All Systems Look OK
変更がある場合は
subject: AIDE DETECTED CHANGES added: /root/test added: /root/test/aa.txt changed: /root
となります。
cronの設定
あとは
## 毎時15分に実行する 15 * * * * root /path/aidechecker.sh
などとcronに設定してあげればOKです。
まとめ
比較的簡単にLinux環境で構築でき、無償で利用できるファイル改ざん検知 AIDE について紹介しました。 AIDEは、例えばWordPressのサイトでDocumetRootを監視対象にしNORMALの設定で動かすと、処理が終わるのに数分かかります。 ファイル数が多い場合処理にかかる時間が比例して大きくなっていくので、サーバーによっては数時間に一度実行するとか負荷低い夜中に一度だけ実行するという形になります。 この理由からリアルタイムで改ざんを検出したい場合は別の仕組みが必要になりますが、 監視範囲をかなり絞ればcronから1分に1度実行することは可能です。
ミドルウェアやアプリケーションで脆弱性はよく出てしまうので、AIDEのようなIDSを使い被害を抑える対策をとることは大事なことだと思います。