今回より、Tripwireを中心としたファイル改ざんの検出方法について説明する。
Webページの改ざんや特定コマンドが書き換えられたという話は、いまとなっては日常茶飯事となっているが、万が一自分の管理するサーバがそのような状況に置かれた場合、果たして気付くことができるだろうか?
Webページなどであればすぐに気付くかもしれないが、UNIXシステム内の特定コマンドの場合は、そう簡単には気付かないだろう。ましてや、バックドアなどにより巧妙に改ざんされていたとしたらなおさらだ。
そういったセキュリティ侵害に備えるためには、UNIXシステム内のファイル改ざんチェックを定期的に行う必要がある。
ファイルの改ざんを検出するためには、ファイルの整合性チェックを行う必要がある。ここでいう整合性チェックとは、チェック対象となるファイルの「前の状態のファイル」と「現時点のファイル」の内容や属性を突き合わせ、現時点のファイルに何らかの変更点があったかどうかを調査することを指す。
整合性チェックを行うためには、先述の「前の状態のファイル」と「現時点のファイル」、そして整合性チェックを実行するコマンドやツールが必要となる。
UNIXで整合性チェックを行う方法として、次の2つがよく知られている。
どちらも一長一短はあるが、定期的に行う場合は、後者のツールを利用するとよいだろう(本稿ではTripwireについて説明する)。
既存のUNIXコマンドを用いて、ファイルの改ざんを検出する方法を以下に述べる。
プログラムのパッチでおなじみのdiffコマンドを使い、テキストファイルの改ざんを検出する。使用方法は、「diff 前のファイル 現在のファイル」という形式になる。コマンドを実行すると、ファイルの内容が全く同一の場合は何も表示されないが、少しでも違いがあるとその差分が表示される。
% diff /etc/inetd.conf.old /etc/inetd.conf 86a87 > 8888 stream tcp root /bin/sh -i
前ファイルと比較して、/etc/inetd.confに「8888 stream tcp root /bin/sh -i」の1行が加わったことが確認できる。「86a87」のa87は87行目に追加されたことを意味している。
UNIXでは伝統的にsumというコマンドが利用されていたが、最近ではsumに取って代わり、md5(md5sum)やsha1などの、より優れた整合性チェックコマンドが利用されるようになった。
md5(md5sum)は、MD5アルゴリズム(RFC1321)によるメッセージの整合性チェックを行うためのコマンドだ。“メッセージ”(ファイルの内容)を基に、128ビットの“ハッシュ値”を算出する。算出されるハッシュ値は、乱数によりメッセージの内容が1文字でも違うと全く別の値が算出されることから、ハッシュ値から元のメッセージの内容を推測するのは、計算量的にほぼ不可能とされている。MD5アルゴリズムは、電子署名でよく利用される。
例えば、aという文字とbという文字では、全く異なる文字が算出される。
% md5 -s a MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 % md5 -s b MD5 ("b") = 92eb5ffee6ae2fec3ad71c777531578f
MD5の引数にはファイル名を指定する。次の例では複数のファイルを同時に指定している。算出された値が全く違うことから、何らかの変更があったことが確認できる。
% md5 /etc/inetd.conf.old /etc/inetd.conf MD5 (inetd.conf.old) = f61bda83b10fcf1671ade5fbc8184fa0 MD5 (inetd.conf) = 047be3d9b5f1752a6701407c1e9ff1d1
sha1は、SHA1アルゴリズム(RFC3174)によるファイルの整合性チェックを行うためのコマンドだ。“メッセージ”(ファイルの内容)を基に、160ビットの“ハッシュ値”を算出する。MD5以上に、同じ“メッセージ”を求めることは計算量的に不可能に近いとされている。SHA1アルゴリズムはMD5同様、電子署名でよく利用される。
% sha1 /etc/inetd.conf.old /etc/inetd.conf SHA1 (/etc/inetd.conf.old) = 13bf8cd4ee68a15a26ae800e6339457d4765daa0 SHA1 (/etc/inetd.conf) = 2d9890d92cca3d3d72adb7e12c04df5c65133860
lsコマンドを使用して、ファイルの所有者、グループ権限、アクセス権限、最終更新日時、サイズなどのファイル属性を調べることができる。
% ls -lc /etc/inetd.conf.old /etc/inetd.conf -rw-r--r-- 1 root wheel 3930 May 13 14:01 inetd.conf -rw-r--r-- 1 root wheel 3897 May 24 06:38 inetd.conf.old
上記では、オプションの-lで詳細表示、-cで最終更新日時を表示している。また、このほかlsには、最終アクセス時間を表示する-uオプションなどがある。
以上、既存のUnixコマンドを用いたファイルの整合性チェックを行うための方法をいくつか紹介した。
なお、侵入されたことを前提として痕跡調査を行う場合は、確実に改ざんされていない安全なコマンド群を準備し、それを利用すること。
Tripwireは、ファイル改ざんなどを検出するためのツールで、UNIXでは古くからセキュリティの定番ソフトウェアとして利用されている。先述のUNIXコマンドによる整合性チェックを、これ1つでまとめて行ってくれると思えばよい。
現在、Tripwireは製品版とオープンソース版が存在するが、いずれもTripwire社が提供している。本稿では、オープンソース版のバージョン2.3.1を使用した。なお、オープンソース版Tripwireに関する情報は、下記 URLより入手可能となっているので、利用する場合は一度参照しておくよいだろう。
【Tripwire】
http://www.tripwire.org/
UNIX版のTripwireの主な特徴を次に示す。
Copyright © ITmedia, Inc. All Rights Reserved.