Tripwire の設定

2003-8-13 00:00
このエントリーをはてなブックマークに追加

はじめに

Tripwire を利用し、侵入・改竄(かいざん)検知を行ないます。試した環境は、Redhat Linux 7.3 + tripwire 2.3.1-10 です。Redhat 7.3 には、Tripwire のパッケージは含まれているので、インストールされているものとして話を進めます。

Tripwire はファイルやディレクトリの変化を検出するツールです。そのため、リアルタイムな不正アクセスの検出や遮断はできません。
また、改竄されたファイルを元に戻したり、バックアップする機能もありません。ファイルのバックアップは別の手段で行なう必要があります。

Tripwire の初期化

まず最初に、Tripwire を初期化する必要があります。root で /etc/tripwire/twinstall.sh を実行します。

  # /etc/tripwire/twinstall.sh

実行すると、site keyfile passphrase と local keyfile passphrase を尋ねられますので、入力して下さい。その後、再度 site keyfile passphrase の入力を 2 回求められますので、先に入力したパスフレーズを入力して下さい。/etc/tripwire ディレクトリに、いくつかのファイルが生成されたのを確認します。

****-local.key
ローカルキーの格納されたファイル。ローカルキーで保護されたファイルに書き込むにはローカルパスフレーズが必要。**** の部分はローカルホスト名。
site.key
サイトキーの格納されたファイル。Tripwire の設定ファイル・ポリシーファイルの書き込みにはサイトパスフレーズが必要。
tw.cfg
Tripwire の設定ファイル。twcfg.txt をサイトキーで暗号化したもの。
tw.pol
Tripwire のポリシーファイル。twpol.txt をサイトキーで暗号化したもの。
twcfg.txt
暗号化されていない Tripwire の設定ファイル。サンプルとして付属している。
twpol.txt
暗号化されていない Tripwire のポリシーファイル。ファイルやディレクトリのチェックを行なうためのポリシーが記述されている。サンプルとして付属している。

※暗号化されていない *.txt ファイルは、改竄されるおそれがありますので、一通り設定が終わり運用を開始したら削除することをおすすめします。

ポリシーファイルの編集

ポリシーファイル twpol.txt を編集します。サンプルとして付属しているファイルでも、いくつか設定がされています。

  HOSTNAME=localhost; 

となっている部分は、実際のローカルホスト名に変更します。また、明らかにインストールされていないファイルは # をつけてコメント化しておきます。

  # cd /etc/tripwire
  # twadmin -m P -c tw.cfg -p tw.pol -S site.key twpol.txt

実行すると、サイトパスフレーズの入力を求められます。正しいサイトパスフレーズを入力すると、tw.pol ファイルが作成されます。Syntax Error が表示された場合は、ポリシーファイルの記述ミスですので修正して下さい。

ベースラインデータベース

次にポリシーファイルを元に、現時点でのディレクトリ、ファイルの情報を収集して、ベースラインデータベースを作成します。

  # tripwire -m i

tripwire --init としても同じです。実行すると、ローカルパスフレーズの入力を求められます。Redhat Linux 付属のサンプルファイルをそのまま使用した場合、インストールされているパッケージの組み合わせによってはエラーがいくつも出ます。これはポリシーファイルに記述されたチェック対象のファイルやディレクトリが存在しないためです。エラーが出た部分については、ポリシーファイルでコメント化してから、ベースラインデータベースの作成をやり直します。

  ### Warning: File system error.
  ### Filename: /bin/zsh
  ### そのようなファイルやディレクトリはありません
  ### Continuing...
  ### Warning: File system error.
  ### Filename: /bin/zsh-4.0.2
  ### そのようなファイルやディレクトリはありません
  ### Continuing...
  ### Warning: File system error.
  ### Filename: /bin/ksh
  ### そのようなファイルやディレクトリはありません
  ### Continuing...
  Wrote database file: /var/lib/tripwire/local-host.twd
  The database was successfully generated.

データベースファイルは /var/lib/tripwire/ に (ローカルホスト名).twd というファイル名で作成されます。このファイルの内容を確認するには、twprint コマンドを使います。

  # twprint -m d -c tw.cfg -d /var/lib/tripwire/(ローカルホスト名).twd | more

データベースの内容が(大量に)表示されると思います。/bin の下のファイルの所有者、サイズ、権限などの情報が格納されているのが分かると思います。

チェックする

ベースラインデータベースを作成したら、手動でチェックしてみることにします。

  # tripwire -m c

tripwire --check としても同じです。ファイル数が多いので、チェックには時間がかかると思います。しばらくすると結果が表示されますので、Section: Unix File System の項を見て下さい。まだ何もファイルが変更されていないので、No violations. と表示されているはずです。

次にファイルを変更して再検査してみましょう。対象となっているファイルであればどのファイルでもよいのですが、touch コマンドでタイムスタンプを変更して、tripwire でのチェックをしてみて下さい。

  # touch /etc/httpd/conf/httpd.conf
  # tripwire --check
   …(略)…
  Modified:
  "/etc/httpd/conf"
  "/etc/httpd/conf/httpd.conf"

/etc/httpd/conf/httpd.conf ファイルのタイムスタンプが変更されたという結果が表示されました。

データベースの更新

ファイルの変更を検知できることは分かりましたが、設定ファイルの正当な変更も検知されてしまっては困ります。そこで、ベースラインデータベースを更新する必要があります。更新するためには、一度チェックで違反(正当な変更ですが)を含むレポートを作成し、このレポートの内容をデータベースに反映させるという手順で行ないます。tripwire コマンドに、/var/lib/tripwire/report/ ディレクトリにある最新のレポートファイルを指定します。

  # tripwire --update -r /var/lib/tripwire/report/local-host-20030813-012345.twr

するとエディタが開き編集モードになります。デフォルトでは vi エディタが使われます。
画面を下の方にスクロールし、先頭に [x] がついた行を探します。

  Remove the "x" from the adjacent box to prevent updating the database
  with the new values for this object.

  Modified:
  [x] "/etc/httpd/conf"
  [x] "/etc/httpd/conf/httpd.conf"

この [x] のついているファイルについての変更がデータベースに反映されることになります。
この [x] マークを削除すると、データベースには反映されません。
正当な変更を行なったファイルについては [x] マークを残したままファイルを保存・終了します。
保存時にローカルパスフレーズを訊かれるので入力する必要があります。
これでベースラインデータベースファイルが更新されます。

試しに、再検査を行なってみます。

  # tripwire --check
  …(略)…
  No violations.

検査結果に違反が検知されていなければ、変更がデータベースに反映されたということです。

なお、上記の手順を踏まなくても、整合性チェック後にそのままデータベースの更新を行なうこともできます。

  # tripwire --check -I

として行なってください。

ポリシーファイルの更新

検査対象のファイルを追加したり、検査対象から外したり、検査の程度を修正するには、ポリシーファイルを変更する必要があります。しかし、毎回ベースラインデータベースを初期化するのは面倒です。そこで、ポリシーファイルを編集後、直接データベースを更新する機能を使います。

まずはポリシーファイルのテキストファイルを編集します。
このファイルを削除している場合は、twadmin コマンドを使い、暗号化されたポリシーファイルから再作成します。

  # twadmin -m p -c tw.cfg -p tw.pol > twpol.txt

ポリシーファイルの詳しい記述方法はここでは述べませんが、任意のディレクトリ以下を検査対象から外す例を示します。次の例は /var/log 下はファイルは監視するが、 /var/log/tomcat4 以下は監視対象から外すという設定です。

  /var/log       -> $(SEC_CONFIG) ;
  ! /var/log/tomcat4 ;

twpol.txt を修正したら、このファイルをサイトキーで暗号署名する必要がありますが、このときにアップデートモードを使います。

  # tripwire -m p -c tw.cfg -p tw.pol twpol.txt

ローカルパスフレーズとサイトパスフレーズの両方を入力する必要があります。これでポリシーファイルが更新され、データベースも更新されます。ただし、アップデートする前に、検査対象ファイルに変更があった場合は、更新に失敗します。この場合は、更新を LOW モードで行なう必要があります。

  # tripwire -m p -c tw.cfg -p tw.pol -Z low twpol.txt

レポートメールを送信する

Tripwire は、検査結果のレポートをメールで送ることができます。メールに関する設定は、twcfg.txt ファイルで行ない、tw.cfg ファイルを生成します。twcfg.txt を削除している場合は、twadmin コマンドを使い、暗号化された tw.cfg ファイルから生成します。

  # twadmin -m f -c tw.cfg > twcfg.txt
  # vi twcfg.txt

サーバ上で sendmail が動作している場合は、ほとんどの項目はそのままで利用できます。何も違反がなかった場合はメールを送ってこないようにするには、 MAILNOVIOLATIONS の値を false にします。

  MAILNOVIOLATIONS = true

送信先の電子メールアドレスは、ポリシーファイルに記述します。

  (
    rulename = "Tripwire Binaries",
    severity = $(SIG_HI),
    emailto  = root@example.jp
  )

severity の次に emailto = (メールアドレス) の形式で記述します。 severity の行の終わりに “,“(カンマ) をつけることを忘れないで下さい。編集し終わったら、ポリシーファイルを更新します。

  # tripwire -m p -c tw.cfg -p tw.pol -Z low twpol.txt

電子メールでレポートを送るには、Tripwire を -M オプション付きで実行する必要があります。

  # tripwire --check -M

データベースファイルのバックアップ

データベースファイル自体を改竄されたり、削除されてしまっては、tripwire での違反検出ができなくなります。いざというときのために、データベースファイルをフロッピーディスクにコピーしておきます。

  # fdformat /dev/fd0H1440 (フロッピーディスクを1.44Mバイトで物理フォーマット)
  # mke2fs /dev/fd0  (ファイル・システムを構築)
  # mount /mnt/floopy (フロッピーディスクをマウント)
  # cp -p /var/lib/tripwire/*.twd /mnt/floopy/

自動実行

Redhat Linux では、cron による tripwire チェックを毎日行なうようになっています。/etc/cron.daily/tripwire-check ファイルを確認して下さい。/etc/cron.daily/ のファイルが何時に実行されるかは、/etc/crontab ファイルで確認して下さい。

参考文献

Tripwire for Linux

伊原秀明 著 『Tripwire for Linux』/ オライリー・ジャパン / ISBN:4873110416 / 2001年04月 / 2,000円

Tripwire を使いこなす、深く知るためにおすすめの本です。導入から、設定ファイル・ポリシーファイルの詳しい内容など詳しく書かれています。

コメントはまだありません

No comments yet.

Sorry, the comment form is closed at this time.

68 queries. HTML convert time: 1.266 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン