インストールのやり方や、操作の詳細、裏側などは以前の投稿でまとめました。
そこで次のページを参考にしながらインストール、そしていろいろ設定まで行なって運用開始まで行いたいと思います。
- ファイル改竄検知システム導入(Tripwire) – CentOSで自宅サーバー構築
→ こちらの手順をメインとします。 - ゼロから始めるLinuxセキュリティ(8):Tripwireによるホスト型IDSの構築 (1/3) – @IT
→ こちらはコマンドの詳細などを理解するために作業しながら合わせて読みます。
インストールは yum で自動的に行えるので難しくありません。インストール後のいろいろ設定して運用開始するまでが慣れない操作で大変です。少しずつ、何度も確認して進めて行きたいと思います。
次第〜おおまかな流れ
- Tripwire インストール ← yum で簡単♪
- 2 つのパスワード設定 ← サイト、ローカルの 2 種類
- 設定ファイルの作成 ← テキスト twcfg.txt 作って 暗号化 tw.cfg
- ポリシーファイルの作成 ← 最適化して暗号化 tw.pol
- ベースラインデータベースの作成 ← これで準備完了
- 整合性チェック ← はじめての改ざんチェック
- レポートのチェック ← 整合性チェックでできるファイル
運用を開始するまでには、インストールしてから、設定ファイル tw.cfg、ポリシーファイル tw.pol、ベースラインデータベースの作成、とさらに3つの段階を経ねばなりません。
設定ファイル tw.cfg、ポリシーファイル tw.pol、の違いがイマイチわかりません。調べましょう。さらに、どちらも暗号化剃る必要があり、手順は複雑です。一歩一歩ゆっくり進めて行きたいと思います。
- 設定ファイル → Tripwire の設定を記述。Tripwire 自身について書きます。
- ポリシーファイル → CentOS の改ざん検知対象、その詳細を記述。改ざん検知実行時の振る舞いを書きます。
1.Tripwire インストール 〜 EPEL yum で簡単♪
Tripwire は yum で簡単にインストール可能ですけれども、そのためには EPEL リポジトリが導入済みである必要があります。EPEL リポジトリを入れる方法については、以前の投稿で行っております。
では実際にインストールを行います。
yum --enablerepo=epel install tripwire
インストールされたバージョンは 2.4.1.1-1.el5、サイズは 1.7 M でした。
2.2 つのパスワード設定 〜 サイトとローカル、1つのコマンドで♪
参考サイトを見ておりますと、ソースから configure そして make してインストールした時点で2つのパスワード入力を求められておりました。また、別のサイトでは rpm でインストールした後、「/etc/tripwireディレクトリにあるtwinstall.sh」の実行で設定しておりました。
さて、yum でインストールしましたが、パスワード入力は求められませんでした。ここまでは予想通りです。
[root@oki2a24 ~]# ll /etc/tripwire/ 合計 52 -rw-r--r-- 1 root root 603 12月 17 2008 twcfg.txt -rw-r--r-- 1 root root 46536 7月 27 09:09 twpol.txt [root@oki2a24 ~]#
あら?twinstall.sh がございませんわ?どういたしましょう?でも大丈夫です♪「tripwire-setup-keyfiles」コマンドで、サイトパスフレーズ、ローカルパスフレーズの設定が可能です。
tripwire-setup-keyfiles
ちなみに調べてみましたところ、Tripwire 関連のコマンドは、次のものがあるようです。頭の片隅に置いておきましょう。
- /usr/sbin/tripwire-setup-keyfiles
- /usr/sbin/tripwire
- /usr/sbin/twadmin
- /usr/sbin/twprint
作業に戻りまして、実際の設定風景は次のようになりました。
まずサイトパスフレーズの設定、次にローカルパスフレーズの設定です。
まだ続きまして、設定ファイルにサインニング(Signing configuration file…)するために、サイトパスフレーズの入力を、そしてポリシーファイルにサインニング(Signing policy file…)するために、再びサイトパスフレーズの入力を求められました。
---------------------------------------------- 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 move this file to a secure location and/or encrypt it in place (using a tool such as GPG, for example) 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. Once you have a satisfactory Tripwire policy file, you should move the clear-text version to a secure location and/or encrypt it in place (using a tool such as GPG, for example). Now run "tripwire --init" to enter Database Initialization Mode. This reads the policy file, generates a database based on its contents, and then cryptographically signs the resulting database. Options can be entered on the command line to specify which policy, configuration, and key files are used to create the database. The filename for the database can be specified as well. If no options are specified, the default values from the current configuration file are used.
結果、次の2つのキーファイルが作成されました。
- /etc/tripwire/site.key ← サイトパスフレーズより
- /etc/tripwire/oki2a24.com-local.key ← ローカルパスフレーズより
作業終わってから振り返ってみますと、パスワードの設定時点で、設定ファイルとポリシーファイルの暗号化も行なっているようです。
ですから、この「2 つのパスワード設定」は次とその次の設定ファイルとポリシーファイルのテキスト作成が終わってから行えば、手順が簡略化できたと思います。
3.設定ファイルの作成 〜 テキスト作ってサイトパスフレーズで暗号化し tw.cfg 作る!
3−1.クリアテキストの設定ファイル(twcfg.txt)の作成
インストール時点で基となるとなる設定ファイル twcfg.txt がすでにできておりますので、次の部分のみ修正します。
- LOOSEDIRECTORYCHECKING → 監査対象のディレクトリでファイルの追加/削除などがあるときに、ファイルとディレクトリの変更を両方検知する場合は false
- EMAILREPORTLEVEL → メールで通知するレポートのレベル指定(0~4)
- REPORTLEVEL → レポートの内容を表示する際のレベル指定(デフォルトは3)
最初に挙げた参考ページ以外に、次のページも項目の内容を把握するのに役に立ちました♪ありがとうございます。
では実際に編集していきます。
vim /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/$(HOSTNAME)-local.key EDITOR =/bin/vi LATEPROMPTING =false LOOSEDIRECTORYCHECKING =true MAILNOVIOLATIONS =true EMAILREPORTLEVEL =4 REPORTLEVEL =4 MAILMETHOD =SENDMAIL SYSLOGREPORTING =false MAILPROGRAM =/usr/sbin/sendmail -oi -t
3−2.クリアテキストファイルを基にサイトパスフレーズを使って暗号署名したファイル(tw.cfg)を生成
そして暗号化です♪次はコマンドオプションの意味です。
- -m F, –create-cfgfile → 暗号署名ファイル生成モード
- -c cfgfile, –cfgfile cfgfile → これからつくる暗号署名された設定ファイル名を指定
- -S sitekey, –site-keyfile sitekey → 設定ファイルを暗号署名するときに使用するサイトキーを指定
実際のコマンドです。
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt
コマンドを打ちますと、次のように進みます。キーファイルとしてサイトパスフレーズを指定しましたが、サイトパスフレーズの入力は求められました。
Please enter your site passphrase: Wrote configuration file: /etc/tripwire/tw.cfg
4.ポリシーファイルの作成 〜 既存ポリシーファイルテキストを最適化して、サイトパスフレーズで暗号化、tw.pol を作成♪
4−1.ポリシーファイル最適化スクリプト作成
ポリシーファイルもインストール時点で作成されております。ポリシーファイルは、CentOS のどこを改ざん検知実行時の検査対象にするかを記述します。
この既存のポリシーファイルには問題がありまして、存在しないディレクトリやファイルが対象となっておりましたり、存在するディレクトリやファイルがコメント化されておりましたりします。
そこで、存在しないファイルのチェックを無効に、存在するファイルのチェックを有効にするPerlスクリプトを作成して、ポリシーファイルを最適化いたします。
この最適化スクリプトは、冒頭でも挙げさせていただきました、こちらのページのものを使用させていただきました。随分昔に書かれたプログラムですけれども、問題なく動きました。
早速作ります♪
vim /etc/tripwire/twpolmake.pl
プログラムの中身です。
#!/usr/bin/perl # Tripwire Policy File customize tool # ---------------------------------------------------------------- # 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 twpolmake.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 (<POL>) { chomp; if (($thost) = /^HOSTNAME\s*=\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 (! -s $tpath) { $_ = "$sharp#$tpath$cond" if ($ret == 0) ; } else { $_ = "$sharp$tpath$cond" ; } } print "$_\n" ; } close(POL) ;
ポリシーファイル最適化を実行します。実行後のファイルは twpol.txt.new として別途作成します。
perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt > /etc/tripwire/twpol.txt.new
4−2.最適化したクリアテキストのポリシーファイルを元にサイトパスフレーズを使ってポリシーファイルの暗号署名(tw.pol)を作成
コマンドのオプション説明です。
- -m P → ポリシーファイル作成時に指定
- -c cfgfile, –cfgfile cfgfile → 暗号署名された設定ファイル名を指定
- -p polfile, –polfile polfile → 暗号署名されたポリシーファイルのファイル名を指定
- -S sitekey, –site-keyfile sitekey → 設定ファイルを暗号署名するときに使用するサイトキーを指定
twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new
次のように表示されてポリシーの暗号化ファイルが作成されます。ここでもサイトパスフレーズの入力が求められました。
Please enter your site passphrase: Wrote policy file: /etc/tripwire/tw.pol
5.ベースラインデータベースの作成 〜 ローカルパスフレーズを使って、つまりは初期化です♪
ベースラインデータベースの作成は、これは初期化ともいうそうですが、ファイル改ざん検知実行時にこのベースラインデータベースと比較して改ざんされたか否かを判断するためのものと理解しております。ですので、このベースラインデータベースがありませんと、今までの苦労にはなんの意味もないことになります。
本ブログのサーバはインストール直後の状態ではありません。いろいろなデータが入っております。ですからベースラインデータベースの作成には若干時間がかかることと思います。本来であれば、CentOS インストール直後に行っておくべきかと存じます。
ですが始めるのに遅すぎるということはありません。気にせず、続けることといたしましょう。
コマンドオプションの解説です。
- -m i → データベースの初期化時に指定
- -c cfgfile, –cfgfile cfgfile → 暗号署名された設定ファイル名を指定
実際のコマンドは次です。
tripwire -m i -c /etc/tripwire/tw.cfg
ローカルパスフレーズの入力が求められました。
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/oki2a24.com.twd The database was successfully generated.
時間は 30 秒ほどで終わりました。思ったより短くてホッといたしました。
6.整合性チェック
Tripwire 使用の準備は終わっております。では実際に、改ざん検知実行してみましょう。
まず、コマンドオプションの内容です。
- -m c → 整合性チェック時に指定
- -c cfgfile, –cfgfile cfgfile → 暗号署名された設定ファイル名を指定
実行しました。
tripwire -m c -c /etc/tripwire/tw.cfg
すると次のように結果が表示されました。行頭に「*」がついたものが、改ざんチェックで引っかかったものです。
早速「Tripwire Data Files」で検知されたようです。内容を見てみますと「/var/lib/tripwire/oki2a24.com.twd が追加されている」とのことです。これは、先ほど作成いたしましたベースラインデータベースですね。ですから問題ありません。
Parsing policy file: /etc/tripwire/tw.pol *** Processing Unix File System *** Performing integrity check... Wrote report file: /var/lib/tripwire/report/oki2a24.com-20130727-120039.twr Tripwire(R) 2.4.1 Integrity Check Report Report generated by: root Report created on: 2013年07月27日 12時00分39秒 Database last updated on: Never =============================================================================== Report Summary: =============================================================================== Host name: oki2a24.com Host IP address: 127.0.0.1 Host ID: None Policy file used: /etc/tripwire/tw.pol Configuration file used: /etc/tripwire/tw.cfg Database file used: /var/lib/tripwire/oki2a24.com.twd Command line used: tripwire -m c -c /etc/tripwire/tw.cfg =============================================================================== 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 1 0 0 User binaries 66 0 0 0 Tripwire Binaries 100 0 0 0 Libraries 66 0 0 0 Operating System Utilities 100 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 (/sbin/rtmon) Shell Related Programs 100 0 0 0 Critical Utility Sym-Links 100 0 0 0 Shell Binaries 100 0 0 0 Critical system boot files 100 0 0 0 System boot changes 100 0 0 0 OS executables and libraries 100 0 0 0 Critical configuration files 100 0 0 0 Security Control 100 0 0 0 Login Scripts 100 0 0 0 Root config files 100 0 0 0 Total objects scanned: 12599 Total violations found: 1 =============================================================================== Object Summary: =============================================================================== ------------------------------------------------------------------------------- # Section: Unix File System ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Rule Name: Tripwire Data Files (/var/lib/tripwire) Severity Level: 100 ------------------------------------------------------------------------------- Added: "/var/lib/tripwire/oki2a24.com.twd" =============================================================================== Error Report: =============================================================================== No Errors ------------------------------------------------------------------------------- *** End of report *** Tripwire 2.4 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.
結果が表示されるまでの時間はこちらも 30 秒ほどかかりました。
改ざんチェックの結果を見て、問題ないと判断いたしましたけれども、このままではずっと同じファイルが引っかかったままです。ベースラインデータベースをアップデートする必要がありますが、それはまた別途勉強する予定といたします。
7.レポートのチェック
整合性チェックで改ざんを確認いたしますと、レポートファイルが作成されます。これも、見てみましょう。
まずは、レポートファイルが作られますディレクトリの確認です。
ll /var/lib/tripwire/report/
確かに、レポートファイルが作成されております。
合計 8 -rw-r--r-- 1 root root 6686 7月 27 12:01 oki2a24.com-20130727-120039.twr
では、レポートファイルの中身を見てみましょう。
まずはコマンドオプションです。
- -m r → レポート表示時に指定
- -c cfgfile, –cfgfile cfgfile → 暗号署名された設定ファイル名を指定
- -r report, –twrfile report → 表示するレポートファイルを指定
確認のコマンドは次です。
twprint -m r -c /etc/tripwire/tw.cfg -r /var/lib/tripwire/report/oki2a24.com-20130727-120039.twr
先ほどの整合性チェックと同じ内容が表示されました。
おわりに
これで Tripwire がいつでも使用できます。次に考えるべきは、どこを自動化して、どのようなサイクルでチェックしていって、といった日々の運用です。
Tripwire に限らないと思うですけれども、ファイル改ざん検知は手数がかかりますわね。。。
少し休憩いたしまして、引き続き勉強&実践して行きたいと思います。
以上です。