システムのセキュリティ・レベルを維持するためには,サーバーやファイアウオールなどのログ収集とその解析が不可欠である。しかし,ログ解析にはある程度の経験を必要とする。経験を積むためには,意図的にイベントを発生させて,ログを調べてみるのが一番の近道である。どういったイベントが発生した場合に,どのようなログが出力されるのかを把握していれば,実際にセキュリティ・インシデントが発生した場合にも,あわてることなく,適切に解析および対処することができる。
ログ解析には経験が必要
セキュリティ・インシデントの発生を事前に察知したり,発生直後に適切な対処を施したりするためには,日ごろから各種のログを収集し,解析する必要がある。このコラムでもその必要性については何度か解説している。しかし,実践するのはそれほど容易ではない。ログの解析にはある程度の経験が必要だからだ。
ログを解析するためには,あらかじめシステムがログを出力するように設定しなければならない。この設定一つとっても,ログ解析の経験がないと適切に行うことは難しい。システムによって異なるが,出力されるログにはさまざまな種類がある。管理者としては,解析に必要なログだけを保存しておきたいが,解析の経験がなければ,どのログを保存しておくべきかが分からない。
また,システムによってログの出力形式や種類が異なることがある。そのため,あるシステムについて適切な設定方法を覚えたとしても,別のシステムではその知識が役に立たなくなる可能性がある。別のシステムでも適切に設定するためには,ログ解析の経験が不可欠だ。実際に解析した経験があれば,別のシステムにおいても,どのログを保存すればよいのかなどが分かるが,解析した経験がなければ,設定方法を機械的に覚えているだけなので,応用が利かない。
そして最も重要なことは,解析の経験がなければ,適切に解析することが難しいということだ。解析ができなければ,セキュリティ・インシデントが発生した場合に適切な対応を採ることはできない。
例えば「process failed」という文字列がシステムのログに記録されていたとしよう。このログを解析する場合,以下のような判断を行う必要がある。
- これが何のイベントのログであるのか?
- どのプロセスが“fail”したログなのか?
- なぜこのログが出力されたのか?
- ログに記録されたこのイベントは,注意すべきイベントなのか?
そして,「このイベントは問題がないので無視できる」あるいは「緊急に対処する必要がある」などを決定しなければならないのだ。
以上のことは,ログ解析の経験を積んだ管理者ならば容易なことだろう。実際にセキュリティ・インシデントに遭遇し,“苦い”経験をしたことがある管理者ならば,どういったログ出力に注意しなければならないのかなどを,身をもって覚えているはずだ。
しかし,今までログ解析の経験を積んでいない管理者はどうすればよいだろうか。管理しているシステム用のログ解析マニュアルが用意されていれば問題はないが,そのようなマニュアルが必ず用意されているとは限らない。経験を積むには,自分が管理するシステムで,実際にセキュリティ・インシデントが発生するのを待っていなければならないのだろうか――。そこで提案したいのが,意図的にイベントを発生させて,経験を積む方法である。
イベントを発生させた場合に,どのようなログが出力されるのかをあらかじめ試しておけば,実際にセキュリティ・インシデントが発生した場合にも,適切に解析および対応することが可能となる。以下,意図的にイベントを発生させる場合の手順やポイントを簡単に説明する。
意図的にイベントを発生させる
意図的にイベントを発生させる際にまず注意しなければいけないのは,そのイベントが現在提供中のサービスに異常をもたらす可能性があるということである。そのため,イベントを発生させるシステムの管理者や責任者に無断で実行してはならない。必ず了解を取ってから実行しなければならない。
了解を取ったら,以下のような流れで意図的にイベントを発生させ,ログを確認する。
(1)すべてのログを出力する
まず,すべてのログが出力されるようにシステムを設定する。加えて,すべてのログを一つのファイルに記録するように設定したい。通常の運用では望ましくない設定だが,ログを確認する上では,作業をスムーズに行えるので望ましい。なお,実際の設定方法については,OSやアプリケーションによって異なるため,ここでは省略する。
(2)ログを画面に表示し続ける
次に,ログの内容をリアルタイムで見られるように,ログを画面に表示し続ける設定にする。複数種類のログを同時に画面表示させることが難しい環境では,(1)で説明したように,一度一つのログ・ファイルにしてから,それを画面表示する手もある。
(3)イベントを起こす
そして実際にイベントを起こす。経験を積むことが目的なので,できるだけ様々なイベントを起こしたい。例として,以下では「コンソールからシステムへ,一般ユーザー権限でログインする」といったイベントを起こした場合を考える。
(4)ログを確認する
多くの場合,イベントを起こした瞬間にログが出力されるので,(2)を行っていればすぐに画面表示される。出力されたログを確認することで,どのようなイベントが起きればどのようなログが発生するのかを把握できる。
確認すべき内容はイベントによって異なるが,「コンソールからシステムへ,一般ユーザー権限でログインする」場合には,以下の項目を確認する必要がある。
- 「ユーザがログインに成功しました」のような意味のログが記録されているか?
- 何度か実行した場合,いずれの場合でも同じログが出力されているか?
- ログインに成功した場合だけでなく,失敗した場合はどのようなログが出力されているか?
- リモートにログ・サーバーがある場合に,そのサーバーにも画面と同じ内容のログが出力されているか?
- ログ解析ツールを利用して,内容を調べることができるか?
- ログイン対象のシステム以外(ファイアウオールや侵入検知システムなど)からも,同様のログが出力されているか?
単に“生ログ”を残すだけではなく,イベントとログの関係をドキュメント化しておくことも重要だ。“実験”を実施した本人以外も,イベントとログの関係を後日参照できるからだ。具体的には,「誰が」「いつ」「どのようなサービスに」「どのようなイベントを起こし」「どうなったのか」ということを明記した上で,そのとき出力されたログを残しておく。
チェック・リストを作成する
意図的にイベントを起こす際には,あらかじめ以下のようなチェック・リストを作成しておくと便利だ。対象とする環境を明記しておくとともに,どういったイベントを発生させるのかをリストアップしておく。“実験”をスムーズに進められるし,後でドキュメントを作成する際にも役立つ。以下では,インターネット向けにサービスを提供しているWeb サーバー用のチェック・リストを例として示す。
【インターネット向けにサービスを提供しているWeb サーバーのチェック・リスト】
○使用環境
・OS名とバージョン
・Webサーバーのアプリケーション名とバージョン
・登録されているユーザー情報
・ネットワーク設定に関する情報
○メンテナンス作業で生じるイベント
・一般ユーザーのログイン(成功 or 失敗)
・管理者権限を持つユーザーのログイン(成功 or 失敗)
・管理者権限を必要とするコマンドの実行(成功 or 失敗)
・ファイルの追加/変更/消去(成功 or 失敗)
・OSやサービスを再起動させたときのログ
○提供しているサービスに対するイベント
・提供しているコンテンツへのアクセス(成功 or 失敗)
・提供していないコンテンツへのアクセス(成功 or 失敗)
○通常発生しないと思われるイベント
・ポート・スキャンを対象システムに実行
・ぜい弱性スキャナを対象システムに実行
◇ ◇ ◇ ◇ ◇ ◇
以上はあくまでも一例である。運用しているシステムによってチェックするべき項目――すなわち,発生させるべきイベント――は異なるので,それぞれの環境に合わせて作成する必要がある。
また,ログの確認は一度やればよいというわけではない。OSやアプリケーションがバージョン・アップした際には,ログの形式などが変わる場合もあるので,そういった場合には改めて確認する必要がある。
以上のようなチェックリストとログをドキュメントとして作成しておけば,その過程でログ解析の経験を積めるとともに,日々のログ解析の手間を軽減できる。
ただし,作業はこれで終わらないことに注意しなければならない。チェックリストにはないログが出力される場合もあるからだ。その場合には,想定していないイベントが発生した可能性があるので,ただちに調査する必要がある。
調査の結果,ログの原因となるイベントが判明した場合には,そのイベントもチェックリストに追加し,対応するログと併せてまとめておく。このように,
チェックリストの作成→ログの確認→チェックリストの修正
を繰り返すことで,さらにログ解析の経験を積むことができる。
川口 洋(KAWAGUCHI Hiroshi)
株式会社ラック セキュアネットサービス事業本部
hiroshi.kawaguchi@lac.co.jp
IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。