MDP-Studio/rmm-hunter
GitHub: MDP-Studio/rmm-hunter
RMM Hunter 是一个Windows桌面扫描器,用于检测未授权的远程访问工具和驻留技术痕迹,辅助安全团队进行端点风险评估和事件研判。
Stars: 0 | Forks: 0
# uld be "CLI" itself, but that's not Chinese. I think I need to output the Chinese equivalent while preserving the English term.
独立的 Windows 扫描器,用于检测未授权的远程访问工具、驻留技术痕迹以及影响事件研判置信度的本地信任健康信号。
由 Meidie 创建和维护,由 MDP Studio 发布。
RMM Hunter 是一个分诊工具。它收集端点数据,应用本地规则,并产生以下分类:
- `clean`
- `needs_review`
- `high_risk`
它不会删除文件、停止服务、卸载软件、隔离数据或更改系统设置。
## 联系方式
网站:`https://rmmhunter.mdpstudio.com.au`
代码仓库:`https://github.com/MDP-Studio/rmm-hunter`
下载地址:`https://github.com/MDP-Studio/rmm-hunter/releases`
安全报告和项目联系邮箱:`meidie@mdpstudio.com.au`
除非被要求,否则不要发送原始扫描报告。报告可能包含用户名、文件路径、命令行片段、服务名称、任务操作和事件摘录。
## 为何创建此工具
威胁行为者经常滥用合法的远程监控和管理工具,因为它们能融入正常的 IT 活动。此 MVP 专注于分析师或小型企业运营者需要快速解答的问题:
- 是否安装了已知的远程访问工具?
- 它是否作为服务或计划任务运行?
- 它是否从 `Downloads`、`Temp` 或其他用户可写路径出现?
- 是否有需要审查的近期服务安装、PowerShell、Defender、WMI 或进程创建痕迹?
- Defender 和 Windows 代码签名的信任度是否足够高,可以确信地解读安全证据?
## 当前范围
Windows MVP:
- 从卸载注册表键获取已安装程序信息
- Windows 服务,包括可执行文件路径和 Authenticode 摘要(如可用)
- 近期服务创建事件,事件 ID `7045`
- 计划任务
- 启动注册表键和启动文件夹
- 下载和临时位置中的近期安装程序和脚本文件
- 用于 AnyDesk、TeamViewer、ScreenConnect、RustDesk、Splashtop、Atera、MeshAgent 和 DWAgent 等工具的 RMM 厂商日志位置
- 可选导入 KAPE 输出以获取来自 DFIR 数据集合的 RMM 引用
- Defender 事件(如可用)
- Defender 健康状况、安全智能更新时间和可疑排除项(如可用)
- Windows 代码签名验证检查(针对已知的已签名 Windows 二进制文件)
- 受信任的根存储摘要和不寻常的受信任根私钥信号
- PowerShell Operational 和 Windows PowerShell 日志(如可用)
- 安全进程创建事件(如可用),事件 ID `4688`
- WMI 活动事件(如可用)
- 基于带时间戳的发现构建的时间线条目
- 每个发现的证据强度和置信度标签
初始规则涵盖的已知远程访问工具:
- ScreenConnect / ConnectWise Control
- SimpleHelp
- AnyDesk
- TeamViewer
- MeshAgent / MeshCentral
- Tactical RMM
- Atera
- Splashtop
- RustDesk
- DWAgent / DWService
后续平台范围:
- macOS:LaunchAgents、LaunchDaemons、登录项、已安装应用、远程管理设置、Shell 痕迹
- Linux:systemd、cron、SSH 登录痕迹、Shell 历史记录提示、远程代理、auditd(如可用)
- 移动端:无原生扫描器。仅支持 MDM 和状态检查。
## 快速开始
### 桌面 GUI
安装一次桌面依赖项:
```
npm.cmd install
```
启动 Windows 桌面应用:
```
npm.cmd start
```
GUI 提供以下功能:
- 大型 `扫描此设备` 操作按钮
- 收集和分析期间的进度屏幕
- 仪表板判定结果:`clean`、`needs_review` 或 `high_risk`
- 每个发现的证据卡片
- 证据强度、置信度标签和发现时间线上下文
- 通俗易懂的发现解释和非破坏性审查操作
- 用于 PowerShell URL/域名、Defender 威胁操作、受影响资源和 Defender 设置更改的提取上下文
- 系统信任健康卡片,显示 Defender 状态、安全智能更新时间、广泛排除项、代码签名验证和受信任根存储审查
- 用于跨发现的时间线数据的时间线面板
- 确定性的推荐后续步骤
- GitHub Releases 更新检查和已安装 Windows 构建的安装程序自动更新
- 可选自带密钥的 AI 解释和建议
- 包含 GitHub issue、安全策略、隐私策略、私人邮箱和捐赠链接的“关于”和反馈部分
- JSON 和 PDF 导出
- 无自动删除或修复操作
可选的 AI 解释在应用内配置。运行扫描,点击 `AI 提示`,然后选择提供者并在提示时粘贴您自己的 API 密钥。如果未配置密钥,应用会在摘要旁显示设置通知,并且不会将报告数据发送到任何地方。使用该通知中的 `打开 API 密钥字段` 来打开提供者设置。
内置提供者预设:
- OpenAI:Responses API
- OpenRouter:OpenAI 兼容的聊天完成
- Groq:OpenAI 兼容的聊天完成
- 自定义 OpenAI 兼容端点
保存的 API 密钥存储在本地 Windows 用户配置文件中,并在可用时使用 Electron 安全存储进行加密。密钥不会写入扫描报告或导出文件中。
也支持环境变量,以便于便携或受管使用:
```
$env:OPENAI_API_KEY = "your-api-key"
npm.cmd start
```
提供者和模型覆盖:
```
$env:RMM_HUNTER_AI_PROVIDER = "openai"
$env:RMM_HUNTER_AI_MODEL = "gpt-5.2"
$env:RMM_HUNTER_AI_ENDPOINT = "https://api.example.com/v1/chat/completions"
$env:RMM_HUNTER_AI_API_KEY = "provider-api-key"
```
支持提供者特定的 API 密钥变量:`OPENAI_API_KEY`、`OPENROUTER_API_KEY` 和 `GROQ_API_KEY`。
默认 OpenAI 模型:`gpt-5-mini`。
AI 仅用于解释报告并建议后续步骤。它不会设置或更改扫描器的判定结果。在发送任何 AI 请求之前,桌面应用会发送一个最小化的报告摘要,并剥离或总结敏感值,如完整用户路径、邮箱、长令牌、编码数据块和原始事件负载。
### Looking back at the example: 'API Reference' -> 'API 参考', so "API" is kept, "Reference" is translated. Similarly, for "CLI", if it were "CLI Setup", I'd translate "Setup". But here, it's just "CLI". So, I should output "CLI" as is, or add a Chinese word? But the instruction is to translate, so I must provide a Chinese string.
为获得最佳覆盖范围,请从提升权限的 PowerShell 会话运行:
```
cd "C:\Users\meidi\Documents\personal project\RMM Hunter"
python .\rmm_hunter.py
```
默认输出写入到 `reports\` 目录下:
- 原始收集器数据 JSON
- 最终规则报告 JSON
- 人类可读的摘要文本
打包的桌面构建将扫描报告写入用户本地的 RMM Hunter 配置文件目录 `%LOCALAPPDATA%\RMM Hunter\reports` 中,以便已安装应用无需对其安装目录具有写入权限。
分析现有的收集器数据文件:
```
python .\rmm_hunter.py --input .\reports\rmm_hunter_artifacts_20260507T000000Z.json
```
为 SOC 或威胁情报工作流编写可选的映射检测导出:
```
python .\rmm_hunter.py --input .\reports\rmm_hunter_artifacts_20260507T000000Z.json --mapped-out .\reports\rmm_hunter_mapped.json
```
映射导出不会改变确定性的 `clean`、`needs_review` 或 `high_risk` 判定。它添加规则 ID、ATT&CK/D3FEND 映射、Sigma 风格标签和 STIX/MISP 对象提示,以供下游工具使用。
导入 KAPE 输出文件夹并生成常规 RMM Hunter 报告:
```
python .\rmm_hunter.py --kape-root "C:\Cases\Host01\KAPE\ModuleOutput" --json-out .\reports\host01_kape_rmm_report.json --summary-out .\reports\host01_kape_rmm_summary.txt
```
合并实时收集器数据文件与 KAPE 输出:
```
python .\rmm_hunter.py --input .\reports\rmm_hunter_artifacts_20260507T000000Z.json --kape-root "C:\Cases\Host01\KAPE\ModuleOutput"
```
请参阅 `docs/RMM_ARTIFACT_SOURCES.md` 和 `docs/RMM_ABUSE_INVESTIGATION_CHEATSHEET.md` 了解厂商日志矩阵、KAPE 解读说明和安全分诊工作流。
仅运行 PowerShell 收集器:
```
powershell -NoProfile -ExecutionPolicy Bypass -File .\collect_windows.ps1 -OutputPath .\reports\artifacts.json
```
## 发布构建
GitHub 发布构建以 Windows 为主。它将 Python 扫描器打包为 PyInstaller 可执行文件,然后使用 Electron Builder 打包 Electron 桌面应用。
当前公开下载链接发布在 GitHub Releases 上。在配置 SignPath 或其他受信任的签名路径之前,RMM Hunter 的 Beta 版本是未签名的,因此 Windows 可能会显示 `未知发布者` 或 Microsoft Defender SmartScreen 警告。请使用捆绑的 `SHA256SUMS.txt`、`rmm-hunter-release-manifest.json` 和 `VERIFY_RELEASE.md` 文件验证发布工件。
已安装的 Windows 应用可以检查 GitHub Releases 是否有更新版本,下载 NSIS 安装程序更新,并在用户点击更新操作后重启安装。更新检查不会发送扫描报告或工件。便携版构建仍可检查更新,但必须从发布页面手动替换。
版本早于 `0.1.2` 的构建仅会打开 GitHub 发布页面。手动安装一次 `0.1.2` 或更新版本后,后续的已安装构建即可使用应用内的下载和重启安装流程。
用户级 NSIS 安装程序会从当前用户的注册表键检测现有的 RMM Hunter 安装,保持现有的安装位置以避免重复的应用程序文件夹,在更新或修复时显示确认页面,并在升级期间保留本地报告、AI 设置和更新程序状态。如果已安装更新版本,安装程序会阻止旧版本构建而不是降级它。
Windows 应用图标位于 `gui/assets/icon.ico`,其 SVG/PNG 源文件在旁边。使用 ImageMagick 从 `gui/assets/icon.svg` 重新生成:
```
magick .\gui\assets\icon.svg -resize 1024x1024 .\gui\assets\icon.png
magick .\gui\assets\icon.png -define icon:auto-resize=256,128,64,48,32,16 .\gui\assets\icon.ico
```
安装构建依赖项:
```
npm.cmd ci
python -m pip install -r requirements-build.txt
```
运行完整的本地验证门禁:
```
npm.cmd run release:verify
pip-audit -r requirements-build.txt
```
直接运行种子覆盖语料库:
```
python .\scripts\evaluate_corpus.py --manifest .\tests\corpus\manifest.json
```
构建 Windows 安装程序和便携版工件:
```
npm.cmd run dist
```
发布打包时向 Electron Builder 传递 `--publish never`。GitHub 工作流在工件构建完成后显式创建草稿 GitHub 发布,并上传 `latest.yml`,以便已安装的 NSIS 构建可以从 GitHub Releases 自动更新。
仅打包,在 `npm.cmd run build:scanner` 已生成扫描器可执行文件之后:
```
npm.cmd run package:windows
```
扫描器构建脚本在设置 `RMM_HUNTER_PYINSTALLER` 时使用它,然后在存在 `.release-venv\Scripts\pyinstaller.exe` 时使用它,否则使用 `python -m PyInstaller`。
发布工件写入到 `release\` 目录。
GitHub Actions 工作流:
- `.github/workflows/release.yml`
- 手动 `workflow_dispatch`
- 推送 `v*` 标签时自动创建草稿发布
- 发布资产包括 `SHA256SUMS.txt`、`rmm-hunter-release-manifest.json`、`VERIFY_RELEASE.md` 和 `latest.yml`
提交后的示例标签流程:
```
git tag v0.1.6
git push origin v0.1.6
```
RMM Hunter 在 Apache License 2.0 下发布。npm 包仍标记为 `private` 以防止意外发布到注册表。
## 代码签名策略
RMM Hunter 的代码签名策略记录在 `docs/CODE_SIGNING_POLICY.md` 中。
当前状态:
- 当前 Beta 工件是未签名的构建。
- 未来的签名开源发布计划使用 SignPath Foundation(如果项目被接受)。
- 签名凭据和 API 令牌绝不应提交到仓库。
- 维护者和签名审批者必须为 GitHub 和 SignPath 账户启用多因素身份验证。
未来基于 SignPath 发布的签名策略声明:
```
Free code signing provided by SignPath.io, certificate by SignPath Foundation.
```
## 解读判定结果
`clean` 意味着收集的数据源不包含已知的 RMM 或可疑的驻留技术指标。这并不保证端点是安全的。
`needs_review` 意味着发现了合法但敏感的内容,例如在 Program Files 下安装的 TeamViewer,或类似于远程访问工具的计划任务/启动项。
`high_risk` 意味着扫描器发现了难以用已知管理操作解释的证据,例如:
- 服务可执行文件从 Downloads 或 Temp 运行
- 近期安装的已知 RMM 服务
- 编码的 PowerShell 痕迹
- Defender 恶意软件检测
- 从浏览器、Downloads 或 Temp 路径启动的 `msiexec`
## 隐私说明
报告可能包含用户名、文件路径、命令行片段、服务名称、任务操作和事件摘录。在审查之前不要发布原始报告。
可选的 AI 解释层默认关闭,需要用户提供者密钥或环境变量。如果启用,仅发送经过清理的报告证据给选定的 AI 提供者。确定性的 JSON 报告应作为技术审查的真实来源。
完整隐私政策:`PRIVACY.md`
## 安全和发布文档
- `SECURITY.md`:漏洞报告和发布安全检查清单
- `LICENSE`:Apache License 2.0 条款
- `docs/CODE_SIGNING.md`:Windows 签名和图标设置
- `docs/CODE_SIGNING_POLICY.md`:符合 SignPath 要求的项目签名策略
- `docs/VERIFY_RELEASE.md`:SHA256、Authenticode 和发布来源检查
- `PRIVACY.md`:本地报告处理和可选 AI 数据处理
- `docs/SECURITY_AUDIT.md`:当前安全审计摘要
- `docs/GAP_ADDENDUM.md`:发布信任、互操作性、覆盖范围和映射差距
- `docs/DETECTION_MAPPING.md`:规则到 ATT&CK/D3FEND 矩阵和映射导出配置
- `docs/COVERAGE_SCORECARD.md`:种子语料库记分卡和覆盖范围边界
- `RELEASE_CHECKLIST.md`:GitHub 发布就绪检查清单
- `CHANGELOG.md`:发布说明
## 产品方向
最佳初始定位:在可疑技术支持诈骗、MSP 移交或小型企业事件后,为 Windows 端点提供轻量级的二次意见扫描器。它应补充 EDR 和 RMM 资产管理工具,而非声称要取代它们。
快速验证实验:
1. 在 3 台干净的 Windows 机器和 3 台故意植入痕迹的实验室机器上运行。
2. 针对每个数据源(服务、任务、启动键、近期文件、日志)跟踪误报。
3. 仅在首次误报检查通过后添加允许列表文件。
4. 一旦 CLI 输出稳定且配置了 Windows 代码签名选项,即可打包为签名发布版。
近期路线图准则:
1. 在扩大检测覆盖范围之前,优先考虑发布信任和来源。
2. 仅在核心发现模式稳定后,才添加可选的互操作导出。
3. 在提出广泛的效能声明之前,使用种子语料库和发布记分卡测量覆盖范围。
4. 仅当映射基于收集的数据和规则逻辑时,才将证据映射到 ATT&CK 和 D3FEND。
请参阅 `docs/GAP_ADDENDUM.md` 了解当前的差距附录。
`0.1.1` 中已实现的差距切片:
- 发布来源:工作流生成的校验和、清单和验证指南。
- 互操作性:可选的映射检测导出。
- 覆盖范围测量:种子评估语料库和记分卡。
- 操作员映射:证据到规则到 ATT&CK/D3FEND 矩阵。
## 参考资料
- CISA、NSA 和 MS-ISAC 关于恶意使用合法 RMM 软件的公告:https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-025a
- CISA 关于 SimpleHelp RMM 漏洞利用的公告:https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-163a
- 用于进程、计划任务、服务、脚本、注册表和 WMI 证据的 MITRE ATT&CK 数据源:https://attack.mitre.org/datasources/
标签:AI合规, AMSI绕过, Living-off-the-land, MITM代理, RMM扫描, TLS, Windows扫描, 事件日志分析, 信任健康, 威胁检测, 安全态势评估, 数字取证, 文件扫描, 服务监控, 未授权工具, 注册表分析, 漏洞挖掘, 端点安全, 系统持久化检测, 自动化脚本, 补丁管理, 远程访问监控, 逆向工具, 防御工具