1. セクションの定義
ポリシーファイルをセクションによって区分させる。セクションは、@@sectionというディレクティブ【注】によって定義され、テンプレートではGLOBALとFSの予約された2つのセクションが定義されている。
| ディレクティブ名 | 内容 |
|---|---|
| @@section | セクションを定義する。予約されているセクション名にはGLOBALとFSがある。GLOBALは、ポリシーファイル全体に適用されるセクションを意味する。また、FSはUNIX系OSの場合に指定するセクション名で、OSによって異なる(例えばWindowsの場合はNTFSなどを指定) |
| @@ifhost @@else @@endif |
ifhost、else endifでホスト名による条件分岐を指定する。||により複数のホスト名を指定できる |
| メッセージを標準出力(STDOUT)に出力。引数には出力するメッセージを指定する。主にデバッグ時に利用される | |
| @@error | メッセージを標準出力(STDOUT)に出力し、終了する。引数には出力するメッセージを指定する。主にデバッグ時に利用される |
| @@end | ポリシーファイルの終わりを示す。@@end以降は無視する |
| 表1 ディレクティブ名 | |
・GLOBALセクション(@@section GLOBAL)
GLOBALセクションには、ポリシーファイル全体に適用される変数が指定されている。例えば、RedHat Linux RPM付属のテンプレートの場合、以下のような変数が定義されている。なお、ポリシーでは、#から行末まではコメントとして扱われる。
TWROOT="/usr/sbin"; # Tripwireのトップディレクトリ TWBIN="/usr/sbin"; # Tripwireの関連プログラムの格納先 TWPOL="/etc/tripwire"; # ポリシーファイルの格納先 TWDB="/var/lib/tripwire"; # Tripwireデータベースの格納先 TWSKEY="/etc/tripwire"; # サイトキーの格納先 TWLKEY="/etc/tripwire"; # ローカルキーの格納先 TWREPORT="/var/lib/tripwire/report"; # レポートの格納先 HOSTNAME=atmarkit.example.co.jp; # このホストのホスト名
・FSセクション(@@section FS)
FSセクションには、FSセクション内で利用する変数やルールが指定される。ルールには、Tripwireの監査対象となるファイルや監査内容などを定義する。なお、ルールの詳細については、後述の「3. ルールの定義」で説明する。
2. 変数の定義
各セクションには、GLOBALセクションで説明した変数や、例えば以下のような変数が定義されている。これらの変数値は、環境に応じて必要であれば変更する。なお、変数値に空白やスラッシュ(/)が含まれる場合は、ダブルクオート(")で囲む必要があるので注意すること。例えば、TWROOT変数には/usr/sbinという値がセットされている。
TWROOT = "/usr/sbin" ; SEC_CRIT = $(IgnoreNone)-SHa ; SEC_SUID = $(IgnoreNone)-SHa ; SEC_BIN = $(ReadOnly) ; SEC_CONFIG = $(Dynamic) ; SEC_LOG = $(Growing) ; SEC_INVARIANT = +tpug ; SIG_LOW = 33 ; SIG_MED = 66 ; SIG_HI = 100 ;
また、上記のSEC_CRIT変数には、$(IgnoreNone)などのような置換変数が指定されている。置換変数は「$(変数名)」の形式で指定し、定義済みの変数を値に置換させたい場合に指定する。例えばSEC_CRIT変数には、「IgnoreNone変数の値-SHa」がセットされる。
なお、変数名の中には、表2に示すとおり特殊な意味を持つ予約変数がある。これらは複数からなるプロパティ値(後述)を、分かりやすい変数名で利用できるようにしたものである。
| 変数名 | 内容 |
|---|---|
| ReadOnly | 読み取り専用ファイル プロパティ値+pinugtsdbmCM-rlacSHと同じ意味を持つ |
| Dynamic | 可変ファイル プロパティ値+pinugtd-srlbamcCMSHと同じ意味を持つ |
| Growing | サイズが増加するファイル プロパティ値+pinugtdl-srbamcCMSHと同じ意味を持つ |
| Device | デバイスファイル プロパティ値+pugsdr-intlbamcCMSHと同じ意味を持つ |
| IgnoreAll | すべてのプロパティを無視する プロパティ値-pinugtsdrlbamcCMSHと同じ意味を持つ |
| IgnoreNone | すべてのプロパティを有効にする プロパティ値+pinugtsdrbamcCMSH-lと同じ意味を持つ |
| 表2 特殊変数 | |
3. ルールの定義
FSセクションなどで定義されているルールでは、監査対象となるファイルの指定やどのような整合性チェックを行うかを定義する。一般的な書式は次のとおりとなる。
(ルール属性)
{
オブジェクト名1 -> 置換変数1;
オブジェクト名2 -> 置換変数2;
オブジェクト名3 -> 置換変数3 (ルール属性);
オブジェクト名4 -> プロパティ1;
オブジェクト名5 -> プロパティ2;
オブジェクト名6 -> プロパティ3 (ルール属性);
(以下必要分を定義)
}
{ }内が1つのルールとなり、最初の( )でそのルールに適用されるルール属性を定義する。
・ルール属性
ルール属性には、表3で示すような値をセットする。{ }の前に定義した場合、属性はそのルール全体に適用され、オブジェクト名に指定した場合は、そのオブジェクトのみに適用される。
例えば、Webページ関連の監査を行うために、ルール名「Web contents」を新たに定義したい場合は、以下のように追加すればよい。
( rulename = "Web contents", emailto = [email protected], severity = 100 ) { /www/htdocs -> $(ReadOnly) (recurse = true); }
( )内がこのルールの属性で、rulenameでWeb contentsというルール名を定義し、emailtoでこのルール内で違反が発生した際の連絡先を指定し、severityで重用度を100に設定している。また、オブジェクトごとの属性指定として、Webコンテンツが格納されているディレクトリの/www/htodcsに対しては、recurse = tureで/www/htdocs以下のすべてのファイルやディレクトリを監査対象とするように指定している。
| 属性名 | 意味 |
|---|---|
| rulename | ルール名を指定する |
| emailto | ルール違反が発生した際の通知先メールアドレス-M (--email-report)オプションで使用される |
| severity | 重要度を指定する。0から1000000の範囲で指定(デフォルトは0) |
| recurse | 監査対象ディレクトリ内を再帰的にチェックする階層を指定 true(-1)、false(0)または、数値(-1から1000000)を指定 trueは、ディレクトリ内のすべてのファイルやサブディレクトリを再帰的にチェックし、逆にfalseはチェックしない。 |
| 表3 ルール属性 | |
・オブジェクト名とプロパティ
オブジェクト名には、主に監査対象となるファイルを定義し、プロパティにはオブジェクトに対する実際の監査内容を定義する(表4)。
| 属性名 | 意味 |
|---|---|
| - | プロパティをチェックしない |
| + | プロパティをチェックする |
| a | アクセス時刻(ファイルへのアクセス時刻が変更) |
| b | ブロック割り当て番号 |
| c | iノードの時刻 |
| d | iノードが存在するデバイスのID |
| g | ファイルのグループID(gid) |
| i | iノード番号 |
| l | サイズが増加したファイル |
| m | 修正時刻(ファイルの修正時刻が変更) |
| n | リンク番号(iノードの参照回数) |
| p | ファイルパーミッション |
| r | iノードによって示されるデバイスID |
| s | ファイルサイズ |
| t | ファイルタイプ |
| u | ファイルの所有者ID(uid) |
| C | CRC-32ハッシュ値 |
| H | Havalハッシュ値 |
| M | MD5ハッシュ値 |
| S | SHAハッシュ値 |
| 表4 プロパティ | |
オブジェクトとプロパティの例を以下にいくつか示す。
/etc -> +p; /etc -> -p; /etc -> +pinugtsdbmCM-rlacSH;
上記はいずれも/etcディレクトリに関する設定例だが、1行目は/etcディレクトリのパーミッション(p)をチェックする(+)ことを示している。逆に、2行目のルールはチェックしない(-)ことを示している。
3行目は、プロパティを複数指定した場合の例で、p、i、n、u、g、t、s、d、b、m、C、Mはチェックするが、-以降のr、l、a、c、S、Hはチェックしないことを示している。
ただし、通常の運用では、こういったプロパティを個別指定するのではなく、表2に示した特殊変数の方を指定するのがよいだろう。ちなみに3行目のプロパティ値 +pinugtsdbmCM-rlacSHは、ReadOnly変数が同じ意味を持つ。
/etc -> $(ReadOnly);
・オブジェクトをチェック対象外にしたい場合
特定のオブジェクトをチェック対象外にしたい場合、オブジェクト名の前にエクスクラメーションマーク(!)を付け加えればよい。
! オブジェクト名 ;
例えば、Webコンテンツディレクトリ/www/htdocs内のwhatsnew.htmlファイルのみチェック対象外としたい場合は、以下のとおり指定すればよい。
{
/www/htdocs -> $(ReadOnly) (recurse = true);
!/www/htdocs/whatsnew.html
}
クリアテキストのポリシーファイルを修正したら、ポリシーファイルの暗号化・署名、およびデータベースの更新を行う。ポリシーの暗号化・署名は、前回説明したとおりとなる。
# twadmin -m P twpol.txt Wrote policy file: /etc/tripwire/tw.pol
上記の例では、クリアテキストのポリシーファイル(twpol.txt)を基に、tw.polの暗号化・署名されたポリシーファイルを更新している。更新が完了したら、新しいポリシーファイルの内容をチェックするのを忘れずに行うこと。
# twadmin -m p
Copyright © ITmedia, Inc. All Rights Reserved.