AIDEについて
AIDEはファイル改ざん検知システムの1つであり、比較的簡単にLinux環境に構築できる。今回はAIDEのインストールからcronへの設定までを説明する。
インストール
yumを使ってインストールする。
yum install aide
AIDEの設定
AIDEの設定ファイルは/etc/aide.conf
にある。AIDEの設定はこのファイルを編集して行う。
改ざん検知をするディレクトリの指定
/var/www/site NORMAL
これで/var/www/site
配下のディレクトリをAIDEがチェックするようになる。
改ざん検知をしないディレクトリの指定
!/dev !/tmp !/proc !/sys
逆に、改ざんの検知チェックをしてほしくないディレクトリについては上のようにして除外する。
検知アルゴリズム
改ざん検知ではどのようなアルゴリズムでチェックをするのかをNORMAL
などのような形で指定することができる。初期状態では設定ファイルに以下のように定義されている。
# 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 # You can create custom rules like this. # With MHASH... # ALLXTRAHASHES = sha1+rmd160+sha256+sha512+whirlpool+tiger+haval+gost+crc32 ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger # Everything but access time (Ie. all changes) EVERYTHING = R+ALLXTRAHASHES # Sane, with multiple hashes # NORMAL = R+rmd160+sha256+whirlpool 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
ここではNORMAL = R+rmd160+sha256
と定義されている。同じような形で自分で定義することも可能。
AIDEコマンド
初期化コマンド
aide -i
実行すると、/var/lib/aide/aide.db.new.gz
というデータベースファイルが作成される。しかしこれは参照するデータベースコマンドではないため、手動でAIDEが参照するデータベースファイルと置き換える必要がある。
mv -f /var/lib/aide//aide.db.new.gz /var/lib/aide/aide.db.gz
チェックコマンド
aide -C
これで監視対象のディレクトリをチェックする。実行結果は以下のような感じになる。 * 更新なしの場合
[root@sv(TEST) ~]# aide -C AIDE, version 0.14 ### All files match AIDE database. Looks okay!
- 更新ありの場合
[root@sv(TEST) ~]# aide -C AIDE found differences between database and filesystem!! Start timestamp: 2016-06-29 13:47:12 Summary: Total number of files: 313 Added files: 1 Removed files: 0 Changed files: 1 --------------------------------------------------- Added files: --------------------------------------------------- added: /var/www/site/hoge --------------------------------------------------- Changed files: --------------------------------------------------- changed: /var/www/site -------------------------------------------------- Detailed information about changes: --------------------------------------------------- Directory: /var/www/site Mtime : 2016-06-29 13:46:14 , 2016-06-29 13:47:09 Ctime : 2016-06-29 13:46:14 , 2016-06-29 13:47:09
アップデートコマンド
以下のコマンドでデータベースの更新ができる。ただし参照データベースにはならないので、ここでも再び手動で設定する必要がある。
aide -u mv -f /var/lib/aide//aide.db.new.gz /var/lib/aide/aide.db.gz
AIDEを使った改ざんチェックスクリプト
今回はAIDEによって対象ディレクトリを監視し、その結果をAWS SNSを使用して通知する。
#!/bin/sh SNS_TOPIC_ARN="XXXXXXXXXXXXXXXXXXX" LOG_FILE="/var/log/aide/aide.log" AIDEDIR="/var/lib/aide" ####### # check ####### isOK=`aide -C | grep "Looks okay" | wc -l` if [ $isOK -eq 1 ] then message="[OK] System is fine!" subject="AIDE CHECK OK" aws sns publish --topic-arn $SNS_TOPIC_ARN --message "${message}" --subject "${subject}" else error=`cat $LOG_FILE` message=`echo -e "[NG] Changes detected!\n$error"` subject="AIDE CHECK NG" aws sns publish --topic-arn $SNS_TOPIC_ARN --message "${message}" --subject "${subject}" fi #################### # update aide config #################### aide -u > $LOG_FILE mv -f $AIDEDIR/aide.db.new.gz $AIDEDIR/aide.db.gz
cron設定
上で作成したスクリプトをcronに設定する。今回は10分おきに実行する。crontab -e
コマンドで以下を設定する。
*/10 * * * * /usr/local/sbin/aide_check.sh