はじめに
いよいよSnare Windowsエージェントの独自機能であるファイル整合性監視(File Integrity Monitoring、頭文字を取ってFIM)を使った、ファイルの改ざんチェックについて解説します。
なおこのブログでは簡単のため、Snare WindowsエージェントおよびSnare Windows DesktopエージェントをまとめてSnare Windowsエージェント、更に略して単にSnareと呼んでいます。
FIM(ファイル整合性監視)とは
FIM/RIMおよびFAM/RAMの概要
Snareにはファイル整合性監視(FIM)に加えてレジストリ整合性監視(Registry Integrity Monitoring、頭文字を取ってRIM)もあります。更に、ファイルアクティビティ監視(File Activity Monitoring、頭文字を取ってFAM)/レジストリアクティビティ監視(Registry Activity Monitoring、頭文字を取ってRAM)の機能もあります。
前者のFIMとRIMは、定期的にファイルやレジストリのハッシュ値を計算し、前回の値と比較して、変更があったかどうかを検出するものです。Snareではそれをログの形にしてログサーバーに送信することができます。
後者のFAMとRAMは、Windowsのファイル監査およびレジストリ監査の機能を使って、ファイルやレジストリへのアクセスを監視してイベントログを生成するものです。こちらを使えば、誰が、何を、どのようにアクセスしたのかをリアルタイムで検出できます。
ただし、設定が煩雑になりがちで、ログ量が膨大になりやすいという問題があります。SnareのWeb GUIではチェック対象を指定する際に1か所で分かりやすく設定できるようになっています。ただし、日本語(ワイドキャラクター)を含むパス名を指定することはできません。
FIM(ファイル整合性監視)とFAM(ファイルアクティビティ監視)比較
RIMおよびFAM/RAMについては別の機会に説明します。以下にFIM/RIMとFAM/RAMの違いを分かりやすく表にまとめました。
FIM/RIM | FAM/RAM | |
仕組み | 定期的に指定箇所のハッシュ値を計算し変更を検出 | Windowsのファイル監査、レジストリ監査機能により設定箇所のアクセスを監視しイベントログを生成 |
イベントフォーマット | Snare独自のFIMログ (FIMログの見方を参照) | Windowsイベントログ (イベントID: 4656 – 4663、4690、4691) |
ログ種別名 | FIMLog | MSWinEventLog |
設定方法 | SnareのWeb GUI | SnareのWeb GUI |
制限 | なし | パス名に日本語がある指定はできない |
留意事項 | 頻度高く多数の場所を監視できない | ログ量が膨大になりがち |
リアルタイム検出 | 不可(最短で1分間隔でチェックは可能) | 可能 |
ファイル変更の検出 | 可能 | 中身が変更されたかは必ずしも分からない |
アクセス一般の検出 | 不可 | 各種アクセスを検出可能 |
FIMの必要性について
コンプライアンスの要件として、例えばPCI DSSの要件10.4や11.5などで、重要なファイルが改ざんされていないことを識別できる必要があります。この目的には、FIMが適しています。
システムが侵入を受けた場合やマルウェアへの感染によって、重要なデータが改ざんされる可能性があります。このような場合、攻撃を受けたか、データが改ざんされていないかを判定し、影響範囲を特定し、システムを修復するためにFIMのログデータが役立ちます。
もちろんある時点でのバックアップがあれば、それと逐一比較することで正確な結果が得られます。しかし、タイムリーに結果を得ることが難しいでしょう。また、頻繁にバックアップするにはリソースを大量に必要とします。それに対してFIMは、予め必要なところに網を張った上で、ファイルの内容を圧縮した値を使うので、リソースをさほど使わずに時間をかけずに改ざんチェックが可能となります。
Snare WindowsエージェントでのFIMの設定方法
Snareエージェントのv5.8.1までは、GUIの左側のペインに、常にFile Integrity Monitoringが表示されていました。v5.9.0からは、Log Sourcesの下に移動しましたので、Log Sourcesをクリックして開いてから、File Integrity Monitoringをクリックして開いてください。
ここからFIMの設定方法について説明します。デフォルトでは一つもエントリーが設定されていません。Select this button to add a new Monitor:の右の赤いAdd ボタンをクリックすると、FIMのエントリ設定画面が開きます。
チェックするスケジュールの設定
まず、一番上の「Select the Schedule」がスケジュールの設定で、ファイルのハッシュ値を計算するスケジュールを入れます。Midnight(一日深夜に一回)、Hourly(毎時)、Custom(カスタム)から選択します。Customの場合は、cron形式でスケジュールを設定します。このcron形式では、通常半角スペースで区切られた5つの数字またはアスタリスク * を入れることでスケジュールを設定できます。
その5つのフィールドは、左から分、時、日、月、曜日に対応しており、数字を入れるとその指定された時刻になる度にハッシュ値の計算が走ります。アスタリスクはどの値も当てはまるので、* * * * *とすれば、毎分の意味となります。(ただし、このSnareの設定では、アスタリスク1つで毎分の意味となります。)15分おきの場合は、*/15 * * * *と書きます。具体的な記述ルールは以下の通りです。
- 各フィールドはスペースで区切る
- 複数の値の間はコンマで区切る
- 値の範囲はハイフンを使用して指定する
- 取り得るすべての値を含むには、ワイルドカードとしてアスタリスクを使用する
時間 | 値範囲 |
分 | 0~59 |
時 | 0~23 |
日 | 1~31 |
月 | 1~12 |
曜日 | 0~7(0と7は日曜日) |
Severity Level(重要度レベル)の設定
ここにはSnareからのFIMログのアラートレベル(重要度レベル)を指定します。このブログの第1回、第2回で前提としたSYSLOG(RFC3164)でWinSyslogにログを送信する場合、フォーマットがSyslogなので、Syslogの指定が使われます。
Emergency (緊急)、Alert(アラート)、Critical (重大)、Error (エラー)、 Warning (警告)、Notice (通知)、Info (情報)、Debug (デバッグ)から選択します。重大度が高い方から数字の0~7に対応しています。デフォルトはWarningとなっています。
Syslogのファシリティ(Facility)には、数字の1のuser-level message(1*8=8)が使われ、この重大度の数字(デフォルトのWarningの場合は4)と合計した12(PRI)がMSG部の先頭に入ります。送信されるSyslogのタグ部に入るログ種別は、FIMLogです。
File or Directory(ファイルまたはディレクトリ)の設定
監視対象となるファイルを含むディレクトリへの完全修飾パスを指定します。ディレクトリ内の複数のサブディレクトリを再帰的に指示するにはワイルドカードを使います。この場合、再帰的な指定として配下の最下層のディレクトリまでのファイル全てが対象となりますので、ファイルのチェックに時間がかかる場合があります。指定が過剰にならないように注意が必要です。
Inclusion Format(包含形式)とExclusion Format(除外形式)の設定
包含形式では監視対象に含めるファイル名またはパターンを指定し、除外形式では監視対象に含めないファイル名またはパターンを指定します。* や ? のWindowsのワイルドカードが使えます。包含/除外のファイル名またはパターンは、一つだけ指定可能です。ここにはディレクトリは指定できず、階層を示す¥を含む指定はできません。
特定のファイルを指定する場合には、以下のようにFile or Directoryにディレクトリまでのパスを指定して、ファイル名をInclusion Formatに指定してください。
WinSyslogでFIMのログを受信する
FIMのログを分離して保存する
このシリーズのブログの第二回で説明したように、FIMのログをSYSLOG(RFC3164)でSnareからWinSyslogに送付すると、メッセージのタグ部にログ種別が入ります。WinSyslogで受信しsyslogとして解析すると、syslogプロパティの%syslogtag%にFIMLogの文字が入ります。
そこで%syslogtag%を使ってログ種別がFIMLogのログを、他のイベントログ等と分けて保存しておくと、後々の調査・検索の際に楽になります。
ExcelでFIMのログを分割して見る
例えば、あとでExcelで調査するときも簡単です。ここではSnareで区切文字にVertical Bar ”|”(縦棒)を指定し、WinSyslogのadisconフォーマットでログを保存した場合を考えます。
ExcelでFIMLogだけのログファイルを開く際に、Excelのテキストウィザードで、「カンマなどの区切り文字によってフィールドごとに区切られたデータ」を指定します。次へをクリック後、区切文字として「カンマ、その他で”|”(Vertical Bar、縦棒)」の2つを指定することで、ログをフィールドに分割して見ることができます。
FIMログの見方
フィールドの構成
SnareのFIMログをSYSLOG(RFC3164)フォーマットで送信し、WinSyslogで受信しAdsiconフォーマットで保存時のフィールド構成は以下のようになります。1~7は、WinSyslogが付けたヘッダー情報でカンマ , で区切られており、8以降がSnareのFIMLogの本体で縦棒(Vertical Bar) | で区切られています。
番号 | フィールド | 型 | 説明 |
---|---|---|---|
1 | Generated(Date) | Date | メッセージ受信の日付(YYYY-MM-DD) |
2 | Generated(Time) | Time | メッセージ受信の時刻(hh:mm:ss) |
3 | Reported(Date) | Date | メッセージ送信の日付(YYYY-MM-DD) |
4 | Reported(Time) | Time | メッセージ送信の時刻(hh:mm:ss) |
5 | Hostname | String | 発信元コンピューターのホスト名またはIPアドレス |
6 | Facility | Integer | Syslogファシリティの数値 |
7 | Priority | Integer | Syslogプライオリティ(Severityレベル)の数値 |
8 | SecurityLevel | Integer | 生成されたイベントの Severityレベル (重要度) |
9 | EventTime(Date) | Date | 変更検出日時 (YYYY-MM-DD) |
10 | EventTime(Time) | Time | 変更検出日時 (hh:mm:ss) |
11 | DigestType | String | SHA512 – 使用されるハッシュ アルゴリズム |
12 | EventAction | String | CHANGE、DELETE、RENAME、NEW のいずれか |
13 | ObjectType | String | FILE (RIMの場合は REGISTRY) |
14 | ObjectName | String | 追加、削除、変更、名前変更されたオブジェクトの完全パス名 |
15 | ObjectSize | Integer | 変更後のオブジェクトのサイズ(バイト単位) |
16 | ObjectOwner | String | 変更が検出されたオブジェクトの所有者 |
17 | ObjectMTime | Datetime | 変更が検出されたオブジェクトの変更日時 (YYYY-MM-DDThh:mm:ss) |
18 | ObjectDigest | String | 計算されたダイジェスト (ハッシュ) 値 |
19 | ObjectAttributes | Integer | オブジェクトの属性のビット単位の整数値 |
20 | PrevObjectName | String | 今回の変更前のオブジェクトの名前。以前はオブジェクトが存在しなかった場合は空 |
21 | PrevObjectSize | Integer | 今回の変更前のオブジェクトのサイズ (バイト単位)。以前はオブジェクトが存在しなかった場合は 0 |
22 | PrevObjectOwner | String | 今回の変更前のオブジェクトの所有者。以前はオブジェクトが存在しなかった場合は空 |
23 | PrevObjectMTime | Datetime | 前回のオブジェクト変更日時 (mtime)。以前はオブジェクトが存在しなかった場合は空。(YYYY-MM-DDThh:mm:ss) |
24 | PrevObjectDigest | String | 今回の変更前のオブジェクトで計算されたダイジェスト (ハッシュ) 値。以前はオブジェクトが存在しなかった場合は空 |
25 | PrevObjectAttributes | Integer | 今回の変更前のオブジェクトの属性のビット単位の整数値。以前はオブジェクトが存在しなかった場合は 0 |
この表は「Snare Windows(Desktop)エージェントユーザーガイド」付録F FIMイベントフォーマットを参考に作成しました。
FIMを設定すると対象となるファイルは、Snareに新しいものとして認識されるので、設定直後のチェックではEventActionがNEWのログが生成されます。
エクセルでFIMログをフィールド分割して見る
FIMLogファイルをExcelのテキストウィザードでフィールドに分割して見る際、一行目に以下の行をフィールド名称として挿入することで分かり易くなります。この文字列はタブ区切りでフィールド分けしており、そのままテキストとして貼り付けるだけで、タブで分割されます。
Generated(Date) Generated(Time) Reported(Date) Reported(Time) HostName Facility Priority SecurityLevel EventTime(Date) EventTime(Time) DigestType EventAction ObjectType ObjectName ObjectSize ObjectOwner ObjectMTime ObjectDigest ObjectAttributes PrevObjectName PrevObjectSize PrevObjectOwner PrevObjectMTime PrevObjectDigest PrevObjectAttributes
上記の赤枠のところが、挿入したフィールド名称です。改ざんされたファイルは、EventActionがCHANGEでObjectTypeがFILEのものを探すことで見つけられます。また、ObjectMTimeを見れば、タイムスタンプに現れたファイルが変更された時刻が分かります。
FIMの監視対象の候補
SnareのFIM/RIM/FAM/RAMのホワイトペーパーに、Windowsシステムで監視すべきファイルの場所が載っています。このデータは古いので、現状では対象とならないものも含まれているので、整理すると以下のようになります。
FIMの監視対象候補
%WINDIR%\win.ini |
%WINDIR%\system.ini |
%WINDIR%\System32\*.exe |
%WINDIR%\System32\*.dll |
%WINDIR%\regedit.exe |
%WINDIR%\System32\drivers\etc\hosts |
C:\Users\username\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup |
usernameの箇所は、Startupを使う任意のアカウント名を入れる必要があります。%WINDIR%は、通常はC:\Windowsとなっています。
もちろんこれらは一般的なWindowsでの重要箇所で一般に変更があってはならない場所です。これらに、皆様が独自に重要データとして変更があっては困る場所を監視してください。
監視対象に向かないファイル
監視対象候補とした上げた箇所に近いWindowsシステムの重要ファイルでも、問題ではない変更が頻繁に起こるFIMの対象に向かない場所として、以下が前記ホワイトペーパーに記載されています。
%WINDIR%\System32\LogFiles |
%WINDIR%\Debug |
%WINDIR%\WindowsUpdate.log |
%WINDIR%\iis6.log |
%WINDIR%\system32\wbem\Logs |
%WINDIR%\system32\wbem\Repository |
%WINDIR%\Prefetch |
%WINDIR%\PCHEALTH\HELPCTR\DataColl |
%WINDIR%\SoftwareDistribution |
%WINDIR%\Temp |
%WINDIR%\system32\config |
%WINDIR%\system32\spool |
%WINDIR%\system32\CatRoot |
この中でログファイルで常時監視が必要なものは、Snareで吸い上げて転送することで監視ができます。configはレジストリなので、FIMで監視するべきではありません。その他、ここに挙げられているファイルは、主に監視対象にする意味のない一時的なものです。
対象箇所の指定に当たっての注意事項
例えばチェック対象の指定パスを C:\Windows\* とするのは、対象が多過ぎかつ頻繁に書き換わる箇所も多数あり、正しくチェックできない可能性があります。頻繁書き換わるファイルを避けて対象を絞り込む工夫が必要です。
また、チェックする間隔は間隔内にチェックが必ず終わるようにする必要があります。更に、他のアプリ等との干渉しない時間帯に実行すると、ノイズが減って信頼性の高いチェックができます。通常は一日に一回夜中にチェックするのが適当でしょう。
おわりに
最後までお読みいただき、ありがとうございました。このFIMの機能を活用する場合には、重要で書き換えられてはならないファイルに絞ってチェックすることが肝心です。
次回は、更に詳しくファイルを誰がいつどのようにアクセスしたのかをリアルタイムで検出できる、ファイルアクティビティ監視(File Activity Monitoring)について詳しく説明します。
30日無償で利用いただける評価版を以下のダウンロードリンクに用意しております。簡単に検証が開始できますので、ぜひお気軽にお試しください。