@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

SANS ポスター:Windows Artifact Analysis(22) AppCompatCache

Program Execution カテゴリにある AppCompatCache について確認してみます。この値は SYSTEM レジストリ ハイブの下記キー配下に値として存在しています。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache

 REG_BINARYデータ構造ですので、構造に従ってパースしていく必要がありますが、この詳細については下記資料スライド12,13に記載があります。OS のバージョンよって構造と保存されているデータに差異があります。

Johnny AppCompatCache
https://digital-forensics.sans.org/summit-archives/DFIR_Summit/Johnny-AppCompatCache-the-Ring-of-Malware-Brice-Daniels-and-Mary-Singh.pdf

関連して、このレジストリ値(バイナリ構造)パースするツールとしては、ShimCacheParser があります。出力結果に含まれるタイムスタンプ値は UTC ですので日本時間だと +9 する必要がありますね。

mandiant/ShimCacheParser
https://github.com/mandiant/ShimCacheParser

Windows 7 の場合、先頭 80バイトがヘッダ、その後エントリが続く形になり、エントリサイズは 24byte で一つのレコード。オフセット位置に飛ぶとファイルのパスを確認できます。

ShimCacheParser.py
self.wLength = entry[0]
self.wMaximumLength = entry[1]
self.Offset = entry[2]
self.dwLowDateTime = entry[3]
self.dwHighDateTime = entry[4]
self.FileFlags = entry[5]
self.Flags = entry[6]
self.BlobSize = entry[7]
self.BlobOffset = entry[8]

ShimCacheParser.pyで SYSTEM をパースすると下記のような結果を得る事ができます。

Last Modified,Last Update,Path,File Size,Exec Flag
5/10/14 12:17:16,N/A,C:\Windows\system32\LogonUI.exe,N/A,True

例えば Windows 7 の PC であれば、このレジストリ値のバイナリはシグネチャとして 0xbadc0fee が定義されています。レジストリエディタで開いて見ていただくと EE 0F DC BA となっている事が確認できるはずです。
脱線した話題になりますが、フォレンジックツールによってはレジストリをパースしてからこの値を確認すると、まったく異なる値を表示する場合があるようです。お手元のツールが正しくレジストリファイルをパースできているかをチェックするには良い項目かもしれません。シグネチャパターンで開始されていない場合には、恐らくパースをミスっています。

なお、AppCompatCache はOSをシャットダウンした時に最終的に更新されるため、Liveでの扱いについては配慮が必要になります。

 

Windows Registry: Application Compatibility Cache
http://forensicmethods.com/windows-registry-application-compatibility-cache

Windows AppCompatibility Cache Utility (wacu)
https://www.tzworks.net/prototype_page.php?proto_id=29

appcompatcache.pl
https://github.com/appliedsec/forensicscanner/blob/master/plugins/appcompatcache.pl