Tripwire はシステムファイルやディレクトリに対する変更をすべて検出し、管理者に報告するツールです。特に、サーバがクラッカーに進入された場合、悪質なプログラムがインストールされたり、設定ファイルを書き換えられることがあります。Tripwire は、そのようなときに、書き換えられたファイルを全て検出することができる非常に強力なツールです。
このインストールメモは、RedHat 7.3 の環境で作成しました。RPMを使用していますので、Vine Linux、Kondara MNU/Linux などの、他の RedHat 系の Linux であれば、動作すると思います。RedHat 系以外の Linux でも、ソースからインストールすれば、ディレクトリの位置は違うかもしれませんが、後は同じように運用できるはずです。
Tripwire は、チェックしたファイルやディレクトリに対する変更を検出するだけですので、既に改竄が行われているコンピュータにインストールしても意味がありません。できる限り、OS のインストール、設定を行った後、ネットワークに接続する前に、Tripwire をインストールするのが良いと思われます。
このメモは個人的な備忘録ですので、分かりにくい点や間違いなどがあるかもしれません。何か気になった点などがありましたら、メールで指摘してください。
Tripwire のインストールと設定についてのメモ 目次
ダウンロードは Tripwire.org の、Downloads から行ってください。RPM コマンドのバーションによって、ダウンロードするファイルが違います。注意してください。
$ rpm --version
を実行して、RPM のバージョンを表示させてから、RPM のバージョンによってダウンロードするファイルを選択します。
RedHat Linux などでは、インストール CD に Tripwire のパッケージが含まれているようです。こちらのバージョンの方が新しくなっていますので、このパッケージを利用した方が早いかもしれません。インストールCD がなくても rpmfind.net からダウンロードできます。手持ちのディストリビューションとバージョンから必要なパッケージを選択してダウンロードしてください。
インストールは、簡単です。Tripwire.org から tripwire-2.3-47.i386.tar.gz を取得した場合は、tar
コマンドで展開後、rpm
コマンドを使用してインストールします。
$ tar zxvf tripwire-2.3-47.i386.tar.gz $ su -c 'rpm -ivh tripwire-2.3-47.i386.rpm'
rpmfind.net からパッケージをダウンロードした場合はそのまま rpm
コマンドを実行します。
$ su -c 'rpm -ivh tripwire-2.3.*.i386.rpm'
以下のように表示されて、インストールが完了します。これは、Tripwire.org からダウンロードした tripwire-2.3-47.i386.rpm をインストールしたときのメッセージです。
Preparing... ########################################### [100%] 1:tripwire ########################################### [100%] ---------------------------------------------- Generating Tripwire configuration file... ---------------------------------------------- Customizing default policy file... A clear-text version of the Tripwire policy file /etc/tripwire/twpol.txt has been created for your inspection. This implements a minimal policy, intended only to test essential Tripwire functionality. You should edit the policy file to describe your system, and then use twadmin to generate a signed copy of the Tripwire policy. IMPORTANT: To complete the Tripwire 2.3 installation, you must run the configuration script: /etc/tripwire/twinstall.sh This script walks you through the processes of setting passphrases and encrypting the policy and configuration files. If you wish to change the contents of your policy file, /etc/tripwire/twpol.txt you may want to do so before running this script. ---------------------------------------------- The installation succeeded. Please refer to /usr/doc/tripwire/README for release information and to the printed user documentation for further instructions on using Open Source Tripwire 2.3 for Linux.
Tripwire の初期化を行います。サイトとローカルのパスフレーズが必要になります。
サイトのパスフレーズは、Tripewire の設定、ポリシーファイルの暗号化に使用されます。また、ローカルのパスフレーズは、データベース、レポートファイルの暗号化に使用されます。
以下のことに注意してください。
サイトとローカルのパスフレーズは、それぞれ 8文字以上 にして下さい。
サイトとローカルのパスフレーズは 別のもの にして下さい。
以下のコマンドを実行します。
$ su -c '/etc/tripwire/twinstall.sh'
以下のように出力されます。途中でサイトのパスフレーズ、ローカルのパスフレーズの入力と確認入力を要求されますので、指示に従って入力します。
---------------------------------------------- The Tripwire site and local passphrases are used to sign a variety of files, such as the configuration, policy, and database files. Passphrases should be at least 8 characters in length and contain both letters and numbers. See the Tripwire manual for more information. ---------------------------------------------- Creating key files... (When selecting a passphrase, keep in mind that good passphrases typically have upper and lower case letters, digits and punctuation marks, and are at least 8 characters in length.) Enter the site keyfile passphrase: ←サイトのパスフレーズ入力 Verify the site keyfile passphrase: ←サイトのパスフレーズ確認入力 Generating key (this may take several minutes)...Key generation complete. (When selecting a passphrase, keep in mind that good passphrases typically have upper and lower case letters, digits and punctuation marks, and are at least 8 characters in length.) Enter the local keyfile passphrase: ←ローカルのパスフレーズ入力 Verify the local keyfile passphrase: ←ローカルのパスフレーズ確認入力 Generating key (this may take several minutes)...Key generation complete. ---------------------------------------------- Signing configuration file... Please enter your site passphrase: ←サイトのパスフレーズ入力 Wrote configuration file: /etc/tripwire/tw.cfg A clear-text version of the Tripwire configuration file /etc/tripwire/twcfg.txt has been preserved for your inspection. It is recommended that you delete this file manually after you have examined it. ---------------------------------------------- Signing policy file... Please enter your site passphrase: ←サイトのパスフレーズ入力 Wrote policy file: /etc/tripwire/tw.pol A clear-text version of the Tripwire policy file /etc/tripwire/twpol.txt has been preserved for your inspection. This implements a minimal policy, intended only to test essential Tripwire functionality. You should edit the policy file to describe your system, and then use twadmin to generate a new signed copy of the Tripwire policy.
Tripwireデータベースの初期化を行います。
$ su -c '/usr/sbin/tripwire --init' Please enter your local passphrase: ←ローカルのパスフレーズの入力
データベースの作成が始まります。(使用しているマシンの性能に依存しますが、かなり、時間がかかります)
ポリシファイルに誤りや存在しないファイル等があった場合、以下のようなエラーが表示されます。
Parsing policy file: /etc/tripwire/tw.pol Generating the database... *** Processing Unix File System *** ### Warning: File system error. ### Filename: /proc/rtc ### No such file or directory ### Continuing... ### Warning: File system error. ### Filename: /proc/scsi ### No such file or directory ### Continuing... ...(途中省略)... ### Warning: File system error. ### Filename: /root/.ICEauthority ### No such file or directory ### Continuing...
これらのエラーは無視しても問題ないのですが、Tripwire のチェック時に、毎回同じエラーを出力しますので、邪魔になります。今後、使用する予定のないファイルであれば、ポリシファイルを編集して、該当部分をコメントアウトし、チェックしないように設定します。
$ su -c 'vi /etc/tripwire/twpol.txt'
177行目以降に並んでいる監視対象ファイルで、存在しないファイルをコメントアウトします。
上の初期化時にエラーが発生したファイルを参考にコメントアウトします。
############################################################################## # ## ############################################################################## # # # # # Policy file for RedHat Linux 7.0 # # # V1.0.0 # # # July 18, 2000 # # # ## ############################################################################## ...(省略)... ################################################ # ## ################################################ # # # # # File System and Disk Administration Programs # # # ## ################################################ ( rulename = "File System and Disk Administraton Programs" severity = $(SIG_HI) ) #/sbin/accton -> $(SEC_CRIT) ; #←コメントアウト /sbin/badblocks -> $(SEC_CRIT) ; #/sbin/dosfsck -> $(SEC_CRIT) ; #←コメントアウト ...(以下省略)...
変更が終了したら、ポリシファイルを再構築して、再度データベースを初期化して下さい。
$ su -c '/usr/sbin/twadmin --create-polfile /etc/tripwire/twpol.txt' $ su -c '/usr/sbin/tripwire --init'
問題がなければ、エラーは出ません。
データベースの初期化が済んだ後、チェックを実行します。
$ su -c '/usr/sbin/tripwire --check'
以下のように、チェックが実行され、結果が表示されます。注意:ホスト名や IP アドレス、ファイル名は伏せています。
Parsing policy file: /etc/tripwire/tw.pol *** Processing Unix File System *** Performing integrity check... Wrote report file: /var/lib/tripwire/report/client5-20011119-140927.twr Tripwire(R) 2.3.0 Integrity Check Report Report generated by: root Report created on: Mon Nov 19 14:09:27 2001 Database last updated on: Never =============================================================================== Report Summary: =============================================================================== Host name: xxxxxxx Host IP address: 192.168.xxx.xxx Host ID: None Policy file used: /etc/tripwire/tw.pol Configuration file used: /etc/tripwire/tw.cfg Database file used: /var/lib/tripwire/xxxxxxx.twd Command line used: tripwire --check =============================================================================== Rule Summary: =============================================================================== ------------------------------------------------------------------------------- Section: Unix File System ------------------------------------------------------------------------------- Rule Name Severity Level Added Removed Modified --------- -------------- ----- ------- -------- Invariant Directories 66 0 0 0 Temporary directories 33 0 0 0 Tripwire Data Files 100 0 0 0 Critical devices 100 0 0 0 User binaries 66 0 0 0 Tripwire Binaries 100 0 0 0 Libraries 66 0 0 0 File System and Disk Administraton Programs 100 0 0 0 Kernel Administration Programs 100 0 0 0 Networking Programs 100 0 0 0 System Administration Programs 100 0 0 0 Hardware and Device Control Programs 100 0 0 0 System Information Programs 100 0 0 0 Application Information Programs 100 0 0 0 Shell Releated Programs 100 0 0 0 (/sbin/getkey) Critical Utility Sym-Links 100 0 0 0 Critical system boot files 100 0 0 0 Critical configuration files 100 0 0 0 System boot changes 100 0 0 0 OS executables and libraries 100 0 0 0 Security Control 100 0 0 0 Login Scripts 100 0 0 0 Operating System Utilities 100 0 0 0 Shell Binaries 100 0 0 0 Root config files 100 0 0 0 Total objects scanned: 18650 Total violations found: 0 =============================================================================== Object Summary: =============================================================================== ------------------------------------------------------------------------------- # Section: Unix File System ------------------------------------------------------------------------------- No violations. =============================================================================== Error Report: =============================================================================== No Errors ------------------------------------------------------------------------------- *** End of report *** Tripwire 2.3 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY; for details use --version. This is free software which may be redistributed or modified only under certain conditions; see COPYING for details. All rights reserved. Integrity check complete.
結果レポートを見たい場合は、以下のようにコマンドを入力します。ファイル名はホスト名、年、日付、時間になっています。
$ su -c '/usr/sbin/twprint --print-report --twrfile /var/lib/tripwire/report/xxxxxx-20011119-140927.twr'
チェックを実行した後、問題が無い場合は、データベースの更新を行います。
$ su -c '/usr/sbin/tripwire --update --twrfile /var/lib/tripwire/report/xxxxxx-20011119-140927.twr' Please enter your local passphrase: #←ローカルのパスフレーズを入力
後は、定期的にレポートを作成・確認して、何も手を加えていないはずのファイルが改竄されていないかを チェックします。
メールでレポートを送信するには、twcfg.txt で設定します。( 外部のメールサーバを使用する場合は MAILMETHOD
や SMTPHOST
、SMTPPORT
を指定します。 )
外部のメールサーバを使用しない場合は変更する必要はありません。
$ su -c 'vi /etc/tripwire/twcfg.txt'
以下のように変更します。
ROOT =/usr/sbin 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/client5-local.key EDITOR =/bin/vi LATEPROMPTING =false LOOSEDIRECTORYCHECKING =false MAILNOVIOLATIONS =true (*注) EMAILREPORTLEVEL =3 REPORTLEVEL =3 SYSLOGREPORTING =false MAILMETHOD =SMTP SMTPHOST =XXX.XXX.XXX.XXX SMTPPORT =25 MAILPROGRAM =/usr/lib/sendmail -oi -t
(*注) エラーが無いときにメールを送信させないようにしたい場合は、MAILNOVIOLATIONS =false
と設定します。
定期的にチェックが行われているかどうかを確認する方が良いと思われますので、MAILNOVIOLATIONS = true
にしておいた方がよいと思われます。
twadmin
コマンドで tw.cfg に反映させます。
$ su -c '/usr/sbin/twadmin --create-cfgfile -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt' Please enter your site passphrase: #←サイトのパスフレーズを入力
twpol.txt に送信内容と、送信先メールアドレスを設定します。
$ su -c 'vi /etc/tripwire/twpol.txt'
あるセクションのレポートをメールで受け取るには、以下のようにセクションの最初の rulename が書いている場所に、メールアドレスを入力します。
例えば、Tripwire Binaries セクションにあるレポートのみメールで受け取りたい場合は、以下のように設定します。
# 80 行目付近 # Tripwire Binaries ( rulename = "Tripwire Binaries", severity = $(SIG_HI), #←カンマを忘れないで下さい emailto = XXXXXX@XXXXXXX.XX.XX #←送信先のメールアドレス )
全てのセクションのレポートをメールで受け取りたい場合は、全てのセクションを {...} で入れ子にしてメールを設定して下さい。
以下のように設定すると、全てのレポートをメールで受け取ることができます。
#--ここから( 80行目付近 ) ( emailto = XXXXXX@XXXXXXX.XX.XX ) #← 送信先メールアドレス { #--ここまで # Tripwire Binaries ( rulename = "Tripwire Binaries", severity = $(SIG_HI) ) #...(省略)... # Rest of critical system binaries ( rulename = "OS executables and libraries", severity = $(SIG_HI) ) { /bin -> $(SEC_BIN) ; /lib -> $(SEC_BIN) ; } #--ここから } #← 追加 #--ここまで( 1080 行目付近 )
設定が終了したら、ポリシファイルに設定を反映させます。
$ su -c '/usr/sbin/twadmin --create-polfile -S /etc/tripwire/site.key /etc/tripwire/twpol.txt'
実際にメッセージが正しく送信されるかどうか確認するには、次のコマンドを実行します。
$ su -c '/usr/sbin/tripwire --test --email XXXXXX@XXXXXXX.XX.XX' #←メールアドレス
チェック後、メール送信する場合は、--email-report
オプションを指定します。
$ su -c '/usr/sbin/tripwire --check --email-report'
データベースを更新しない場合、Tripwire が変更を検出すると、毎回同じファイルがエラーとして検出されてしまいます。Tripwire が検出した変更に問題がなければ、データベースを更新する必要があります。
レポートからデータベースを更新する場合は以下のようにします。
$ su -c '/usr/sbin/tripwire --update -c tw.cfg -p tw.pol -S site.key -L local.key \ -r /var/lib/tripwire/report/{$レポートファイル名}.twr'
または、データベースを初期化するという手段もあります。
$ su -c '/usr/sbin/tripwire --init'
セキュリティ上の問題ですが、いくつかの設定ファイルは、管理者以外のユーザに見られることを防ぐために削除しておいた方が安全だと考えられます。テキストで保存されている「/etc/tripwire/twpol.txt」と「/etc/tripwire/twcfg.txt」を削除します。
$ su -c 'rm /etc/tripwire/twpol.txt' $ su -c 'rm /etc/tripwire/twcfg.txt'
これらのファイルが必要になった場合は、以下のコマンドで作成可能です。
$ su -c '/usr/sbin/twadmin --print-polfile > /etc/tripwire/twpol.txt' $ su -c '/usr/sbin/twadmin --print-cfgfile > /etc/tripwire/twcfg.txt'
「twpol.txt」から「tw.pol」を、「twcfg.txt」から「tw.cfg」を作成するには、以下のようにします。
$ su -c 'cd /etc/tripwire && /usr/sbin/twadmin --create-polfile -S site.key /etc/tripwire/twpol.txt' Please enter your site passphrase: ← サイトのパスフレーズを入力
$ su -c 'cd /etc/tripwire && /usr/sbin/twadmin --create-cfgfile -S site.key /etc/tripwire/twcfg.txt' Please enter your site passphrase: ← サイトのパスフレーズを入力
cron で実行する場合の例です。自動的に確認するように設定し、メールを出すように設定しておくと便利です。
$ su -c 'vi /etc/crontab'
毎日深夜2時に整合性チェックを行い結果をメールで送信するように設定します。
0 2 * * * /usr/sbin/tripwire --check --email-report
rpmfind.net からダウンロードした RedHat Linux の RPM では、 /etc/cron.daily/tripwire-check に、cron
で自動実行するための設定が保存されていました。メールを受け取りたい場合は、--email-report
オプションを付けるなど、必要に応じて編集すると良いと思います。
#!/bin/sh HOST_NAME=`uname -n` if [ ! -e /var/lib/tripwire/${HOST_NAME}.twd ] ; then echo "**** Error: Tripwire database for ${HOST_NAME} not found. ****" echo "**** Run "/etc/tripwire/twinstall.sh" and/or "tripwire --init". ****" else test -f /etc/tripwire/tw.cfg && /usr/sbin/tripwire --check fi
チェック後、自動的にデータベースを作り直すようにしたい場合、シェルスクリプトを作成して、それを cron
で実行するという方法をとります。
他人に見られるとローカルのパスフレーズが見えてしまうため、非常に危険です。Owner:root
、Group:root
、権限は 700
にしてファイルを作成して下さい。
ここでは、/root/bin ディレクトリに tripwire.sh
というファイルを作成してます。別のディレクトリ、ファイル名にしても全く問題ありません。
$ su -c 'mkdir /root/bin/' $ su -c 'touch /root/bin/tripwire.sh' $ su -c 'chown root:root /root/bin/tripwire.sh' $ su -c 'chmod 700 /root/bin/tripwire.sh' $ su -c 'vi /root/bin/tripwire.sh'
スクリプトの内容は以下のようにします。--init
の後ろの -P
のオプションの後ろはローカルのパスフレーズです。そのまま入力してください。
#!/bin/sh /usr/sbin/tripwire --check --email-report /usr/sbin/tripwire --init -P xxxxxxx #← ローカルのパスフレーズ
crontab に次のように登録します。
$ su -c 'vi /etc/crontab'
毎日深夜2時に上のシェルスクリプトを実行するように登録します。
0 2 * * * root /root/bin/tripwire.sh > /dev/null 2>&1
--email-report
オプションが指定された場合、tripwire
は、以下のような Subject でメールを送信します。
Subject: TWReport {$ホスト名}; {$年月日・時間} V:* S:* A:* R:* C:*
右側の V: S: A: R: C: は以下の数になります。
V: 追加、削除、変更されたファイルおよび、ディレクトリの合計 S: 違反されたルールの最重要度の値 A: 追加されたファイルおよび、ディレクトリ数 R: 削除されたファイルおよび、ディレクトリ数 C: 変更されたファイルおよび、ディレクトリ数
誤字、脱字の修正。リンクの追加。
docbook で書き直し。気になった部分の一部修正。
初版作成。公開。