當前位置: 首頁>>係統&架構>>正文


在Linux上,如何使用foremost輕鬆恢複已刪除的文件?

在本文中,我們將討論foremost,這是一個非常有用的Linux開源取證工具,能夠使用稱為”data carving"的技術恢複已刪除的文件。該程序最初由美國空軍特殊調查局開發,能夠恢複多種文件類型(用戶可以通過配置文件添加對特定文件類型的支持)。

在本教程中,您將學習到:

  • 如何安裝foremost
  • 如何使用foremost恢複已刪除的文件
  • 如何添加對特定文件類型的支持

foremost-manual

Foremost是用於Linux的取證數據恢複程序,用於通過稱為file curving的過程使用文件頭,頁腳和數據結構來恢複文件。

使用的軟件的要求和約定

軟件要求和Linux命令行約定
類別 使用的要求,約定或軟件版本
係統 兼容大多數操作係統
軟件 “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
  • pdf
  • 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選項提供我們要檢索的文件類型的列表,以逗號分隔。在以下示例中,我們僅將搜索限製為gifpdf文件:

$ 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程序使用的更多信息,請查閱其手冊頁。
Linux已刪除文件恢複


參考資料

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4411.html,未經允許,請勿轉載。