matchylabs/matchy-wireshark-plugin

GitHub: matchylabs/matchy-wireshark-plugin

一款用 Rust 编写的 Wireshark 插件,支持在抓包过程中对 IP 和域名进行实时威胁情报匹配与可视化。

Stars: 3 | Forks: 0

# Matchy Wireshark 插件 一款使用 Rust 编写的 Wireshark 插件,可在数据包捕获期间提供实时的威胁情报匹配。能够以亚毫秒级的性能将 IP 和域名与威胁数据库进行匹配。 ![Wireshark 显示威胁检测](https://static.pigsec.cn/wp-content/uploads/repos/cas/d1/d1242287b6b9829681ef59d33700fdb81094be88cbbb283b6d10e91624e16605.png) ## 功能 - **实时威胁富化**:在数据包捕获期间,将源/目标 IP 和域名与威胁数据库进行匹配 - **自定义显示过滤器**:使用如 `matchy.threat_detected` 和 `matchy.level == "critical"` 等表达式过滤数据包 - **自动数据包着色**:根据威胁级别对数据包进行颜色编码(红色=严重,橙色=高危,黄色=中危) - **高性能**:使用内存映射的 .mxy 格式,在包含 10 万+ 指标(indicator)的数据库中实现亚毫秒级查找 - **灵活的数据库**:使用预构建的威胁源(feed)或从 CSV/JSON 源构建自定义数据库 ## 安装 **要求 Wireshark 4.0 或更高版本。** 从 [GitHub Releases](https://github.com/matchylabs/matchy-wireshark-plugin/releases) 下载相应的软件包: - macOS: `matchy-wireshark-plugin-*-macos-arm64.tar.gz` - Linux x86_64: `matchy-wireshark-plugin-*-linux-x86_64.tar.gz` - Linux ARM64: `matchy-wireshark-plugin-*-linux-aarch64.tar.gz` - Windows: `matchy-wireshark-plugin-*-windows-x86_64.zip` ``` # macOS/Linux tar -xzf matchy-wireshark-plugin-*.tar.gz cd matchy-wireshark-plugin-*/ ./install.sh ``` 在 Windows 上,解压 zip 文件并运行 `install.bat`。 ### 从源码构建 要求 Rust 1.70 或更高版本。 ``` cargo build --release ./install.sh ```
手动安装 ``` # 检测 Wireshark 版本 WS_VERSION=$(tshark --version | head -1 | sed -E 's/.*([0-9]+\.[0-9]+)\..*/\1/') # macOS(在版本目录中使用短划线) PLUGIN_DIR="$HOME/.local/lib/wireshark/plugins/$(echo $WS_VERSION | tr '.' '-')/epan" mkdir -p "$PLUGIN_DIR" cp target/release/libmatchy_wireshark_plugin.dylib "$PLUGIN_DIR/matchy.so" # Linux(在版本目录中使用点) PLUGIN_DIR="$HOME/.local/lib/wireshark/plugins/${WS_VERSION}/epan" mkdir -p "$PLUGIN_DIR" cp target/release/libmatchy_wireshark_plugin.so "$PLUGIN_DIR/matchy.so" ```
## 用法 ### 1. 加载威胁数据库 在 Wireshark 中配置插件: 1. 打开 **Edit → Preferences → Protocols → Matchy** 2. 点击 "Database Path" 旁边的 **Browse** 3. 选择你的 `.mxy` 威胁情报数据库文件 4. 点击 **OK** 数据库会立即加载(无需重启),并且该路径将被保存以供未来的会话使用。 ### 2. 按威胁过滤数据包 使用 Wireshark 显示过滤器来查找威胁: ``` # 显示任何具有威胁匹配的数据包 matchy.threat_detected # 按威胁等级过滤 matchy.level == "critical" matchy.level == "high" matchy.level == "medium" matchy.level == "low" # 按威胁类别过滤 matchy.category == "malware" matchy.category == "phishing" matchy.category == "c2" matchy.category == "botnet" # 与标准 Wireshark 过滤器组合 matchy.threat_detected && tcp.port == 443 matchy.level == "critical" && ip.src == 1.2.3.4 (matchy.category == "malware" || matchy.category == "c2") && http ``` ### 3. 查看威胁详情 选择任何匹配到威胁的数据包以查看: - **威胁级别**:严重 (Critical)、高危 (High)、中危 (Medium)、低危 (Low) - **类别**:恶意软件、网络钓鱼、C2、僵尸网络等 - **来源**:哪个威胁源标记了此指标(indicator) - **元数据**:来自威胁数据库的额外上下文 ## 创建威胁数据库 使用 [matchy CLI](https://github.com/matchylabs/matchy) 从 CSV 或 JSON 威胁源构建 `.mxy` 数据库: ``` # 从 CSV 格式 matchy build threats.csv -o threats.mxy --format csv # 从 JSON Lines 格式 matchy build threats.jsonl -o threats.mxy --format jsonl ``` **CSV 格式示例**: ``` entry,threat_level,category,source 1.2.3.4,high,malware,abuse.ch 192.0.2.0/24,medium,scanner,shodan 10.0.0.0/8,low,internal,rfc1918 *.evil.com,critical,phishing,urlhaus example.net,medium,suspicious,custom ``` `.mxy` 格式使用内存映射技术进行快速查找,同时将内存开销降至最低。 ## 性能 - **查找时间**:每个数据包亚毫秒级(已使用 10 万+ 指标数据库进行测试) - **内存占用**:每个 Wireshark 实例 <50MB - 具体取决于数据库大小 - **捕获开销**:对数据包捕获吞吐量的影响微乎其微 - **数据库格式**:内存映射 .mxy 文件,实现零拷贝 (zero-copy) 性能 ## 架构概述 该插件作为 Wireshark 的后置解析器 (postdissector) 运行,在标准协议解析之后处理数据包: ``` ┌─────────────────────────────────┐ │ Wireshark (C/C++) │ │ ├─ Packet capture │ │ ├─ Protocol dissectors │ │ └─ Postdissector chain │ └─────────────┬───────────────────┘ │ FFI boundary ┌─────────────▼───────────────────┐ │ matchy-wireshark-plugin (Rust) │ │ ├─ Extract IPs & domains │ │ ├─ Query threat database │ │ ├─ Add custom packet fields │ │ ├─ Apply threat colorization │ │ └─ Register display filters │ └─────────────┬───────────────────┘ │ ┌─────────────▼───────────────────┐ │ matchy-core (Rust) │ │ ├─ Memory-mapped .mxy files │ │ ├─ IP prefix trie (CIDR) │ │ ├─ Glob pattern matching │ │ └─ Sub-millisecond lookups │ └─────────────────────────────────┘ ``` **核心组件**: - **后置解析器**:在正常数据包解析之后运行,提取 IP/域名 - **FFI 层**:用于 Wireshark 集成的安全 Rust-to-C 桥接 - **威胁匹配**:针对内存映射威胁数据库的快速查找 - **显示过滤器**:用于基于威胁过滤数据包的自定义过滤器表达式 ## 开发 ### 测试与开发 ``` # 运行单元测试 cargo test # 运行测试并显示输出 cargo test -- --nocapture # 为开发构建 cargo build # 构建优化发布版本 cargo build --release # 检查代码质量 cargo clippy -- -D warnings # 格式化代码 cargo fmt ``` ### 本地测试 1. 构建插件:`cargo build --release` 2. 安装到 Wireshark:`./install.sh` 3. 重启 Wireshark(如果已经在运行) 4. 在首选项中加载测试 `.mxy` 数据库 5. 捕获流量并验证威胁匹配是否有效 ## 许可证 基于 Apache License, Version 2.0 授权。详情请参阅 [LICENSE](LICENSE)。
标签:Rust, Wireshark插件, 可视化界面, 威胁情报, 安全研发, 开发者工具, 网络安全, 网络情报, 网络抓包, 网络流量审计, 通知系统, 隐私保护