在本文中,我們將討論foremost
,這是一個非常有用的Linux開源取證工具,能夠使用稱為”data carving"的技術恢複已刪除的文件
。該程序最初由美國空軍特殊調查局開發,能夠恢複多種文件類型(用戶可以通過配置文件添加對特定文件類型的支持)。
在本教程中,您將學習到:
- 如何安裝foremost
- 如何使用foremost恢複已刪除的文件
- 如何添加對特定文件類型的支持
使用的軟件的要求和約定
類別 | 使用的要求,約定或軟件版本 |
---|---|
係統 | 兼容大多數操作係統 |
軟件 | “foremost”程序 |
其他 | 熟悉命令行界麵 |
約定 | #-要求linux命令可以直接以root用戶身份或以root特權執行sudo 命令
$-要求linux命令以普通非特權用戶身份執行 |
安裝
因為foremost
在所有主要的Linux發行版存儲庫中都已經存在,所以安裝它是一個非常容易的任務。我們要做的就是使用我們最喜歡的分發程序包管理器。在Debian和Ubuntu上,我們可以使用apt
:
$ sudo apt install foremost
在最新版本的Fedora中,我們使用dnf包管理器來
安裝軟件包,dnf
是yum的後繼者。包的名稱是相同的:
$ sudo dnf install foremost
如果使用ArchLinux,則可以使用pacman
安裝foremost
。可以在分發的”community”存儲庫中找到該程序:
$ sudo pacman -S foremost
基本用法
foremost
程序嘗試基於文件頭、頁腳和數據結構恢複和重建文件,而不依賴於文件係統元數據(filesystem metadata)
。這種取證技術被稱為file carving
。該程序支持各種類型的文件,例如:
- jpg
- gif
- png
- bmp
- avi
- exe
- mpg
- wav
- riff
- wmv
- mov
- ole
- doc
- zip
- rar
- htm
- cpp
foremost最基本的使用方式是通過提供一個源來掃描已刪除的文件(它可以是分區或映像文件,比如通過dd生成的
)。讓我們來看一個例子:假設我們要掃描/dev/sdb1
分區:在開始之前,要注意的一個非常重要的事情是——千萬不要將檢索到的數據存儲在我們正在從中檢索數據的同一分區上,以避免覆蓋仍然存在於塊設備上的刪除文件。我們將運行的命令是:
$ sudo foremost -i /dev/sdb1
默認情況下,該程序在當前工作目錄中創建一個名為output
,並將其用作恢複文件的存放地址。在此目錄中,將為我們嘗試檢索的每種受支持文件類型創建一個子目錄。每個目錄將保存從數據雕刻過程中獲得的相應文件類型:
output
├── audit.txt
├── avi
├── bmp
├── dll
├── doc
├── docx
├── exe
├── gif
├── htm
├── jar
├── jpg
├── mbd
├── mov
├── mp4
├── mpg
├── ole
├── pdf
├── png
├── ppt
├── pptx
├── rar
├── rif
├── sdw
├── sx
├── sxc
├── sxi
├── sxw
├── vis
├── wav
├── wmv
├── xls
├── xlsx
└── zip
等到foremost執行結束
,將刪除空目錄。隻有包含文件的文件夾留在文件係統上:這讓我們立即知道成功檢索到了哪種類型的文件。默認情況下,程序嘗試檢索所有支持的文件類型;為了限製搜索,我們可以使用-t
選項提供我們要檢索的文件類型的列表,以逗號分隔。在以下示例中,我們僅將搜索限製為gif
和pdf
文件:
$ sudo foremost -t gif,pdf -i /dev/sdb1
指定替代存放地址
正如我們已經說過的,如果未明確聲明恢複出的文件的存放地址,則foremost在我們的當前工作目錄(cwd)創建一個output目錄
。如果我們要指定替代路徑怎麽辦?要做的就是使用-o
選項提供所述路徑作為參數。如果指定的目錄不存在,則創建該目錄;如果存在但不為空,則程序將發出一條警告(⚠️):
ERROR: /home/egdoc/data is not empty
Please specify another directory or run with -T.
要解決該問題,如程序本身所建議的,我們可以使用另一個目錄或使用-T選項重新命令。如果我們使用-T
選項,用-o
選項製定的目錄將會打上時間戳。這樣可以在同一目標位置多次運行該程序。在我們的情況下,用於存儲檢索到的文件的目錄為:
/home/egdoc/data_Thu_Sep_12_16_32_38_2019
配置文件
foremost
配置文件可用於指定程序本身不支持的文件格式。在該文件內,我們可以找到幾個帶有注釋的示例,這些示例顯示了應用於完成任務的語法。這是一個涉及png
類型的示例(由於默認情況下支持該文件類型,因此對行進行了注釋):
# PNG (used in web pages)
# (NOTE THIS FORMAT HAS A BUILTIN EXTRACTION FUNCTION)
# png y 200000 \x50\x4e\x47? \xff\xfc\xfd\xfe
為了增加對文件類型的支持而提供的信息,從左到右用製表符分隔:文件擴展名(png,
在這種情況下),頁眉和頁腳是否區分大小寫(y
),最大文件大小(以字節為單位)(200000
),標題(\x50\x4e\x47?
)和頁腳(\xff\xfc\xfd\xfe
)。僅後者是可選的,可以省略。
如果未顯式給foremost命令用-c
選項提供配置文件的路徑,則在當前工作目錄中搜索和使用一個名為foremost.conf
(如果存在)。如果找不到默認配置文件,改為使用/etc/foremost.conf
。
添加對文件類型的支持
通過閱讀配置文件中提供的示例,我們可以輕鬆添加對新文件類型的支持。在此示例中,我們將添加對flac
音頻文件的支持。Flac
(免費無損音頻編碼)是一種非專有的無損音頻格式,能夠提供壓縮音頻而不會降低質量。首先,我們知道此文件類型的頭以十六進製形式提供,為:66 4C 61 43 00 00 00 22
(fLaC
(以ASCII格式),這一點我們可以使用類似hexdump的程序在flac文件上進行驗證:
$ hexdump -C
blind_guardian_war_of_wrath.flac|head
00000000 66 4c 61 43 00 00 00 22 12 00 12 00 00 00 0e 00 |fLaC..."........|
00000010 36 f2 0a c4 42 f0 00 4d 04 60 6d 0b 64 36 d7 bd |6...B..M.`m.d6..|
00000020 3e 4c 0d 8b c1 46 b6 fe cd 42 04 00 03 db 20 00 |>L...F...B.... .|
00000030 00 00 72 65 66 65 72 65 6e 63 65 20 6c 69 62 46 |..reference libF|
00000040 4c 41 43 20 31 2e 33 2e 31 20 32 30 31 34 31 31 |LAC 1.3.1 201411|
00000050 32 35 21 00 00 00 12 00 00 00 54 49 54 4c 45 3d |25!.......TITLE=|
00000060 57 61 72 20 6f 66 20 57 72 61 74 68 11 00 00 00 |War of Wrath....|
00000070 52 45 4c 45 41 53 45 43 4f 55 4e 54 52 59 3d 44 |RELEASECOUNTRY=D|
00000080 45 0c 00 00 00 54 4f 54 41 4c 44 49 53 43 53 3d |E....TOTALDISCS=|
00000090 32 0c 00 00 00 4c 41 42 45 4c 3d 56 69 72 67 69 |2....LABEL=Virgi|
如您所見,文件簽名確實是我們所期望的。在這裏,我們假設最大文件大小為30 MB,即30000000字節。讓我們將條目添加到文件中:
flac y 30000000 \x66\x4c\x61\x43\x00\x00\x00\x22
footer
簽名是可選的,因此此處未提供。該程序現在應該能夠恢複已刪除flac
文件。讓我們驗證一下:為了測試一切正常,我之前將一個flac文件從/dev/sdb1
分區刪除,然後繼續運行命令:
$ sudo foremost -i /dev/sdb1 -o $HOME/Documents/output
與預期的一樣,foremost程序能夠檢索到已刪除的flac文件(它是設備上唯一文件),不過使用隨機字符串對其進行了重命名。原始文件名是無法檢索到的,因為眾所周知的原因:文件元數據包含在文件係統中,而不包含在文件本身中:
/home/egdoc/Documents
└── output
├── audit.txt
└── flac
└── 00020482.flac
其中audit.txt文件包含有關程序執行的操作的信息,在這個例子中,其內容為:
Foremost version 1.5.7 by Jesse Kornblum, Kris
Kendall, and Nick Mikus
Audit File
Foremost started at Thu Sep 12 23:47:04 2019
Invocation: foremost -i /dev/sdb1 -o /home/egdoc/Documents/output
Output directory: /home/egdoc/Documents/output
Configuration file: /etc/foremost.conf
------------------------------------------------------------------
File: /dev/sdb1
Start: Thu Sep 12 23:47:04 2019
Length: 200 MB (209715200 bytes)
Num Name (bs=512) Size File Offset Comment
0: 00020482.flac 28 MB 10486784
Finish: Thu Sep 12 23:47:04 2019
1 FILES EXTRACTED
flac:= 1
------------------------------------------------------------------
Foremost finished at Thu Sep 12 23:47:04 2019
結論
在本文中,我們學習了如何使用foremost,一種能夠取回各種類型已刪除文件的取證程序。該程序通過使用一種稱為data carving(數據雕刻)的技術
,並依靠文件簽名來實現其目標。文中也給出了foremost程序用法的一個示例,並且還學習了如何使用配置文件中所示的語法來添加對特定文件類型的支持。有關foremost程序使用的更多信息,請查閱其手冊頁。