17章
Hands-on-1
ここでは、CDIR-Aに含まれる「usnjrnl.exe」により、調査対象のPCから保全したUSNジャーナルをパースして、特定のファイルに対する作成・削除・移動・リネームなどの操作履歴を調査するハンズオンを行います。
CDIR-A(Analyzer)は、以下のURL(株式会社サイバーディフェンス研究所の公式Githubリポジトリ)から入手できます(すでに最新版をセットアップ済みであれば、改めてダウンロードする必要はありません)。
https://github.com/CyberDefenseInstitute/CDIR-A
ハンズオンの概要
以下の流れで調査を行うハンズオンを実施します。
- USNジャーナルをパースする(CSVファイルへ出力)。
- MFTは、パース済みのCSVファイルを参照。 ※ 親フォルダID(ファイルID)検索用
- USNジャーナルから、ごみ箱内の特定ファイルに関する操作(変更)履歴を調査し、ごみ箱へ入れる前の元のファイル名を特定する。
- MFTパース結果から、USNジャーナルに記録された元のファイルの親フォルダIDを検索して、元のファイルパスを特定する。
ハンズオン手順
解析対象のUSNジャーナル
このハンズオンで解析対象とするUSNジャーナルおよびMFTのパース結果(CSV)は、演習用データの以下の相対パスに保存されています。
s17\h1\C_$UsnJrnl-$J
s17\h1\C_$MFT_output.csv
なお、このUSNジャーナルとMFTは、調査のサンプルとしたPCから、CDIR-C(CDIR Corrector)で保全したものです。CDIR-Cによる保全時に、それぞれ元のファイル名の先頭に、保全したドライブレターを示す「C_」が付与され、USNジャーナルのファイル名($UsnJrnl)とADS名($J)の区切りはハイフンになっています。
usnjrnl.exe の実行
usnjrnl.exeを使用して、上記解析対象のUSNジャーナルをパースし、CSVファイルへ出力します。
コマンドプロンプトを起動し、以下の手順で usnjrnl.exe を実行して下さい。
- cdコマンドでCDIR-A の「parser」フォルダに移動
cd <CDIR-Aの格納パス>\CDIR-A\parser
- 出力先フォルダ(-o オプション)と解析対象アーティファクトのフォルダを指定して、usnjrnl.exe を実行
usnjrnl.exe -o %userprofile%\desktop\out\USNJ <演習用データの格納パス>\s17\h1
※ 出力先フォルダは、任意のフォルダ名でも構いません。現存しないフォルダの場合は、新規作成しておく必要があります(現存しないフォルダを指定すると、末尾のフォルダ名がCSVファイル名として出力されます)。また、CDIR-Aの仕様上、出力先フォルダに同名のCSVファイルがあっても、警告なしにデータを書き込む(Append)ため、出力先フォルダは空にしておくことを推奨します。
- 以下の処理結果メッセージが表示されれば完了
【usnjrnl.exe】
Saved: C:\Users(ユーザー名)\desktop\out\USNJ\C_$UsnJrnl-$J_output.csv
以上の結果、指定した出力フォルダに、
- C_$UsnJrnl-$J_output.csv
が保存されます。
出力したUSNジャーナルのパース結果
上記で出力したUSNジャーナルのパース結果(C_$UsnJrnl-$J_output.csv)を、エクスプローラーからダブルクリックするなどで開きます。
以下、LibreOfficeの表計算アプリケーション(Calc)が、CSVファイルのデフォルト編集用アプリケーションとして設定されている想定で説明します。
「テキストのインポート」設定画面が表示されますので、「文字エンコーディング」には「Unicode(UTF-8)」、区切り文字には「タブ」を指定して下さい。
CSVファイルの表示後、列幅の調整、タイトル行の固定、オートフィルター有効化などの整形を行い、分析しやすいように準備をしましょう。
また、「Time」欄でソートを行い、履歴を時系列で並べ替えておきましょう。昇順/降順は、どちらでも結構です。
- CSVから整形済みのCalcドキュメント例

また、同様にMFTのパース結果(C_$MFT_output.csv)も開いておきましょう。表示後の整形は任意で行って下さい。データ量が多いため、整形処理には少し時間がかかるかもしれません。このハンズオンでは、ファイルIDの参照に使用するだけですので、簡易な整形でも結構です。
USNジャーナルの分析例
次のファイルを調査対象とします。
$RPLWXXC.dat
USNジャーナルのパース結果を、このファイル名でフィルターして下さい。
- 「File Name」欄を「$RPLWXXC.dat」でフィルターした結果

「$RPLWXXC.dat」は、2022年3月29日(以下、日付は省略)の15時19分18秒(1/10秒以下は省略、以下同じ)にリネーム(RENAME_NEW_NAME)されたことがわかりました。
MFTからファイルパスを確認してみましょう。「Parent Folder ID」(親フォルダID)の「99455」で、MFTパース結果のファイルIDを検索(フィルター)します。
- MFTパース結果から、ファイルID「99455」を検索(フィルター)した結果

MFT検索の結果、ファイルパス(フルパス)は次のように判明しました。
C:\$Recycle.Bin\S-1-5-21-1746883600-3161894144-3576001046-1000\$RPLWXXC.dat
このフォルダ名から、ごみ箱に入れられたファイルを保存するシステムフォルダ($Recycle.Bin\<SID>)であることがわかります。つまり、「$RPLWXXC.dat」は、ごみ箱に入れられた際、このファイル名へリネームされ、USNジャーナルに「RENAME_NEW_NAME」(リネーム後)の操作履歴が記録されたもの考えられます。
次に、このファイルがごみ箱に入れられる前の、元のファイル名・ファイルパスを調査しましょう。
リネームやフォルダの移動が行われても、ファイルIDは不変ですので、「File ID」(ファイルID)の「102566」でUSNジャーナルをフィルターして下さい。
- USNジャーナルを、ファイルID「102566」でフィルターした結果

フィルターの結果、15時17分29秒に作成されたファイル「exdf01.dat」がごみ箱に入れられて、15時19分18秒に「$RPLWXXC.dat」へリネームされたことがわかりました。
「exdf01.dat」は、元の格納場所から、ごみ箱へ移動されましたので、「Parent Folder ID」(親フォルダID)も「102560 → 99455」へ変更されています。このように、ごみ箱へ入れることにより、リネームと移動が同時に行われることがわかります。
MFTで「exdf01.dat」の「Parent Folder ID」である「102560」を検索し、元の格納場所のファイルパスを確認しましょう。
- MFTパース結果から、ファイルID「102560」を検索(フィルター)した結果

MFT検索の結果、元のファイルパス(フルパス)は、次のとおり特定できました。
C:\Windows\Temp\ex3idwi-axdf-2dka\exdf01.dat
なお、先の図で紹介した、USNジャーナルをファイルID「102566」でフィルターした結果において、「exdf01.dat」と同じファイルIDとして抽出されたファイル「api-ms-win-core-sysinfo-l1-1-0.dll」については、「exdf01.dat」との相関関係はないものと考えられます。その理由は次のとおりです。
- 11時00分19秒に、「
api-ms-win-core-sysinfo-l1-1-0.dll」が「CLOSE|FILE_DELETE」(削除)された後、5時間以上経過した15時17分29秒に、「exdf01.dat」の「FILE_CREATE」(新規作成)が記録されている - この履歴から、「
api-ms-win-core-sysinfo-l1-1-0.dll」の削除後に、空きとなったMFTレコードがたまたま再利用されたものと認められる
実際に、MFTパース結果からファイル名「api-ms-win-core-sysinfo-l1-1-0.dll」を検索しても、MFTレコードは存在しません。このように、MFT上からは完全に消滅したファイルでも、USNジャーナルによって、過去に存在したことが判明する場合もあります。
USNジャーナルを調査する際には、ファイルID/親フォルダID/理由に着目し、挙動パターンを論理的に分析して、より正確なタイムラインを把握しましょう。
問題
ごみ箱に入れられたファイル「
exdf01.dat」が保存されていたフォルダ「C:\Windows\Temp\ex3idwi-axdf-2dka」には、同ファイルと同時にごみ箱へ入れられた、別のファイルがありました。ごみ箱へ入れられた別のファイルについて、ごみ箱内フォルダ(
C:\$Recycle.Bin\S-1-5-21-1746883600-3161894144-3576001046-1000)におけるファイル名を回答して下さい。- 回答例:
$RXXXXXX.xxx
- 回答例: