a-tan-cyber/breach_trail
GitHub: a-tan-cyber/breach_trail
一个基于 Bash 的 Kali Linux 数字取证自动化工作流,整合多种内存分析与数据雕刻工具,将可疑内存映像的分析流程一键自动化并生成结构化案例报告。
Stars: 0 | Forks: 0
**基于 Kali Linux 使用 Bash 进行内存与磁盘分析的自动化取证工作流设计与开发**
学生姓名:Tan Amos
学号:s22
班级代码:CCK3\_250714
学院:网络安全中心
指导教师:Samson
## 1. 引言
Project Breach Trail 是一项数字取证与事件响应(DFIR)自动化练习,专注于构建一个基于 Bash 的单一工作流。该工作流能够在 Kali Linux 中处理取证证据文件,并生成结构化的案例输出。该项目的目标是减少内存和数据雕刻分析过程中重复的手工操作,同时确保分析人员可读的结果、可重复性以及清晰的报告。
提交的脚本旨在自动化执行五项主要任务:
* 使用 **Volatility 2** 和 **Volatility 3** 进行内存分析,
* 使用 **Foremost** 和 **Bulk Extractor** 进行雕刻,
* 利用 **strings** 和模式匹配进行人类可读的痕迹追踪,
* 结果日志记录与报告生成,
* 将完成的案例文件夹打包成 ZIP 归档文件。
本报告记录了脚本的**预期工作流设计**,以及使用证据文件 `dump2.mem` 进行的**验证演示运行**。该演示是针对一个可疑的 Windows 内存映像执行的,该次运行选择的分析路径是 **Volatility 2**。

## 2. 项目目标
该脚本的构建符合项目说明书的要求,可执行以下核心操作:
* 验证脚本是否以 `root` 身份运行,
* 提示输入证据文件并验证其是否存在,
* 检查是否安装了所需的取证工具,
* 测试内存映像是否可使用 Volatility 进行分析,
* 提取内存痕迹,如进程、网络连接、命令历史记录、DLL 列表、哈希、注册表相关输出以及 SID,
* 使用多种雕刻工具自动雕刻额外数据,
* 搜索可读痕迹,如用户名、密码、电子邮件、IP 地址、可执行文件、DLL 和可疑字符串,
* 将结果保存到案例目录中,
* 生成报告和结果清单,
* 将最终的案例输出压缩成 ZIP 归档文件。
## 3. 环境、证据和工具
### 3.1 分析环境
* **操作系统:** Kali Linux
* **主要自动化语言:** Bash
* **主脚本:** `CCK3_250714.s22.sh`
* **验证运行中使用的证据:** `dump2.mem`
* **证据类型:** 可疑的 Windows 内存映像
* **输入大小:** 536,870,912 字节(512 MB)
### 3.2 使用的取证工具
* **Volatility 2**
* **Volatility 3**
* **Foremost**
* **Bulk Extractor**
* **strings**
* 标准 shell 实用程序,包括 `grep`、`find`、`stat`、`wc` 和 `zip`
### 3.3 验证演示运行摘要
| 项目 | 观察结果 |
| ---------------------------------------- | ----------------------------------------------- |
| 输入文件 | `dump2.mem` |
| 案例文件夹 | `dump2_analysis_20260316_210034` |
| 选择的内存工作流 | Volatility 2 |
| Volatility 2 建议使用的配置文件 | `VistaSP1x86` |
| 其他候选配置文件 | `Win2008SP1x86`, `Win2008SP2x86`, `VistaSP2x86` |
| 通过 `imageinfo` 恢复的映像时间戳 | 2014-01-08 17:54:20 UTC |
| 分析持续时间 | 140 秒 |
| 在案例文件夹中创建/找到的文件总数 | 20,059 |
| 最终 ZIP 归档 | `dump2_analysis_20260316_210034.zip` |
| 最终 ZIP 大小 | 178M |

## 4. 脚本设计与工作流
### 4.1 输入验证与案例准备
脚本首先检查它是否以 `root` 身份运行。然后提示用户输入证据文件名,并持续提示直到提供有效的文件。一旦文件被接受,脚本就会使用输入的文件名和分析时间创建一个带有时间戳的案例文件夹。
对于已验证的运行,创建的案例目录为:
`dump2_analysis_20260316_210034`
在此案例文件夹中,脚本保存了分析输出、雕刻结果、strings 结果、注册表配置单元转储、报告文件以及最终打包的 ZIP 归档文件。
### 4.2 工具检测与就绪检查
在分析开始之前,脚本会检查是否安装了所需的工具。它会确认 `foremost`、`bulk_extractor` 和 `strings` 的可用性,并尝试检测可用的 Volatility 2 和 Volatility 3 启动器。
然后使用 Volatility 预检查对内存映像进行测试:
* **Volatility 2:** `imageinfo`
* **Volatility 3:** `windows.info`
在已验证的运行中,Volatility 2 和 Volatility 3 的预检查均表明该映像似乎可分析。随后演示继续使用 **Volatility 2** 进行。
### 4.3 内存分析路径
脚本的内存分析部分旨在提取:
* 正在运行的进程,
* 网络连接,
* 已执行的命令,
* DLL 列表,
* 哈希,
* 注册表相关信息,
* SID。
对于 Volatility 2 路径,脚本使用 `imageinfo` 识别配置文件,将其存储在变量中,然后运行:
* `pslist`
* 根据配置文件的适用性运行 `netscan` 或 `connscan`
* `cmdline`
* `cmdscan`
* `consoles`
* `dlllist`
* `hivelist`
* `hashdump`
* `getsids`
* `dumpregistry`
这种设计非常重要,因为某些命令历史记录证据在 `cmdline` 或 `consoles` 中比在 `cmdscan` 中更明显,而且哈希提取需要在调用 `hashdump` 之前定位正确的 SYSTEM 和 SAM 配置单元偏移量。
### 4.4 数据雕刻与可读痕迹追踪
内存分析之后,脚本使用以下工具执行自动雕刻:
* **Foremost** 用于基于文件类型的雕刻,
* **Bulk Extractor** 用于广泛特征提取、雕刻出的痕迹以及潜在的网络恢复。
然后,脚本对完整输入运行 `strings`,并将输出过滤到第二个文件中,突出显示可能感兴趣的关键痕迹,例如:
* 密码和类似凭据的字符串,
* 用户名和与登录相关的词汇,
* 电子邮件地址,
* IPv4 地址,
* Windows 可执行文件和 DLL,
* 其他可疑或与调查相关的可读内容。
### 4.5 报告与打包
在工作流结束时,脚本会写入一个结构化的 `report.txt`,生成详细的 `results_inventory.txt`,在 `failures_skipped.txt` 中记录跳过或警告信息,并将完整的案例目录压缩成 ZIP 归档文件。
这使得输出既适合评分也适合分析人员审查,因为用户会获得:
* 一份可读的报告,
* 已保存文件的详细清单,
* 一个用于提交或传输的单一打包归档。
## 5. 验证执行结果
### 5.1 Volatility 配置文件识别
Volatility 2 的 `imageinfo` 输出建议了以下候选配置文件:
* `VistaSP1x86`
* `Win2008SP1x86`
* `Win2008SP2x86`
* `VistaSP2x86`
脚本为实际的 Volatility 2 分析路径选择并使用了 **`VistaSP1x86`**。
### 5.2 进程枚举
保存的 `pslist` 输出显示了一个活动的 Windows 系统,其中包含核心操作系统和服务进程。代表性示例包括:
* `System`
* `smss.exe`
* `services.exe`
* `lsass.exe`
* `dns.exe`
* `snmp.exe`
* `ftpbasicsvr.exe`
* `explorer.exe`
进程列表表明,该内存映像属于一个运行着多个用户和服务组件的实时 Windows 环境,而不是一个最小化或非活动的内存状态。

### 5.3 网络连接
`netscan` 输出恢复了多个监听端口和服务绑定。运行输出中可见的示例包括:
* **445/TCP**
* **3389/TCP**
* **53/TCP**
* **21/TCP**
* **8080/TCP**
* **161/UDP**
* **135/TCP**
地址 **192.168.119.191** 也出现在恢复的网络数据中,确认该映像包含有意义的网络状态,而不仅仅是本地进程元数据。
这些结果支持了这样一个结论:内存映像保留了与事件响应和主机画像相关的可恢复服务暴露和网络配置信息。

### 5.4 命令历史与用户活动
脚本尝试了 `cmdline`、`cmdscan` 和 `consoles`,以最大化恢复已执行命令痕迹的几率。
在这次运行中,最有用的证据来自 `cmdline` 和 `consoles`。恢复的控制台历史记录显示了交互式管理命令,例如:
* `net user waldo qwerty`
* `net user /?`
* `net user waldo qwerty /add`
* `net user YOUR-NAME letmein /add`
* `net user waldo Apple123 /add`
* `net user YOUR-NAME SuperSecret! /add`
这一点意义重大,因为它证明了内存映像保留了用户管理活动的明确证据,包括从管理员会话中进行的账户创建尝试和成功添加的操作。


### 5.5 哈希、注册表数据和 SID
脚本使用 `hashdump` 成功恢复了账户哈希。输出包含以下账户的哈希:
* `Administrator`
* `Guest`
* `student`
* `probe`
* `waldo`
* `YOUR-NAME`
这是一个很有价值的 DFIR 结果,因为它证实了工作流可以超越简单的进程列表,从内存中恢复与身份和凭据相关的痕迹。
脚本还转储了 **13 个注册表配置单元文件**,包括关键配置单元,例如:
* `SYSTEM`
* `SAM`
* `SOFTWARE`
* `SECURITY`
* `COMPONENTS`
* `DEFAULT`
* `BCD`
* 多个 `NTUSERDAT` 配置单元
* `UsrClassdat`
此外,脚本还将 SID 输出保存到了 `vol2_getsids.txt` 中,允许将账户到 SID 的审查作为案例证据的一部分。

## 6. 雕刻与人类可读痕迹恢复
### 6.1 Foremost 结果
Foremost 阶段创建了 **841 个常规文件**。根据运行清单,主要的恢复文件类别为:
* **487 个 DLL 文件**
* **128 个 EXE 文件**
* **101 个 HTM 文件**
* **47 个 GIF 文件**
* **39 个 PNG 文件**
* **24 个 BMP 文件**
* **10 个 JPG 文件**
* **4 个 AVI 文件**
这表明内存映像中包含大量可恢复的 Windows 程序和呈现类痕迹。
### 6.2 Bulk Extractor 结果
Bulk Extractor 在案例文件夹中生成了 **19,183 个常规文件**。在清单中观察到的值得注意的类别包括:
* **11,190** 个 **`evtx_carved`** 痕迹
* **4,456** 个 **`ntfsmft_carved`** 痕迹
* **1,427** 个 **`ntfsusn_carved`** 痕迹
* **916** 个 **`winpe_carved`** 痕迹
* **571** 个 **`ntfslogfile_carved`** 痕迹
* **560** 个 **`ntfsindx_carved`** 痕迹
此次运行还创建了一个恢复的网络捕获文件* `dump2_analysis_20260316_210034/bulk_extractor/packets.pcap`
* 大小:**1.2M**
这非常有用,因为案例包中包含一个独立的网络痕迹,稍后可以在 Wireshark 或其他数据包分析工具中进行检查。

### 6.3 Strings 与过滤后的可读痕迹
完整的 strings 输出被写入 `strings/all_strings.txt`,过滤后的针对调查的输出被写入 `strings/strings_of_interest.txt`。
验证运行产生了 **60,096 次感兴趣的字符串命中**。这些命中包括大量对以下内容的可读引用:
* `.exe` 和 `.dll` 文件,
* 用户名和用户管理术语,
* 密码和与凭据相关的文本,
* IPv4 地址,
* 类似电子邮件的字符串,
* 与管理员相关的术语。
strings 阶段对于分诊非常有用,因为它可以快速展现可能具有人类意义的痕迹,而无需分析人员手动审查完整的原始 strings 输出。
## 7. 输出结构与案例交付物
经验证的运行生成了一个案例文件夹,其中包含主要的内存分析文件、雕刻目录、strings 输出、注册表配置单元转储和报告文件。保存结构的简化视图如下所示:
```
Project case folder
└── dump2_analysis_20260316_210034/
├── report.txt
├── results_inventory.txt
├── failures_skipped.txt
├── vol2_imageinfo.txt
├── vol2_pslist.txt
├── vol2_netscan.txt
├── vol2_cmdline.txt
├── vol2_cmdscan.txt
├── vol2_consoles.txt
├── vol2_dlllist.txt
├── vol2_hivelist.txt
├── vol2_hashdump.txt
├── vol2_getsids.txt
├── vol2_dumpregistry_log.txt
├── registry_hives/
├── foremost/
├── bulk_extractor/
└── strings/
```
### 7.1 主要输出文件
| 输出 | 用途 |
| ---------------------------------------- | ---------------------------------------------------- |
| `report.txt` | 人类可读的执行摘要和案例统计信息 |
| `results_inventory.txt` | 逐个文件的生成案例输出清单 |
| `failures_skipped.txt` | 执行期间记录的警告和跳过的项目 |
| `vol2_imageinfo.txt` | 配置文件检测和映像元数据 |
| `vol2_pslist.txt` | 恢复的进程列表 |
| `vol2_netscan.txt` | 网络连接和监听端口 |
| `vol2_cmdline.txt` / `vol2_consoles.txt` | 命令和控制台活动 |
| `vol2_hashdump.txt` | 提取的账户哈希 |
| `vol2_getsids.txt` | SID 提取输出 |
| `registry_hives/` | 转储的注册表配置单元文件 |
| `bulk_extractor/packets.pcap` | 恢复的数据包捕获痕迹 |
| `strings/strings_of_interest.txt` | 过滤后的可读痕迹命中 |
### 7.2 记录的跳过/警告状态
在已验证的运行中仅记录了一次跳过:
* 跳过了 `connscan`,因为 `VistaSP1x86` 是一个配置文件,其中 `netscan` 才是适合该配置文件的插件。
这是一种受控且预期的跳过,而不是执行失败。

## 8. 讨论
验证运行表明,该脚本实现了 Project Breach Trail 的主要目的:它将单个输入证据文件转换为结构化的取证案例包,其中包含内存分析输出、雕刻出的痕迹、可读的 string 分诊结果、注册表数据、哈希、SID 和压缩归档。
从工程的角度来看,该脚本非常有用,因为它结合了:
* 面向分析人员的输出预览,
* 自动保存的结果文件,
* 多种互补的雕刻方法,
* 在设计中同时支持 Volatility 2 和 Volatility 3,
* 适合提交或后续审查的最终打包交付物。
从调查的角度来看,`dump2.mem` 的运行特别有价值,因为它不仅恢复了一般的操作系统痕迹,还恢复了用户管理命令历史记录、监听服务、数据包捕获输出、转储的注册表配置单元和本地账户哈希。
## 9. 结论
Project Breach Trail 成功演示了一个适用于 Kali Linux 的基于 Bash 的取证工作流,该工作流可自动执行内存分析和数据雕刻,同时为分析人员保留可读的输出。在针对 `dump2.mem` 的已验证运行中,该工作流:
* 识别出了可用的 Windows 内存配置文件,
* 恢复了进程、网络状态、命令历史证据、哈希、SID 和注册表配置单元,
* 使用 Foremost 和 Bulk Extractor 雕刻了大量痕迹,
* 定位到了可恢复的 `packets.pcap` 文件,
* 生成了大量过滤后的 strings 痕迹集,
* 将完整案例保存到结构化目录中,
* 生成了用于打包和提交的最终 ZIP 归档。
总体而言,该脚本为基础的 DFIR 分诊提供了实用且可重复的基础,并且与项目说明书的核心要求高度契合。
## 10. 参考文献
* Volatility Foundation. *Volatility Command Reference*.
* Volatility 3 Documentation.
* Bulk Extractor Wiki.
* Foremost.
标签:Bash, JARM, 内存分析, 库, 应急响应, 应用安全, 数字取证, 数字取证, 自动化脚本, 自动化脚本