FS分析
介紹
當前,在文件系統中最常發現證據。這是因為它是非易失性的,通常可以找到已刪除文件的殘余。該文件將幫助您使用The Sleuth Kit中的低級工具進行法醫分析。
本文檔按小場景進行組織,提供了如何使用The Sleuth Kit的示例。這些功能大多數都是通過Autopsy自動化的,但是在此僅供參考和培訓。
此處使用的技術適用于UNIX和Windows文件系統。
時間線
遵循時間軸Sleuth Kit實施說明中的步驟,您會注意到未分配的inode產生了一些有趣的活動,即來自映像c_drive.dd的MFT條目5035。要顯示此文件的內容,請使用icat
# icat images/c_drive.dd 5035 | less
注意:為防止您的終端混亂,請通過“ less”之類的尋呼機通過管道傳送“ icat”的所有輸出。
搜索
在這種情況下,我們將在“ wd0e.dd”圖像的未分配空間中搜索字符串“ abcdefg”。第一步是使用blkls工具提取未分配的磁盤單元(因為這是FFS映像,因此可尋址的單元是片段)。
#blkls images / wd0e.dd> output / wd0e.blkls
接下來,使用UNIX strings(1)實用程序提取未分配數據文件中的所有ASCII字符串。如果我們僅要搜索一個字符串,則可能不需要這樣做。如果我們要搜索許多字符串,那么這會更快。將“ -td”標志與“字符串”一起使用以打印找到該字符串的字節偏移量。
# strings -t d output/wd0e.blkls > output/wd0e.blkls.str
使用UNIX grep(1)實用程序搜索字符串文件。
# grep "abcdefg" output/wd0e.blkls.str | less
10389739: abcdefg
我們注意到該字符串位于字節10389739。接下來,確定什么片段。為此,我們使用fsstat工具:
# fsstat -t ufs images/wd0e.dd
<...>
CONTENT-DATA INFORMATION
--------------------------------------------
Fragment Range: 0 - 266079
Block Size: 8192
Fragment Size: 1024
這說明每個片段的長度為1024個字節。使用計算器,我們發現10389739字節除以1024是10146(并更改)。這意味著字符串“ abcdefg”位于blkls生成的文件的片段10146中。這實際上對我們沒有幫助,因為blkls映像不是真正的文件系統。要從blkls圖像查看完整片段,我們可以使用dd:
# dd if=images/wd0e.dd bs=1024 skip=10146 count=1 | less
接下來,我們將確定該片段在原始圖像中的位置。該blkcalc工具將被用于此目的。當在blkls生成的圖像中給定“地址”時,“ blkcalc”將返回原始圖像中的“地址”。(注意,這目前有點慢)。’-u’標志表明我們正在為其分配blkls地址。如果給出了’-d’標志,那么我們給它一個dd地址,它將標識blkls地址。
# blkcalc -u 10146 images/wd0e.dd`
`59382
因此,字符串“ abcdefg”位于片段59382中。要查看此片段的內容,我們可以使用“ blkcat”。
# blkcat images/wd0e.dd 59382 | less
為了更清楚地了解這一點,讓我們確定是否有一個元數據結構仍然具有指向該片段的指針。這是使用ifind實現的。“ -a”自變量表示查找所有出現的事件。
#ifind -a images / wd0e.dd 59382 493
索引節點493有一個指向片段59382的指針。讓我們使用istat獲得有關索引節點493的更多信息。
# istat images/wd0e.dd 493
inode: 493
Not Allocated
uid / gid: 1000 / 1000
mode: rw-------
size: 92
num of links: 1
Modified: 08.10.2001 17:09:49 (GMT+0)
Accessed: 08.10.2001 17:09:58 (GMT+0)
Changed: 08.10.2001 17:09:49 (GMT+0)
Direct Blocks:
59382
接下來,讓我們找出是否還有與此(未分配)inode關聯的文件。這是使用ffind完成的。
# ffind -a images/wd0e.dd 493
* /dev/.123456
前導“ *”表示文件已刪除。因此,在某一時刻,文件“ /dev/.123456”分配了索引節點493,后者分配了片段59382,其中包含字符串“ abcdefg”。
如果“找到”返回的內容多于分配了索引節點493的文件,則意味著這兩者都是硬鏈接到同一文件,或者一個文件(雞肉)分配了索引節點,則刪除了該文件,分配了第二個文件(雞蛋)它,然后將其刪除。該字符串屬于第二個文件,但是很難確定哪個先出現。另一方面,如果“ ffind”返回兩個條目,其中一個被刪除,一個未被刪除,則該字符串屬于未刪除文件。
如前所述,當您對未分配空間進行關鍵字搜索時,“尸檢”將為您完成所有這些工作。
刪除內容
要查看圖像中所有已刪除的文件名,請使用fls工具。對于所有已刪除的文件,將’-r’標志用于遞歸,將’-d’標志用于刪除。
# fls -rd images/hda9.dd | less
d/d * 232: /TEMP-823450
r/d * 293: /TEMP-131100
這向我們顯示了已刪除文件的完整路徑。在某些系統上,例如Windows NTFS,可以恢復文件內容(取決于發生了多少系統活動)。在其他系統(例如Solaris UFS和Linux Ext3)上,無法輕松恢復已刪除的文件。行開頭的數字是索引節點號。“ *”表示已刪除,“ d”和“ r”表示類型(目錄和文件)。第一個字母標識目錄條目類型的值(并非在所有文件系統類型中都存在),第二個字母是根據索引節點的類型。在大多數情況下,這些應該是相同的,但是如果將inode重新分配給其他類型的文件,則對于刪除的文件可能不是這樣。如果在目錄(232)上執行“ istat”操作,我們將注意到大小為0。
# istat images/hda9.dd 232
inode: 232
Not Allocated
uid / gid: 0 / 0
mode: rwxr-xr-x
size: 0
num of links: 0
Modified: 08.23.2001 21:52:33 (GMT+0)
Accessed: 08.23.2001 23:05:39 (GMT+0)
Changed: 08.23.2001 21:52:33 (GMT+0)
Deleted: 08.23.2001 23:05:39 (GMT+0)
Direct Blocks:
Linux對所有已刪除目錄執行此操作。還應注意,“ istat”輸出中未顯示任何塊地址。這是因為大小為0,并且程序認為該地址是偽造的。使用“ istat”的“ -b”選項,我們可以強制其輸出塊地址。使用Linux Ext3,塊指針將為0,但是Linux Ext2保留了舊地址。
# istat -b 2 images/hda9.dd 232
inode: 232
Not Allocated
uid / gid: 0 / 0
mode: rwxr-xr-x
size: 0
num of links: 0
Modified: 08.23.2001 21:52:33 (GMT+0)
Accessed: 08.23.2001 23:05:39 (GMT+0)
Changed: 08.23.2001 21:52:33 (GMT+0)
Deleted: 08.23.2001 23:05:39 (GMT+0)
Direct Blocks:
388 0
現在,我們可以檢查塊388的內容,并查看該目錄中的文件名:
# blkcat -h images/hda9.dd 388 | less
手動刪除文件恢復
UFS / FFS或EXT2FS / EXT3FS文件系統分為幾組。每個組都有其自己的inode和用于存儲數據的塊。創建新文件時,將為它提供與父目錄inode所在的組相同的inode(如果仍有可用的inode)。創建新目錄后,將在新組中為其分配一個索引節點。索引節點從其索引節點所在的同一組分配塊。
從一個UFS或EXTxFS恢復文件時,可以使用組布局。當找到帶有“ fls”的已刪除文件時,請注意父目錄的索引節點:
# fls -r images/hda1.dd
d/d 30789: doc
+ r/r * 0: doc/.a/ssh.tar
+ r/r 30792: doc/.a/install
<...>
我們要恢復“ ssh.tar”文件,請注意父目錄為30789,并且刪除的文件具有清除的inode指針。為了識別它所在的組,使用了“ fsstat”工具:
# fsstat images/hda1.dd
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: EXT3FS
<...>
Group: 0:
Inode Range: 1 - 15392
Block Range: 0 - 32767
Super Block: 0 - 0
Group Descriptor Table: 1 - 1
Data bitmap: 2 - 2
Inode bitmap: 3 - 3
Inode Table: 4 - 484
Data Blocks: 485 - 32767
Group: 1:
Inode Range: 15393 - 30784
Block Range: 32768 - 65535
Super Block: 32768 - 32768
Group Descriptor Table: 32769 - 32769
Data bitmap: 32770 - 32770
Inode bitmap: 32771 - 32771
Inode Table: 32772 - 33252
Data Blocks: 33253 - 65535
Group: 2:
Inode Range: 30785 - 46176
Block Range: 65536 - 98303
Data bitmap: 65536 - 65536
Inode bitmap: 65537 - 65537
Inode Table: 65540 - 66020
Data Blocks: 65538 - 65539, 66021 - 98303
<...>
該索引節點在組1的索引節點地址范圍內。要搜索已刪除的文件,我們使用’blkls’提取未分配的空間:
# blkls images/hda1.dd 32768-65535 > output/hda1-grp1.blkls
如果要提取該組的所有數據,則可以使用“ dd”:
# dd if=images/hda1.dd of=output/hda1-grp1.dd bs=4096 skip=32768 \
count=32767
其中,片段大小為4096(也可以在“ fsstat”輸出中找到)。然后,可以分析這些圖像中的任何一個作為關鍵字,或者使用其他數據雕刻工具(例如“至上”)進行分析。這一過程可以減少必須分析的數據量。
Sleuth Kit中文使用教程
推薦文章: