4ensiX

4ensiX

FPと言ったものはFPを選んだが表示はTPになっていることに気づいた。

Recycle binのメモ(Windows 7, Vista, XP)

資料を読んで覚えておきたいと思ったRecycle binに関するメモ。

参考

Cyber Dumpster-Diving: $Recycle.Bin Forensics for Windows 7 and Windows Vista

Dumpster diving

フォレンジックで、Windowsのごみ箱を漁ることで良さそうな情報が見つかることもあるかもしれない。
ごみ箱を漁って情報を手に入れる行為(または人)はスカベンジャーとか言われるような気がしていたが、フォレンジック界隈では“Dumpster diving” と言われる?

ごみ箱のロゴの変遷

logos.fandom.com 確かに、いつからかロゴが透明になっていた。

ごみ箱のプロパティ

ごみ箱のプロパティでは、

  1. ごみ箱の設定を反映するドライブの選択
  2. ごみ箱のサイズ
  3. ごみ箱に移動せずに直接削除する

といった設定ができる。
Windows XPでは、全てのドライブに同じ設定を使用するオプションがあるらしい。

RECYCLER(XP) and $Recycle.Bin(7,Vista)

XPと7, Vistaとでごみ箱の実体があるパスが異なる。XPはC:\RECYCLER\であり、7,VistaではC:\$Recycle.Bin\となっている。cmd.exeでC:\にてdir /aで確認することができる。
論理パーティションを含め、複数のドライブを利用している場合はドライブごとにごみ箱の設定ができることから、ドライブごとにフォルダが作成されることが分かる。その場合、OSインストールされたパーティションではフォルダの名前が$Recycle.Binだが、他のパーティションでは$RECYCLE.BINになる。(どうして)

f:id:Zarat:20210713153849p:plain
RECYCLER(XP) vs $Recycle.Bin(7,Vista)

Recycle binの実体のフォルダの名前はSID

Figures 1, 2を見ると、フォルダの中にSから始まる文字列のフォルダがある。フォルダ名は、Security Identifier (SID)に基づき名付けられユーザごとに分かれたごみ箱の中身を示している。ちなみに、ユーザプロファイルが存在しても始めてログインするまでユーザにSIDは振られないらしい。

"S-1-5-21-51003140-4199384537-3980697693-500" について

S → Security Identifier セキュリティ識別子

1 → the Revision Level (This value has always been 1) リビジョンレベル 1以外になるケースは無い?

5 → the identifier for the Authority Level or “IdentifierAuthority” as Microsoft calls it. “5” refers to NT authority.
識別子機関の値、ほとんどは5(NT Authority) だが、Everyone グループの SID では1(世界機関?)

21-51003140-4199384537-3980697693 → the Domain or Local Computer Identifier (or one or more sub-authority values). This is a variable number that identifies which computer (or network) created the number.
ドメイン識別子。

500 → the Relative ID, and in this case, “500” means the user is a system administrator. A user or group that was not created by default will have a Relative ID of 1000 or greater. We see in Figures 1 and 2 that there are two folders that were not created by default (they end in “1000” and “1001”).
500はシステム管理者、Active Directoryドメイン管理者は512。ユーザグループを作らずにユーザを追加すると1000以上になる。ローカルであれば、SAMが管理して勝手に振る。ネットワーク ドメインではActive Directoryの機能が良しなにしてくれる。

セキュリティ識別子 (Windows 10) - Microsoft 365 Security | Microsoft Docs

オペレーティング システムの既知のWindows識別子

現在のSIDのリスト

regeditで、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileListにて確認できる。

管理者以外からは、他のユーザのごみ箱を参照できない

Recycle binの中身はSIDごと、つまりユーザごとに分かれていることは分かった。さらに、管理者権限無しに他のユーザのごみ箱を参照できない。逆にいえば、管理者は他のユーザのごみ箱に対し、ファイルを削除・作成する等自由に弄ることができる。
また、先の話の通りドライブレターが割り当てられたパーティションごとにRecycle binのフォルダが作成され、ユーザごとにフォルダが作成される。このため、3つのユーザが存在し4つのドライブを使った場合ごみ箱のフォルダは12個作られることになる。

Recycle bin内のファイル

Windows XP

先ほどのFigures 1(Windows XPのRecycle bin)を見ると、SIDが100xで終わるユーザのフォルダにはDCから始まるファイルとINFO2がある。例えば、"DC1.txt"のDはドライブ、Cはドライブの識別子を表しており、合わせて"C:\"で削除されたファイルを示している。さらに、"DC1.txt"の"1"はドライブを通した削除時間順の識別子、拡張子は削除前のファイルに合わせたものが付けられる。
Windows XPのでは削除されたファイルの内容以外の情報、すなわちファイル名、ファイルパス、ファイルサイズ、削除された時間等をSIDごとINFO2に保持している。ちなみに、Windows 95ファイルシステムNTFSとなる以前にINFOというファイル名を利用していたからINFO2になったと言われている。

Windows 7, Vista

Figures 2(Windows 7, Vista)を見ると、SIDが1000で終わるユーザのフォルダには"$IPTEYOA.txt"と"$RPTEYOA.txt"というファイルがある。
ファイル名は$I or $Rから始まり、6桁の英数字のfileID、拡張子になっている。$Rは削除されたファイルの実体であり、$Iは同じfileIDを持つ$Rから始まるファイルのファイル名、ファイルパス、ファイルサイズ、削除された時間等を保持している。つまり、SIDごとに全てのファイルのメタデータを保持していたINFO2とは異なり、ファイルごとにメタデータを持つファイルが存在する。
6桁の英数字のfileIDは命名規則が明らかになっていない。拡張子は削除前と同じものになっている。ちなみにフォルダーが削除された場合にはファイル拡張子が無い。

実際の$Iファイルの中身(一部)

オフセット0x8にはファイルサイズを表す64ビットの整数、オフセット0x10は128ビットの整数でファイルが削除された時刻、オフセット0x18には、元のファイル名を含む元のファイルパスが含まれる。

f:id:Zarat:20210713175957p:plain
$Iから始まるファイルの中身(一部)
モトローラ/マッキントッシュのハードウェアを除き値はリトルエンディアンであるのでビッグエンディアンに置き換えて読み取る。オフセット0x8は単純にhexからdecに変換する。オフセット0x10は、hexからdec変換した値が1601年1月1日から100ナノ秒単位の経過時間を表す。この計算はhex to decの結果をwinhexが何やらやってくれるようなことが参考文献には書いてあったが、日時計算(始日時+経過時間) - 高精度計算サイトの秒の項目に、ナノ秒から秒に変換した値を入れると計算可能であった。オフセット0x18は単純に"00"区切りでhex to stringのパスになっている。

offset value(little endian) value(big endian) converting
0x8 3E 1C 00 00 1C 3E 7230(bytes) [hex to dec]
0x10 10 84 1E B8 49 47 D5 01 01 D5 47 49 B8 1E 84 10 132090146024490000[hex to dec]
→2019年07月31日 水 02時43分22.449秒(UTC + 9:00)https://keisan.casio.jp/exec/system/1355989418
0x18 00 43 00 3A 00 5C 00 55 00 73 00 65 00 72 00 73 00 5C 00 6D 00 C : \ U s e r s \ m

ファイル名とファイルパスに関しては長いので以下略。ファイル名にunicodeの全角等が入ってくると大変かもしれない。
一応、フォレンジックをやる者として確認しておかないといけないことととして、タイムスタンプはOSの時計が変更されていた場合、メタデータを直接書き換えていた場合等があるので信じすぎない方が良い。

ごみ箱のサイズ

Windows 7/Vistaはごみ箱のサイズをMBで、Windows XPはボリュームの容量に対してパーセンテージで指定する。
WIndows XPでは、ごみ箱のサイズを0%に設定すると1バイトのファイルすらごみ箱に入らない。Windows 7/Vistaはごみ箱のサイズを0MBに設定しようとすると、拒否されて1MBに設定される。つまり、1MB(1,048,576 bytes)以下は設定できない。
ごみ箱に入れるファイルは、最大サイズより1bitでも大きいと入らず、削除するかどうかのメッセージが表示される。 また、ここで見ているサイズは削除されたファイルコンテンツ($Rファイル)のサイズであり、ディスク上のサイズではない。ディスク上のサイズは、コンテンツのサイズよりも少し大きいかもしれない。
Windows 7/Vistaでは、ごみ箱のサイズは$Rファイルの合計サイズであり、$Iの合計は含まれない。XPだとおそらくINFO2は含まれない?
Windows XPでは管理者のみがごみ箱の設定ができる。Windows 7/Vistaでは、それぞれのユーザが設定できる。

ごみ箱からファイルを戻す(ファイルの復元)

Windows 7またはWindows Vistaの場合は、$R-file と $I-file を使用して元のファイルのコピーを作成し、削除前の場所に配置する。 削除されたファイルが、今は存在しないフォルダーにあった場合にはフォルダを再作成する。
また、ごみ箱に送られたファイルは「削除日時」と「作成日時」のタイムスタンプを持つ。これらの値は$Iに記録される。 このファイルが元の場所に戻される、すなわち復元されると「削除日時」のタイムスタンプは失われて、再び「更新日時」と「アクセス日時」が付与される。 ここで、復元されたファイルはごみ箱への移動前のファイルの「作成日時」、「更新日時」、「アクセス日時」となっている。
フォルダも削除されたときには、「削除日時」と「作成日時」のタイムスタンプを持ち、復元時には「削除日時」が消える。
復元されたファイルが再び削除された場合には異なる名前の$I,$Rファイルが作成される。

ボリュームシャドウコピー

Windows ServerではVSS(Volume Shadow copy Service)でバックアップが取れるが、有料で触ったことが無いのでそのうち参考資料を読む。

docs.microsoft.com

Shadow Volume Trash: $Recycle.Bin Forensics for Windows 7 and Windows Vista Shadow Volumes

www.youtube.com