UserAssistはGUIプログラムの実行履歴を残しているアーティファクト。
今回はこれを紹介してみる。
UserAssistとは
UserAssistの概要
UserAssistは、WindowsのレジストリのひとつNTUSER.DAT内に保存されているデータで、exeやlnkの実行履歴を記録しているアーティファクト。
Forensics Wikiによると、結構昔から使われているアーティファクトのようだ。
UserAssistから何がわかるのか
UserAssistでは、主にGUIアプリやLNKファイルを対象にして
- 実行ファイル名
- パス
- 起動回数
- フォーカス回数
- フォーカス時間
- 最終起動時間
を記録している。
UserAssistの活用方法
基本的にアプリの起動状況を確認したいときに使う。
とはいっても、情報量的にはprefetchの方が断然多いので、UserAssistを単純に起動履歴確認に使うことはまずない。
どちらかというと、GUIアプリとしての稼働状況を確認したり、LNKファイルの実行有無をチェックするのに用いることができる。
アーティファクトの保存場所
レジストリのNTUSERの中に保存されている。
当然エクスプローラでは見られないので、専用ツールでパースする必要がある。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\UserAssist
Regeditでの解析方法
Regeditの概要
レジストリの中を見るといえばもちろんregedit。
誰もが一度は使ったことのある定番レジストリエディタ。
ツールのインストール方法
インストールは不要。Windowsに最初から入っている。
解析の実施
まずはWindowsの検索窓でregeditなどと検索。
表示されたら管理者権限で起動。
管理者権限で起動したら、HKLM配下のUserAssistkeyを開く。
UserAssist以下にはごちゃごちゃとしたGUIDな英数字がある。
これらはちょっと独特で、以下のGUIDが主に使われている。
{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}・・・exeファイル
{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}・・・LNKファイル
で、それら中にはさらにCountというサブキーがあり、この中に本命のデータが保存されていることになる。
まずはexeにあたるGUID以下のCountを開いてみる。
また、LNKファイルのUserAssistの方はこのようになっている。あまり差はない。
そして、Valueのうちどれか一つをダブルクリックすると、以下のようなウィンドウが開き、これがUserAssistのデータ本体となっている。
普段からCTFをやっているような変態はすぐに気づくだろうが、.rkrということはそう、ROT13だ。
GUID以降のパスと実行ファイルらしき文字列はROT13処理されているのでデコードしてみる。
うーんautopsyでした。
このように実行ファイルやLNKの名称やパスは手動で特定できる。
次は先ほどのバイナリ列から計算するのだが、そんなことをイチイチやってられない。
このあたりがregeditの限界ということになる。
ということでregeditルートはこれで終わり、お次のパースツールの紹介。
UserAssitViewでの解析方法
UserAssistViewの概要
UserAssistViewはセキュリティ会社のNirSoftが公開しているパースツールで、GUI画面がついていて操作しやすい。
NirSoftなのでGUIのデキや操作感もなかなかよい。
ツールのインストール方法
こちらのサイトからインストールする。
exeなので特別な環境は必要ない。
解析の実施
ダウンロードしたらとりあえず実行する。
すると次の瞬間にはパース完了した画面が表示される。うーん早い!
左から、実行ファイルのパス、index(なんだこれ?)、実行回数、最終実行日時などがわかる。
そして当然いつものNirSoft画面もあり。
パースツールを使えばこのように一息で解析完了するので楽ちん。
RegistryExplorerでの解析方法
RegistryExplorerの概要
皆さんお待ちかね。
サイバーセキュリティ界のツールキング、EricZimmerman。
RegistryExplorerはEricZimmermanのツールの一つで、超強力なレジストリパーサー。
機能性、操作性ともに最高レベルの一品。
ツールのインストール方法
こちらからダウンロード。
exe形式なので、特に環境づくりも必要なし。
解析の実施
ダウンロードして解凍したら、管理者権限で実行する。
初めての人が「あれ?動かないよ?」と困っていたら100%ユーザー権限で起動してしまっているだけ。ここテストに出るよ。
起動すると以下のような画面。
まだ何のハイブも読み込まれていない。
次に、レジストリハイブをロードする。
ライブ端末で実行しているのであれば、「Live System」ボタンでワンクリックロードも可能だが、今回は「Load hive」をクリック。
以下のフォルダに移動して、NTUSER.DATを選択。
NTUSERの読み込みが完了するとこのような画面に。
NTUSERのトップから順番にドリルダウンしてもいいが、面倒くさいので左側の画面の「Available Bookmarks」タブをクリック。
すると、MRUだのShellなんとかだのと有名なレジストリキー達が表示される。
その中にUserAssistがあるので、クリックし、exeのGUIDからCountを開く。
そして右側には…ROT13の文字と謎のバイナリが…おえっ
っとなるが、ここからがEricZimmermanのすごいところ。
regeditでは解析不能だったわけだが、画面右上の「UserAssist」タブをクリックするだけで、デフォルトプラグイン機能でフルパースできる。
解析結果を見てみると、
- 実行ファイル名
- パス
- 起動回数
- フォーカス回数
- フォーカス時間
- 最終起動時間
というのが一発でわかる。
特にフォーカス関係は他の2ツールが弱かったところで、このRegistryExplorerのすごさがよくわかるところ。
ちなみにどうでもいいが、RegistryExplorerはoptionからスキン変更ができる。
たくさんあるのでお好みでどうぞ。
UserAssistに関する個人的感想
と、ここまで紹介してきたものの、実際UserAssistはインシデントレスポンスではあまり出番はないと思っている。
PrefetchやRecent等のレジストリ外のアーティファクトのほうが、よりお手軽にパースできるし、内容も充実しているからだ。(もちろん調査に用いるアーティファクトを冗長化するという意味では価値があると思う)
そんなUserAssistだが、どんな時に活躍するのか。
個人的な意見だが、不正調査ではそこそこ役立つ。というか役立った。
内部不正の調査、特に犯罪捜査のような「相手がどんなアプリを普段使っているのか全く分からない状況」においては、不届き者がどのくらいの頻度でどのアプリを使っていたかというのはかなり重要な指標になる。
たとえば、何らかのWebブラウザを使われた不正があったとしてそれを調査するとしたら、UserAssistによってどのブラウザが頻繁に使われているかを特定でき、調査対象アプリを判断できるのだ。(もちろんUserAssistの専売特許ではないが)
例えば、実際にはChromeでケシカランことをしておきながら、「僕はChromeは普段全く使いませんからね!(履歴は消したし大丈夫)」みたいなことを言っている不届き者がいれば、UserAssistで「意義あり!!」ができるというわけ。
とはいっても、UserAssist自体は一般的にそこまで高い信頼性が認められていないのであまり過信するのもよくないが…
あと、参考までにGitにPythonパースツールが上がっていたのでリンクを張っておく。(私は試してないので、使った方感想聞かせてください)
まとめ
UserAssistって使いどころ難しいよね、っていうのはよく言われていることだろう。
DFIRでの出番はあまりないかもしれないけれど、不正調査、特に法執行機関に所属するような人にとってはそれなりに有用性が見いだせると思う。
コメント