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 备份,并扫描过去还原点中的文件,以寻找恶意软件、被篡改的二进制文件和其他可疑行为的迹象。最棒的是:它配备了一个美观且易于使用的仪表板,向你展示所有内容。 ![alt text](https://github.com/yetwittermightytool/retro-hunter/blob/main/Images/retro-hunter.png) 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, 备份审计, 威胁情报, 开发者工具, 恶意软件扫描, 测试用例, 网络信息收集, 请求拦截, 逆向工具