UserAssist¶
UserAssistとは¶
Windows エクスプローラーは、ユーザーがエクスプローラー シェルから起動するプログラムとショートカット (スタート メニュー、タスクバー、デスクトップ、フォルダー内のダブルクリック) をカウントします。ユーザーの NTUSER.DAT にカウントが保存されます。各項目には次のような特徴があります。
- 実行カウント。
- Windows 7 以降では、フォーカスがあった回数と長さ (ミリ秒単位)。
- 最後に実行されたとき。
値の名前は ROT13 でエンコードされます。通常、プログラム名は既知のフォルダーの GUID で始まります ({1AC14E77-…} は System32)。
UserAssist は、特定のユーザーが対話的に開始した内容を示しますが、他のほとんどの実行証拠はユーザーに帰属しません。
この証拠から判断できること: ユーザーが Explorer を通じて、このプログラムまたはショートカットを、この回数起動し、最後に起動したのがこの時刻です。コマンドライン、サービス、スケジュールタスク、別のプログラムなど、他の方法による起動は数えられません。
場所¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count
| GUID | ホールド |
|---|---|
{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA} |
プログラム (executable)、Windows 7 以降 |
{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F} |
ショートカット (shortcut)、Windows 7 以降 |
{75048700-EF1F-11D0-9888-006097DEACF9} |
Vista へのプログラムとショートカット (active_desktop)、Windows 2000 |
{5E6AB780-7743-11CF-A12B-00AA004AE837} |
インターネット ツールバー (internet_toolbar)、Windows 2000 ~ Vista |
他の GUID は other として報告されます。すべてのプロファイルのトランザクション ログを含む NTUSER.DAT と、ユーザーの SID を提供するシステムの SOFTWARE ハイブを収集します。
分析時の注意点¶
- 新しいプロファイルがシードされます。 Windows 7 以降では、新しいプロファイルはデフォルトの項目 (「はじめに」、「電卓」、「ペイント」、「付箋」など) で始まります。それらの実行カウントは 14 からカウントダウンされ、プロファイルが作成された前後の 1 つの最終実行時刻をすべて共有します。それらはユーザーのアクティビティではありません。
- Version 3 は、5 (Windows 2000 から Vista) までカウントされます。保存されたカウントは 5 から始まるため、そこから 5 が減算されます。 5 に保存されているカウントは、
Problemsにレポートされます。 - Paths は、既知のフォルダーのデフォルト パス (
%windir%\system32、%ProgramFiles%、%APPDATA%\…) を使用します。別の場所にリダイレクトされたフォルダーには、引き続きデフォルトが表示されます。アプリ ID (Microsoft.Windows.Explorer、Microsoft.WindowsNotepad_8wekyb3d8bbwe!App) とコントロール パネル項目 (::{…}) にはパスがありません。 - 追跡はオフにすることができます と
Explorer\AdvancedStart_TrackProgs= 0,Policies\ExplorerNoInstrumentation= 1、 またはUserAssist\SettingsNoLog= 1。概要には、オフになっているハイブがリストされます。空または欠落している UserAssist アクティブなプロファイルでは、反フォレンジックを意味する場合があります。 NoEncrypt= 1 では、Windows は ROT13 なしで名前を書き込みます。このような名前は誤ってデコードされるため、そのハイブのすべての項目はProblems(およびレコードが stdout に送られるときの stderr) でそのように表示されます。- 最終実行時刻とカウントは項目ごとに保持されます ()。ただし、キーの最終書き込み時刻 (
KeyLastWrittenUTC) は、項目に対する最新の更新の時刻にすぎません。 - フォーカスのみを持った項目の R 実行回数は 0 になる可能性があります。フォーカス数とフォーカス時間は、バージョン 5 (Windows 7 以降) にのみ存在します。
Juntei で解析する¶
Usage: juntei parse-registry user-assist <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry user-assist -d evidence/ -o userassist.csv
juntei parse-registry user-assist -f NTUSER.DAT -t jsonl \
| jq 'select(.Path? // "" | test("\\\\(Users|ProgramData|Temp)\\\\"; "i"))'
概要には、ユーザーが最後に実行したアイテム (新しいものから順) と、UserAssist がオフになっているハイブがリストされます。
出力フィールド¶
| フィールド | 解釈 |
|---|---|
Host, User, UserSID, SourcePath |
ホスト、プロファイル フォルダーの名前、システムの ProfileList (システムの SOFTWARE ハイブを含む) からのユーザーの SID、およびハイブ。 |
GUID, Kind |
{GUID} キーとそのキーが保持するもの (executable、shortcut、active_desktop、internet_toolbar、other)。 |
NameRot13, Name |
保存およびデコードされた値の名前。 |
Path |
パスとしてデコードされた名前。既知のフォルダーの GUID はデフォルトのパスに置き換えられます。アプリ ID とシェル項目の場合は空です。 |
RunCount |
エクスプローラーから起動された回数 (バージョン 3: 保存された回数から 5 を引いた値)。 |
FocusCount, FocusTimeMs |
フォーカスがあった回数とその時間 (ミリ秒単位) (バージョン 5)。 |
LastRunUTC |
最後に開始したとき。 Windows が 0 を格納した場合、または格納された時間が 9999 を超えた場合は空になります (Problems がそれを与え、DataRaw がバイトを保持します)。 |
Format, SessionID |
データのレイアウト (5: 72 バイト、3: 16 バイト) およびデータが最後に書き込まれたセッション番号。 |
KeyLastWrittenUTC |
Count キーの最後の書き込み: その項目の最新の更新。 |
DataRaw |
デコードされない場合の値のバイト数 (16 進数)。 |
TransactionLogStatus, LogsApplied |
レジストリ回復コンテキスト。 |
Problems |
サイズが不明なデータ、キーの Version、5 の下のバージョン 3 カウント、9999、NoEncrypt 以降の最後の実行と一致しないサイズ。 |
調査戦略¶
LastRunUTCでソートし、シードされたアイテムを脇に置きます。これらのアイテムは、プロファイルの作成時に 1 回共有されます。- ユーザーが書き込み可能な場所 (
%USERPROFILE%、Downloads、Temp、ProgramData)、リムーバブル ドライブとネットワーク パス、および管理ツールとリモート アクセス ツールにあるプログラムを探します。 - Prefetch (ランタイムを伴う実行)、Amcache および ShimCache (存在)、Jump Lists および LNK ファイル (これらのファイルで開かれたもの)、およびプログラム ファイルの
$MFTと相関させます。 - 追跡がオフになっているハイブと、UserAssist が空であるプロファイルをクリアするためにチェックしてください。
- 削除された UserAssist 値には
parse-registry read --recover-deletedを使用します。