はじめに
Tripwireは、1992年に開発された侵入検知システムで、古くから多くのUNIXプラットフォームで利用されています。
Tripwireはサーバに加えられるすべての変更を記録し、管理者に通知することが出来ます。この改ざん検知(変更検知)は外部からハッキングによる侵入や組織内部の管理業務による操作ーー悪意のある・なしに関わらずーー記録されます。
これは改ざん検知ツールを導入したときのシステムをベースラインとして記録し、それ以降のシステムに対する変更点を随時記録していきます。 システムに対して行われる重要な変更を検知する仕組みをもつことで、不正アクセスの原因や被害状況、復旧までの十分な情報提供に利用することが出来ます。
今回は、ホスト型IDS(Intrusion Detection System)のTripwireを用いた侵入検知システムの構築方法を解説します。
前提条件
構築に必要なサーバー要件および、導入パッケージは下記のとおりです。
- サーバー要件
サーバー要件は、次のとおりです。
ホスト名 centos IPアドレス 192.168.0.20 OS CentOS 6.5 i386 サードパーティリポジトリ EPEL - 導入するパッケージ
導入するパッケージは、次のとおりです。
パッケージ名 バージョン mutt 1.5.20 mailx 12.4 tripwire 2.4.1.2
システムの構築
下記の手順で構築します。
- メール関連パッケージのインストール
$ sudo yum -y install mutt mailx
[vagrant@centos ~]$ sudo yum -y install mutt mailx Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Including mirror: ftp.jaist.ac.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: ftp.riken.jp Including mirror: ftp.nara.wide.ad.jp Including mirror: ftp.iij.ad.jp Including mirror: www.ftp.ne.jp Including mirror: mirror.fairway.ne.jp * base: ftp.jaist.ac.jp Including mirror: ftp.jaist.ac.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: ftp.riken.jp Including mirror: ftp.nara.wide.ad.jp Including mirror: ftp.iij.ad.jp Including mirror: www.ftp.ne.jp Including mirror: mirror.fairway.ne.jp * extras: ftp.jaist.ac.jp Including mirror: ftp.jaist.ac.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: ftp.riken.jp Including mirror: ftp.nara.wide.ad.jp Including mirror: ftp.iij.ad.jp Including mirror: www.ftp.ne.jp * updates: ftp.jaist.ac.jp Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package mailx.i686 0:12.4-7.el6 will be installed
================================================================================ Installing: mailx i686 12.4-7.el6 base 225 k mutt i686 5:1.5.20-2.20091214hg736b6a.el6_1.1 base 1.2 M Transaction Summary ================================================================================ Install 2 Package(s) Total download size: 1.5 M Installed size: 4.7 M Downloading Packages: (1/2): mailx-12.4-7.el6.i686.rpm | 225 kB 00:00 (2/2): mutt-1.5.20-2.20091214hg736b6a.el6_1.1.i686.rpm | 1.2 MB 00:00 -------------------------------------------------------------------------------- Total 261 kB/s | 1.5 MB 00:05 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : 5:mutt-1.5.20-2.20091214hg736b6a.el6_1.1.i686 1/2 Installing : mailx-12.4-7.el6.i686 2/2 Verifying : mailx-12.4-7.el6.i686 1/2 Verifying : 5:mutt-1.5.20-2.20091214hg736b6a.el6_1.1.i686 2/2 Installed: mailx.i686 0:12.4-7.el6 mutt.i686 5:1.5.20-2.20091214hg736b6a.el6_1.1 Complete!
- Tripwireのインストール
$ sudo yum --enablerepo=epel -y install tripwire
[vagrant@centos ~]$ sudo yum --enablerepo=epel -y install tripwire Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/metalink | 6.1 kB 00:00 Including mirror: ftp.jaist.ac.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: ftp.riken.jp Including mirror: ftp.nara.wide.ad.jp Including mirror: ftp.iij.ad.jp Including mirror: www.ftp.ne.jp Including mirror: mirror.fairway.ne.jp * base: ftp.jaist.ac.jp Including mirror: ftp.jaist.ac.jp Including mirror: ftp.tsukuba.wide.ad.jp Including mirror: ftp.riken.jp Including mirror: ftp.iij.ad.jp * epel: ftp.jaist.ac.jp Including mirror: ftp.jaist.ac.jp Including mirror: ftp.riken.jp Including mirror: ftp.nara.wide.ad.jp Including mirror: ftp.iij.ad.jp Including mirror: www.ftp.ne.jp
--> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: tripwire i686 2.4.1.2-11.el6 epel 1.2 M Transaction Summary ================================================================================ Install 1 Package(s) Total download size: 1.2 M Installed size: 3.7 M Downloading Packages: tripwire-2.4.1.2-11.el6.i686.rpm | 1.2 MB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : tripwire-2.4.1.2-11.el6.i686 1/1 Verifying : tripwire-2.4.1.2-11.el6.i686 1/1 Installed: tripwire.i686 0:2.4.1.2-11.el6 Complete!
- サイトキーの作成
サイトキーは、設定ファイル、ポリシーファイルの暗号化・署名に使用します。
なお、署名はデータの完全性をチェックするために生成されます。$ sudo rm -f /etc/tripwire/site.key $ sudo twadmin --generate-keys --site-keyfile /etc/tripwire/site.key
[vagrant@centos ~]$ sudo rm -f /etc/tripwire/site.key [vagrant@centos ~]$ sudo twadmin --generate-keys --site-keyfile /etc/tripwire/site.key (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.
- ローカルキーの作成
ローカルキーは、データベースの更新、レポートファイルの保護に使用されます。
$ sudo rm -f /etc/tripwire/`hostname`-local.key $ sudo twadmin --generate-keys --local-keyfile /etc/tripwire/`hostname`-local.key
[vagrant@centos ~]$ sudo rm -f /etc/tripwire/`hostname`-local.key [vagrant@centos ~]$ sudo twadmin --generate-keys --local-keyfile /etc/tripwire/`hostname`-local.key (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.
- テキスト設定ファイルの編集
Tripwire設定ファイルを下記のとおり修正します。
$ sudo vi /etc/tripwire/twcfg.txt
(変更前) LOOSEDIRECTORYCHECKING =false REPORTLEVEL =3 (変更後) LOOSEDIRECTORYCHECKING =true REPORTLEVEL =4
- バイナリ設定ファイルの生成
テキスト設定ファイル(twcfg.txt)から、バイナリ設定ファイル(tw.cfg)を生成します。
生成の際には、サイトキーのパスフレーズが必要です。$ sudo twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
これにより、テキストベースの設定ファイルが、署名暗号化されたバイナリファイルに変換されます。
- テキストポリシーファイルの最適化
デフォルトでインストールされたテキストポリシーファイルをそのまま使用すると、システムに存在しないファイルをチェックしてしまうため、CentOSで自宅サーバー構築で公開されている最適化スクリプトtwpolmake.plを使用して、デフォルトのポリシーファイルを最適化します。
$ sudo vi /etc/tripwire/twpolmake.pl
最適化されたポリシーファイルを生成します。
$ perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt | sudo tee /etc/tripwire/twpol.txt.new
[vagrant@centos ~]$ perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt | sudo tee /etc/tripwire/twpol.txt.new # identifier: tripwire IDS policy input file # host: Fedora Core release 1 (Yarrow) # version: 2.3.1-19.fdr.1 # maintainer: Keith G. Robertson-Turner
# validator: unvalidated # date: Tue Jun 15 17:09:21 BST 2004 # description: # This is an example Tripwire Policy input file. It is intended as the # starting point to creating your own custom Tripwire Policy. Referring # to it, as well as the Tripwire Policy Guide, should give you enough # information to make a good custom Tripwire Policy that better fits - バイナリポリシーファイルの生成
テキストポリシーファイル(twpol.txt.new)から、バイナリポリシーファイル(tw.pol)を生成します。
生成の際には、サイトキーのパスフレーズが必要です。$ sudo twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
- データベースの初期化
Tripwireでは、ポリシーファイルを元に、ファイルやフォルダの情報を、署名暗号化されたデータベースとして記録します。このデータベースの内容と現在の内容の差異を、改竄として認識します。
初期化の際には、ローカルキーのパスフレーズが必要です。$ sudo tripwire --init
[vagrant@centos ~]$ sudo tripwire --init Please enter your local passphrase: Parsing policy file: /etc/tripwire/tw.pol Generating the database... *** Processing Unix File System *** Wrote database file: /var/lib/tripwire/centos.twd The database was successfully generated.
- 改竄チェックの実行
ベースとなるデータベースが作成されましたので、手動で改竄チェックを実行します。
$ sudo tripwire --check
なお、初期化時に作成されたDBファイル(centos.twd)が検出されていますが問題ありません。
- cron実行ファイルの編集
CentOSでは、/etc/cron.daily/tripwire-checkがインストールされますので、この実行ファイルを下記のとおり編集します。
なお、SITEPASSとLOCALPASSは、設定したパスフレーズに読み替えて下さい。SITEPASS=xxxxx LOCALPASS=yyyy tripwire --check | mail -s "Tripwire Check Report in `hostname`" vagrant cd /etc/tripwire twadmin -m p -c tw.cfg -p tw.pol -S site.key > twpol.txt perl twpolmake.pl twpol.txt > twpol.txt.new twadmin -m P -c tw.cfg -p tw.pol -S site.key -Q $SITEPASS twpol.txt.new 1> /dev/null rm -f twpol.txt* *.bak tripwire --init -P $LOCALPASS
- cron実行ファイルの実行
編集したcron実行ファイルを実行します。
$ sudo /etc/cron.daily/tripwire-check
実行すると、メールが指定したローカルユーザー宛に送信されます。
$ mutt
- crontabへの登録
/etc/cron.daily下の実行ファイルを実行するため、crontabに登録します。
ここでは、毎日6時に改竄チェックを実行する設定にしています。sudo crontab -e
以上で、改竄検知システムの構築は終了です。
まとめ
ここまで、Tripwireを用いた侵入検知システムの構築方法を解説しました。Tripwireは、ホスト型IDSの草分け的なソフトウエアですが、現在も多くのサイトでされており、今後さらに利用が増える事が予想されます。本記事を参考に、実績のある侵入検知システムを導入しましょう。