Tripwireによるホスト型IDSの構築:ゼロから始めるLinuxセキュリティ(8)(2/3 ページ)
ファイルの改ざんに早く気付くことは極めて重要だ。Webコンテンツの改ざんはもちろん、コマンドを置き換えられてバックドアを仕掛けられることも考えられる。Tripwireは、こうした事態への即応体制を整えるための有用なツールだ。
設定ファイルの作成
Tripwireのデフォルトの設定ファイルはtw.cfgで、暗号署名されたファイルです。実際の設定変更には、クリアテキストのtwcfg.txtを使います。つまり、設定ファイルの作成には、次のような段階があります。
- クリアテキストの設定ファイル(twcfg.txt)の作成
- クリアテキストファイルを基に暗号署名したファイル(tw.cfg)を生成
クリアテキストの設定ファイルの作成
設定ファイルには、利用するポリシーファイル名やレポートファイルの出力先、メールで通知するときに利用するSMTPホストの指定などを記述します。
キーワード = 値
という形式で記述し、キーワードは大文字でなければなりません。また、値は「$()」という形式の変数が使えます。
以下に、設定ファイルの例を示します。
# Tripwireの保存場所 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 =/usr/bin/vi # パスフレーズのプロンプト表示を速くするか遅くするかを指定。"true"とすると # メモリ上にパスワードが保管されている時間を短くするため、遅く表示される LATEPROMPTING =true # 監査対象のディレクトリでファイルの追加/削除などがあると、ファイルと # ディレクトリの変更を両方検知してしまうのを防ぐ LOOSEDIRECTORYCHECKING =true # レポートの内容を表示する際のレベル指定(デフォルトは3) REPORTLEVEL =4 # ベースラインデータベースの初期化、整合性チェックなどのメッセージを # user.noticeレベルでsyslogに出力する。/etc/syslog.confをuser.notice # レベルについて/var/log/messagesに出力するように編集する必要がある SYSLOGREPORTING =true # 整合性チェックの際、違反がなくてもメールするか指定する。"true"に # すると通知する MAILNOVIOLATIONS =true # メールで通知するレポートのレベル指定(0〜4) EMAILREPORTLEVEL =4 # メールを送信するプロトコルの指定 MAILMETHOD =SMTP # MTAが動作しているホストをFQDNかIPアドレスで指定 SMTPHOST ="SMTPサーバ" # SMTPのポート番号 SMTPPORT =25
設定ファイルの暗号署名
クリアテキスト(twcfg.txt)による設定を行ったら、このファイルを基に暗号署名したファイル(tw.cfg)を生成しなければなりません。暗号署名を行うには、twadminコマンドを使います。
# /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/twadmin -m f -c tw.cfg
ポリシーファイルの作成
設定ファイルと同様に、ポリシーファイルもクリアテキストのファイルを作成し、これを基に暗号署名したファイルを生成します。
- クリアテキストのポリシーファイル(twpol.txt)の作成
- クリアテキストファイルを基に暗号署名したファイル(tw.pol)を生成
クリアテキストのポリシーファイルの作成
ポリシーファイルを作成するには、まずどのファイルを監査対象とするのか、Tripwire導入の目的と照らし合わせて検討する必要があります。Webサーバのコンテンツ改ざんを検知するなら、コンテンツに関するファイルが監査対象となるでしょう。さらにlsなど、よく使うコマンドも監査対象とした方がよいでしょう。コマンドにトロイの木馬を仕掛けられてしまうことがあるからです。ほかにも、OS起動時にセットされる環境変数の変化にも注意すべきです。/etc/profileや~/.bash_profileといったファイルも重要です。
/etc/tripwireディレクトリに、twpol.txtというファイルがあります。これは、Red Hat Linuxをベースに作成されたサンプルポリシーファイルです。これを参考に作成するとよいでしょう。twpol.txtを見ると、さまざまな記述があって分かりにくいかもしれません。そこで、簡単なポリシーファイルを例に説明します。
@@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;
例として挙げたポリシーの場合、Sample Policy1は「0」、Sample Policy2は「100」ということになります。
emailto
違反が発見されたときに通知するメールアドレスを指定します。
recurse
「true」「false」あるいは-1〜1,000,000の範囲の数値でディレクトリに対する再帰の階層を指定します。「true」(-1)であれば、サブディレクトリやその中のファイルまですべてが監査対象となります(注)。「false」(0)にすると、サブディレクトリ内のファイルは監査しません。
●オブジェクト
監査対象となるファイルやディレクトリを指定します。
●プロパティ
オブジェクトに対してどのようなチェックを行うかを指定します。指定可能なプロパティは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ハッシュ値 |
プロパティ一覧 |
例えば、ファイルのアクセス権をチェックする場合は、
/tmp/test -> +p;
とします。複数のプロパティを指定する場合(注)は、
/tmp/test -> +pinugt;
のように記述します。
各オブジェクトに対していちいち18種類のプロパティを指定するのは困難です。そこで、目的に応じたプロパティの組み合わせを分かりやすい名前で指定できる方法が用意されています。多くのオブジェクトについては、この方法で十分です。
- ReadOnly:読み取り専用ファイル
+pinugtsdbmCM-rlacSHと同じ - Dynamic:変化するファイル
+pinugtd-srlbamcCMSHと同じ - Growing:サイズが大きくなるが小さくならないファイル
+pinugtdl-srbamcCMSHと同じ - IngnoreAll:すべての属性を無視する
-pinugtsdrlbamcCMSHと同じ - IgnoreNone:すべての属性を監査する
+pinugtsdrbamcCMSH-lと同じ - Device:デバイスファイル
+pugsdr-intlbamcCMSHと同じ
前述したように、あらかじめ用意されているtwpol.txtをベースにして設定するのがよいでしょう。ただし、これはあくまでもサンプルポリシーなので必ずしも自分の環境に適しているわけではありません。導入初期段階は、このポリシーファイルの調整に追われることが予想されます。一度で環境に適したポリシーファイルを作成するのは非常に困難です。徐々にで構わないので、自分の環境に適したものへと根気よく調整していきましょう。
ポリシーファイルの暗号署名
次に、クリアテキストで作成したポリシーファイルを暗号署名します。設定ファイルと同じく、twadminコマンドを利用します。ここでは、あらかじめ用意されているサンプルポリシー(twpol.txt)を利用します。
# /usr/sbin/twadmin -m P -S site.key twpol.txt Please enter your site passphrase: Wrote policy file: /etc/tripwire/tw.pol
これで、twpol.txtを基に暗号署名を施したtw.polが生成されます。つまり、Tripwireが解釈可能なポリシーファイルが作成されたということです。
twadminコマンドのオプションのうち、ポリシーファイルの作成に使用するものを以下に示します。なお、設定ファイル作成時に紹介したものは省略しています。
- -m P
ポリシーファイル作成時に指定 - -p ポリシーファイル、--polfile ポリシーファイル
暗号署名されたポリシーファイルのファイル名を指定 - -Q、--site-passphrase
ポリシーファイルの署名に、サイトキーとともに指定のパスフレーズを使用する - -e、--no-encryption
ポリシーファイルを暗号署名せずに作成する
暗号署名されたポリシーファイルの確認方法は以下のとおりです。
# /usr/sbin/twadmin -m p -c tw.cfg -p tw.pol
Copyright © ITmedia, Inc. All Rights Reserved.