riverrisk/marlinspike
GitHub: riverrisk/marlinspike
MarlinSpike 是一个被动 OT/ICS 网络分析平台,将 PCAP 流量转化为可视拓扑与可执行的评估报告。
Stars: 10 | Forks: 2
# MarlinSpike
当前版本: `2.0.7`
MarlinSpike 是一个从零开始构建的被动 OT/ICS 网络分析平台,继承了 GrassMarlin 风格的拓扑映射传统,但封装在一个多用户 Web 工作台中,专为实际参与场景设计。它分析 PCAP 和 PCAPNG 捕获文件,构建拓扑图,推断 Purdue 层级,指纹识别厂商,并呈现可响应级别的风险指标,如跨区域通信、明文服务、 beaconing、可疑外部通信和 DNS 渗出,然后将所有内容导出为可移植的 JSON 报告工件,随团队一起移动。

**专为现场团队参与设计** — 多用户、零 JS 核心工作流程、`1 core / 1 GB RAM`,以及可移植的 JSON 报告工件。
**2.45M 数据包 (1.7 GB) -> 2,449 个节点,2,662 条边,75 个发现,耗时 58 秒。**
仓库: [github.com/riverrisk/marlinspike](https://github.com/riverrisk/marlinspike)
## MarlinSpike 是什么
MarlinSpike 不仅仅是一个拓扑查看器,也不仅仅是一个数据包解析器。
它是一个围绕四个理念构建的现场可部署分析平台:
- 首先是被动 OT/ICS 分析:捕获文件输入,不向网络回传数据包。
- 从零开始的 GrassMarlin 风格替代方案:现代拓扑重建、协议感知分类和分析师友好的报告,无需继承旧的单用户桌面模型。
- 多用户工作台:项目、上传、报告、历史记录、管理和共享 URL,整个参与团队可同时使用。
- 可移植报告契约:引擎可以无头运行,生成报告工件,这些工件可以在内置工作台中查看或在别处消费。
其结果是不同于桌面分析器的工作模式。MarlinSpike 旨在被部署到临时参与主机上,从 taps、SPAN 端口或外部收集工具获取捕获数据,并在分阶段和评估过程中协同使用。
## 设计原则
MarlinSpike 围绕几个实用的约束构建:
- 引擎保持独立,并能无头生成报告工件。
- 报告工件是数据包分析与下游审查之间的交接点。
- 主要工作流程为 `项目 -> 扫描 -> 报告 -> 工作台 -> 分阶段操作`。
- 核心 Web 工作流程在无客户端 JavaScript 的情况下仍可使用。
- 代码库有意保持可扩展性,以支持 OT/ICS 响应者,而不仅仅是系统程序员。
交互式浏览器功能可以提高速度与便利性,但核心分阶段体验仍应能直接从渲染的 HTML 访问。
## 亮点
- 仅被动分析:不主动扫描或传输数据包
- OT 协议解析:支持 Modbus、EtherNet/IP、S7、DNP3、PROFINET、OPC UA、BACnet 等
- 通过 `marlinspike-dpi` 扩展的 Rust DPI 子系统:34 个协议解析器、Bronze v2 事件输出、帧完整性检查、ICMP 异常检查和状态 L2 异常分析
- 带有 Purdue 层级推断和厂商指纹识别的拓扑构建
- 风险呈现:远程访问暴露、C2 类似 beaconing、可疑外部通道、DNS 熵异常、策略违规、完整 MITRE ATT&CK 映射(含战术、子战术、矩阵视图、响应指南)以及 IEC 62443 SR 导向的修复指导
- Flask Web UI,配备升级的多模式分析师工作台、项目管理、报告查看器、基线/漂移对比、资产清单、扫描历史记录和基于源码的 `/capabilities` 检测覆盖目录
- 使用 Docker Compose 部署,PostgreSQL 支持应用
- Rust DPI 引擎通过 [`marlinspike-dpi`](https://github.com/riverrisk/marlinspike-dpi) 启用(默认 `--dpi-engine auto`),从固定 GitHub 引用构建进镜像,比 Python tshark 回退方案在大型捕获上快 14 倍
- MITRE ATT&CK 运行时在镜像构建期间从独立的 [`marlinspike-mitre`](https://github.com/riverrisk/marlinspike-mitre) 仓库获取,固定 GitHub 引用
- 可选的 Stage 4b 恶意软件 IOC 运行时,在提供构建参数时从独立的 `marlinspike-malware` 和 `marlinspike-malware-rules` 仓库获取
## 快速开始
1. 克隆仓库并进入项目目录。
```
git clone https://github.com/riverrisk/marlinspike.git
cd marlinspike
```
2. 复制示例环境文件并设置强密钥。
```
cp .env.example .env
```
3. 构建并启动堆栈。
```
docker compose up -d --build
```
4. 在 `http://127.0.0.1:5001` 或通过反向代理打开应用。
首次启动时,MarlinSpike 会创建一个管理员用户。如果 `ADMIN_PASSWORD` 为空,则生成随机密码并打印到容器日志。
请参阅 [INSTALL.md](INSTALL.md) 获取通用部署演练。
## 文档
如果你正在寻找主仓库文档,请从这里开始:
- 入门指南: [INSTALL.md](INSTALL.md)
- 仓库家族与套件结构: [docs/repo-family.md](docs/repo-family.md)
- 兼容性模型: [COMPATIBILITY.md](COMPATIBILITY.md)
- 架构与扩展边界: [docs/extensibility-contracts.md](docs/extensibility-contracts.md)
- 压缩报告包格式提案: [docs/msbundle-format.md](docs/msbundle-format.md)
- 终端用户 ATT&CK 指南: [docs/mitre-attack-guide.md](docs/mitre-attack-guide.md)
- 共享 MITRE 插件仓库: `/Users/butterbones/marlinspike-mitre`
- 嵌入的 ATT&CK 运行时副本: [`plugins/marlinspike_mitre/`](plugins/marlinspike_mitre/) 和 [`rules/mitre/base.yaml`](rules/mitre/base.yaml)
- MITRE 引导同步助手: [`scripts/sync-mitre-bootstrap.sh`](scripts/sync-mitre-bootstrap.sh)
- 套件子树辅助脚本: [`scripts/update-subtrees.sh`](scripts/update-subtrees.sh)
- 引导引擎同步助手: [`scripts/sync-msengine-bootstrap.sh`](scripts/sync-msengine-bootstrap.sh)
- 贡献与开发流程: [CONTRIBUTING.md](CONTRIBUTING.md)
- 引擎与产品发布历史: [releases.md](releases.md)
- 实时查看器与发布历史: [releases-live.md](releases-live.md)
- 分析师工作台产品路线图: [docs/analyst-workspace-roadmap.md](docs/analyst-workspace-roadmap.md)
- 公开指纹研究语料库: [docs/public-fingerprint-corpus.md](docs/public-fingerprint-corpus.md)
- 预设样本库说明: [presets/README.md](presets/README.md)
该仓库的关键扩展术语包括:
- Rust 引擎:面向数据包且事件密集型组件,如 DPI
- Python 插件:面向报告的分析、丰富与分阶段逻辑
- YAML 规则包:声明式映射、抑制和本地策略
关键仓库家族术语:
- `marlinspike`:套件仓库,将选定的组件仓库作为基于子树的子仓库进行版本管理,并可固定独立的构建依赖
- `marlinspike-msengine`:核心引擎仓库,内部包和 CLI 名称为 `msengine`
- `marlinspike-workbench`:Web UI 仓库,可在不调用本地引擎的情况下查看报告
- `marlinspike-mitre`:独立的共享 MITRE ATT&CK 插件仓库,作为运行时插件和规则表面的固定构建依赖
- `marlinspike-dpi`:独立的共享 Rust DPI 仓库,作为应用镜像中的固定构建依赖
- `marlinspike-malware`:独立的共享 Rust IOC 引擎仓库,作为可选的固定构建依赖
- `marlinspike-malware-rules`:独立的共享规则内容仓库,作为可选的固定构建依赖,用于发布的 IOC 包、清单和编译后的包工件
组件仓库旨在提供权威版本。套件仓库存在的目的在于为希望使用一个克隆并包含所有更新组件的团队进行版本锁定。
初始的 `msengine/` 子树前缀现已以引导形式存在。在完整提取完成之前,根目录的 `_ms_engine.py` 仍是运行时的引擎源码,并且 [`scripts/sync-msengine-bootstrap.sh`](scripts/sync-msengine-bootstrap.sh) 会将其镜像到子树副本中。
当前 Docker 构建默认将 `marlinspike-dpi` 固定到 `de706a28096a3da482831bc674ef0652c0e479`,`marlinspike-mitre` 固定到 `c3583ec2d189b8cde69f2160da6a5e8e5b643f7b`,`marlinspike-malware` 固定到 `02eb369c32e5050796c76be500c009dc0cb8940d`,`marlinspike-malware-rules` 固定到 `99cbe9358d0a5047d9b5e57a7e4ff5eafdee9bd4`。2026 年 3 月 28 日,规则引用被刷新为有效发布的提交,并且恶意软件仓库在固定引用处被确认为可公开读取。如需不同已知良好组合,请在环境中覆盖这些构建参数。该应用优先使用发布的 `packs/` 表面,而非引擎仓库的开发/测试副本进行规则发现。
## ATT&CK 演练
MarlinSpike 现在在报告工作流中包含了完整的 ATT&CK 实现,
包括 ATT&CK 版本元数据、按战术分组的矩阵视图、子战术、
缓解措施和响应指导。
请参见用户导向的演练指南:
- [docs/mitre-attack-guide.md](docs/mitre-attack-guide.md)
该指南包含截图,并解释了如何在分阶段过程中在资产、拓扑、ATT&CK 映射之间切换。
## 定位:分析师工作台 vs 桌面工具
MarlinSpike 不是通用的桌面分析器。它是专为 OT 安全参与和评估而设计的临时现场分析师工作台。
| 方面 | MarlinSpike(本项目) | 典型的 GRASSMARLIN 风格桌面工具 |
|------|------|------|
| **主要用例** | 在 IPC 或现场笔记本电脑上启动,审查团队收集的 PCAP,并返回可移植评估工件 | 单工作站上的单人深度分析 |
| **用户模型** | 多用户、项目范围的工作流,包含认证、管理员控制和审计历史 | 通常为单用户优先 |
| **部署** | 轻量级 Docker Compose Web 应用,零 JS 核心工作流程,目标 `1 core / 1 GB RAM` | 桌面 GUI 应用,客户端运行时期望较重 |
| **报告流程** | 从任意位置获取 PCAP 到自包含的 JSON 报告工件,可在此查看或在其他地方消费,加上 PDF/PNG/CSV 导出 | 工具为中心的工作流,与本地应用程序紧密耦合 |
| **操作模型** | 为参与团队提供共享 URL,快速搭建与拆卸,适合临时或空气隔离现场使用 | 持久的分析师桌面环境 |
| **可扩展性** | Python 分析管线和 HTML 模板,便于大多数安全团队扩展 | 通常围绕编译桌面堆栈,定制路径更陡峭 |
简而言之:
将 MarlinSpike 部署到空气隔离或临时的参与主机上,将 URL 交给团队,提交你收集的捕获文件,导出干净的 JSON 报告,任务完成后拆除。
如果你在寻找具有不同功能重点的永久单用户桌面应用程序,MarlinSpike 并非旨在成为该工具,这是有意为之。
## 与 GrassMarlin 的功能对等
MarlinSpike 旨在取代人们历史上使用 GrassMarlin 进行核心被动映射的工作流,同时将其包装从单用户桌面应用更改为共享 Web 工作台。
| 功能 | MarlinSpike 状态 | 说明 |
|------|------|------|
| 被动 PCAP 分析 | 是 | 接受来自 Web UI 或独立引擎的 `pcap` 和 `pcapng` |
| OT 感知拓扑映射 | 是 | 关系图、节点/边图、厂商提示和 Purdue 推断 |
| 资产清单 | 是 | 每个资产的角色、服务、协议和响应者上下文 |
| 协议感知 OT 分析 | 是 | Modbus、EtherNet/IP、S7、DNP3、PROFINET、OPC UA、BACnet、IEC 104、LLDP/CDP/STP/LACP 等 |
| 来自被动流量的风险呈现 | 是 | 明文工程、可写路径、可疑外部通信、beaconing、DNS 渗出、Purdue 违规 |
| 可导出的输出 | 是 | 可移植的 JSON 报告工件,以及 UI 中的 PDF/PNG/CSV 导出路径 |
| 团队分析师工作流 | 超越 | 项目范围协作、共享 URL 访问、历史记录、基线/漂移对比和管理控制均为一等公民 |
| 无头分析契约 | 超越 | 引擎可独立运行,生成可随时审查的便携报告工件 |
| 厚客户端桌面 | 因设计而不同 | 被基于浏览器的工作台和零 JS 核心工作流程取代,适用于临时、共享的现场部署 |
### 积极改进中
- 提升更多厂商和设备系列的指纹深度与分类置信度
- 服务器端渲染的分析器深入流程
- 更丰富地在报告 UI 中利用 Bronze 级协议观察和提取工件
- 扩展协议原生增强功能,超出当前报告契约
### 诚实的边界
- MarlinSpike 是 **PCAP 分析工具**,而非持续监控平台。使用你自己的工具进行捕获(Wireshark、tshark、tap、span 端口),并将 PCAP 带入 MarlinSpike 进行分析。如需持续实时捕获、多传感器收集和集中 OT 网络监控,请参考 [FATHOM](https://riverman.io/fathom)。
- MarlinSpike 不是主动扫描器。
- MarlinSpike 不是永久桌面厚客户端。
- 独立的 Rust DPI 引擎是解构基础,而非完整产品。
- 某些协议覆盖和更高级评分目前仍存在于 Python 分析层,这是设计使然。
## 引擎架构
MarlinSpike 将数据包解析与分析师工作流分离。
### 当前分析栈
- 阶段 1:捕获摄取与验证
- 阶段 2:协议解析
- 阶段 3:拓扑构建、Purdue 推断与指纹识别
- 阶段 4:漏洞评估与风险呈现
- 输出:被 Web 工作台消费的便携式 JSON 报告工件
### DPI 引擎选项
MarlinSpike 目前可通过两种方式运行阶段 2:
- 通过 `_ms_engine.py` 实现的基于内置 Python/tshark 的解析
- 通过 [`marlinspike-dpi`](https://github.com/riverrisk/marlinspike-dpi) 实现的独立 Rust 解析
Rust 路径被有意限定为独立的 DPI 引擎。MarlinSpike 可将其作为外部阶段 2 解析器调用,将其 Bronze 输出适配回当前报告流水线,并继续使用现有的拓扑、分阶段和报告层。这使数据包解析器可重用,而不会强制将分析师产品与解析器合并。
### 当前 `marlinspike-dpi` 的含义
- 它是一个独立的 Rust DPI 引擎,具备 CLI、库和 FFI 接口
- 它接受经典的 `pcap` 和 `pcapng` 捕获输入
- 它当前提供 34 个协议解析器,覆盖 OT/ICS、IT 和 L2 流量
- 它输出 Bronze v2 事件,MarlinSpike 可在五个类别中消费:协议事务、资产观察、拓扑观察、解析异常和提取工件
- 它通过 `stovetop` 帧完整性检查、`icmpeeker` ICMP 异常分析和 `bilgepump` 状态 L2 异常跟踪来增强额外的解析相邻检查
- 它替换了解析阶段,而非更高级别的漏洞评估逻辑
这是有意为之。MarlinSpike 的价值不仅在于快速解码数据包,更在于将被动 OT 流量转化为团队真正可用的拓扑、发现和响应决策。
### 扩展模型
MarlinSpike 故意使用三种扩展接口:
- Rust 引擎:面向数据包或事件密集型组件,吞吐量、内存安全和解析重用至关重要。当前主要指 DPI 风格引擎,如 [`marlinspike-dpi`](https://github.com/riverrisk/marlinspike-dpi)。
- Python 插件:面向报告的分析、丰富、分阶段逻辑与后处理,操作的是可移植的 MarlinSpike JSON 工件而非原始数据包。
- YAML 规则包:声明式映射、启用/禁用控制、站点覆盖及其他策略内容,供插件使用而无需将配置变成另一种编程语言。
简而言之:
- Rust 发现原始流量中的事实。
- Python 将这些事实转化为响应者面向的判断。
- YAML 声明映射和本地策略。
这种分离是故意的。MarlinSpike 并非被编写为“一切用 Rust”,因为应用旨在便于更广泛的 OT/ICS 社区扩展,包括响应者、防御者和咨询顾问,他们可能需要在主动修复事件中调整逻辑。Rust 适用于内存安全、可重用的数据包引擎。Python 更适合快速迭代、站点特定扩展和现场友好的报告逻辑。
当前发布的示例:
- `marlinspike-mitre`:位于 `/Users/butterbones/marlinspike-mitre` 的权威姊妹仓库,应用镜像现在通过在构建期间将固定独立仓库的运行时插件和规则表面叠加到 [`plugins/marlinspike_mitre/`](plugins/marlinspike_mitre/) 和 [`rules/mitre/base.yaml`](rules/mitre/base.yaml) 来覆盖。成功的扫描可生成 `-mitre.json` 侧车工件,并且工作台查看器可从报告 `extensions` 表面加载它。
当前运行时暴露了完整的 ATT&CK 元数据和版本信息、战术、子战术、矩阵就绪的战术分组、缓解措施、ATT&CK URL 以及查看器中的丰富响应指导。
用户面向的解释说明位于 [docs/mitre-attack-guide.md](docs/mitre-attack-guide.md)。
- `marlinspike-malware`:位于 `/Users/butterbones/marlinspike-malware` 的权威姊妹仓库,`_ms_engine.py` 将其作为可选的 Stage 4b 引擎调用。当在镜像构建期间提供 `MARLINSPIKE_MALWARE_REPO` 和 `MARLINSPIKE_MALWARE_REF` 时,运行时会将二进制文件叠加到 `/opt/marlinspike-malware/bin/`。
- `marlinspike-malware-rules`:位于 `/Users/butterbones/marlinspike-malware-rules` 的权威姊妹仓库,包含发布的 `packs/`、`manifests/index.yaml` 和编译后的包工件。当前发布的表面为 30 个包和 921 条规则。当在镜像构建期间提供 `MARLINSPIKE_MALWARE_RULES_REPO` 和 `MARLINSPIKE_MALWARE_RULES_REF` 时,这些资源会被叠加到 `/usr/share/marlinspike-malware/rules/`,并且引擎指向 `/usr/share/marlinspike-malware/rules/packs`。
请参阅 [`docs/extensibility-contracts.md`](docs/extensibility-contracts.md) 以了解 Rust 引擎、Python 插件和 YAML 规则包的具体契约边界。
如果你正在决定新工作应归属何处,请使用以下经验法则:
- 如果它消费原始 `pcap`、数据包流或高吞吐协议事件,它很可能应归属于 Rust 引擎。
- 如果它消费完成的 MarlinSpike 报告工件,它很可能应归属于 Python 插件。
- 如果分析师应能在不修改代码的情况下调整它,它很可能应归属于 YAML 规则包。
## 检测与标准覆盖
MarlinSpike 当前的公开检测与标准故事有意限定在引擎当前实际输出的内容。
- 完整的 MITRE ATT&CK 实现现已通过共享的 `marlinspike-mitre` 运行时提供,包括 ATT&CK 版本元数据、战术感知的矩阵输出、子战术、父战术上下文、缓解措施和响应指导
- `marlinspike-dpi` 现在贡献了更广泛的被动可观察面:34 个协议解析器、Bronze v2 事件族,以及来自 `stovetop`、`icmpeeker` 和 `bilgepump` 的解析相邻异常流
- Purdue 模型推断与跨层级通信检查是核心分阶段工作流程的一部分
- 阶段 4 修复指导与 IEC 62443 SR 要求对齐,针对引擎当前产生的发现类别
- 部署实例在 `/capabilities` 发布内置的检测覆盖目录,明确说明 MarlinSpike 可检测的内容,而非已在特定环境中检测到的内容
- `/capabilities` 页面现在对当前报告发现类别、`marlinspike-dpi` 解析器覆盖、`marlinspike-malware` 可观察与规则覆盖以及当前 ATT&CK 映射集提供可过滤的来源、类型、家族、严重性和搜索控件
- 当前 `marlinspike-malware` 部分反映了已发布的 `marlinspike-malware-rules` 内容表面,当前为 30 个包和 921 条规则,且 ATT&CK 部分反映了由 `marlinspike-mitre` 提供的完整 ATT&CK 实现
这现已定位为 MarlinSpike 报告工作流的完整 ATT&CK 实现。它仍有意限定于被动流量证据和分析师分阶段,而非更广泛的合规交叉对照或每个可能的 ATT&CK 分析。
## 功能概览
MarlinSpike 将原始数据包捕获转化为 OT 运营人员、资产所有者或响应者可实际使用的流程。
### 分析
- 被动 PCAP 和 PCAPNG 分析,支持 OT 感知协议解析
- 关系图与拓扑重建,含 Purdue 推断
- 报告驱动的分阶段处理,包含风险发现、C2 指标和资产上下文
- 详细的资产清单、服务暴露、会话分析和 MAC 表报告
### 工作流程
- 从 Web UI 执行的临时扫描
- 大型 PCAP 处理的分批流式进度
- 项目范围的捕获与报告组织
- 报告历史记录、重试支持与基线/漂移对比
- 可在 MarlinSpike 内部或外部查看的可移植 JSON 报告工件
### 管理
- 多用户访问与管理员控制
- 扫描历史与审计追踪
- 系统健康与监控视图
- 样本库管理
## 导出支持
报告工作流支持直接从 UI 导出:
- 从报告查看器打印或保存为 PDF
- 从拓扑查看器导出 PNG
- 从资产清单视图导出 CSV
## 额外能力
- 基线与漂移审查,支持新增、移除、更改和不变的拓扑对比
- 主动拓扑查看
- 分阶段扫描进度流式传输,包含摄取、分析、分类和报告状态可见性
- 每用户管理控制,包括密码重置与上传限制
- 多报告生命周期操作,包括查看、下载、删除和对比
- 从分阶段历史记录重试失败或中断的扫描
- 样本库管理,含类别管理和 PCAP 上传/删除控制
- 扫描流程中的捕获过滤输入与临时端口抑制控制
- MAC 表报告与主评估视图并列
## 截图
点击任意缩略图查看完整尺寸图像。
### 实时流程验证
这些截图来自 2026 年 3 月 28 日针对当前托管部署的一次实时端到端冒烟测试,运行了三个预设 PCAP:`Modbus.pcap`、`S7comm.pcap` 和 `4SICS` 基准的 `fast` 模式。它们展示了从 `项目 -> 扫描 -> 报告 -> 工作台 -> 资产` 的核心响应者路径。
附加截图展示了模式化工作台表面的详细信息。
/` 添加捕获文件,或在部署后通过管理 UI 上传。
## 开发
- `python3 -m py_compile app.py _auth.py _config.py _models.py _ms_engine.py`
- `docker compose up --build`
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 获取贡献指南,包括持续的指纹识别与增强工作。
## Fathom
MarlinSpike 是商业 OT 安全平台 **Fathom** 的开源核心,由 [River Risk Partners](https://riverriskpartners.com) 提供。
商业 Fathom 平台增加了分布式采集器、层级结构、数据二极管、取证时间旅行和企业级基线学习。MarlinSpike 是你可以在任何地方启动的轻量级、开源核心工作台。
了解更多: [riverriskpartners.com](https://riverriskpartners.com)
## 感谢
MarlinSpike 因测试代码、阅读并提交问题或 PR 的人们而变得更好。社区贡献者:
- **[Michael Sargis (@MichaelMVS)](https://github.com/MichaelMVS)** — 在 `ICS_OUI_DB` 中发现了一个静默的 OUI 字典冲突,导致 Honeywell 设备在每个报告中都被误识别为 GE([PR #3](https://github.com/riverrisk/marlinspike/pull/3),v2.0.3)
- **Jerrid Brown (OTPulse)** — 使用真实的 DCS 数据包捕获运行 MarlinSpike,提出了多个分类与用户体验问题,推动了 v2.0.1 / v2.0.2 修复(组播误分类、OUI 网关 MAC 误分配、NO_AUTH_OBSERVED 噪声、三级“应用服务器”兜底、Purdue L3 与 L4 启发式)
如果你发现错误或有指纹要添加,请[打开问题](https://github.com/riverrisk/marlinspike/issues)或[提交 PR](https://github.com/riverrisk/marlinspike/pulls) — 欢迎首次贡献者。
## 许可证
本仓库根据 GNU Affero General Public License v3.0 许可。参见 [LICENSE](LICENSE)。
## 联系
问题请联系我:river@riverman.io
The operator shell uses a full-height navigation rail, compact status strip, single-row command bar, and persistent inspector so the first viewport stays focused on responder work. |
标签:DNS外泄, Docker, Fathom, Flask, GrassMarline, ICS, JSON报告, NTLM Relay, OT安全, PCAPNG, PCAP分析, PKINIT, Purdue层级推断, SCADA, Web分析, 便携式报告, 信标, 协议识别, 厂商指纹, 可疑外部通信, 可视化界面, 哈希传递, 团队协作, 多用户, 安全防御评估, 工作平台, 工控安全, 开源引擎, 明文服务, 测试用例, 现场取证, 现场部署, 网络图谱, 网络拓扑发现, 被动发现, 请求拦截, 跨区域通信, 逆向工具, 零JS, 风险指标