Total Pageviews

Sunday, 16 May 2021

在Linux上,如何使用foremost轻松恢复已删除的文件?

在本文中,我们将讨论foremost,这是一个非常有用的Linux开源取证工具,能够使用称为"data carving"的技术恢复已删除的文件。该程序最初由美国空军特殊调查局开发,能够恢复多种文件类型(用户可以通过配置文件添加对特定文件类型的支持)。

在本教程中,您将学习到:

  • 如何安装foremost
  • 如何使用foremost恢复已删除的文件
  • 如何添加对特定文件类型的支持
Foremost是用于Linux的取证数据恢复程序,用于通过称为file curving的过程使用文件头,页脚和数据结构来恢复文件。

使用的软件的要求和约定

软件要求和Linux命令行约定
类别使用的要求,约定或软件版本
系统兼容大多数操作系统
软件"foremost"程序
其他熟悉命令行界面
约定-要求linux命令可以直接以root用户身份或以root特权执行sudo命令

$-要求linux命令以普通非特权用户身份执行

安装

git clone https://github.com/jonstewart/foremost

cd foremost

make

(在当前目录下,就会生成可执行文件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程序使用的更多信息,请查阅其手册页。

参考资料


项目地址:
https://github.com/jonstewart/foremost
https://github.com/korczis/foremost

No comments:

Post a Comment