CentOS7のWebサーバにファイル改ざん検知ツールAIDEを導入する方法

2022.10.19

みなさんこんにちは。初心者プログラマのユウです。
初めてテクニカルノーツを書きます。
何について書こうかな~どうしようかな~としばらく思案しました。

悩んでいる間に、ワン・エックス通信でWebサイトのセキュリティに関する内容をお伝えしていたり、実際にWeb改ざんの被害に遭われてしまったお客様がいらっしゃったりして、「他人ごとではないな」と私自身改めて思いました。

きっと同じような気持ちになってセキュリティについて考えた方も多いのではないかと思いましたので、改ざん検知ツール「AIDE」をCentOS7で動いているWebサーバに入れた時のことを復習がてら書いてみることにしました。

AIDE

AIDE(Advanced Intrusion Detection Environment)は、ホストの構成等をデータベースに保存しておき、データベースに保存された状態と現在の状態を比較することで、ファイルやディレクトリの整合性をチェックするソフトウェアです。

AIDEを導入することで、ディレクトリやファイルが不正に改ざんされた場合(例えば設定ファイルが書き換えられたり、Webコンテンツが不正に追加・変更・削除された場合)に素早く対応でき、改ざんに気付かず被害が拡大、という事態を防ぐことができます。

今回の導入環境はCentOS7ですが、CentOSだけでなくRed Hat Enterprise Linux、Ubuntuといった主要なLinuxディストリビューションに標準パッケージとして含まれており、低コストで簡単に導入することができるのでおすすめです。

では早速導入してみましょう!

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

AIDEは今回利用するCentOS7の標準リポジトリに存在していますので、以下のコマンドで簡単にインストールできます。

# yum install aide

2. confファイルで設定を行う

設定ファイルでは、チェックするルールを設定します。

/etcの中にaide.confがあるので、このファイルを編集していきます。

# vi /etc/aide.conf

ファイルの中身はこんな感じです↓

# Example configuration file for AIDE.

@@define DBDIR /var/lib/aide
@@define LOGDIR /var/log/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=sql:host:port:database:login_name:passwd:table
#database_out=file:aide.db.new
database_out=file:@@{DBDIR}/aide.db.new.gz // 初期化したときに作成されるデータベースファイルです。

(省略)

# 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

(省略) # 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 one good hash. # NORMAL = sha256 NORMAL = sha256 (省略) # Next decide what directories/files you want in the database. Aide # uses a first match system. Put file specific instructions before generic # matches. e.g. Put file matches before directories. /* 監視対象とそのチェックルールを設定しています。 行頭に「!」を加えることで、そのディレクトリの監視が除外されます。 ディレクトリ名の後ろにルールを追記することで、AIDEがそのルールでチェックしてくれます。*/ !/boot/ CONTENT_EX !/bin/ CONTENT_EX !/sbin/ CONTENT_EX !/lib/ CONTENT_EX !/lib64/ CONTENT_EX !/opt/ CONTENT !/root/ !/usr/ !/tmp/ !/pro !/etc/ /var/www/contents/ NORMAL (省略)

今回は/var/www/contents/をNOMALルールで検査します。

(今回は設定していませんが、パスワードファイルや設定ファイルもチェック対象にしておくとセキュリティが強化されます。

NOMALは設定ファイルに書かれているように、デフォルトでsha256チェックサムを行ってくれます。

監視対象の設定

監視対象の設定について、デフォルトのままでももちろん良いのですが、それだと処理が重たくなり、チェックに時間がかかります。

また、頻繁に変更されるファイルを監視対象にしてしまうと、それが検知されてしまいます。
そのため、監視対象については十分に吟味して決定しましょう。

設定ファイルの編集が完了したら上書き保存してください。

3. 初期化する

AIDEのデータベースファイルを作ります。

# aide --init

監視対象が多いと少々時間がかかるので気長に待ちましょう。

このコマンドを実行すると、/var/lib/aideディレクトリにaide.db.new.gzというファイルが作られます。
この aide.db.new.gz を aide.db.gz という名前に変更します。

# mv -f /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

AIDEの仕組みとして、このaide.db.gzがチェックの参照先になります。
(ちなみにこのファイル名は先ほどの設定ファイルで定義されています。)

4. 改ざんチェックしてみる

チェックコマンドは以下の通りです。

aide -C

では、実際にチェックしてみます。

# aide -C
AIDE, version 0.15.1
### All files match AIDE database. Looks okay!

このチェック実行コマンドも、監視対象が多いと少々時間がかかります。
改ざんが検知されなければ上記のように表示されます。

続いて、監視対象のディレクトリの中にあるindex.htmlを削除して、再度実行してみます。

# aide -C
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2022-10-17 11:42:14

Summary:
  Total number of files:        262
  Added files:                  0
  Removed files:                1
  Changed files:                0


---------------------------------------------------
Removed files:
---------------------------------------------------

removed: /var/www/contents/index.html

改ざんが検知されるとこのように表示されます。
「/var/www/contents/index.htmlが削除されてますよ」と教えてくれました。
実行ログは/var/log/aide/aide.logに保存されるので確認してみてください。

監視対象のディレクトリやファイルを自分で意図的に変更・更新した場合は、③の手順でデータベースファイルを初期化して参照先のデータベースファイルを変更しましょう。

次回はチェックコマンドを定期実行させる設定を行った時のことをお伝えします。
ご覧いただきありがとうございました。

求人募集 私達と一緒に働きませんか?