AIDE構築: インストールからcron設定まで

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