第4章 不測の事態対策
ログ記録による証跡確保とログ自体の漏えい対策
ログ記録
ログ記録は、情報システムを運用する過程で発生した主要なイベントを時系列で記録した ものである。例えば、プログラムやセッションの開始、終了、重要な処理や異常の検出等 が記録される。
目的別に、ログ記録は大きく次のふたつに分けることができる。
- 業務ログ
オペレーティングシステム、アプリケーションプログラム、業務処理の主要なイベントを記録し、障害時の復旧に役立てる。 - セキュリティログ
本人認証、アクセス認可、重要リソースの取り扱い、特権の使用等のイベントを記録し、セキュリティ侵害の兆候の検出、および侵害が生じたのちの証拠収集・解析に役立てる。
個人情報等、保護すべき重要な情報を扱う等の理由でセキュリティ機能を必要としているソフトウェアは、対策の一環として侵害証跡確保のためのログ記録の仕組みを備えるのがよい。
ログ記録がなければ、侵害が起こった際それがどのような過程で進行し、どの程度の被害をおよぼしたかの把握が困難になる。場合によっては侵害の発生そのものを見逃すおそれもある。
セキュリティログの記録内容
ログに記録する項目が不足していると、侵害発生時の分析に役立てられない。その逆に、記録項目が多過ぎてログファイル自体が重要情報漏えいの危険を招くことがある。また、ログファイルへの不正な書き込みを防ぐ手立てを講じていないと、攻撃者の手によって不正アクセスの記録が消されてしまうことがある。
このような点を考慮すると、セキュリティ・ログが備えるべき要件は次のようになる。
(1) ログ記録の契機となるイベント
セキュリティログに記録を書き出すきっかけとすべきイベントには、例えば、次のものがある。
- システムの起動、停止
- 主要ソフトウェア単位の起動、停止
- システム外からの通信の到着
- ユーザのログインの試み
- ユーザのログイン、ログアウト
- アクセス制御対象(情報・機能)へのユーザによるアクセスの試み
- ユーザや通信路からの重要情報の受け入れ
- ユーザ、通信路、ファイル媒体等への重要情報の書き出し
- メモリ、ファイル、通信帯域等、コンピュータリソースの消費量の一定以上の変化 等
(2) 記録する項目
セキュリティログに記録すべき項目には、例えば、次のものがある。
- 生じたイベント
- 発生日時(精密に)
- 通信の相手先を識別する情報
IPアドレス、ポート番号、端末番号、セッションID、
クライアントソフトウェアバージョン番号等 - 処理に使用されたコンピュータアカウントとプロセスID
- 試みられたアクセスの種類と対象の識別子
- 実際に行われたアクセスの種類と対象の識別子
- 入出力された情報の種類と対象の識別子
- コンピュータリソースの消費状況 等
セキュリティログ自体の防護
セキュリティログの内容はそれ自体が重要な情報を含んでいる可能性があり、部外者にアクセスされると都合が悪い。また、システムに侵入した攻撃者は自分自身の痕跡がログに残らないような工作をすることが考えられる。
これらのことから、セキュリティログは不正な読み出しと不正な書き込み・削除からの保護策が必要である。

(1) 不正な読み出しからの保護
ログ記録にはユーザの識別、重要情報の入出力が記録される可能性が高いため、ログ記録の漏えいがセキュリティ問題となり得る。ログインパスワード、クレジットカード番号、個人情報等の重要情報は、セキュリティ侵害事象の分析において必須でないと判断できる場合にはログに記録しないようにする。これらの情報のログ記録が必要である場合は、ログファイルを暗号化して保管する。
暗号化を行わずに読み出し許可として最小限のものを与えるという対策も考えられなくはない。この方法は部外者に対して一定の効力をもつ。ただし、サーバのバックアップオペレータによる無断データ持ち出し等、正規スタッフによる不正行為に対抗できない。
ログファイルの暗号化の際に注意すべきことは暗号鍵の硬直化を避けることである。最も避けるべきことは暗号鍵をソフトウェア内にハードコーディングすることである。複数の設置場所で利用されるソフトウェアの場合、一箇所における暗号鍵の漏えいは、他の設置場所すべてを危険に陥れる。
また、定期的(数ヶ月ないし数年ごと)および随時暗号鍵を別のものに変更できる仕組みをもつ必要がある。変更手段が用意されていなければ、漏えいしているかもしれない暗号鍵を長い間使い続けなくてはならない。また、漏えいが判明した時点ですぐに対抗策を講じられないおそれがある。
(2) 不正な書き込み・削除からの保護
自分の不正行為の痕跡を消すために、攻撃者がログ記録に干渉を試みるおそれがある。ログ記録媒体には、書き換えや削除のできない、追記型記憶装置を用いる、他のコンピュータに送信する、必要最小限の書き込み許可のみを与える等の保護策を施す。
(3) 満杯への対策
多数のリクエストを投入してログ記録を満杯にしてから痕跡を残さずシステムに侵入しようとする手口がある。古い記録を削除して最新の記録を残す、ログが満杯になりそうになったらあらかじめ警報を発する等の対抗措置が必要になることも考えられる。
ログからの侵害の読み取り
セキュリティログの記録は、セキュリティ侵害の兆候や形跡を読み取る活動を行ってこそ役に立つ。ログ記録からの侵害関係情報の読み取りには次の3つの形があり得る。
(1) 自動警報
セキュリティログに記録を格納するのと並行して、プログラムでリアルタイムに統計処理を施し、イベントの発生頻度が予め定めたしきい値を超えたら警報を出す、対抗策を発動する等の対応をさせる。
(2) 定期的な解析
定期的にセキュリティログ内容を解析し、侵害の形跡を見いだす。
(3) 侵害発生時の解析
セキュリティ侵害の発生が明らかになったときに、詳細にセキュリティログを分析し、何が起こったかの詳細を明らかにする。
処理系がもつログ機能の利用
ログ記録の際に比較的多く用いられるものとして、UNIXおよびGNU/Linusの処理系ではsyslogを使用する方法、WindowsではイベントログAPIを使用する方法が知られている。
(1) syslog
- 自由なログメッセージを記録できる
- ローカルコンピュータのみならず、リモートのログサーバにログを記録できる
- ログ記録API: syslog()関数
(2) Windowsイベントログ
- Windows OSがもつイベントログ機能を利用したログ記録。閲覧にはイベントビューア等を利用できる
- あらかじめ定義しておいたイベントメッセージの型紙に、可変パラメータを添付して記録する形態をとる
- ログ記録API: ReportEvent()関数
時計合わせ
複数コンピュータにおける事象の発生順序を的確に追跡するには、記録された時刻が正確であること、すなわちコンピュータの内蔵時計が正確であることが重要だ。
ログ記録を分析する際に障害となるのが、複数コンピュータ間の時計のずれである。コンピュータが内蔵している時計は必ずしも精度が高くなく、定期的に時刻合わせをしないと時刻のずれが分単位で生じることもある。
主要なOSは、NTPプロトコル(またはSNTP)を用いて自動で時刻合わせを行う機能を備えているので、これを用いて定期的に内蔵時計の時刻合わせを行う。
まとめ
侵害の兆候の検知および侵害の事後策のためにセキュリティログを記録する。セキュリティ侵害が発生した際の証跡が十分確保できるような記録を残す。記録されるのは重要情報であるので、ログ自身も十分に保護する。ログ記録からリアルタイムあるいは定期的解析を行い情報を読み取ることによって、侵害への早期対策に活かすことができる。