lidless-labs/vervet
GitHub: lidless-labs/vervet
Vervet 是一款基于 Zeek 和 Suricata 日志的网络威胁狩猎工具,通过可解释的主机风险评分和 MITRE ATT&CK 映射帮助蓝队分析师发现和追踪入侵行为。
Stars: 2 | Forks: 0
Vervet
Vervet 会读取您的 Zeek 和 Suricata 日志,并告诉您哪些主机已被入侵及其原因。
将 Vervet 指向一个包含 Zeek 和 Suricata 日志的目录,它就会揭示隐藏在其中的威胁:按固定时间间隔回连的 C2 beacon、DNS 隧道和 DGA 域名、数据外泄、横向移动,以及不该存在的长连接。每个被标记的主机都会获得一个透明的风险评分,并附带**生成该评分的证据链**以及它所映射到的 **MITRE ATT&CK 技术**,这样分析师不仅能看到*什么*被触发了,还能明白*为什么*。它以单个容器的方式在您自己的硬件上运行。无需云服务、无需遥测、无需实时流量监听,它绝不触碰您的网络,只读取您已经收集的日志。 Vervet 专为运行 Zeek 或 Suricata 的蓝队、SOC 分析师和 MSSP 设计,为他们提供在日志中进行威胁狩猎的分析层。就像 RITA 和 AC-Hunter 检测 beaconing 那样,但它是 UI 优先的、映射到 MITRE 的,并且同时支持这两种传感器的日志。
▶ 体验在线演示:demo.vervet.dev
无需安装。包含真实的(脱敏后)流量,且已检测到 C2 beacon 和 DNS 隧道。
演示数据:真实的 Zeek 日志(已脱敏),其中叠加了合成的 C2 beacon 和 DNS 隧道场景。所有地址均为 RFC 5737 / RFC 2544 文档保留范围。
## 使用零日志进行体验 演示模式会加载一个逼真的示例环境(C2 beaconing、DNS 隧道、嘈杂的 Suricata 传感器),让仪表盘能立即展示经过评分和解释的威胁: ``` git clone https://github.com/solomonneas/vervet.git cd vervet docker compose up -d --build # 打开 http://localhost:8000 ``` 该容器会在同一端口上提供 API 和 Web UI 服务,并在启动时载入演示数据。使用 `docker compose down` 停止它。 ## 在您自己的日志上运行 ``` # 将其指向你的 Zeek/Suricata 日志目录,而不是 demo data docker compose run --rm -e VERVET_DEMO_MODE=false \ -v /var/log/zeek:/logs:ro vervet ``` 然后从 UI 或通过 REST API 上传或提取日志: ``` # Zeek conn/dns/http/ssl logs 和 Suricata eve.json 均可接受 curl -X POST http://localhost:8000/api/v1/ingest/directory \ -H "X-API-Key: $VERVET_API_KEY" \ -H "Content-Type: application/json" \ -d '{"path": "/logs"}' ``` ### 不使用 Docker(开发环境) ``` # Backend (FastAPI) 在 :8000 pip install -r requirements.txt VERVET_DEMO_MODE=true uvicorn api.main:app --host 0.0.0.0 --port 8000 # Frontend (Vite dev server) 在 :5174,在另一个终端中 npm install && npm run dev ``` `make dev` 会同时启动两者。请查看 [Makefile](Makefile) 了解各个独立的 target。 ## 检测内容 | 检测项 | 发现内容 | 映射到 | | --- | --- | --- | | **Beaconing / C2** | 通过时间间隔规律性、抖动和数据大小一致性发现的周期性回调 | T1071, T1571 | | **DNS 隧道** | 用作隐蔽信道的高熵子域名和超大的 TXT/NULL 记录 | T1071.004, T1048 | | **DGA 域名** | 通过 n-gram 和词法分析发现的由算法生成的域名 | T1568.002 | | **Fast-flux** | 通过在多个 IP 之间轮换来隐藏基础设施的域名 | T1568 | | **横向移动** | 暗示正在进行内网渗透的内部到内部连接模式 | T1021 | | **长连接** | 根据持续时间、协议和方向判定的异常持久连接流 | T1071, T1572 | | **Suricata 警报** | 将加权严重程度的 IDS 警报整合到同一个单主机评分中 | 视情况而定 | 每次检测都会贡献到一个**统一的主机维度风险评分 (0-100)** 中,并附带完整的推理链。评分是确定性且可解释的,而不是黑盒:您可以确切地读出是哪些信号提高了主机的评分以及提高了多少。 ## 工作原理 ``` Zeek logs (conn/dns/http/ssl/x509/notice) Suricata eve.json \ / +--> unified parsers -------------+ | detection engines (beacon, DNS threat, lateral movement, long-conn, Suricata) | unified threat engine -> per-host score + MITRE ATT&CK mapping + evidence chain | web UI + REST API <---+---> case management / IOC export (TheHive / Wazuh / MISP) ``` 日志被解析为通用的连接/事件模型,在每个检测引擎中运行,并由统一的威胁引擎聚合为主机维度的评分,同时附带 MITRE 映射和证据链。分析结果可以被提升为案例、导出为 IOC,推送到 TheHive,与 Wazuh 进行关联,或者从 MISP 进行富化(enrichment)。 ## 集成 目前已有用于将案例导出到 **TheHive**、将 IOC 与 **Wazuh** 警报进行关联,以及从 **MISP** 富化 IOC 的初始 endpoint。通过环境变量(`THEHIVE_URL`/`THEHIVE_API_KEY`、`WAZUH_URL`/`WAZUH_API_KEY`、`MISP_URL`/`MISP_API_KEY`)进行配置,并从 `/api/v1/integrations/*` 驱动。 ## 安全模型 - **网络只读。** Vervet 仅提取您已经收集的日志。没有任何代码路径会与网络设备通信或捕获实时流量。 - **API 密钥认证。** 设置 `VERVET_API_KEY` 以要求每个请求都提供密钥。如果不设置,服务器将以开放的开发模式运行,并在启动时醒目地提示这一点。 - **提取沙盒。** 设置 `VERVET_LOG_ROOT` 以将目录提取限制在单个文件树中,从而防止 API 被诱导读取任意路径。 - **上传速率限制。** 默认情况下,PCAP/上传 endpoint 会受到速率限制(`VERVET_RATE_LIMIT_*`),以保护公共部署。 - **本地数据,无遥测。** 所有内容都保留在您的数据目录中。除了您配置的集成外,不进行任何外部调用。 ## 路线图 - **持久化存储**(基于 SQLite 的索引、审计追踪),以便调查在重启后依然保留,这是团队协作使用的前提。 - **实时日志追踪(tailing)**,实现近乎实时的仪表盘,而不是批量提取。 - **多传感器**支持以及警报抑制 / 噪音控制。 - **MCP 服务器**,以便 agent 可以直接查询威胁狩猎结果。 ## 许可证 Apache-2.0。请查看 [LICENSE](LICENSE)。标签:DNS 反向解析, IP 地址批量处理, Python, React, Rootkit, Suricata, Syscalls, XXE攻击, Zeek, 安全, 无后门, 现代安全运营, 自动化攻击, 请求拦截, 超时处理