Invalid PTEを無視してはいけない

Using Every Part of the Buffalo in Windows Memory Analysis

All Windows memory analysis techniques depend on the examiner's ability to translate the virtual addresses used by programs and operating system components into the true locations of data in a memory image. In some memory images up to 20% of all the virtual addresses in use point to so called "invalid" pages that cannot be found using a naive method for address translation. This paper explains virtual address translation, enumerates the different states of invalid memory pages, and presents a more robust strategy for address translation. This new method incorporates invalid pages and even the paging file to greatly increase the completeness of the analysis. By using every available page, every part of the buffalo as it were, the examiner can better recreate the state of the machine as it existed at the time of imaging.

ちょっと古い(2007年)が気になる内容なので読んでみた。Windows Memory Analysisツールの大半は Invalid PTEを無視して Valid PTEのみを解析しているけどそれじゃだめだよ、というお話。

PTEの Vビットで Valid/Invalidを判断するが、Invalidな PTEにも実は様々なタイプが存在する。これらは T(Transition)ビットとP(Prototype)ビットで区別できる。(詳しくは インサイド MS WINDOWS 第4版 上 (マイクロソフト公式解説書)を参照のこと。)

このうち意味のあるデータが存在するのは、

  • Page File (V=0, T=0, P=0) => ページアウトしている。ページテーブルに含まれるインデックスが Pagefile内の場所を示す。
  • Prototype (V=0, T=0, P=1) => 複数のプロセスで共有している。
  • Transition (V=0, T=1, P=0) => ページは変更されているが、まだディスクに書き込まれていない。

このペーパーでは DFRWS Forensic Challengeのメモリイメージをサンプルとして調査し、上記の Invalid PTEもちゃんとチェックすると、解析できるページエントリが約 20%は増えると主張しているようだ。(もちろんページアウトしているものは対象外。Valid + Prototype + Transitionの合計で計算している。)

最近のツールは、たとえば HBGaryの Responderなど、Pagefileの読み込みにも対応したものが出てきているが、どのツールも Invalid PTEのチェックをちゃんとやっているんだろうか?このへんの情報お持ちの方、ぜひ教えてくださいませ。