CentOS にファイル改ざん検知システムを導入する【AIDE】

Okuya 1,308views 更新:2016年3月30日

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を使い被害を抑える対策をとることは大事なことだと思います。

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません