yetanothermightytool/retro-hunter
GitHub: yetanothermightytool/retro-hunter
Retro Hunter 是一款基于 Python 的 Veeam 备份还原点安全扫描与威胁审计工具,帮助安全团队在历史备份中检测恶意软件、可疑文件和异常模式。
Stars: 0 | Forks: 0
# 注意事项
**get-malware-csv.py 已不再可用。你需要一个 auth key 才能获取恶意软件哈希的 CSV 文件。**
# Retro Hunter 🕵🏾♀️
**安全扫描与威胁审计工具**,用于通过 Veeam Data Integration API 扫描 Veeam Backup & Replication 的还原点。
## 🛡️使用 Retro Hunter 在备份中查找威胁
想象一下,你负责公司的安全工作。你有备份,并且你信任它们。但是,如果恶意软件或可疑文件现在正隐藏着,或者几周前曾悄悄活跃过呢?如果能像乘坐时光机一样查看备份内部并搜索威胁,那不是很好吗?
这正是 Retro Hunter 所做的!
它直接连接到你的 Veeam 备份,并扫描过去还原点中的文件,以寻找恶意软件、被篡改的二进制文件和其他可疑行为的迹象。最棒的是:它配备了一个美观且易于使用的仪表板,向你展示所有内容。

Retro Hunter 是一个基于 Python 的轻量级工具包,可扫描 Veeam Backup & Replication 的还原点,以查找恶意软件、可疑二进制文件和异常模式。它允许你调查历史还原点并随着时间的推移执行定期扫描。通过与 MalwareBazaar 等威胁情报源集成,它会持续检查已知的文件哈希并监控扫描结果。
## ✅ 关键功能
- 从特定主机或 Veeam Backup Repository 搜索 Veeam 备份
- 通过 Veeam Data Integration API 挂载手动选择的备份,或从 Veeam Backup Repository 挂载所有受支持平台的最新还原点
- 扫描已挂载的 Veeam 还原点
- 保存所呈现文件中的有用元数据
- 使用 Python 的 multiprocessing 进行并行扫描,以实现高性能
- 跟踪还原点之间的文件更改
- 使用 MalwareBazaar 的哈希查找(离线)检测已知恶意软件
- 识别不合适的 LOLBAS (Living Off the Land Binaries and Scripts)
- 在扫描期间有选择地将 YARA 规则应用于选定的文件类型
- 可选地扫描 Windows Eventlog 以查找特定的 event-ids(Security/PowerShell/Sysmon) **🔴 在 v2.4 中增强**
- 可选地扫描特定的 Windows Registry Hives **🔴 在 v3.0.1 中扩展**
- 具备此 [脚本](https://github.com/yetanothermightytool/python/blob/main/vbr/vbr-nas-av-scan/README.md) 的所有功能以及 YARA 扫描功能的 NAS AV 扫描。扫描结果可在 Streamlit 仪表板中查看 **🔴 v2.3 中的新功能**
- 使用 PostgreSQL 作为数据库。
## 🚀 快速开始 (tl;dr)
运行 setup 脚本并开始扫描!执行带有 `malwarebazaar.csv` 文件路径的 `setup.sh` 来初始化环境和数据库。完成后,你可以使用 `retro-hunter.py` 分析已挂载的还原点以查找恶意软件、LOLBAS 和 YARA 命中结果,索引所有可执行文件和脚本,扫描 Windows 注册表或扫描特定的 Windows Eventlogs。最后,打开位于 https:// 的仪表板来探索结果。
**重要提示** 你必须将执行此脚本的 Linux 服务器添加到[备份基础架构](https://helpcenter.veeam.com/docs/backup/vsphere/add_linux_server.html)中。
**已在 UBUNTU 24.04 上测试**
## 版本信息
```
Version: 3.0.1
Requires: Veeam Backup & Replication & Linux & Python 3.1+
Author: Stephan "Steve" Herzig
```
## ⚙️ 设置过程
使用 setup.sh 脚本简化了设置过程。你只需要下载 malwarebazaar.csv 文件(更多信息请参见[脚本的技术细节](#database))并在你的 Linux 主机上运行该脚本。在设置过程中,系统会要求你提供 Veeam Backup & Replication Server 主机名、REST API 用户和密码。密码将使用 Fernet 安全地加密和存储。该脚本现在还会要求输入用于 NAS 扫描器的 SMB 密码 **🔴 v2.3 中的新功能**
```
./setup.sh /path/to/malwarebazaar.csv /path/to/retro-hunter-dir
```
## 🐳 Docker 支持
提供了一个 Docker 设置,用于将 Nginx、Web 前端、后端(REST API)和 PostgreSQL 数据库作为容器运行。
## 🛠️ 脚本的技术细节
## 前提条件
运行此脚本需要进行一些准备工作。
### Veeam Backup & Replication
- 你必须将执行此脚本的 Linux 服务器添加到[备份基础架构](https://helpcenter.veeam.com/docs/backup/vsphere/add_linux_server.html)中。
- 为 REST API 访问创建一个单独的用户。该用户必须被分配“Veeam Backup Administrator”角色。
### Python 模块
以下 Python 模块不属于标准库,必须使用 pip 单独安装。requirements.txt 包含了必要的模块。
- python3-pip
- python3-venv
- python3-evtx
- python3-yara
- python3-colorama
- python3-requests
- python3-dateutil
- python3-magic
- python3-pefile
- python3-psycopg2
- python3-dotenv
- python3-cryptography (用于 cryptography.fernet.Fernet)
- 以及更多用于 Docker 容器的模块(requirements.txt)
## YARA 规则
将额外的 YARA 规则文件保存在脚本文件夹目录 yara_rules 中。(文件扩展名为 .yar 和 .yara)。示例规则存储在 yara_rules 目录中。
### YARA 规则生成器
该网页包含一个 YARA 规则生成器,它根据存储的具有高熵和 PE 元数据的可执行文件创建规则。
## 数据库内容
malwarebazaar 表包含恶意软件文件的 SHA256 值。下载完整的[数据转储](https://bazaar.abuse.ch/export/#csv),并将 CSV 文件解压为 malwarebazaar.csv 到存储 setup.sh 脚本的文件夹中。setup.sh 脚本会将这些值导入数据库。
## Retro Hunter Python 脚本
### 脚本参数
必须将以下参数传递给脚本
- `--host2scan`
必须为其呈现备份的主机名。
- `--repo2scan`
检索主机和还原点的存储库名称。可以与 --all 结合使用。
- `--all`
_(可选)_ 扫描指定存储库中所有有效主机的最新还原点。建议与 --iscsi 一起使用以获得更好的性能。
受支持的平台是 VMware 和 Hyper-V。
- `--scan`
通过在挂载还原点后执行 scanner.py 脚本来触发恶意软件和威胁检测扫描。
- `--store`
通过在挂载还原点后执行 store.py 脚本来收集所有相关二进制文件的元数据。
- `--maxhosts`
_(可选)_ 使用 --all 时并行扫描的最大主机数。(默认 1)
- `--workers`
_(可选)_ 扫描过程要使用的 worker 数量。(默认 4)
- `--iscsi`
_(可选)_ 使用 iSCSI 呈现备份。只能扫描具有 NTFS、ext4 和 xfs 文件系统的文件系统。
- `--yaramode`
_(可选)_ YARA 扫描模式 - off(默认)、all、suspicious(仅扫描显示出入侵指标的文件)、content(针对常见的文档/文本文件以检测敏感数据模式,例如 PII、凭据)、highentropy
- `--evtscan`
_(可选)_ 启用对 Windows 事件日志的扫描
- `--evtlogs`
_(可选)_ 要扫描的 EVTX 日志文件的逗号分隔列表
- `--days`
_(可选)_ 将 EVTX 解析限制在还原点时间戳前 N 天内的事件
- `--regscan`
_(可选)_ 启用对 Windows 注册表的扫描 **🔴 已增强**
- `--dryrun`
_(可选)_ 仅显示可用的还原点。**🔴 V3.0 中的新功能**
### 示例
有关如何执行脚本的一些示例。
扫描主机 win-server-01。使用 iSCSI 呈现还原点。
```
sudo ./retro-hunter.py --host2scan win-server-01 --iscsi --scan
```
扫描 Veeam Repository "Repository 01" 中所有受支持主机的最新还原点。发现可疑文件时,触发 YARA 扫描。使用 iSCSI 呈现还原点。
```
sudo ./retro-hunter.py --repo2scan "Repository 01" --yaramode suspicious --iscsi --scan
```
## 脚本
### 扫描过程细节 (scanner.py)
特定文件夹会从扫描过程中排除。你可以使用现有的 DEFAULT_EXCLUDES 变量调整列表。
### scanner.py 参数
Retro Hunter Python 脚本未使用所有可用的 scanner.py 参数。如有必要,可以对此进行调整。
- Mount 已挂载备份文件系统的路径
可选参数
- `--Filetypes`
_(可选)_ 文件扩展名的逗号分隔列表(例如:.exe,.dll)")
- `--Maxsize`
_(可选)_ 最大文件大小(以 MB 为单位)
- `--Exclude`
_(可选)_ 实验:要排除的目录的逗号分隔列表(部分路径)
- `--CSV`
_(可选)_ 将结果保存到此 CSV 文件
- `--Verbose`
_(可选)_ 打印所有扫描的文件,而不仅仅是匹配的文件
- `--Logfile`
_(可选)_ 用于匹配项的日志文件路径(可能会被移除)
- `--yara`
_(可选)_ YARA 扫描模式(off、all、suspicious、content)
## store.py 脚本细节
该脚本扫描已挂载的文件系统,并收集选定文件(使用 DEFAULT_BINARY_EXTS 列表或 --filetypes)的详细元数据。它为每个文件计算 SHA-256 哈希,并将所有数据存储在本地 PostgreSQL 数据库中。如果数据库不存在,则会在首次运行时自动创建。存储的元数据包括文件名、路径、大小、时间戳、扩展名、文件类型以及该文件是否可执行。每个条目都标记有主机名、还原点 ID 和时间戳,从而可以在备份之间进行后续比较。
该脚本支持并行处理,并且可以使用多个 CPU 核心来加快扫描速度。可以应用过滤器来限制要扫描的文件:仅扫描特定的文件类型(如 .exe 或 .dll)、最大文件大小以及要排除的文件夹。
该脚本提取与过滤器匹配的每个文件的关键信息,并计算其 SHA-256 哈希。所有收集的数据都将插入数据库中,除非已存在具有相同主机名和哈希的条目。
### 文件类型检测(简单说明)
该脚本根据文件的扩展名检测文件:
- 可执行文件:.exe、.dll、.bin、.sh 等。
- 脚本:.py、.js、.ps1、.bat
- 图像:.jpg、.png、.gif 等。
- 文档:.pdf、.docx、.txt 等。
- 归档文件:.zip、.tar、.7z 等。
### 熵计算
熵是使用 Shannon 熵公式计算的,该公式基于文件中字节值的分布。该脚本读取每个文件的完整内容,并计算字节值(0–255)分布的均匀程度,这反映了数据的随机性。高度随机的内容是加密、加壳或混淆文件的典型特征——这些技术通常被恶意软件用来逃避检测。
当在 AppData、ProgramData、Temp、Public、Downloads 或 Recycle.Bin 等目录中发现此类高熵文件时,它们会被标记为可疑。这些位置经常被攻击者滥用,用于暂存或隐藏 payload,因为它们是可写的,并且通常被排除在日常检查之外。通过将熵水平与文件系统路径相关联,仪表板视图旨在呈现出值得进一步分析的文件,即使它们尚未被基于签名的扫描器标记。
### 熵分类范围
| 熵范围 | 描述 |
|---------------|-----------------------------------------------------------------------------|
| 0.0 – 3.5 | 极低熵——可能是纯文本、配置文件或未压缩的数据。 |
| 3.5 – 6.5 | 中等熵——常见于标准的可执行文件、DLL、脚本等。 |
| 6.5 – 7.5 | 偏高熵——可能表明存在轻度压缩或某种程度的混淆。 |
| > 7.5 | 高熵——可能是加壳、加密或恶意的(例如,恶意软件)。 |'
对于具有高熵(>= 7.5)的可执行文件,store.py 会自动提取额外的元数据,包括文件类型签名(Magic)和可移植可执行(PE)属性,以支持更深入的恶意软件分析。它有助于检测加壳的恶意软件、编译日期较近的恶意软件释放器以及潜在的多余程序。结果显示在仪表板中。(熵 >= 7.9 且 PE 时间戳 > 2024-06-15)
### 参数描述
- `--mount`
_(必选)_ 要扫描的根目录
- `--hostname`
_(必选)_ 此数据所属主机的名称
- `--restorepoint-id`
_(必选)_ Veeam 还原点 ID
- `--rp-timestamp`
_(必选)_ 还原点的时间戳
- `--Filetypes`
_(可选)_ 要扫描的文件扩展名(逗号分隔)
- `--workers`
_(可选)_ 要使用的并行 worker 进程数(默认值:CPU 核心数的一半)
- `--maxsize`
_(可选)_ 包含的最大文件大小(以 MB 为单位)(例如,跳过巨大的 ISO 文件)
- `--exclude`
_(可选)_ 要跳过的文件夹名称的逗分隔列表
- `--db`
_(可选)_ SQLite 数据库路径(默认为 file_index.db)
## event-parser.py 脚本
event-parser.py 脚本从 Windows 事件日志中提取并分析与安全相关的事件。它侧重于一组已知的、表明潜在威胁、策略更改或可疑 PowerShell 用法的 Event IDs(Security & PowerShell 事件日志)。
• Windows Security Event Ids(高严重性)
event-parser.py 脚本从 Windows 事件日志中提取并分析与安全相关的事件。它侧重于来自 Windows Security 和 PowerShell 事件日志的一组 Event IDs,这些 ID 已知表明存在潜在威胁、策略更改或可疑活动。
• Windows Security Event IDs
4618, 4649, 4719, 4765, 4766, 4794, 4897, 4964, 5124, 1102
该列表基于 Microsoft 的官方建议(要监视的事件)。
• PowerShell Event IDs
800, 4104
• Sysmon Event IDs
该脚本已扩展为还支持 Sysmon 事件,允许在 Sysmon 可用时收集基于主机的遥测数据,例如进程、网络、文件和注册表活动。
1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 15, 22, 23, 25
要解析多个日志源,可以使用以下命令调用该脚本:
```
--evtlogs Security.evtx,Microsoft-Windows-Sysmon%4Operational.evtx,Microsoft-Windows-PowerShell%4Operational.evtx
```
这些事件会被解析、存储在数据库中,并在仪表板中按严重性分类(高/中高)进行可视化。
## 注册表扫描器脚本细节
registry-scan.py 脚本扫描离线的 Windows 注册表配置单元,查找与安全相关的注册表项和值。它侧重于已知的持久化机制、执行劫持技术、取证工件以及恶意软件、攻击者或管理工具常用的配置更改。
该脚本解析 SYSTEM、SOFTWARE 和用户特定的 NTUSER.DAT 配置单元,将注册表项与一组预定义的可疑模式(ASEP、服务、驱动程序、Winlogon、Run keys、Defender 配置、用户活动、网络工件)进行匹配。
## NAS AV 扫描器 **🔴 新功能**
与此 [脚本](https://github.com/yetanothermightytool/python/blob/main/vbr/vbr-nas-av-scan/README.md) 中的脚本功能和参数相同,不同之处在于 scan-engines.json 还包含 YARA 的路径(需要先安装)。nas-scanner.py 脚本必须与 retro-hunter.py 脚本分开运行。所有发现都存储在 PostgreSQL 数据库中,并在 Streamlit 仪表板的 Scans 标签页中进行可视化。
## Retro Hunter Malware Bazaar CSV 下载器 **🔴 新功能**
只需运行 get-malware-csv.py
## Retro Hunter PostgreSQL 清理脚本 (db-cleaner.py)
此脚本从你的 Retro Hunter 环境中的关键 PostgreSQL 表中删除过时的条目:
• files
• scan_findings
• win_events
• registry **🔴 新功能**
• nas_scan_findings(待添加)
### 选项
选项 描述
- `--days N` 删除超过 N 天的条目(基于还原点时间戳字段)
- `--dry-run` 仅显示将删除的内容,不执行任何删除
- `--clean-only` 仅删除未被标记为恶意软件/YARA/LOLBAS 命中的条目
- `--host HOSTNAME` 将清理范围限制为特定的主机名
### 示例
Dry-run:预览 60 天以前的删除内容
```
./db-cleaner.py --days 60 --dry-run
```
彻底删除旧的非恶意数据
```
./db-cleaner.py --days 90 --clean-only
```
仅清理特定主机
```
./db-cleaner.py --days 30 --host WIN-VM1
```
## 即将推出
- 很多想法。敬请期待
## 可能的改进
- 在 Veeam Backup & Replication 中将已扫描的还原点标记为已感染。
- 还有一些我目前正在研究的其他不错的东西。
- 一个包含 OS 和设置脚本的 ISO 文件怎么样?(已经有一个可供使用了)
## 注意事项和限制
- 脚本已在 Ubuntu 24.04 以及 Veeam Backup & Replication 12.3.1、12.3.2 和 13.0.1 上创建并测试。retro-hunter.py 脚本使用 REST API 版本 1.3-rev0。
- 当使用 iSCSI 呈现还原点时,只能扫描 NTFS 文件系统
- 挂载 NTFS 磁盘时,重要的是要知道 Ubuntu(从 24.04 及更高版本开始)使用内置的 ntfs3 内核驱动程序,它提供了更好的性能和更稳定的访问。相比之下,Rocky Linux 和其他基于 RHEL 的系统通常通过 FUSE 依赖较旧的 ntfs-3g 驱动程序,由于它在用户空间中运行,因此速度较慢。这意味着处理 NTFS 的方式可能会因系统而异。从技术上讲,可以将 Rocky Linux 升级到更新的内核(5.15 或更高版本)以支持原生的 ntfs3 驱动程序。使用 -t ntfs 参数时,尤其是在连接了 iSCSI 磁盘的情况下,挂载 NTFS 卷效果很好。FUSE 不起作用,目前没有在这方面进行进一步的研究。
## 版本历史
- 3.0.1(2026 年 2 月 28 日)
- 安全强化
- 所有主脚本(retro-hunter、scanner、regscan、evtscan)的性能和稳定性改进
- 为正式“发布”做的其他准备
- 3.0(2026 年 1 月)
- 移除 Streamlit
- 用于 Web Portal 的前端容器,包括用户管理(admin & viewer 角色)
- 用于数据库查询的后端容器
- 用于前端访问的 Nginx 容器
- 更新了 Setup.sh
- 更新 Malwarebazaar 表和代码的 Update.sh
- 2.4(2026 年 1 月 5 日)
- 事件解析器:增加了对解析 Sysmon 事件日志的支持
- 修复了 Streamlit 仪表板并增加了 Sysmon 事件列表
- 2.3(2025 年 11 月 18 日)
- 增强了 Windows 注册表扫描器
- NAS AV 扫描器(包含 Scans 标签页中的结果)
- 2.2(2025 年 8 月 13 日)
- 清理 Streamlit 仪表板。当表不存在(脚本未运行)时没有错误消息
- Streamlit 仪表板现在具有用于更好 UI 体验的标签页(已在 Streamlit 1.48.0 上测试)
- 数据库清理脚本(db-cleaner.py)
- 改进了 registry-scan.py 脚本。添加了额外的键
- event-parser.py 脚本现在扫描扩展的事件 ID(EXTENDED_EVENT_IDS - 可选)
- 用于分析 Windows 注册表条目的 registry-analyzer.py 脚本。
- 2.1(2025 年 8 月 5 日)
- Windows 注册表扫描器
- 2.0(2025 年 7 月 18 日)
- 使用 PostgreSQL 作为数据库。
- 1.3(2025 年 7 月 14 日)
- scanner.py 中新的 YARA highentropy 模式使用存储的 YARA 规则开始扫描
- store.py 脚本为高熵可执行文件提取文件类型签名(Magic)和可移植可执行元数据
- Store.py 脚本优化
- Streamlit 仪表板更新以显示高熵可执行文件
- Streamlit 仪表板中针对高熵可执行文件的 YARA 规则生成器
- 1.2(2025 年 7 月 8 日)
- scanner.py 现在还保存找到的 LOLBAS 文件的 SHA256 值
- Streamlit 仪表板日期过滤器现在应用于显示还原点日期的所有表
- Streamlit 仪表板错误修复(空表)
- store.py 脚本现在执行熵分析(Shannon 公式)
- setup.sh 脚本错误修复
- 1.1(2025 年 6 月 26 日)
- repo2scan 现在支持 Scale-Out Backup Repositories
- 存储特定的 Windows 事件日志条目(首先是 Security & PowerShell 事件日志)
- 仪表板更新
- 1.0(2025 年 6 月)
- 初始版本
## 免责声明
**此脚本不受 Veeam Software 的官方支持。使用风险自负。**
用 ❤️ 制作,以 🍺 为动力,由 **Veeam Data Integration API** 提供支持。
受现实需求的启发,并在一点人工智能的支持下强化了脚本。
标签:DNS 反向解析, Kubernetes, Veeam, 备份审计, 威胁情报, 开发者工具, 恶意软件扫描, 测试用例, 网络信息收集, 请求拦截, 逆向工具