ファイル・ディレクトリ改ざん検査ツール”afick”
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
非常に高いセキュリティを求められるシステム基盤では、ファイルやディレクトリの改ざんにも注意を払う必要があります。そのような場合には、定期的にシステムをスキャンして改ざんの有無をチェックするためのツールを導入します。良く知られたツールとして、商用製品にはTripwire、オープンソースソフトウェアとしてAIDEやafickがあります。今回は、これらのうちのafickについて、簡単にご紹介します。
afickはPurePerlで書かれており、Perlが動かせる大抵の環境で動作します。また、標準モジュールのみで動作し、追加のモジュールを必要としません(その分、ファイルのコード量がかなり大きくなっています)。データベースも、DBMファイルをtie
するだけの非常にシンプルなもので、外部のRDBMSを必要としません。
早速、afickのインストーラを入手してインストールしてみます。環境はCentOS 6.2(32bit)です。afickのSourceForgeサイトから最新版(現在は2.19)のRPMパッケージ(afick-2.19-1centos.noarch.rpm)を入手し、rpm
コマンドでインストールします。
1 2 3 4 5 6 7 8 9 10 11 |
[root@node02 ~]# rpm -ivh afick-2.19-1centos.noarch.rpm 警告: afick-2.19-1centos.noarch.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID cb6fa42a: NOKEY 準備中... ########################################### [100%] 1:afick ########################################### [100%] WARNING: fix config file !/boot/map (line 138), /boot/map file does not exist WARNING: fix config file !/boot/System.map (line 139), /boot/System.map file does not exist (中略) WARNING: fix config file ! /var/log/ksymoops (line 187), /var/log/ksymoops file does not exist WARNING: fix config file ! /var/www/html/snortsnarf (line 189), /var/www/html/snortsnarf file does not exist WARNING: found 21 errors in config file /etc/afick.conf # config file /etc/afick.conf ok |
インストールすると、上記のように環境に合わせて補正された設定ファイルが自動的に作成されます。また、cronジョブやlogrotateの設定も併せて行われます。
次に、afickデータベースの初期化を行います。なお本格的な運用を行う場合は、ここで設定ファイルを修正し、どのファイルやディレクトリの改ざんを監視するか設定する必要がありますが、ここではデフォルトの設定のみで動かすため、省略します。ちなみにデフォルトでは、/etcや/bin、/sbinや/rootその他の主要なディレクトリ・フォルダが監視対象に設定されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@node02 ~]# afick -i # Afick (2.19) init at 2012/01/29 09:01:54 with options (/etc/afick.conf): # database:=/var/lib/afick/afick # history:=/var/lib/afick/history # archive:=/var/lib/afick/archive # report_url:=stdout # allow_overload:=1 # running_files:=1 # timing:=1 # 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 # max_checksum_size:=10000000 # dbm:=GDBM_File # Dangling file : /dev/.udev/links/disk\x2fby-uuid\x2f009ad3b5-48b0-455d-bdd2-fb5829cf7b2a/b253:0 # Dangling file : /dev/.udev/links/cdrom/b11:0 # Dangling file : /dev/.udev/links/cdrw/b11:0 (中略) # Dangling file : /lib/modules/2.6.32-71.el6.i686/source # Dangling file : /dev/.udev/links/root/b253:0 # Hash database created successfully. 41844 files entered. # ################################################################# # MD5 hash of /var/lib/afick/afick => caBllLuiAvXAkxR6Qi4wRg # user time : 9.2; system time : 23.22; real time : 167 |
データベースの初期化が完了すると、上記のようなログが出力されます。私の環境では、約3分かかりました。
“Dangling file”は、リンク先ファイルの存在しないシンボリックリンクですが、デバイス系のファイル(/dev/~)については、私の環境では特に監視する必要がないため、これらを監視対象から除外するよう、設定ファイルを修正します。
1 2 3 4 5 6 7 8 9 10 11 |
[root@node02 ~]# vi /etc/afick.conf (中略) /dev p+n ! /dev/.udev/db # ! /dev/.udev/failed # ! /dev/.udev/names ! /dev/.udev/watch ! /dev/.udev/links ★追加 ! /dev/.udev/firmware-missing ★追加 # to avoid problems with pending usb # =/dev/scsi p+n |
設定ファイルを修正したので、afickデータベースを更新します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
[root@node02 ~]# afick -u WARNING: (control) afick internal change : config /etc/afick.conf (see below) # Afick (2.19) update at 2012/01/29 09:36:43 with options (/etc/afick.conf): # database:=/var/lib/afick/afick # history:=/var/lib/afick/history # archive:=/var/lib/afick/archive # report_url:=stdout # allow_overload:=1 # running_files:=1 # timing:=1 # 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 # max_checksum_size:=10000000 # dbm:=GDBM_File # last run on 2012/01/29 04:19:02 with afick version 2.19 deleted directory : /dev/.udev/firmware-missing number of deleted files : 1 deleted directory : /dev/.udev/links number of deleted files : 64 # detailed changes deleted directory : /dev/.udev/firmware-missing parent_date : Sun Jan 29 08:47:47 2012 number of deleted files : 1 deleted directory : /dev/.udev/links parent_date : Sun Jan 29 08:47:47 2012 number of deleted files : 64 changed file : /etc/afick.conf md5 : a99a247cfa9087b1c40f0247e7cf7a7d 64b4aa638428302a6505a74a60f1a3c5 filesize : 5577 5626 # Dangling file : /lib/modules/2.6.32-220.el6.i686/source # Dangling file : /lib/modules/2.6.32-71.el6.i686/build # Dangling file : /lib/modules/2.6.32-220.4.1.el6.i686/source # Dangling file : /lib/modules/2.6.32-220.2.1.el6.i686/source # Dangling file : /lib/modules/2.6.32-71.29.1.el6.i686/build # Dangling file : /lib/modules/2.6.32-71.29.1.el6.i686/source # Dangling file : /lib/modules/2.6.32-220.el6.i686/build # Dangling file : /lib/modules/2.6.32-71.el6.i686/source # Dangling file : /lib/modules/2.6.32-220.4.1.el6.i686/build # Dangling file : /lib/modules/2.6.32-220.2.1.el6.i686/build # Hash database updated successfully : 41777 files scanned, 3 changed (new : 0; delete : 2; changed : 1; dangling : 10; exclude_suffix : 6150; exclude_prefix : 0; exclude_re : 0; degraded : 34) # ################################################################# # MD5 hash of /var/lib/afick/afick => UeT6zylnHXsEvS9kpVcakg # user time : 12.5; system time : 20.43; real time : 157 |
afickデータベース初期化時の状態から変化したファイル等が報告され、同時にデータベースが更新されます。後は、必要に応じて適宜のタイミングでafickを実行すれば、改ざんの有無を確認することができます(改ざんがあれば、上記のように詳細な情報が出力されます)。なおafickインストール時には、自動的に日次のcronジョブが登録されますので、特に何も設定しなくても、毎朝4時頃にはafickが実行されるようになっています(cronで実行された場合、出力はrootユーザーへメール送信されます)。
afickでは、ファイルの所有者やパーミッションなどの属性、更新日時やサイズ、MD5やSHA1のチェックサムなど、対象に応じて様々なパラメータを検査することができます。サーバの運用管理において重要なファイルやディレクトリをafickで定期的に監視することにより、セキュリティを高い水準に保つための助けになると思います。
ただし、より高いセキュリティを確保するためには、afick自身やその起動スクリプト等を改ざんされないよう、別の手段でそれらを監視する仕組みが必要かもしれません。また、ファイルのチェックサムを算出するハッシュ関数はデフォルトでMD5、設定変更してもSHA-1と、いずれもハッシュ衝突の脆弱性が確認されているため、将来のバージョンでの改善が期待されます。
以上、簡単ですがafickについてご紹介しました。