はじめに
フォレンジック超絶初心者だけど、ちょっと使えたらかっこよさそう(便利そう)だと思ったのでこれから少しずつ使っていって忘れないように書いていこうと思いました。The Sleuth Kitは主にファイルシステムの解析するのに便利なツールキットで、ディスクイメージ内の削除ファイルの復元もできます。
The Sleuth Kitの詳細はこちら
https://www.sleuthkit.org/sleuthkit/
環境
$ uname -a
Linux ubuntu 4.4.0-112-generic #135-Ubuntu SMP Fri Jan 19 11:48:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ファイルシステムの調査
fsstat
ディスクイメージのファイルシステムの詳細情報が表示されます。
ここでは主ボリューム記述子と副ボリューム記述子のファイルシステム、メタデータ、コンテンツの情報が出力されています。
$ fsstat ubuntu-ja-16.04-desktop-amd64.iso
=== PRIMARY VOLUME DESCRIPTOR 1 ===
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: ISO9660
Volume Name: Ubuntu 16.04 LTS ja amd64
Volume Set Size: 1
Volume Set Sequence: 1
Publisher:
Data Preparer: XORRISO-1.4.2 2015.11.28.140001, LIBISOBURN-1.4.2, LIBISOFS-1.4.2, LIBBURN-1.4.2
Recording Application:
Copyright:
METADATA INFORMATION
--------------------------------------------
Path Table Location: 93-93
Inode Range: 0 - 445
hoge Directory Block: 20
CONTENT INFORMATION
--------------------------------------------
Sector Size: 2048
Block Size: 2048
Total Sector Range: 0 - 677943
Total Block Range: 0 - 677943
=== SUPPLEMENTARY VOLUME DESCRIPTOR 1 ===
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: ISO9660
Volume Name:
Volume Set Size: 1
Volume Set Sequence: 1
Publisher:
Data Preparer:
Recording Application:
Copyright:
METADATA INFORMATION
--------------------------------------------
Path Table Location: 155-155
hoge Directory Block: 94
Joliet Name Encoding: UCS-2 Level 3
CONTENT INFORMATION
--------------------------------------------
Sector Size: 2048
Block Size: 2048
Total Sector Range: 0 - 677943
Total Block Range: 0 - 677943
ファイルネームの取得
fls
ディスクイメージ内のファイル名、ディレクトリ名が出力されます。1番左に表示されているのはファイルタイプでd/d
がディレクトリ、r/r
がファイルを指します。
$ fls ubuntu-ja-16.04-desktop-amd64.iso
d/d 1: .disk
d/d 2: EFI
r/r 3: README.diskdefines
d/d 4: boot
d/d 5: casper
d/d 6: dists
d/d 7: isolinux
r/r 8: md5sum.txt
d/d 9: pool
d/d 10: preseed
d/d 445: $OrphanFiles
オプションの一部を紹介します。
fls -l
のファイルやディレクトリの詳細情報が表示されます。
表示内容を説明すると左からファイルタイプ、iノード番号、ファイル又はディレクトリ名、mtime(ファイルデータの最終修正日時)、atime(ファイルデータの最終アクセス日時)、ctime(ファイルデータとステータスの最終修正日時)、ファイル作成日時、ファイルサイズ、uid(ユーザーID)、gid(グループID)が表示されています。
$ fls -l ubuntu-ja-16.04-desktop-amd64.iso
d/d 1: .disk 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-26 01:52:35 (JST) 2048 0 0
d/d 2: EFI 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-20 22:29:18 (JST) 2048 0 0
r/r 3: README.diskdefines 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-20 22:28:35 (JST) 230 0 0
d/d 4: boot 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-20 22:29:18 (JST) 2048 0 0
d/d 5: casper 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-26 01:42:08 (JST) 2048 0 0
d/d 6: dists 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-20 22:28:35 (JST) 2048 0 0
d/d 7: isolinux 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-26 01:54:46 (JST) 6144 0 0
r/r 8: md5sum.txt 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-26 01:57:13 (JST) 20821 0 0
d/d 9: pool 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-20 22:28:36 (JST) 2048 0 0
d/d 10: preseed 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 2016-04-26 01:55:54 (JST) 2048 0 0
d/d 445: $OrphanFiles 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0000-00-00 00:00:00 (UTC) 0 0 0
fls -r
でイメージ内のファイルやディレクトリを再帰的に表示することができます。
ただし、削除済みディレクトリには適応されません。ディレクトリ階層は+
によって表記されています。
iノード番号の前に*
がついているファイルは削除済みファイルです。出力された情報が多いので省略しています。
$ fls -r ubuntu-ja-16.04-desktop-amd64.iso
d/d 1: .disk
+ r/r 11: base_installable
+ r/r 12: casper-uuid-4.4.0-21-generic
+ r/r 13: cd_type
+ r/r 14: info
+ r/r 15: release_notes_url
d/d 2: EFI
+ d/d 16: BOOT
++ r/r 125: BOOTx64.EFI
++ r/r 126: grubx64.efi
r/r 3: README.diskdefines
d/d 4: boot
+ d/d 17: grub
++ r/r 127: efi.img
++ r/r 128: font.pf2
++ r/r 129: grub.cfg
++ r/r 130: loopback.cfg
++ d/d 131: x86_64-efi
+++ r/r 146: acpi.mod
+++ r/r 147: adler32.mod
+++ r/r 148: ahci.mod
(省略)
d/d 10: preseed
+ r/r 122: cli.seed
+ r/r 123: ltsp.seed
+ r/r 124: ubuntu.seed
d/d 445: $OrphanFiles
+ -/r * 441: OrphanFile-441
+ -/r * 442: OrphanFile-442
+ -/r * 443: OrphanFile-443
+ -/r * 444: OrphanFile-444
-p
でファイルやディレクトリのフルパスを表示させることができるので、fls -pr
と実行することで、ファイル、ディレクトリのフルパスを出力することができます。出力された情報が多いので省略しています。
$ fls -pr ubuntu-ja-16.04-desktop-amd64.iso
d/d 1: .disk
r/r 11: .disk/base_installable
r/r 12: .disk/casper-uuid-4.4.0-21-generic
r/r 13: .disk/cd_type
r/r 14: .disk/info
r/r 15: .disk/release_notes_url
d/d 2: EFI
d/d 16: EFI/BOOT
r/r 125: EFI/BOOT/BOOTx64.EFI
r/r 126: EFI/BOOT/grubx64.efi
r/r 3: README.diskdefines
d/d 4: boot
d/d 17: boot/grub
r/r 127: boot/grub/efi.img
r/r 128: boot/grub/font.pf2
r/r 129: boot/grub/grub.cfg
r/r 130: boot/grub/loopback.cfg
d/d 131: boot/grub/x86_64-efi
r/r 146: boot/grub/x86_64-efi/acpi.mod
r/r 147: boot/grub/x86_64-efi/adler32.mod
r/r 148: boot/grub/x86_64-efi/ahci.mod
(省略)
d/d 10: preseed
r/r 122: preseed/cli.seed
r/r 123: preseed/ltsp.seed
r/r 124: preseed/ubuntu.seed
d/d 445: $OrphanFiles
-/r * 441: $OrphanFiles/OrphanFile-441
-/r * 442: $OrphanFiles/OrphanFile-442
-/r * 443: $OrphanFiles/OrphanFile-443
-/r * 444: $OrphanFiles/OrphanFile-444
-d
で削除済みエントリのみの表示が可能になるので多くの情報の中の削除済みファイルなどを見つける際には-dr
を付けるとがイメージファイル全体から削除ファイルやディレクトリを見つけやすいと思います。
$ fls -dr ubuntu-ja-16.04-desktop-amd64.iso
-/r * 441: $OrphanFiles/OrphanFile-441
-/r * 442: $OrphanFiles/OrphanFile-442
-/r * 443: $OrphanFiles/OrphanFile-443
-/r * 444: $OrphanFiles/OrphanFile-444
ffind
イメージファイルとiノード番号を指定してそのiノード番号が割り当てられているファイル、ディレクトリを表示します。
例えば、先程のfls
コマンドでiノード番号1には.diskが割り当てられていることがわかっています。
試しに、iノード番号1を指定してffind
を実行してみると.diskディレクトリが見つかります。
(-a
でオプション指定すると指定したiノード番号に関係するファイルやディレクトリが表示されます。)
$ ffind -a ubuntu-ja-16.04-desktop-amd64.iso 1
/.disk
/.disk/.
/.disk/..
参考
終わりに
正直、ffindを使う場面があまりわかっていないので、教えていただきたい...。