在本文中,我们将讨论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程序使用的更多信息,请查阅其手册页。