14章
2 Shimcache/Amcache/WMIの解析
Windows PC内に記録される実行履歴について
前々章の「マルウェアの実行履歴調査」では、プログラムの実行履歴を記録しているアーティファクトとして、プリフェッチファイルをメインに、具体的な調査方法を紹介しました。ここでは、その章でも簡単に触れたShimcacheとAmcacheについて、具体的な調査方法を紹介します。加えて、Windowsの強力なシステム管理ツールであるWMIを悪用した不正プログラムの実行痕跡についても、調査方法を紹介します。
プリフェッチファイルには、PC内で実行されたプログラムの実行ファイルパス、実行日時、実行回数、使用リソースなど、インシデントレスポンスにおいて有用な実行履歴の情報が豊富に格納されています。一方、プリフェッチファイルは一般ユーザーにもアクセス権があり、証拠隠滅を意図する攻撃者には、容易に削除されてしまいます。
ここで紹介するアーティファクト(Shimcache/Amcache/WMI)は、稼働中のOSによって保護されており、プリフェッチファイルのように簡単に削除はできません。改ざんもまた困難です。さらに、プリフェッチファイルには存在しない情報(例:不正ファイルのハッシュ値)も取得できる可能性があります。プリフェッチファイルが削除されていない場合でも、併せてこれらアーティファクトの調査を推奨します。
なお、いずれのアーティファクトも、CDIR-C・Aの保全・解析対象アーティファクトです。
Shimcache(AppCompatCache)の調査方法
Shimcacheの概要
Shimcacheは、レジストリファイル「SYSTEM」内のレジストリキーに記録されます。なお、Shimcacheは、記録されるレジストリキーの名称から「AppCompatCache」とも呼ばれています。記録されるアーティファクトの詳細は次のとおりです。
- レジストリファイル
C:\Windows\System32\config\SYSTEM
- レジストリキー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache
Shimcacheは、Windowsがアプリケーションを実行した際に、その実行ファイルに関する情報(パスやタイムスタンプなど)をキャッシュとして記録する仕組みです。この機能は、もともとアプリケーションの互換性を確保するための「Shim(シム)」と呼ばれる中間層の仕組みの一部として設計されていますが、実際には互換性に関係なく幅広い実行ファイルが記録対象となります。そのため、デジタルフォレンジックでは、「過去に実行された可能性のあるファイル」の証跡として利用されます。
ただし、Shimcacheにはすべての実行ファイルの情報が記録されるわけではなく、また実行日時は取得できません。プリフェッチファイルが作成されていない場合や削除されている場合、補完的な情報として不審な実行ファイル有無の調査に活用されています。
Shimcacheには、複数の実行ファイルの情報が、バイナリ値の「値(Value)」として1つのキーにまとめて記録されるため、解析ツールでパースする必要があります。
- Shimcacheバイナリ値の記録例(Windows標準のレジストリエディタ―で表示)

CDIR-AにはShimcacheのパーサーが含まれており、バイナリ値で記録された実行ファイルの情報を、次の図のようにリスト化できます。
- Shimcacheのパース例(CDIR-A)

CDIR-AによるShimcache解析手順
CDIR-AでShimcacheのパースを行う際は、コマンドラインからパーサーのshimcache.exe を実行します。コマンドのパラメータとして、パース結果の出力フォルダとレジストリの保全フォルダを指定します。パース結果は、出力フォルダの「shimcache_output.csv 」ファイルへ保存されます。
実行するコマンドは次のとおりです。
shimcache.exe -o [出力先フォルダ ] [入力となるレジストリの保全フォルダ]
例 > shimchache.exe -o C:\CDIR-A_out\Shimcache C:\pc-sales01_2022xx\Registry
※ CDIR-Cで保全作業を行った場合、Shimcacheが記録されるレジストリファイル「SYSTEM」は「Registry」フォルダに保存されます。
パース結果のCSVファイルには、次の項目が出力されます。
ComputerName: 保全したPCのコンピュータ名
Path: Shimcacheにキャッシュされた実行ファイルのフルパス
LastModified: 実行ファイルの最終更新日時(※実行日時ではないことに注意)
TimeZone: 最終更新日時のタイムゾーン
Flag: 実行フラグがTrueの場合、「Executed」と表示
※ Flag は、過去に対象プログラムが実行されていた場合に設定されることが経験的に知られていますが、詳細情報は公開されていません。あくまでも参考情報として扱う必要があります。
CacheEntryPosition: Shimcacheの値の中で、何番目に格納されていたデータかを示す
実際のフォレンジック調査において、Shimcacheの情報のみを単独で解析するケースはあまりないでしょう。例えば次のようなケースで、他のアーティファクトと併せて、情報の補完や裏付のため、Shimcacheの参照が想定されます。
プリフェッチファイルの調査などから判明した、ファイル本体が削除されている不審な実行ファイルについて、インシデント発生から近接した時間に作成されたファイルかどうかを、Shimcacheの実行ファイル最終更新日時で確認する場合
※ この場合、最終更新日時を作成日時とみなし、他のアーティファクトにおけるタイムラインとの整合性を確認します。実際の作成日時とは一致しない場合もありますので、あくまで調査の目安とします。
すでに自己消去して証拠隠滅している場合など、不審な実行ファイルの痕跡が見つけにくいケースで、Shimcacheの実行ファイルパスから、ランダムな文字列のフォルダ名や、通常はアプリケーションがインストールされないフォルダなどを手がかりに調査する場合
Amcacheの調査方法
Amcacheの概要
Amcache は、単独のレジストリハイブファイルとして記録されるアーティファクトです。Amcacheが記録されるハイブファイル(以後、Amcacheハイブファイルと呼びます)のパスは、次のとおりです。
- Amcacheハイブファイル
C:\Windows\AppCompat\Programs\Amcache.hve
- パース対象のハイブキー
InventoryApplication(App情報)InventoryApplicationFile(File情報)
Amcacheには、PC内に現存する、もしくは過去に存在していた一定の実行ファイルについて、ファイルパスとハッシュ値(SHA-1)などが記録されています。
Microsoft社は、Amcacheに関する仕様を公開しておらず、記録される実行ファイルの正確な条件などはわかっていません。しかし、多くのフォレンジック調査官やリサーチャーによって、Amcacheに記録される実行ファイルは、PC内に現存もしくは過去に存在したものであることが実証されています。現在では、インシデント調査における有用なアーティファクトとして活用されるようになりました。特に注目すべきは、Amcacheの調査により、不審なファイルのハッシュ値が取得できる可能性があることです。ハッシュ値がわかれば、実体が削除された実行ファイルであっても、既知のIoC情報と照合することで、悪性判定できる可能性があります。
Amcacheは、レジストリファイルと同様にハイブ形式で記録されていますので、各種レジストリ解析ツールで内容を参照できます。次の図は、SANS社インストラクターのEric Zimmerman氏が開発・提供(無償)する、Registry ExplorerでのAmcacheハイブファイル表示例です。
- Amcacheハイブファイルの表示例(Registry Explorer)

CDIR-AにもAmcacheのパーサーが含まれており、実行ファイルのハッシュ値等を一括でリスト化できます。
- Amcacheのパース例(CDIR-A)

Amcacheは、Windows 8 から記録されるようになりました。また、2015年後半~2016年前半ごろのWindows Updateによって、Windows 7でも記録されるようになりました。なお、Windows 10 のバージョン1709でAmcacheの構造が変わり、それまでのバージョンと格納する情報が一部異なります(ハッシュ値などの重要な情報は変更ありません)。詳細は次のURLが参考になります。
- (Am)cache still rules everything around me (part 2 of 1)
また、Amcacheハイブファイルは、記録すべきイベントの発生から遅延して書き込まれることが知られています。つまり、直近に起動や作成が行われた実行ファイルの情報、特に現在のログインセッション中に起きたイベントに関する情報は、記録されていない可能性があります。ライブフォレンジックで保全を行う際には、この点に留意する必要があるでしょう。
どのような条件・タイミングで、メモリにキャッシュされた情報が、Amcacheハイブファイルに書き込まれるかは明らかになっていません。参考ですが、有志、研究者による検証結果が次のURLで紹介されています。
Forensic Lunch Test Kitchen
なお、本コンテンツ作成時に検証したところ、次のような結果でした(検証用PCは、Windows 10 バージョン:21H2)。
- 対象実行ファイルの作成・起動から1時間以内、同一セッション中に保全したAmcacheハイブファイルでは、同実行ファイルの情報は記録なし
- PCの再起動後、再度保全したAmcacheハイブファイルには記録あり
- 対象実行ファイルを、同一セッション中に作成・起動・削除したところ、同一セッション中、再起動後ともに、保全したAmcacheハイブファイルには記録なし
CDIR-AによるAmcache解析手順
CDIR-AでAmcacheのパースを行う際は、コマンドラインからパーサーのamcache.exe を実行します。コマンドのパラメータとして、パース結果の出力フォルダとAmcacheハイブファイルの保全フォルダを指定します。パース結果は、出力フォルダの「amcache_inventory_output.csv 」ファイルへ保存されます。
実行するコマンドは次のとおりです。
amcache.exe -o [出力先フォルダ ] [入力となるAmcacheハイブファイルの保全フォルダ]
例 > amchache.exe -o C:\CDIR-A_out\Amcache C:\pc-sales01_2022xx\Registry
※ CDIR-Cで保全作業を行った場合、Amcacheハイブファイルは「Registry」フォルダに保存されます。
パース結果のCSVファイルには、次の項目が出力されます。
- Computer Name: 保全したPCのコンピュータ名
- File Path: 実行ファイルのファイルパス
- File ID (SHA1): 実行ファイルのSHA-1 ハッシュ値
- File Size: 実行ファイルのファイルサイズ
- Link Date: 実行ファイルのコンパイル日時(※実行日時ではないことに注意)
- App Source Key Timestamp: キー更新日時(App情報)
- File Source Key Timestamp: キー更新日時(File情報)
- Install Date: インストール日時
- Time Zone: タイムゾーン
- App Name: アプリケーション名
- Product Name: プロダクト名
- App Version: バージョン情報(App情報)
- App Publisher: 作成者情報(App情報)
- App Language: 言語コード(App情報)
- App Source: パッケージ情報(App情報)
- Type: 実行ファイルタイプ
- Store App Type: ストアアプリタイプ
- Msi Package Code: パッケージコード
- Msi Product Code: プロダクトコード
- Hidden Arp: 詳細不明
- Inbox Modern App: 詳細不明
- OS Version At Install Time: インストール時のOSバージョン
- Package Full Name: パッケージ名(フル)
- Manifest Path: マニフェスト情報
- Bundle Manifest Path: バンドル・マニフェスト情報
- RootDir Path: ルートディレクトリ
- Uninstall String: アンインストール時の実行ストリング
- Registry Key Path: アプリケーション設定のレジストリキー
- Long Path Hash: ファイル名のハッシュ値
- File Name: ファイル名
- File Publisher: 作成者情報(File情報)
- File Version: バージョン情報(File情報)
- Bin File Version: バージョン情報(File情報)
- Binary Type: バイナリのタイプ
- Product Version: プロダクトのバージョン情報
- Bin Product Version: バイナリプロダクトのバージョン情報
- File Language: 言語コード(File情報)
- Is PeFile: ファイル形式フラグ
- Is Os Component: コンポーネントフラグ
- Program ID: プログラム識別子
- Program Instance Id: プログラム識別子(インスタンス)
※ 前述のとおり、Windows 10 のバージョン1709でAmcacheの構造が変更され、以前のバージョンの場合は上記と出力項目が一部異なります。旧バージョンの構造の場合、出力ファイル名が「amcache_output.csv」となります。
このように、Amcacheには実行ファイルに関する多くの属性情報が記録されます。ただし、前述したようにすべての実行ファイルが記録されるわけではありません。Amcacheを優先的に調査することを推奨しますが、求める不審な実行ファイルの情報が記録されていないケースも考えられます。そのような場合は、フルフォレンジックによる削除ファイル復元なども検討しましょう。
Amcacheに不審な実行ファイルが記録されていた場合、ハッシュ値(SHA-1)をVirusTotalや公開サンドボックス、IoC情報サイトなどで検索することにより、既知の悪性ファイル/マルウェアかどうかを判定できます。
WMIを利用した攻撃(永続化)の調査方法
WMIの概要
WMI(Windows Management Instrumentation)は、大規模システムを統一的に管理するための標準規格であるWBEM(Web-Based Enterprise Management)とCIM(Common Information Model)が、Microsoft社によってWindows OSへ実装されたものといわれています。現在サポートされているWindows全バージョンにおいて、デフォルトで有効化されています。
WMIは、アカウントの権限により使用が制限されています。具体的には、管理者権限もしくはSYSTEM権限が必要となり、システム管理者やOSコンポーネントによる利用が想定されているものです。攻撃活動においても有用であるため、攻撃者が権限昇格に成功した場合など、WMIが攻撃に悪用されるケースが多数報告されています。実際の攻撃で悪用された例としては、次のようなものがあります。
- マルウェアの永続化
- 不正なプログラムやサービスの起動
- リモートPCでのコマンド実行(横展開)
- バックアップデータ(シャドウボリューム)の削除
WMIによるさまざまな管理機能は、PowerShellのコマンドレットや、コマンドプロンプトから「wmic」コマンドを利用することで呼び出すことができます。通常、wmicコマンドの履歴は、イベントログなどにも記録されません。そのため、ターゲットのシステムに侵入した攻撃者が、wmicを悪用して侵入範囲の拡大や情報窃取を行うケースがあります。
次の例は、wmicにより、リモートPCでコマンド実行(echoで文字列 ”hacked!” を新規ファイルへ保存)を行うものです。
> wmic /node:192.168.1.2 /user:AXD2 /password:xxxx process call create "cmd /c echo hacked! > c:\users\AXD2\hack.log"
(Win32_Process)->Create() を実行しています
メソッドが正しく実行しました。
出力パラメーター
instance of __PARAMETERS
{
ProcessId = 2340;
ReturnValue = 0;
};
このような方法を使うと、マルウェアをダウンロードする不正なスクリプトファイルを、リモートPC上で作成・実行させることも可能です。
また、多くのリサーチャーが注意すべきと警告を出しているのは、WMIの仕組みを使った永続化の手法です。WMIは、「リポジトリ」と呼ばれるオブジェクトデータベース形式のファイルに、実行したいアクションと、実行のトリガーとなるイベントを登録し、両者をバインドすることで、イベント発生時に自動的に処理を実行する機能があります。
CDIR-Aにも含まれるパーサーの PyWMIPersistenceFinder(Mandiant社のDavid Pany氏が開発・無償提供)では、WMIリポジトリから永続化登録の内容を抽出します。
WMIリポジトリのパスは次のとおりです。
C:\Windows\System32\wbem\Repository\OBJECTS.DATA
次の出力例は、WMIリポジトリから不正な永続化の登録内容を抽出したものです。
- WMIによる不正な永続化登録の抽出例(CDIR-A|PyWMIPersistenceFinder)

上の例は、毎日10:30に不正なスクリプトを実行する永続化の例です。このように難読化された明らかに不審なスクリプトだけではなく、正規の常駐ジョブに偽装した登録も想定されます。比較的見逃されがちなアーティファクトですが、サイバー攻撃が疑われるインシデントでは忘れずに確認しましょう。
CDIR-A(PyWMIPersistenceFinder)によるWMIリポジトリの解析手順
CDIR-AでWMIリポジトリのパースを行う際は、コマンドラインからパーサーのPyWMIPersistenceFinder.exe を実行します。コマンドのパラメータとして、保全したWMIリポジトリのファイル名を指定します。パース結果は標準出力されますので、ファイルへのリダイレクト出力を推奨します。
実行するコマンドは次のとおりです。
PyWMIPersistenceFinder.exe [WMIリポジトリファイル名(フルパス) ] > [出力をリダイレクトするファイル名]
例 > PyWMIPersistenceFinder.exe C:\pc-sales01_2022xx\WMI\OBJECT.DATA > .\WMI_out.txt
※ CDIR-Cで保全作業を行った場合、WMIリポジトリは「WMI」フォルダに保存されます。
なお、パース結果は、前述の図「WMIによる不正な永続化登録の抽出例」のとおりです。
また、ライブフォレンジックでは、「Autoruns.exe」(Sysinternalsツール群)を使用して、WMIによる永続化を抽出できます。
