Tripwireはファイルの監査を行うホスト型IDS
チェックを行いたいファイルやディレクトリの状態をデータベースとして保存し、システムの現在の状態をデータベースと照らし合わせ、変化がないかを比較するツール
不正アクセスなどによりファイルの改ざんや削除、パーミッションの変更などがあれば、 管理者に対してメールで通知する機能などがある
サーバー上からコマンドを使いdownloadしてみました。
# wget http://www.tripwire.org/files/tripwire-2.3-47.bin.tar.gz
--16:54:56-- http://www.tripwire.org/files/tripwire-2.3-47.bin.tar.gz
=> `tripwire-2.3-47.bin.tar.gz'
www.tripwire.org をDNSに問いあわせています... 完了しました。
www.tripwire.org[64.112.227.211]:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 3,224,386 [application/x-tar] 100%[====================================>]
3,224,386 140.40K/s ETA 00:00
16:55:19 (140.40 KB/s) - `tripwire-2.3-47.bin.tar.gz'
を保存しました
[3224386/32
24386]
○tarballでのインストール
tarballからインストールする場合は、ダウンロードしたアーカイブを展開したあと「./install.sh」を実行する。インストールに関する設定の変更は、設定ファイル(install.cfg)で行うことができる。
# wget http://www.tripwire.org/files/tripwire-2.3-47.bin.tar.gz
# tar xvzf tripwire-2.3-47.bin.tar.gz
# cd tripwire-2.3
# ./install.sh
ダウンロードしたファイルを解凍インストールまでうまくいったのですが、Tripwire
のデータベースの構築−データベースの初期化でエラーになってしまいます。
アメリカの本家のtripwireをサイトからダウンロードしたにもかかわらずうまくいかない。寝ているときにふと気がつく。ダウンロードしていたのは、LinuxRedHat7.*に対応するものではないか。自分の環境は、LinuxRedHat9であるからそれに対応するrpmパッケージを探す。以下のサイトを発見し、対応するパッケージをX
Pプロにdownloadし、FFFTPを使いLinuxサーバーのユーザーディレクトリーにアップロードする。
http://rpmfind.net/linux/rpm2html/search.php?query=tripwire&submit=Search+...
searchにtripwireを入力し検索の結果必要なパッケージを発見する。
tripwire-2.3.1-17.i386.rpm
rpmコマンドを使いインストールしたところ、データベースの初期化に成功する。まったくくだらないところで、時間を浪費してしまった。
よく考えればwget.rpmコマンドを使い直接サーバー上でダウンロードしてもよかった。
# wget ftp://rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/tripwire-2.3.1-17.i386.rpm
[# rpm -vhU ftp://rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/tripwire-2.3.1-17.i386.rpm]
# rpm -ivh tripwire-2.3.1-17.i386.rpm
警告: tripwire-2.3.1-17.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
Preparing... ########################################### [100%]
1:tripwire ########################################### [100%]
RPMでのインストールが完了すると「/etc/tripwire」以下には「twinstall.sh」、「twcfg.txt」、「twpol.txt」が作成されている。twcfg.txtは設定ファイル、twpol.txtはサンプルポリシーファイルとなる。
# /etc/tripwire/twinstall.sh
ここで、サイトパスフレーズとローカルパスフレーズを求められる。各パスフレーズともに8文字以上(最大で1023文字)の英数字や記号を織り交ぜ、サイトパスフレーズとローカルパスフレーズは別々のもので且つ、rootのパスワードとも異なるものを選択。
設定ファイル、ポリシーファイル、データベースファイル、レポートファイルで利用されるサイトキー、ローカルキーのそれぞれのキーファイルを暗号化するために必要。
サイトキーファイル:Tripwireの設定ファイル。ポリシーファイルの暗号署名に使用する
ローカルキーファイル:データベースファイル。レポートファイルの暗号署名に使用する
設定ファイル「twcfg.txt」のカスタマズ
ROOT=/usr/sbin: #tripwireへのパス
POLFILE=/etc/tripwire/tw.pol: #ポリシーファイルへのパス
DBFILE=/var/lib/tripwire/(HOSTNAME).twd: #データベースへのパス
REPORTFILE=/var/lib/tripwire/report/(HOSTNAME)-(DATE).twr: #レポートのファイル名の指定
SITEKEYFILE=/etc/tripwire/site.key: #レポートのファイル名の指定
LOCALKEYFILE=/etc/tripwire/(HOSTNAME)-local.key: #ローカルキーへのパス
EDITOR=/bin/vi: #エディタの指定
LATEPROMPTING=false: #メモリーにパスワードが保管される時間を短くする
LOOSEDIRECTORYCHECKING =false: #ディレクトリへファイルが追加・削除された際に、ファイルとディレクトリの両方をレポートとして報告する
MAILNOVIOLATIONS=true: #違反が無くてもリポートをメールで送信する
EMAILREPORTLEVEL=3: #メール送信されるリポートのレベルを指定
REPORTLEVEL=3: #レポートのレベルを指定
MAILMETHOD=SMTP: #メールで送信するプロトコル、SMTPかSENDMAIL
SYSLOGREPORTING=false: #データベースの初期化、整合性のチェックなどを、Syslogにuser.noticeレベルで出力
MAILPROGRAM=/usr/sbin/sendmail -oi -t: #メール送信に利用するプログラムへのパス
SMTPHOST=(SMTPサーバアドレス)
SMTPPORT=25 |
クリアテキスト(twcfg.txt)の暗号署名
# /usr/sbin/twadmin -m F -c tw.cfg -S site.key /etc/tripwire/twcfg.txt
Please enter your site passphrase:
Wrote configuration file: /etc/tripwire/tw.cfg
twadminコマンドのオプションを以下に示します。
-m F
設定ファイル作成時に指定
-v、--verbose
詳細表示モード
-s、--silent、--quiet
簡易出力モード
-c 暗号署名された設定ファイル、--cfgfile 暗号署名された設定ファイル
暗号署名された設定ファイル名を指定
-S サイトキー、--sitekey-file サイトキー
設定ファイルを暗号署名するときに使用するサイトキーを指定
-Q、--site-passphrase
設定ファイルの暗号署名に、サイトキーとともに使用するパスフレーズを指定
-e、--no-encryption
暗号署名せずに設定ファイルを作成する
暗号署名された設定ファイルの確認方法。
# /usr/sbin/tripwire -m f -c tw.cfg
Tripwireのデータベースの構築−データベースの初期化
# /usr/sbin/tripwire --init(または /usr/sbin/tripwire -m i)
Please enter your local passphrase: ローカルパスフレーズを入力する
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
### Warning: File system error.
### Filename: /usr/sbin/fixrmtab
### そのようなファイルやディレクトリはありません
### Continuing...
### Warning: File system error.
### Filename: /sbin/accton
### そのようなファイルやディレクトリはありません
### Continuing...
### Warning: File system error.
### Filename: /sbin/busybox
### そのようなファイルやディレクトリはありません
### Continuing...
### Warning: File system error.
### Filename: /sbin/busybox.anaconda
### そのようなファイルやディレクトリはありません
### Continuing...
ポリシーファイル
/etc/tripwireにtwpol.txtというサンプルポリシーファイルを改変して利用。
エラーログからたどってコメントアウトする方法
# /usr/sbin/tripwire -m c | grep Filename >> error.txt
エラーをログとして出力させておき、そのログを参考に手作業でコメントアウトを行う。
#をつけてコメントアウト
/var/lock/subsys/yppasswdd -> (SEC_CONFIG) ;
↓
#/var/lock/subsys/yppasswdd -> (SEC_CONFIG) ;
ポリシーファイルの暗号署名
# /usr/sbin/twadmin -m P -S site.key twpol.txt
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol
twadminコマンドのオプションのうち、ポリシーファイルの作成に使用するものを以下に示す。設定ファイル作成時に紹介したものは省略。
-m P
ポリシーファイル作成時に指定
-p ポリシーファイル、--polfile ポリシーファイル
暗号署名されたポリシーファイルのファイル名を指定
-Q、--site-passphrase
ポリシーファイルの署名に、サイトキーとともに指定のパスフレーズを使用する
-e、--no-encryption
ポリシーファイルを暗号署名せずに作成する
Tripwire ポリシーファイルの更新
サンプルポリシーファイル(/etc/tripwire/twpol.txt)に必要な変更を加えます。 このファイルを削除している場合(Tripwireの設定終了後は実行すべき操作)、次のコマンドを発行してそれを
再生成することが出来ます:
# twadmin --print-polfile > /etc/tripwire/twpol.tx
次に、新規の署名済み/etc/tripwire/tw.polファイルを作成して、このポリシー情報に基づいてデータベースファイルを更新します。編集したポリシーファイルが/etc/tripwire/twpol.txtとすると、次のようにコマンドを入力します(すべて1行で入力します):
# /usr/sbin/twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt
サイトパスワードの入力を求められます。入力すると、twpol.txtファイルが暗号化されて署名されます
新しい/etc/tripwire/tw.polファイルを作成したら、必ずTripwireデータベースを更新します。もっとも確実な方法は、現在のデータベースを削除して、新しいポリシーファイルを使用して新たにデータベースを作成するやり方です
使用中のTripwireデータベースの名前がbob.domain.com.twdとすると、 このデータベースを削除するには次のコマンドを入力します
# rm /var/lib/tripwire/bob.domain.com.twd
続けて、次のコマンドを入力して更新したポリシーファイルを使用した 新しいデータベースを作成します:
# /usr/sbin/tripwire --init
データベースが正しく変更されているかどうかを確認するには、手動で最初の保全性チェックを実行してレポートの内容を確認します
下のコマンドを入力すれば、いつでもTripwireの保全性チェックを 実行することが出来ます
# /usr/sbin/tripwire --check
Tripwire レポートの表示
twprintコマンドでTripwireレポートを表示するは、次のように(すべて1行で)入力します:
# /usr/sbin/twprint -m r --twrfile /var/lib/tripwire/report/<name>.twr
暗号署名されたポリシーファイルの確認方法。
# /usr/sbin/tripwire -m p -c tw.cfg -p tw.pol
ポリシーファイルの説明
| @@section GLOBAL #
Tripwireに関連するパスを定数として指定
TWBIN = /usr/sbin;
TWETC = /etc/tripwire;
TWVAR = /var/lib/tripwire;
@@section FS
# プロパティを定数として指定
SEC_BIN = $(ReadOnly);
SEC_CONFIG = $(Dynamic);
# 重要度を定数として指定
SEC_LOW = 33;
SEC_MED = 66;
SEC_HI = 100;
(
rulename = "Sample Policy1" # ルールブロックの名前
emailto = hoge@hoge.com # 通知先メールアドレス
)
{
/etc/atmarkit.conf -> $(SEC_CINFIG); # ルール
# ↑ ↑
# オブジェクト プロパティ
}
(
rulename = "Sample Policy2"
severity = $(SEC_HI) # 重要度の指定
)
{
/bin/atmarkit -> $(SEC_BIN);
} |
命令
Tripwireでは、ポリシーファイルに条件分岐などの命令を記述できます。
@@section
ポリシーファイルのセクションを指定します。「GLOBAL」はすべてに当てはまります。「FS」はUNIX(およびUNIX系OS)の場合に利用されるもので、Windows用ポリシーと区別するために用意されています。デフォルトでは、UNIXルールとして読み取られます。
属性
「()」でくくられている部分を「属性」と呼び、以下の4種類があります。
rulename
ルールブロックの名前を指定します。名前にスペースを入れるときは必ずダブルクオーテーションでくくる必要があります。rulenameで指定した名前で整合性チェックやレポートの作成が行われるので、分かりやすい名前にしておきましょう。
severity
重要度を0〜1,000,000の範囲の値で設定します(デフォルトは0)。サンプルポリシーでは次のように定義されています。
SEC_LOW = 33;
SEC_MED = 66;
SEC_HI = 100;
emailto
違反が発見されたときに通知するメールアドレスを指定します。
recurse
「true」「false」あるいは-1〜1,000,000の範囲の数値でディレクトリに対する再帰の階層を指定します。「true」(-1)であれば、サブディレクトリやその中のファイルまですべてが監査対象となります(注)。「false」(0)にすると、サブディレクトリ内のファイルは監査しません。
注:/usr、/usr/localというディレクトリが存在するとします。両者のマウントポイントが異なると「true」としても再帰的な監査は行われません。
オブジェクト
監査対象となるファイルやディレクトリを指定します。
プロパティ
オブジェクトに対してどのようなチェックを行うかを指定します。指定可能なプロパティは18種類あり、チェックを行う場合は「+」、行わない場合は「-」で示します。
a アクセスのタイムスタンプ
b 割り当てられているブロック数
c iノード作成/変更タイムスタンプ
d iノードが保存されているディスクのデバイス番号
g 所有者のグループID
i iノード番号
l ファイルサイズの増加。最後に記録されたサイズよりもファイルが小さい場合に違反として検知される(注)
m 変更タイムスタンプ
n リンク数(iノードリファレンス数)
p ファイルアクセス権
r iノードが指し示しているデバイスのデバイス番号
s ファイルのサイズ
t ファイルの種類
u 所有者のユーザーID
C CRC-32ハッシュ値
H Havalハッシュ値
M MD5ハッシュ値
S SHAハッシュ値
プロパティ一覧
注:ファイルがAからBになり、A<Bのときは違反とならず、データベースも更新されない。よって、BからCになりA<C<Bの場合も違反とならない
例えば、ファイルのアクセス権をチェックする場合は、
/tmp/test -> +p;
複数のプロパティを指定する場合(注)は、
/tmp/test -> +pinugt;
注:ポリシーファイル内で、同じオブジェクトに対して異なるプロパティを定義することはできません。
各オブジェクトに対していちいち18種類のプロパティを指定するのは困難です。そこで、目的に応じたプロパティの組み合わせを分かりやすい名前で指定できる方法が用意されています。多くのオブジェクトについては、この方法で十分です。
ReadOnly:読み取り専用ファイル
+pinugtsdbmCM-rlacSHと同じ
Dynamic:変化するファイル
+pinugtd-srlbamcCMSHと同じ
Growing:サイズが大きくなるが小さくならないファイル
+pinugtdl-srbamcCMSHと同じ
IngnoreAll:すべての属性を無視する
-pinugtsdrlbamcCMSHと同じ
IgnoreNone:すべての属性を監査する
+pinugtsdrbamcCMSH-lと同じ
Device:デバイスファイル
+pugsdr-intlbamcCMSHと同じ |
整合性チェック
# /usr/sbin/tripwire --check (もしくは/usr/sbin/tripwire -m c)
Parsing policy file: /etc/tripwire/tw.pol
*** Processing Unix File System ***
Performing integrity check...
Wrote report file: /var/lib/tripwire/report/hoge-20020908-141700.twr
Tripwire(R) 2.3.0 Integrity Check Repo
以下省略
twcfgファイルを参照する
# twadmin --print-cfgfile
twcfgファイルをクリアテキストへ出力する
# twadmin --print-cfgfile > twcfg.txt
Cronへの登録
Cronを利用して定期的なチェックを行うように「/etc/crontab」に登録
毎日、午前8時に整合性のチェックを行いレポートをメールで送信する
# vi /etc/crontab
0 8 * * * /usr/sbin/tripwire --check --email-report
ルール名を指定して1時間おきに整合性チェックを行いレポートをメールで送信する
01 * * * * /usr/sbin/tripwire --check --rule-name [ルール名]--email-report
|