Tripwire運用の勘所
第9回 Tripwire運用の勘所前回は、Tripwireの導入からレポートの出力までを解説しました。今回は、導入後の運用について説明します。
レポートファイルの確認
レポートファイルは、整合性チェックを行うことで作成されます。まず、このファイルの内容を見ていきましょう。ここでは、テスト用のポリシーファイルで整合性チェックを行って生成されたレポートファイルを例に説明します。
■レポートファイルのどこを見るか?
まずは、前回の復習を兼ねて簡単なポリシーファイルを作成してみましょう。内容は簡単な方がいいと思いますので、次のようなものにします。
/var/tmp/nandemoariというファイルに何らかの変更が発生した場合に通知
|
早速、作成してみましょう。以下の内容のテキストファイルを用意します。
( |
ファイルの作成が終わったら、暗号署名してデータベースを作成後、整合性のチェックを行います(編注)。
編注:暗号署名、データベースの作成、整合性チェックの方法については、前回のTripwireによるホスト型IDSの構築参照。 |
では、作成されたレポートファイルの内容を確認してみましょう。
Note: Report is not encrypted. |
Modifiedの「1」は、変更されたファイルが1つあることを表す。Addedが「1」の場合は、ファイルなどが1つ追加されたことを意味する
チェックを行ったファイルの総数
違反が見つかったファイルの数
変更されたファイル名。その下に詳細が記載されている。サイズやHASH値から、ファイルが明らかに変更されていることが分かる
■ファイルの変更が検出されたら
レポートの内容を確認しても、それからどのようなことが想定されるのか、どのような対応をすべきなのかは分かりにくいでしょう。通常、意図しない変更が行われてもよいと考えられるファイルなど存在しないものです。設定変更など、何らかの意図があり、その事実を把握しているのであれば問題はないでしょう。
まず、何らかの変更が報告されたのであれば、それが正当なものなのか不当なものなのかを判断しなければなりません。不当なものであれば対応が必要になります。最善の対応は、そのホストをネットワークから切り離してしまうことです。その後、どのようなことが原因でファイルが変更されたのかを判断します。
すなわち、プログラムの不具合などを突かれ、不正な侵入・変更が行われてしまったのか、それともFTPでのanonymousログインに対してもPUTを許してしまうような設定ミスによるものなのかということになります。前者はある意味致命的であるため、ホストの再構築を考えなければならないでしょう。後者であれば、本当にFTPに関する設定ミスのみであれば、適切に設定変更するだけで済むかもしれません。いずれにしても、現状の正確な把握をしなければなりません。
判断が難しい面もあります。例えば複数の管理者が存在し、意思の疎通ができていなければ、ある管理者にとっては正当な変更であり、別の管理者にとっては不当な変更と判断されてしまうかもしれません。これは絶対に避けたいものです。このような事態を回避するためにも、IDSのポリシーを考えるだけでなく、運用に関するポリシーもきちんと作成することを強く推奨します。
次に、どのようなファイルが狙われやすく、そのファイルの変更からどのような事態が発生し得るかを考えてみましょう。
Tripwireで用意されているポリシーファイルの中には、コマンドも含まれています。このようなコマンドに関する変更も注意が必要です。トロイの木馬が仕掛けられている可能性があるのです。狙われやすいのが、通常のオペレーションで頻繁に使われるコマンドです。ディレクトリの一覧を表示するlsコマンドなどがそれに当たります。何げない操作によって悪意のあるプログラムを実行してしまい、システムを破壊してしまうといったことが十分に考えられます。
また、先にも挙げたアプリケーションなどの設定ファイルにも注意が必要です。FTPのほかに、分かりやすいところではメールの設定ファイルなどが考えられます。不正中継を許可しない設定であったにもかかわらず、設定が変更されて踏み台になってしまう可能性もあります。単純にメールの送受信ができるからといって「被害はない」などと考えてはいけません。
当然、/etc/passwdファイルなどは要注意です。通常、/etc/passwdファイルは一般ユーザー権限での書き込みを許可しません。/etc/passwdが書き換えられたということは、root権限によるコマンド実行を許してしまっていると考えられるからです。もちろん、一般ユーザー権限での任意のコマンド実行を許してはいけませんが、想定される被害の度合いから考えても、事の重要性は変わってきます。また、起動スクリプトなども狙われることがあります。OSの起動時に実行されるスクリプトで、意図しないプログラムが起動されてしまうかもしれません。
Tripwireは不正アクセスに対してのみ利用するというものではなく、ほかの使い方も考えられます。例えば、アプリケーションの設定変更を行うときにも役立つことがあります。複数の設定ファイルを変更した後、正常に動作しなくなったとします。どのファイルを編集したか忘れてしまったときなど、Tripwireのレポートが役立ちます。ただし、残念ながらどの部分が変更されたのかまでは分かりません(注)。
注:どの部分を変更したのかを把握するには、diffコマンドなどを利用するといいでしょう。 |
さらに、データベースファイルをテキスト化し、siggenコマンドで変更前のファイルのHASH値と現在のファイルのHASH値とを比較することで、元の状態へ戻すことへの手助けとなるでしょう。
ほかにも、アプリケーションを新たにインストールしたりバージョンアップしたときなどに、どのファイルが追加・変更されたのかを把握できます。
データベースのアップデート
整合性チェックで監査対象のファイルに変更が発見されたからといって、必ずしも不正な変更というわけではありません。Web関連のコンテンツファイルであれば、定期的に変更されることもあります。
再度整合性チェックを行うと、また違反が発見されるでしょう。これは当然の結果なのです。これまで説明してきたように、Tripwireは「ある時期に作成された」データベースファイルと、「整合性チェック時」のファイルの内容を比較するのです。つまり、データベースファイルを更新しない限り、何度でも違反として検出され続けるというわけです。
意図的なファイル変更を行った場合は、Tripwireの「データベースアップデートモード」を利用したデータベースのアップデートが必要になります。データベースのアップデートは、作成されたレポートファイルを基に行います。
実際に作業を進めながら説明しましょう。まずは、再度/var/tmp/nandemoariファイルに対する監査を行い、違反が報告されることを確認します。確認したら、tripwireコマンドを以下のように実行します。
# /usr/sbin/tripwire
-m u -c 設定ファイル -p ポリシーファイル -r レポートファイル |
すると、レポートファイルがvi(注)で開かれた状態で表示されます。
注:レポートファイルを開くエディタは、設定ファイルの「EDITOR」で定義されています。 |
Tripwire(R) 2.3.0 Integrity Check Report |
レポートファイルには、のような部分があります。これが変更されたファイルです。ファイル名の前にあるチェックをオン(「x」が入力された状態)にしたまま保存・終了するとデータベースがアップデートされます。なお、保存後にローカルパスフレーズの入力を求められます。
データベースのアップデートが終わったら再度整合性チェックを行い、違反が報告されないことを確認してください。
効率的な整合性チェック
■電子メールを利用した通知
Tripwireでは、整合性チェックの結果を電子メールで通知することも可能です。
前回、電子メールで通知するための設定ファイルやポリシーファイルの記述については説明しました。しかし、これだけでは電子メールで通知されません。整合性チェックの際に、次のようにオプションを指定する必要があります。
# /usr/sbin/tripwire
-m c -M |
電子メールでの通知では、レポートレベルは高くなくてもいいでしょう。違反の有無を確認できるだけでいいからです。違反が検出された際はきちんとレポートの内容を確認し、しかるべき対応を取りましょう。
■定期的なチェック
cronに登録することで、定期的に整合性チェックを行うことができます。しかし、ファイルによっては頻繁に監査(注)したいものや1日1回程度でいいものがあるでしょう。
注:頻度(チェック間隔)には注意が必要です。1分ごとに実行するようにcronへ登録しても、チェックに1分以上かかるようではチェックをしている最中に次のチェックが開始されることになってしまいます。筆者は、このようなチェックを試したことがないのでどのような結果になるか分かりせんが……。 |
前回も説明したとおり、Tripwireではポリシーファイル内のルールブロックごとに整合性のチェックを行うことができます。この機能を利用するといいでしょう。
ルール名「htmlfiles」は10分に1回。それを含めた全ルールは1日1回、午前1時に実施する場合は次のように登録します。
*/5 * * * * /usr/sbin/tripwire -m c -R htmlfiles -M |