tripwire

一応サーバをインターネットに繋いでいると言うことで、侵入されてファイルを改竄されたことを検知できるように、tripwireなんてものを入れてみた。

インストール

/usr/ports/security/tripwire でmakeするだけ。
インストール時に、サイトのパスフレーズとローカルパスフレーズを聞かれるので、入力した内容は覚えておくこと。
この後、勝手にtripwire --initが動くみたい。

最初にやること

  1. ポリシーファイルの修正
    インストールが終わったら、tripwire --checkを行う。Linuxの場合は結構ここでファイルがないよって言うエラーが出たのだが、FreeBSDのportsを使うと結構使えるポリシーファイルができるらしく、何もエラーが出ないかも知れない。(以前にインストールしたものを上書きしてこのアーティクルを書いているので、ひょっとしたら自分でいらない部分を削ったのかも知れない・・・)
    私の場合は、インストールしてから1日たってからcheckを行ったので、以下のファイルの変更が報告された。
    # tripwire --check
    Modified:
    "/etc"
    "/etc/mail/dracd.db"
    "/etc/ntp.drift"
    
    これらのファイルは毎日更新されるので、チェックして欲しくない。そこで、ポリシーファイルを書き換えることにする。
    /usr/local/etc/tripwire/twpol.txt を編集して、rulename = "/etc" の部分を探し、ルール本体の部分に以下の2行を追加する。
      !/etc/mail/dracd.db ;
      !/etc/ntp.drift ;
    
    これで、上記二つのファイルの変更は報告されなくなる。
    さらに、メールで変更を報告させるために、各ruleのところにmailto=の記述を追加する。
    例)
    {
      rulename = "/etc",
      severity = $(SIG_HI)
    }
    
    を以下のように変更する。
    {
      rulename = "/etc",
      severity = $(SIG_HI),
      emailto = root
    }
    
    これを、全てのルールについて記述する。
    この設定ファイルは、実際には署名されたバイナリファイルが使われるので、以下のコマンドでポリシーファイルのアップデートを行う。
    # tripwire --update-policy twpol.txt
    Please enter your local passphrase:
    Please enter your site passphrase:
    
    と思ったらエラーが出て更新できないので、以下で逃げてしまった。(ひょっとしたら、updateしてからupdate-policyすればできるのかな?)
    # twadin --create-polfile twpol.txt
    # tripwire --init
    
    追記:policyファイルの更新時には、--secure-mode lowオプションを追加する必要があった。
    # tripwire --update-policy --secure-mode low twpol.txt
    Please enter your local passphrase:
    Please enter your site passphrase:
    
  2. cronへの登録 以上で設定が終了したので、毎日変更のレポートを送ってくるようにcronに登録する。
    /etc/crontabに以下の行を追加する。(時間はお好みで)
    # periodicを使った方がスマートかもねえ :P
    0	2	*	*	*	root	/usr/local/sbin/tripwire --check --email-report > /dev/null
    

日々の更新

ここまでの設定で、ファイルシステムに変更があるとメールが送られてくるようになる。
ファイルシステムが改竄された場合はあわてて対処すれば良いのだが、通常の使用でもファイルの変更はあり得る。新しいプログラムをインストールするなど、だ。
そう言った変更をそのままにしておくと、毎日変更がレポートされて本当の改竄が発見しにくくなる。
そこで、以下のコマンドでデータベースを更新する。
# tripwire --update --twrfile /var/db/tripwire/report/XXX.twr
Please enter your local passphrase:
Please enter your site passphrase:
XXX.twr の部分は、最新のレポートファイル名を入れる。
このコマンドを実行すると、viが起動する。変更があったファイルが報告されているので、問題なければ[x]の状態で、問題があれば[ ]の状態でファイルを保存すれば、データベースが更新される。

覚えておくと良いコマンド

tripwire --init     データベースの初期化
tripwire --update-policy twpol.txt    ポリシーファイルの更新
tripwire --check    ファイルシステムのチェック
tripwire --update --twrfile XXX   データベースの更新
twadmin --create-polfile twpol.txt    ポリシーファイルの署名
twadmin --create-cfgfile -S site.key twcfg.txt    コンフィグファイルの署名
twadmin --print-polfile     ポリシーファイルのテキスト化
twadmin --print-cfgfile     コンフィグファイルのテキスト化

false@wizard-limit.net