12章
1 実行履歴の解析
実行履歴調査の着眼点
インシデントレスポンスでは、調査対象PC内での不審なプログラムの実行日時などから、調査の起点となる日時を特定することが非常に重要となります。その日時を起点として、外部通信やファイル作成など、不審なアクティビティのタイムラインを追跡調査することが、インシデントの全容を解明する近道となります。
例えば、「永続化されたマルウェアの調査」の章で紹介したRunキーの解析などから、不審な実行ファイルが発見できた場合は、次のステップとしてその実行履歴調査が必須となるでしょう。
一方、不審なアクティビティが発覚しているにも関わらず、それに関係するマルウェアなどの不審なファイルが発見できない場合があります。その場合、実行履歴を調査して、業務と関係のないプログラムが実行されていないかなどを確認する必要があるでしょう。
実行履歴は、実行ファイル自体が攻撃者の証拠隠滅工作などにより削除されても、それには影響なく保存されています。また、マルウェアや攻撃者が意図的に実行履歴を削除するケースもありますが、それほど多くは観測されていません。加えて、実行履歴の解析方法は比較的容易です。このような面から考えても、非常に有効な調査方法といえます。
実行履歴が記録されるアーティファクト
プリフェッチファイル
プリフェッチ(Prefetch) は、Windows XPから導入された、PCのパフォーマンスを向上させるための仕組みです。プリフェッチファイルは、プリフェッチ機能により生成されるシステムファイルであり、デジタルフォレンジックの調査対象となるアーティファクトです。
プリフェッチの具体的な仕組みは、以下のとおりです。
- 各種実行ファイルの起動時、初期の処理中にメモリに展開するリソース(DLLやデータファイルなど)を、実行ファイル個別にプリフェッチファイルへ記録する。
- 次回、同じ実行ファイルが起動された際は、プリフェッチファイルを参照して必要なリソースを事前にメモリ上に展開しておき、起動時間を短縮する(複数のアプリケーションでよく使用されるリソースを分析して、システム起動時に予測的に展開する場合もあり)。
このように、プリフェッチファイルには、実行ファイルごとの、起動時に必要となるリソース情報が記録されています。同時に、起動日時の履歴も記録されます。そのため、プリフェッチファイルは、デジタルフォレンジックにおいて、実行履歴を調査するアーティファクトとして重視されています。
実際にプリフェッチファイルが作成されるシーケンスは、以下のとおりです。
- ユーザーのダブルクリックや、Runキーによる自動起動などで実行ファイルが起動される。
- プリフェッチのシステムプロセスが、実行ファイルが起動されてから10秒間の処理(DLLファイルの読み込みなど)を監視する。
- 10秒間の監視を終了すると、プリフェッチファイル(拡張子「.pf」)を作成して、読み込まれたDLLファイル・データファイル等のリソース情報を、実行ファイルパスや実行日時とともに記録する(2回目以降の実行時は追記される)。
プリフェッチファイルは、「C:\Windows\Prefetch 」フォルダ配下に作成されます。

プリフェッチファイルのファイル名は、以下の形式になります。
<実行ファイル名>-<16進数表記のハッシュ値(8文字)>.pf
例: メモ帳(notepad.exe)の場合 --> NOTEPAD.EXE-B28CC291.pf
16進数表記のハッシュ値(8文字)>実行ファイル名>
ファイル名に付加されるハッシュ値は、実行ファイルパスや実行時のコマンドライン引数を元に生成されます。そのため、同一の実行ファイルであっても、異なるファイルパスや異なる引数により実行された場合は、それぞれ個別にプリフェッチファイルが生成されます。
プリフェッチファイルは、新たな実行ファイルが起動されるたびに増えていきます。ただし、ファイル数には制限があり、Windows 7までは最大128ファイル、Windows 8以降のOSでは最大1,024ファイルまでとなります。
プリフェッチファイルには、次のような情報が記録されます。
- 実行ファイル名
- 実行ファイルパス
- 実行回数
- 実行日時(直近の実行を含めて、過去8回分)
- 直近実行時の使用リソース情報(DLLファイル名、データファイル名など)
プリフェッチファイルの記録内容はバイナリ形式になっており、CDIR-Aなどの解析用ツールによって、CSV形式等の可読性が高いデータにパースする必要があります。
次の図は、商用フォレンジックツールの「X-Ways Forensics」により、メモ帳アプリ(notepad.exe)を実行した際のプリフェッチファイルをパースした例です。このパース結果より、notepad.exeは過去4回実行されており、直近の実行時(2024/10/09 18:13:47)には「SECRET-MEMO.TXT」というファイルを開いたことが確認できます。

具体的な解析方法については、次節「プリフェッチのファストフォレンジック」で詳しく紹介します。
なお、プリフェッチ機能は、全ての環境で必ずしも有効になっている訳ではありません。Windows10~11ではデフォルトで有効になっていますが、Windows Server 2019では無効になっています。プリフェッチ機能の有効/無効は、以下のレジストリキーで設定します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\EnablePrefetcher

上記の「値」(EnablePrefetcher)のデータ(0~3の数値)により、以下のように設定されます。
- 0 : プリフェッチが無効(Windows Server 2019のデフォルト)
- 1 : 通常のアプリケーションプログラム起動のプリフェッチが有効
- 2 : OSブート時の起動プログラムのプリフェッチが有効
- 3 : すべての起動プログラムのプリフェッチが有効(Windows10~11のデフォルト)
プリフェッチファイルが存在しない場合は、上記の設定で無効になっている可能性があります。
ShimCache(AppCompatCache)
ShimCacheと呼ばれるレジストリキーも、PC内の実行ファイルに関する情報が記録されるアーティファクトです。概要は以下のとおりです。
- レジストリファイル
C:\Windows\System32\config\SYSTEM
- レジストリキー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache※ キー名から「AppCompatCache」とも呼ばれる
ShimCacheの記録内容は、Windows OSのバージョンの相違による互換性問題の回避機能(Shim)が必要な実行ファイルに関する情報です。逆にいえば、互換性に問題がない実行ファイルの情報は記録されません。Shimが必要となるのは、たとえば、過去のバージョンのOSでビルドされたプログラムを、新しいバージョンのOSで実行する場合などです。
ShimCacheには、複数の実行ファイルの情報が、バイナリ値で1つの「値」(値の名前:AppCompatCache)にまとめて記録されるため、解析ツールでパースする必要があります。パースにより、次の情報が取得できます。
- 実行ファイルパス
- 実行ファイルの最終更新日時(実行日時ではないことに注意)
<ShimCacheの例>

<ShimCacheのパース例(CDIR-A)>

ShimCacheには、すべての実行ファイルが記録されるわけではなく、また実行日時は取得できません。しかし、プリフェッチが無効な環境や、プリフェッチファイルが意図的に削除された場合の補完的な情報として、不審な実行ファイルの有無を調査することができます。実行ファイル自体が削除されていても、ShimCacheに記録された情報が残っている場合もあります。
AmCache
AmCache と呼ばれるアーティファクト(C:\Windows\AppCompat\Programs\Amcache.hve)には、PC内に存在する、もしくはかつて存在していた一部の実行ファイルについて、ファイルパスとハッシュ値(SHA-1)が記録されています。
Microsoft社は、AmCacheに関する仕様を公開しておらず、記録される実行ファイルの条件などはわかっていません。しかし、AmCacheに記録される実行ファイルは、少なくとも現在もしくは過去において、PC内に存在したものであることが確認されています。
AmCacheに不審なファイルの情報が記録されていた場合、特にそのファイルが削除されているケースでは、ハッシュ値による悪性判定など、多くの情報を調査することができます。AmCacheは、レジストリファイルと同様にハイブ形式で記録されています。CDIR-Aなどの解析ツールでパースできますので、他のアーティファクトと併せて、必ず内容を調査しましょう。
<AmCacheのパース例(CDIR-A)>

UserAssist
UserAssistと呼ばれるアーティファクトは、GUIから実行されたプログラムの実行履歴です。具体的には、エクスプローラーから実行されたプログラムと考えてよいでしょう。これには、デスクトップのショートカットやWindowsのスタートメニューから起動した場合も含まれます。マルウェア等のプログラム内部から起動された場合や、コマンドプロンプトやPowerShellから起動された場合は記録されません。
UserAssistは、各ユーザー別に記録されます。記録されるファイルは、各ユーザープロファイルに存在するレジストリファイルの「NTUSER.dat」です。インシデントレスポンスにおいては、侵害を受けたPC上で、攻撃者が遠隔操作等によりGUIからプログラムを実行した場合、UserAssistにその情報が記録されている可能性があります。また、犯罪捜査や内部不正調査では、被疑者や不正行為者が使用したPCを調査して、関係するアプリケーションの実行履歴を明らかにする場合などに役に立つでしょう。
UserAssistの概要は以下のとおりです。
- レジストリキー
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\UserAssist
- 記録される内容
- 実行ファイル名(Windowsのエクスプローラーから起動されたアプリケーションの実行ファイル名)
- 最終実行日時
- 実行回数
<UserAssistの記録例>

UserAssistキーの各「値」の名前が、ROT13(換字式暗号)で暗号化された実行ファイル名(フルパス)です。 上記例の場合、「値」の名前が、
P:\PQVE-N\pqve-nanylmre.rkr
となっているところを、ROT13で復号すると、
C:\CDIR-A\cdir-analyzer.exe
となり、実行ファイル名とフルパスがわかります。なお、ROT13は簡易な暗号方式ですので、インターネットで検索すると多くの復号ツールが見つかります。
「値」のデータには、「値」の名前で示される実行ファイルの実行回数や最終実行日時などがバイナリデータ形式で記録されます。
UserAssistのパースや復号には、「永続化されたマルウェアの調査」の章で紹介したRegRipperなど、多くのレジストリ解析ツールが対応しています(CDIR-Aでは、UserAssistは抽出対象外)。
以下は、RegRipperによる、UserAssistのパースと復号の例です。
<実行コマンド>
rip -p userassist -r sales33_NTUSER.dat
<実行結果>
Launching userassist v.20170204
UserAssist
Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist
LastWrite Time 2021-02-19 05:01:33Z
{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}
2021-05-21 04:56:04Z
Microsoft.Windows.Explorer (6)
2021-03-23 07:07:30Z
windows.immersivecontrolpanel_cw5n1h2txyewy!microsoft.windows.immersivecontrolpanel (6)
2021-03-23 06:56:04Z
C:\Users\sales33\tmp\GUI_A86.exe (1)
2021-03-23 06:54:32Z
{F38BF404-1D43-42F2-9305-67DE0B28FC23}\regedit.exe (1)
実行結果>実行コマンド>