ファイル改ざん検知というと、TripWireやAIDE、OSSECなんかを触ったことがあるのだが、今回は『AFICK』というツールをCentOS 7にインストールしてみる。
Perlで書かれているようで、inotifyなどを利用してないみたいでオンアクセスでの検知は難しいようだけど、cronで定期的にスキャンをかけることである程度検知をするようにしてるらしい。 Windowsでも動くらしい。
ファイルの状態をAFICK用のDBに登録して、都度スキャン時にそのDBと現在のファイルの状態を照らし合わせて改ざんを検知する、といった仕組みのようだ。
1.インストール
インストールは簡単で、SourceForgeにパッケージが置いてある。 (最新版はこちらで都度確認すること)
yum install -y https://downloads.sourceforge.net/project/afick/afick/3.5.2/afick-3.5.2-1.noarch.rpm
これでインストールができた。
2. 設定ファイルの変更
デフォルトで基本的なフォルダは監視対象になっているが、追加や除外をしたいといった場合は「/etc/afick.conf」に設定ファイルがあるので、それを編集するとよいだろう。 「#」でコメントアウト、行頭に「!」で対象のディレクトリを除外できる。
また、この時点で定期的なスキャンを行うためにcronに設定が追加されているので、スキャンの実行間隔を変更する場合はそこを編集してやるといいだろう。 今回は検証なので、設定等は変えずにそのまま進む。
3. データベースの初期化
仕組み上、改ざんを検知するにはデータベースにファイルの状態が記録されている必要があるので、それの初期化+更新を行う。 まず、以下のコマンドで初期化を行う。
afick -i
[root@BS-PUB-CENT7-02 ~]# afick -i
WARNING: (create) init on an already existing database : changes will be lost
# Afick (3.5.2) init at 2017/01/31 07:36:04 with options (/etc/afick.conf):
# archive:=/var/lib/afick/archive
# database:=/var/lib/afick/afick
# exclude_suffix:=log LOG html htm HTM txt TXT xml hlp pod chm tmp old bak fon ttf TTF bmp BMP jpg JPG gif png ico wav WAV mp3 avi
# history:=/var/lib/afick/history
# max_checksum_size:=10000000
# running_files:=1
# timing:=1
# dbm:=Storable
# Hash database created successfully. 40229 files entered.
# #################################################################
# MD5 hash of /var/lib/afick/afick => UAquHYzjiosmcguO7ROSVA
# user time : 15.43; system time : 3.61; real time : 19
これで、データベースへのファイルの登録が完了した。 なお、ファイルを編集してデータベースの内容をアップデートしたい場合は、以下のコマンドを実行する。
afick -u
4. スキャンの実施
データベースの準備ができたら、実際にスキャンを行ってみよう。 以下のコマンドでスキャンを実行できる。
afick -k
何も変更がない場合・改ざんがあった場合での実行結果は以下。
変更がない場合
[root@BS-PUB-CENT7-02 ~]# afick -k
# Afick (3.5.2) compare at 2017/01/31 07:43:43 with options (/etc/afick.conf):
# archive:=/var/lib/afick/archive
# database:=/var/lib/afick/afick
# exclude_suffix:=log LOG html htm HTM txt TXT xml hlp pod chm tmp old bak fon ttf TTF bmp BMP jpg JPG gif png ico wav WAV mp3 avi
# history:=/var/lib/afick/history
# max_checksum_size:=10000000
# running_files:=1
# timing:=1
# dbm:=Storable
# last run on 2017/01/31 07:36:04 with afick version 3.5.2
# summary changes
# detailed changes
# Hash database : 40229 files scanned, 0 changed (new : 0; delete : 0; changed : 0; dangling : 18; exclude_suffix : 311; exclude_prefix : 0; exclude_re : 0; degraded : 11)
# #################################################################
# MD5 hash of /var/lib/afick/afick => UAquHYzjiosmcguO7ROSVA
# user time : 18.2; system time : 3.66; real time : 22
改ざんがあった場合
[root@BS-PUB-CENT7-02 ~]# echo test >> /etc/test
[root@BS-PUB-CENT7-02 ~]# echo "8.8.8.8 googlens" >> /etc/hosts
[root@BS-PUB-CENT7-02 ~]# afick -k
# Afick (3.5.2) compare at 2017/01/31 07:47:44 with options (/etc/afick.conf):
# archive:=/var/lib/afick/archive
# database:=/var/lib/afick/afick
# exclude_suffix:=log LOG html htm HTM txt TXT xml hlp pod chm tmp old bak fon ttf TTF bmp BMP jpg JPG gif png ico wav WAV mp3 avi
# history:=/var/lib/afick/history
# max_checksum_size:=10000000
# running_files:=1
# timing:=1
# dbm:=Storable
# last run on 2017/01/31 07:36:04 with afick version 3.5.2
# summary changes
new file : /etc/test
changed file : /etc/hosts
# detailed changes
<span style="color: #ff0000;">new file : /etc/test
inode_date : Tue Jan 31 07:45:53 2017
changed file : /etc/hosts
md5 : 54fb6627dbaa37721048e4549db3224d 19b328c14e95d1fc12458d77ae533cb4
filesize : 158 175</span>
# Hash database : 40230 files scanned, 2 changed (new : 1; delete : 0; changed : 1; dangling : 18; exclude_suffix : 311; exclude_prefix : 0; exclude_re : 0; degraded : 11)
# #################################################################
# MD5 hash of /var/lib/afick/afick => UAquHYzjiosmcguO7ROSVA
# user time : 18.19; system time : 3.6; real time : 22
無事、改ざんを検知することができた。 オンアクセスでのスキャンができないのはちょっと残念だが、まぁそれなりにスキャン速度は速いので、1時間ごとにスキャンさせるようにすればそこまで問題にはならないかもしれない。