2015年01月25日

NTFSのタイムスタンプ更新条件の検証

 インシデント対応では、いつ、何が起きたのかを調べるために、ファイルやフォルダなどのタイムスタンプを確認し、時系列に整理していきます。

 例えば、パソコンからマルウェアのファイルが発見された場合は、「作成日時」を確認することで、感染日時を推測することができます。 (ただし、タイムスタンプは改竄されている可能性もあるため、1つのファイルのタイムスタンプだけでなく、さまざまな角度から調査を行う必要があります)

 このような時系列調査を行う際には、タイムスタンプが更新される条件を理解する必要があります。
今回は、NTFSにおいて、ファイルやフォルダのタイムスタンプが更新される条件を検証してみました。

NTFSのタイムスタンプの基本

 NTFSでは、4種類のタイムスタンプを記録しています。

タイムスタンプの種類 説明
作成日時
(Birth time)
ファイル/フォルダが作成された日時
最終更新日時
(Modified time)
ファイル/フォルダのコンテンツが最後に更新された日時
最終アクセス日時
(Access time)
ファイルに最後にアクセスした日時
 なお、Windows Vista/2008以降、デフォルト設定でアクセス日時が更新されない仕様に変更されました。
FILEレコード変更日時
(Change time)
ファイルのプロパティ変更など、NTFSのメタデータが変更された日時

 また、ファイル/フォルダは、NTFSのメタデータとして2種類の属性を保持しており、それぞれに上記の4種類のタイムスタンプを記録しています。

属性名 説明
Standard Information属性
($SI属性)
 Explorerなどで表示される属性です。
 Windows APIの関数で、タイムスタンプを簡単に変更できます。マルウェア感染のインシデント対応では、タイムスタンプが改竄されていることがよくあります。
Filename属性
($FN属性)
 一般的なWindowsの操作方法では表示できないタイムスタンプです。
 Windows APIには、こちらのタイムスタンプを変更する関数はありません。そのため、$SI属性と比較すると改竄されにくいという特徴があります。

検証

 どのような操作により、タイムスタンプが更新されるか検証してみました。

検証環境

  • Windows7 Home Premium SP1
  • NTFSのイメージファイルを、OSFmountにて内蔵HDDとしてマウントして検証
  • タイムスタンプは、TSKのistatコマンドにて確認

検証結果

  • ファイルのタイムスタンプ

  • 図.ファイルのタイムスタンプ更新条件一覧
  • フォルダのタイムスタンプ

  • 図.フォルダのタイムスタンプ更新条件一覧

    上記検証結果のPDF版資料は、活動成果ページに登録してあります。

考察

 $FN属性は一般的に改竄されにくいと言われていますが、ファイル名の変更、ファイル移動の操作を行うと、 $SI属性のタイムスタンプが$FN属性にコピーされる仕様となっているため、注意が必要です。

 ファイルのタイムスタンプが改竄されていたとしても、親フォルダの「最終更新日時」を確認することで、 ファイルの作成日を推測できる可能性があります。

 なお、タイムスタンプが改竄されると、Change timeに痕跡が残ります。  「プロパティ変更」でも同様の痕跡となりますが、マルウェアがそのような操作を行う可能性は低いのかなと思っています。

以上
posted by やまと at 15:49| Comment(3) | 実験日誌