在本文中,我们将讨论foremost
,这是一个非常有用的开源取证工具,能够使用称为“data carving
。该实用程序最初由美国空军特殊调查局开发,并且能够恢复多种文件类型(用户可以通过配置文件添加对特定文件类型的支持)。该程序还可以处理由dd或类似工具。
在本教程中,您将学习:
- 如何安装
- 如何首先使用恢复已删除的文件
- 如何添加对特定文件类型的支持
使用的软件要求和约定
类别 | 使用的要求,约定或软件版本 |
---|---|
系统 | Distribution-independent |
软件 | “foremost”程序 |
其他 | 熟悉命令行界面 |
约定 | #-要求linux命令可以直接以root用户身份或通过使用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
- 可执行程序
- mpg
- 波形
- 即兴
- 电视
- mov
- pdf格式
- ole
- doc
- 压缩
- 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
png
来自的文件/dev/sdb1
分区格式为EXT4
文件系统。指定替代目的地
正如我们已经说过的,如果未明确声明目的地,则首先创建一个output
我们里面的目录cwd
。如果我们要指定替代路径怎么办?我们要做的就是使用-o
选项并提供所述路径作为参数。如果指定的目录不存在,则创建该目录;如果存在但不为空,则程序将发出一条抱怨:
ERROR: /home/egdoc/data is not empty
Please specify another directory or run with -T.
要解决该问题,如程序本身所建议的,我们可以使用另一个目录或re-launch命令,并使用-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
)。仅后者是可选的,可以省略。
如果配置文件的路径未显式提供-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
与预期的一样,该程序能够检索已删除的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
结论
在本文中,我们学习了如何首先使用一种能够取回各种类型已删除文件的取证程序。我们了解到该程序通过使用一种称为data carving
,并依靠文件签名来实现其目标。我们看到了程序用法的一个示例,并且还学习了如何使用配置文件中所示的语法来添加对特定文件类型的支持。有关程序使用的更多信息,请查阅其手册页。