オープンソースのファイル改竄検知ツールをCentOSにインストールする

アクセスLogを見ていたら、不正アクセスしようとする輩は耐えないようで、嫌でもセキュリティを高めないといけない必要に迫られる。
なので、Linux のファイル改竄検知ツール AIDE を導入した。
AIDEは、オープンソースの侵入検知システムで、CentOS などの主要なディストリビューションで無償で利用できるのだ。ありがたい。

AIDEをCentOS6 への導入手順は以下のとおり。

1. AIDEをインストールする

# yum install aide

2. 監視対象とするフォルダなどを設定する

AIDE はかなり広範囲に監視するので、デフォルトでも基本的に問題ないけど、結構 Disk I/O 負荷が高くなる。
サーバー会社に怒られちゃう可能性も出てくるので、気になる人はやっておいたほうがいい。

# vi /etc/aide.conf

例えば、僕の場合は /var/log フォルダ内は、ログファイルがガンガン書き換わる場所なので、そこを一々監視されて通知されても煩わしいので監視対象から除外している。
監視対象から外すには以下のような記述にする。

!/var/log

3. AIDEのデータベースを初期化する

AIDE は現在のサーバー内のファイル情報をデータベースにして、このデータベースを元にファイルが改竄されたかどうかをチェックするようになるので、以下のコマンドでデーターベースを初期化させる。

# aide --init

データベースができているか以下のコマンドで確認する。

# ll -h /var/lib/aide
合計 3.6M
-rw------- 1 root root 3.7M 5月 16 05:15 2015 aide.db.new.gz

作られたデータベース aide.db.new.gz は一時ファイルなので、これをマスターのデータベースとするために以下のコマンドを実行。

# cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

4. 監視が上手く働いているかどうか、動作チェックをする

改竄チェックのために、ダミーファイルを作ってみる。

# echo "AIDE TEST" >> dummy.txt

以下のコマンドで AIDE のチェックを実行する

# aide --check

上手く動いていたら、先ほど追加したdummy.txt が Added files: に検出される。

5. AIDE のチェックを実行したので、データベースを更新する。

以下のコマンドでデータベースを更新する

#aide --init
#cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

ちなみに、チェックとデータベース更新を以下のコマンドで同時に行うこともできる。

#aide --update
#cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

6. cron で毎日チェックさせるようにする

AIDE は常駐しているわけではないので、cronでスケジュール実行させないとあまり意味がない。
なので、以下のコマンドを実行してcronを作成する。

# vi /etc/cron.daily/aide

開かれたエディタ画面で、以下をコピペして保存する。
MAILTO にはメールの送信先を指定する。

#!/bin/bash
 
MAILTO=test@example.com
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

作成したら、忘れずに実行権限を付与する。

# chmod +x /etc/cron.daily/aide

これで、毎日チェックされたデータベースとの差分ログが /etc/log/aide へ出力されるようになる。メール設定したら通知もされる。

7. ログファイルのローテーション

AIDE のログはなぜかデフォルトで上書き設定になっているので、ローテーションと追記させるように修正する。
以下のコマンドを実行してログローテーション設定を差し替える

# vi /etc/logrotate.d/aide
/var/log/aide/*.log {
 daily
 missingok
 rotate 7
 compress
 delaycompress
}

■2016.01.14 追記

毎日のように、メール「AIDE DETECTED CHANGES」で以下のような通知がくるのでおかしいと思って調べてみた。

changed: /usr/sbin
changed: /usr/lib/rpm
changed: /usr/libexec
changed: /usr/libexec/gcc/x86_64-redhat-linux/4.4.4
changed: /usr/libexec/getconf
changed: /usr/libexec/utempter
changed: /usr/libexec/git-core
changed: /usr/libexec/awk
changed: /usr/bin
changed: /usr/lib64
changed: /usr/lib64/sa
changed: /usr/lib64/pm-utils/bin
changed: /usr/lib64/nss/unsupported-tools
changed: /usr/lib64/gettext
changed: /usr/lib64/perl5/CORE
changed: /usr/lib64/chkrootkit-0.49
changed: /lib/udev
changed: /sbin
changed: /bin
changed: /lib64
changed: /lib64/dbus-1

すると、どうやらcron.dailyのprelinkが影響しているらしい。
prelinkは、共有ライブラリを毎回ロードするのではなくて、事前にバイナリに組み込んでおいて高速化するもので、cron.dailyによって毎日動いてるため、バイナリに組み込まれるたびにハッシュ値が変わってしまうため改ざん検知のアラートがあがってくるというわけだった。

高速化するらしいが実感がよくわからないし、どうもCentOS7からprelinkが標準で無効にされているらしいし、prelinkによるバグもよくあるみたいなので、思い切って無効化してみた。手順は以下の通り。

1. リンクを元に戻す。

# prelink -ua

2. prelinkを無効にする。

# vim /etc/sysconfig/prelink

開いたら、PRELINKING=yes を PRELINKING=noして保存する。

3. cron.dailyから削除する。

# rm /etc/cron.daily/prelink

以上。