matchylabs/matchy-wireshark-plugin
GitHub: matchylabs/matchy-wireshark-plugin
一款用 Rust 编写的 Wireshark 插件,支持在抓包过程中对 IP 和域名进行实时威胁情报匹配与可视化。
Stars: 3 | Forks: 0
# Matchy Wireshark 插件
一款使用 Rust 编写的 Wireshark 插件,可在数据包捕获期间提供实时的威胁情报匹配。能够以亚毫秒级的性能将 IP 和域名与威胁数据库进行匹配。

## 功能
- **实时威胁富化**:在数据包捕获期间,将源/目标 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
```
## 用法
### 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)。
手动安装
``` # 检测 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" ```标签:Rust, Wireshark插件, 可视化界面, 威胁情报, 安全研发, 开发者工具, 网络安全, 网络情报, 网络抓包, 网络流量审计, 通知系统, 隐私保护