ファイル改竄検知システム導入(Tripwire)

更新日:2007/2/1
<<ホームへ戻る

クラッカーによるLinuxサーバーのファイルの改竄を検知するシステムを導入する。
ここでは、ファイル改竄検知システムにホスト型IDS(IDS=Intrusion Detection System)のTripwireを導入する。
Tripwireは、導入時のファイル状態をデータベース化し、そのデータベースとファイルの現状を比較することにより、ファイルの追加・変更・削除を検知する。

 
◆Tripwireのインストール <<TOP

ダウンロードサイトはいろいろあるようだが、当サーバーの場合は、ここからダウンロードした。オープンソースを選ぶ。

[root@server ~]# wget http://downloads.sourceforge.net/tripwire/tripwire-2.3.1-2.tar.gz
         ↑  Tripwireダウンロード   
--21:00:51--  http://downloads.sourceforge.net/tripwire/tripwire-2.3.1-2.tar.gz
           => `tripwire-2.3.1-2.tar.gz'
downloads.sourceforge.net をDNSに問いあわせています... 66.35.250.203
downloads.sourceforge.net|66.35.250.203|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://jaist.dl.sourceforge.net/sourceforge/tripwire/tripwire-2.3.1-2.tar.gz [続く]
--21:00:52--  http://jaist.dl.sourceforge.net/sourceforge/tripwire/tripwire-2.3.1-2.tar.gz
           => `tripwire-2.3.1-2.tar.gz'
jaist.dl.sourceforge.net をDNSに問いあわせています... 150.65.7.130
jaist.dl.sourceforge.net|150.65.7.130|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1,514,955 (1.4M) [application/x-gzip]

100%[==========================================================>] 1,514,955      1.29M/s             

21:00:53 (1.29 MB/s) - `tripwire-2.3.1-2.tar.gz' を保存しました [1514955/1514955]

[root@server ~]# tar zxvf tripwire-2.3.1-2.tar.gz ← Tripwire展開

[root@server ~]# cd tripwire-2.3.1-2 ← Tripwire展開先ディレクトリへ移動

[root@server ~/tripwire-2.3.1-2]# wget http://www.frenchfries.net/paul/tripwire/tw-20030919.patch.gz
                  ↑ Tripwireパッチダウンロード
--21:08:21--  http://www.frenchfries.net/paul/tripwire/tw-20030919.patch.gz
           => `tw-20030919.patch.gz'
www.frenchfries.net をDNSに問いあわせています... 216.73.106.93
www.frenchfries.net|216.73.106.93|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 786,411 (768K) [application/x-gzip]

100%[==========================================================>] 786,411      257.02K/s             

21:08:25 (256.06 KB/s) - `tw-20030919.patch.gz' を保存しました [786411/786411]

[root@server ~/tripwire-2.3.1-2]# gunzip tw-20030919.patch.gz ← Tripwireパッチ解凍

[root@server ~/tripwire-2.3.1-2]# patch -p1 < tw-20030919.patch ← Tripwireパッチ施工
      ・
      ・
      ・
      ・
patching file src/util/Makefile.am
patching file src/util/Makefile.in
patching file src/util/fileutil.cpp

[root@server ~/tripwire-2.3.1-2]# chmod 755 configure ← configureへ実行権限付加

[root@server ~/tripwire-2.3.1-2]# ./configure --sysconfdir=/etc/tripwire && make && make install
                  ↑ インストール(時間がかかります)
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for a BSD compatible install... /usr/bin/install -c
      ・
      ・
      ・
Copyright (C) 1998-2000 Tripwire (R) Security Systems, Inc.  Tripwire (R)
is a registered trademark of the Purdue Research Foundation and is
licensed exclusively to Tripwire (R) Security Systems, Inc.


LICENSE AGREEMENT for Tripwire(R) 2.3 Open Source

Please read the following license agreement.  You must accept the
agreement to continue installing Tripwire.

Press ENTER to view the License Agreement.
空ENTER

ライセンスが表示されるのでSPACEキーで流す

Please type "accept" to indicate your acceptance of this
license agreement. [do not accept] accept ← 受け入れる

	Using configuration file ./install/install.cfg

Checking for programs specified in install configuration file....

/usr/sbin/sendmail exists.  Continuing installation.

/bin/vi exists.  Continuing installation.


----------------------------------------------
Verifying existence of binaries...

./bin/siggen found
./bin/tripwire found
./bin/twprint found
./bin/twadmin found

This program will copy Tripwire files to the following directories:

        TWBIN: /usr/local/sbin
        TWMAN: /usr/local/man
     TWPOLICY: /etc/tripwire
     TWREPORT: /usr/local/lib/tripwire/report
         TWDB: /usr/local/lib/tripwire
 TWSITEKEYDIR: /etc/tripwire
TWLOCALKEYDIR: /etc/tripwire

CLOBBER is false.

Continue with installation? [y/n] y ← yと入力

----------------------------------------------
Creating directories...

/usr/local/sbin: already exists
/etc/tripwire: created
/usr/local/lib/tripwire/report: created
/usr/local/lib/tripwire: already exists
/etc/tripwire: already exists
/etc/tripwire: already exists
/usr/local/man: already exists
/usr/local/doc/tripwire: created

----------------------------------------------
Copying files...

/usr/local/doc/tripwire/README: copied
/usr/local/doc/tripwire/Release_Notes: copied
/usr/local/doc/tripwire/COPYING: copied
/usr/local/doc/tripwire/TRADEMARK: copied
/usr/local/doc/tripwire/policyguide.txt: copied
/etc/tripwire/twpol-Linux.txt: copied

----------------------------------------------
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.

----------------------------------------------
Generating Tripwire configuration file...

----------------------------------------------
Creating signed 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.


----------------------------------------------
Customizing default policy file...

----------------------------------------------
Creating signed 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.


----------------------------------------------
The installation succeeded.

Please refer to /usr/local/doc/tripwire/Release_Notes
for release information and to the printed user documentation
for further instructions on using Tripwire 2.3 Open Source.

make[3]: Leaving directory `/root/tripwire-2.3.1-2'
make[2]: Leaving directory `/root/tripwire-2.3.1-2'
make[1]: Leaving directory `/root/tripwire-2.3.1-2'

[root@server ~/tripwire-2.3.1-2]# cd ← rootに戻る。

[root@server ~]# rm -rf tripwire-2.3.1-2 ← Tripwire展開先ディレクトリを削除

[root@server ~]# rm -f tripwire-2.3.1-2.tar.gz ← ダウンロードしたTripwireを削除
	

サイトパスフレーズ、ローカルパスフレーズはTripwireデータベース等のメンテナンス時に使用するパスワードなので、忘れないようにメモしておくことをお勧めします。

 
 
 
◆Tripwire設定 <<TOP

@、Tripwireの設定。

[root@server ~]# vi /etc/tripwire/twcfg.txt ← 設定ファイル(テキスト版)編集
ROOT          =/usr/local/sbin
POLFILE       =/etc/tripwire/tw.pol
DBFILE        =/usr/local/lib/tripwire/$(HOSTNAME).twd
REPORTFILE    =/usr/local/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE   =/etc/tripwire/site.key
LOCALKEYFILE  =/etc/tripwire/server.arisonsvr.org-local.key
EDITOR        =/bin/vi
LATEPROMPTING =false
LOOSEDIRECTORYCHECKING =false		  
            
LOOSEDIRECTORYCHECKING =true ← ファイル変更検知時に所属ディレクトリまで変更検知しないようにする

REPORTLEVEL   =3
       
REPORTLEVEL   =4	← ファイル変更チェック結果リポートレベル変更

[root@server ~]# twadmin --create-cfgfile -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
         ↑ 設定ファイル作成(テキスト版⇒暗号署名版)

Please enter your site passphrase: ← 先程のサイトパスフレーズを応答(表示はされない)

Wrote configuration file: /etc/tripwire/tw.cfg

[root@server ~]# rm -f /etc/tripwire/twcfg.txt ← セキュリティ確保のため設定ファイル(テキスト版)削除

[root@server ~]# twadmin --print-cfgfile > /etc/tripwire/twcfg.txt
         ↑ 設定ファイル(テキスト版)を復活させる場合

[root@server ~]# ls /etc/tripwire/ -l ← 確認してみる。
合計 96
-rw-r-----  1 root root   931  2月  1 21:42 server.arisonsvr.org-local.key
-rw-r-----  1 root root   931  2月  1 21:38 site.key
-rw-r-----  1 root root  4586  2月  2 10:07 tw.cfg
-rw-r-----  1 root root  4586  2月  2 10:07 tw.cfg.bak
-rw-r-----  1 root root  8287  2月  1 21:50 tw.pol
-rw-r--r--  1 root root   512  2月  2 10:10 twcfg.txt  ← 復活している
-rw-r-----  1 root root 51993  2月  1 21:47 twpol.txt

[root@server ~]# rm -f /etc/tripwire/twcfg.txt  ← セキュリティ確保のため設定ファイル(テキスト版)削除

A、ポリシー設定
Tripwireは、ポリシーファイルというファイルを元に作成したデータベースと、現在のファイル状態を比較することにより、ファイルが変更されたかどうかを検知する。
しかし、デフォルトのポリシーファイルは、存在しないファイルのチェックが有効になっていたり、逆に存在するファイルのチェックが無効になっていたりするため、存在しないファイルのチェックを無効に、存在するファイルのチェックを有効にするPerlスクリプトを作成して、ポリシーファイルを作成する。

[root@server ~]# vi /etc/tripwire/twpolmake.pl ← ポリシーファイル作成スクリプト作成
#!/usr/bin/perl
# Tripwire Policy File customize tool for Redhat 8.0
# ----------------------------------------------------------------
# Copyright (C) 2003 Hiroaki Izumi
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
# ----------------------------------------------------------------
# Usage:
#    perl tripwire_pol.pl {Pol file}
# --------------------------------------------------------
#
$POLFILE=$ARGV[0];

open(POL,"$POLFILE") or die "open error: $POLFILE" ;
my($myhost,$thost) ;
my($sharp,$tpath,$cond) ;
my($INRULE) = 0 ;

while () {
	chomp;
	if (($thost) = /^HOSTNAMEs*=\s*(.+)\s*;/) {
		$myhost = `hostname` ; chomp($myhost) ;
		if ($thost ne $myhost) {
			$_="HOSTNAME=$myhost;" ;
		}
	}
	elsif ( /^{/ ) {
		$INRULE=1 ;
	}
	elsif ( /^}/ ) {
		$INRULE=0 ;
	}
	elsif ($INRULE == 1 and ($sharp,$tpath,$cond) = /^(\s*\#?\s*)(\/\S+)\b(\s+->\s+.+)$/) {
		$ret = ($sharp =~ s/\#//g) ;
		if ($tpath eq '/sbin/e2fsadm' ) {
		    $cond =~ s/;\s+(tune2fs.*)$/; \#$1/ ;
		}
		if (! -e $tpath) {
			$_ = "$sharp#$tpath$cond" if ($ret == 0) ;
		}
		else {
			$_ = "$sharp$tpath$cond" ;
		}
	}
	print "$_\n" ;
}
close(POL) ;

[root@server ~]# perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt > /etc/tripwire/twpol.txt.out
         ↑ デフォルトのポリシーファイルを元にポリシーファイル作成

[root@server ~]# rm -f /etc/tripwire/twpol.txt ← デフォルトのポリシーファイル削除

[root@server ~]# mv /etc/tripwire/twpol.txt.out /etc/tripwire/twpol.txt
         ↑ 作成したポリシーファイルをデフォルトのポリシーファイル名にリネーム

[root@server ~]# vi /etc/tripwire/twpol.txt 	  ← ポリシーファイル編集 
         ・   
         ・
# Permission is granted to copy and distribute translations of this document
# into another language, under the above conditions for modified versions,
# except that this permission notice may be stated in a translation approved by
# Tripwire, Inc.
#
# DCM
#
# $Id: twpol-Linux.txt,v 1.1 2003/06/08 02:00:06 pherman Exp $
#
         ・
         ・
  $(TWLKEY)/$(HOSTNAME)-local.key      -> $(SEC_BIN) ;
  $(TWSKEY)/site.key                   -> $(SEC_BIN) ;

  #don't scan the individual reports
  $(TWREPORT)                          -> $(SEC_CONFIG) (recurse=0) ;
  !$(TWDB)/$(HOSTNAME).twd ;  ← 追加(データベースの変更チェックを行わないようにする)
 
[root@server ~]# twadmin --create-polfile -S /etc/tripwire/site.key /etc/tripwire/twpol.txt
         ↑ ポリシーファイル作成(テキスト版⇒暗号署名版)
Please enter your site passphrase:    ← サイトパスフレーズ応答
Wrote policy file: /etc/tripwire/tw.pol

[root@server ~]# rm -f /etc/tripwire/twpol.txt ← セキュリティ確保のためポリシーファイル(テキスト版)削除

※あとでポリシーファイル(テキスト版)を復活させる場合は以下のコマンドで復活可

[root@server ~]# twadmin --print-polfile > /etc/tripwire/twpol.txt

 

B、データベース作成

[root@server ~]# tripwire --init   ← データベース作成
Please enter your local passphrase:    ← ローカルパスフレーズ応答
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /usr/local/lib/tripwire/server.arisonsvr.org.twd
The database was successfully generated.		  
		  
 

 

◆Tripwire確認 <<TOP

@、Tripwire実行スクリプト作成
   nkfコマンドを使用するため、先にnkfコマンドをインストールしておくこと。

[root@server ~]# vi tripwire-check ← Tripwire実行スクリプト作成
#!/bin/bash

PATH=/usr/local/sbin:/usr/bin:/bin
SITEPASS=********  # サイトパスフレーズ
LOCALPASS=******** # ローカルパスフレーズ
REPORTFILE=/usr/local/lib/tripwire/report/`hostname`-`date +%Y%m%d`.twr

# Tripwire実行
tripwire --check -r "$REPORTFILE"| logger -t tripwire

# Tripwireリポートメール送信(変更があった場合のみ)
cd /etc/tripwire
REPORTPRINT=`mktemp`
twprint -m r -c tw.cfg -r "$REPORTFILE" -L `hostname`-local.key -t 4 > $REPORTPRINT
if [ -z "$(grep 'Total violations found:  0' $REPORTPRINT)" ]; then
    nkf -j $REPORTPRINT | mail -s "Tripwire(R) Integrity Check Report in `hostname`" root
fi
rm -f $REPORTPRINT

# ポリシーファイル最新化
cd /etc/tripwire
twadmin --print-polfile > twpol.txt
perl twpolmake.pl twpol.txt > twpol.txt.out
twadmin --create-polfile -S site.key -Q $SITEPASS twpol.txt.out | logger -t tripwire
rm -f twpol.*

# データベース最新化
rm -f /usr/local/lib/tripwire/`hostname`.twd
tripwire --init -P $LOCALPASS | logger -t tripwire

[root@server ~]# chmod 700 tripwire-check ← Tripwire実行スクリプトへ実行権限付加
		  
※Tripwire実行結果(リポート)は/usr/local/lib/tripwire/reportディレクトリに暗号化された状態で保存される。また、ログは/var/log/messagesに記録される。

A、Tripwire確認

[root@server ~]# ./tripwire-check  ← Tripwire実行スクリプト実行


[root@server ~]# cat /var/spool/mail/root |more ← このコマンドで確認してみる。		  

[root@server ~]# ./tripwire-check ← 1回目終了後、連続してTripwire実行スクリプト実行

[root@server ~]# cat /var/spool/mail/root |more ← catコマンドで新たなメールが来ていないことを確認
 
 
◆Tripwire定期自動実行設定 <<TOP

 

[root@linux ~]# mv tripwire-check /etc/cron.daily/ 
        ↑ Tripwire実行スクリプトを毎日自動実行されるディレクトリへ移動
 
   
  <<TOP