Tripwireでファイルの改ざんを検出せよ〜Tripwireのインストールと初期設定 〜止められないUNIXサーバのセキュリティ対策(11)(1/2 ページ)

» 2004年06月18日 00時00分 公開
[木村靖三井物産GTI]
※ご注意
本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。また、本稿を利用した行為による問題に関しましては、筆者および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。

 今回より、Tripwireを中心としたファイル改ざんの検出方法について説明する。

ファイルの改ざんを検出する方法

 Webページの改ざんや特定コマンドが書き換えられたという話は、いまとなっては日常茶飯事となっているが、万が一自分の管理するサーバがそのような状況に置かれた場合、果たして気付くことができるだろうか?

 Webページなどであればすぐに気付くかもしれないが、UNIXシステム内の特定コマンドの場合は、そう簡単には気付かないだろう。ましてや、バックドアなどにより巧妙に改ざんされていたとしたらなおさらだ。

 そういったセキュリティ侵害に備えるためには、UNIXシステム内のファイル改ざんチェックを定期的に行う必要がある。

ファイルの改ざんチェックに必要なこと/もの

 ファイルの改ざんを検出するためには、ファイルの整合性チェックを行う必要がある。ここでいう整合性チェックとは、チェック対象となるファイルの「前の状態のファイル」と「現時点のファイル」の内容や属性を突き合わせ、現時点のファイルに何らかの変更点があったかどうかを調査することを指す。

 整合性チェックを行うためには、先述の「前の状態のファイル」と「現時点のファイル」、そして整合性チェックを実行するコマンドやツールが必要となる。

UNIXにおけるチェックサムコマンド(ツール)

 UNIXで整合性チェックを行う方法として、次の2つがよく知られている。

  • 既存のUNIXコマンドによる方法(MD5、diff、lsなど)
  • 専用ツールを利用する方法(Tripwire、COPSなど)

 どちらも一長一短はあるが、定期的に行う場合は、後者のツールを利用するとよいだろう(本稿ではTripwireについて説明する)。

既存UNIXコマンドによるファイル改ざんの検出

 既存のUNIXコマンドを用いて、ファイルの改ざんを検出する方法を以下に述べる。

ファイル内容の差分による整合性チェック(diff)

 プログラムのパッチでおなじみのdiffコマンドを使い、テキストファイルの改ざんを検出する。使用方法は、「diff 前のファイル 現在のファイル」という形式になる。コマンドを実行すると、ファイルの内容が全く同一の場合は何も表示されないが、少しでも違いがあるとその差分が表示される。

% diff /etc/inetd.conf.old /etc/inetd.conf
86a87
> 8888 stream tcp root /bin/sh -i
前ファイル/etc/inetd.conf.oldと現ファイル/etc/inetd.confの差分をチェックする

 前ファイルと比較して、/etc/inetd.confに「8888 stream tcp root /bin/sh -i」の1行が加わったことが確認できる。「86a87」のa87は87行目に追加されたことを意味している。

ハッシュ値による整合性チェック(md5、sha1)

 UNIXでは伝統的にsumというコマンドが利用されていたが、最近ではsumに取って代わり、md5(md5sum)やsha1などの、より優れた整合性チェックコマンドが利用されるようになった。

  • md5(md5sum)

 md5(md5sum)は、MD5アルゴリズム(RFC1321)によるメッセージの整合性チェックを行うためのコマンドだ。“メッセージ”(ファイルの内容)を基に、128ビットの“ハッシュ値”を算出する。算出されるハッシュ値は、乱数によりメッセージの内容が1文字でも違うと全く別の値が算出されることから、ハッシュ値から元のメッセージの内容を推測するのは、計算量的にほぼ不可能とされている。MD5アルゴリズムは、電子署名でよく利用される。

 例えば、aという文字とbという文字では、全く異なる文字が算出される。

% md5 -s a
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
% md5 -s b
MD5 ("b") = 92eb5ffee6ae2fec3ad71c777531578f
「a」と「b」のMD5を算出

 MD5の引数にはファイル名を指定する。次の例では複数のファイルを同時に指定している。算出された値が全く違うことから、何らかの変更があったことが確認できる。

% md5 /etc/inetd.conf.old /etc/inetd.conf
MD5 (inetd.conf.old) = f61bda83b10fcf1671ade5fbc8184fa0
MD5 (inetd.conf) = 047be3d9b5f1752a6701407c1e9ff1d1
前ファイル/etc/inetd.conf.oldと現ファイル/etc/inetd.conf)のMD5チェックサムを比較する
  • sha1

 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
前ファイル/etc/inetd.conf.oldと現ファイル/etc/inetd.conf)のSHA1を比較する

ファイルの属性チェック(ls)

 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
前ファイル/etc/inetd.conf.oldと現ファイル/etc/inetd.conf)のファイル属性を表示

 上記では、オプションの-lで詳細表示、-cで最終更新日時を表示している。また、このほかlsには、最終アクセス時間を表示する-uオプションなどがある。

 以上、既存のUnixコマンドを用いたファイルの整合性チェックを行うための方法をいくつか紹介した。

 なお、侵入されたことを前提として痕跡調査を行う場合は、確実に改ざんされていない安全なコマンド群を準備し、それを利用すること。

侵入時の痕跡調査については、「連載:不正侵入の手口と対策 第5回 仕掛けられたバックドアの検出と対処」も参照して欲しい。

Tripwireによるファイル改ざんの検出

Tripwireとは?

 Tripwireは、ファイル改ざんなどを検出するためのツールで、UNIXでは古くからセキュリティの定番ソフトウェアとして利用されている。先述のUNIXコマンドによる整合性チェックを、これ1つでまとめて行ってくれると思えばよい。

現在、Tripwireは製品版とオープンソース版が存在するが、いずれもTripwire社が提供している。本稿では、オープンソース版のバージョン2.3.1を使用した。なお、オープンソース版Tripwireに関する情報は、下記 URLより入手可能となっているので、利用する場合は一度参照しておくよいだろう。

【Tripwire】
http://www.tripwire.org/


Tripwireの特徴

 UNIX版のTripwireの主な特徴を次に示す。

  • 複数の手法による整合性チェック
    -ハッシュ関数(CDC32、MD5、SHA、HAVAL)を用いた整合性チェック
    ファイルの属性チェック(アクセス権限、タイムスタンプ)
  • 監視対象ファイルの細かな制御
    -整合性チェックを行う監視対象ファイルを細かに指定可能
  • 結果レポートのメール送信機能
    -結果レポートをメールで自動送信可能。また、レポート内容の報告レベルを調整できる
  • 各種設定ファイルの暗号化
    -設定・ポリシー・結果レポートファイルなど、Tripwire自身で利用するファイルを暗号化・署名し、セキュリティの保全を行っている
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。