m-carneiro/watchtower
GitHub: m-carneiro/watchtower
Watchtower 是一个集中式威胁情报聚合平台,整合多源 IOC 数据并对接 EDR、SIEM 与 Slack,为安全团队提供警报丰富、供应链恶意软件检测和可操作情报推送。
Stars: 1 | Forks: 0
# Watchtower
**威胁情报聚合平台**,具备供应链安全、SentinelOne 集成以及多来源 IOC 丰富功能。
[](https://go.dev/)
[](docs/CLAUDE.md)
[](LICENSE)
## 🎯 概述
Watchtower 是一个集中式威胁情报平台,它可以:
- ✅ 从多个来源(AlienVault OTX、URLhaus、Google OSV、DigitalSide、Tor Exit Nodes)**聚合** IOC
- ✅ 利用多源上下文和置信度评分为安全警报进行**丰富**
- ✅ 跨越 npm、PyPI、Maven 和 Go 生态系统**检测**供应链恶意软件
- ✅ **追踪**特定的易受攻击包版本以减少误报
- ✅ **集成** SentinelOne EDR 进行实时威胁情报丰富
- ✅ 通过 Slack 向安全团队**通知**可操作的情报
- ✅ 以 CEF/STIX 格式**导出** IOC 数据源供 SIEM 摄取
## 🚀 快速开始
```
# 1. 完整设置(安装工具、启动 DB、运行 migrations、导入数据)
make full-setup
# 2. 启动 gRPC server
make run
# 3.(可选)启动 REST API 以进行 SentinelOne 集成
make run-api
```
就是这样!Watchtower 现在已运行在:
- **gRPC**: `localhost:50051`
- **REST API**: `localhost:8080`
## 📋 功能
### 威胁情报来源
- **AlienVault OTX** - 具备 pulses 和 indicators 的社区威胁情报
- **URLhaus** - 来自 Abuse.ch 的恶意软件分发 URL
- **Google OSV** - 开源漏洞数据库 (npm, PyPI, Maven, Go)
- **DigitalSide** - 实时恶意 IP 和 URL
- **Tor Exit Nodes** - 匿名网络监控
- **自定义数据源** - 可扩展的 provider 架构
### 供应链安全
- **版本感知检测** - 追踪特定的易受攻击包版本
- **多生态系统支持** - npm, PyPI, Maven/Gradle, Go modules
- **自动化提取** - 从 OSV 漏洞数据中解析版本
- **智能查询** - 通过包名或 `package@version` 格式进行搜索
详情请参见 [docs/VERSION_TRACKING.md](docs/VERSION_TRACKING.md)。
### SentinelOne 集成
- **实时丰富** - Webhook 接收 SentinelOne 警报
- **多源情报** - 聚合来自所有 IOC 来源的上下文
- **Slack 通知** - 利用丰富的数据向安全团队发出警报
- **SIEM 数据源** - 以 CEF/STIX 格式导出 IOC
请参阅 [docs/SENTINELONE_INTEGRATION.md](docs/SENTINELONE_INTEGRATION.md) 和 [docs/SENTINELONE_QUICKSTART.md](docs/SENTINELONE_QUICKSTART.md)。
### IOC 组件提取
自动从 URL 中提取 IP 和 domain:
- 数据库包含:`http://198.0.2.12/malware.sh`
- SentinelOne 发送:`198.0.2.12`
- Watchtower 找到:✅ 匹配 (智能模式搜索)
请参阅 [docs/IOC_EXTRACTION.md](docs/IOC_EXTRACTION.md)。
## 🏗️ 架构
Watchtower 遵循**六边形架构(端口和适配器架构)**:
```
┌─────────────────────────────────────────────────────────────┐
│ External Systems │
│ (OTX, URLhaus, OSV, SentinelOne, Slack, SIEM) │
└────────────────────────┬────────────────────────────────────┘
│
v
┌──────────────────────┐
│ Adapters │
│ (Providers, REST, │
│ Notifiers, Repos) │
└──────────┬───────────┘
│
v
┌──────────────────────┐
│ Ports │
│ (Interfaces) │
└──────────┬───────────┘
│
v
┌──────────────────────┐
│ Domain Layer │
│ (Pure Go, No I/O) │
└──────────────────────┘
```
**核心原则:**
- Domain 层是纯 Go 编写的(没有 I/O、数据库或网络依赖)
- 依赖指向内部
- Adapter 实现 port 接口
- 向后兼容的 gRPC API
架构约束详情请参见 [docs/CLAUDE.md](docs/CLAUDE.md)。
## 📊 API
### gRPC API
```
# 检查 IOC 是否存在(返回第一个匹配项)
grpcurl -plaintext -d '{"value": "192.0.2.1"}' \
localhost:50051 watchtower.Watchtower/CheckIOC
# 搜索 IOC(返回所有来源)
grpcurl -plaintext -d '{"value": "lodash"}' \
localhost:50051 watchtower.Watchtower/SearchIOC
# 搜索特定 package 版本
grpcurl -plaintext -d '{"value": "lodash@4.17.0"}' \
localhost:50051 watchtower.Watchtower/SearchIOC
```
### REST API
```
# 健康检查
curl http://localhost:8080/api/v1/health
# 检查 IOC
curl "http://localhost:8080/api/v1/iocs/check?value=192.0.2.1"
# 搜索 IOC
curl "http://localhost:8080/api/v1/iocs/search?value=lodash"
# SIEM feed(CEF 格式)
curl "http://localhost:8080/api/v1/iocs/feed?format=cef&since=24h"
# SIEM feed(STIX 2.1 格式)
curl "http://localhost:8080/api/v1/iocs/feed?format=stix&since=24h"
```
## 🛠️ 开发
### 前置条件
- Go 1.25+
- Docker & Docker Compose
- PostgreSQL (通过 Docker)
### 构建
```
# 构建所有 binaries
make build
# 构建单独组件
make build-server # gRPC server
make build-api # REST API server
make build-ingester # Threat intelligence ingester
```
### 运行
```
# 开发模式(不构建,快速迭代)
make run-dev # gRPC server
make run-api-dev # REST API server
make ingestion-dev # Run ingestion
# 生产模式(带构建)
make run
make run-api
make ingestion
```
### 测试
```
# 运行所有测试
make test
# 运行测试并生成 coverage
make test-coverage
# 仅运行单元测试
make test-unit
# 安全检查
make security
# 架构合规性
make arch-check
```
### 数据库
```
# 使用 Docker 启动 PostgreSQL
make docker-up
# 运行 migrations
make db-migrate
# 检查数据库状态
make db-status
# 重置数据库
make db-reset
# 打开 PostgreSQL shell
make db-shell
```
所有数据库命令都在内部使用 Docker - 无需本地安装 PostgreSQL!
## 📚 文档
- **[Makefile 指南](docs/MAKEFILE_GUIDE.md)** - 所有 make 命令的完整指南
- **[架构](docs/CLAUDE.md)** - 六边形架构约束和规则
- **[版本追踪](docs/VERSION_TRACKING.md)** - 供应链版本感知检测
- **[IOC 提取](docs/IOC_EXTRACTION.md)** - 智能组件提取和模式匹配
- **[SentinelOne 集成](docs/SENTINELONE_INTEGRATION.md)** - 完整的集成规范
- **[SentinelOne 快速开始](docs/SENTINELONE_QUICKSTART.md)** - 30 分钟配置指南
- **[基于 LLM 的分类](docs/LLM_TRIAGING.md)** - 结合 OpenAI/Claude 的 AI 驱动威胁分析
- **[LLM 防护栏](docs/LLM_GUARDRAILS.md)** - 减少误报的多层保护(减少 75%)
- **[可观测性与弹性](docs/OBSERVABILITY.md)** - Prometheus 指标、熔断器和重试逻辑
- **[Datadog SIEM 集成](docs/SIEM_INTEGRATION_DATADOG.md)** - 与 Datadog 集成进行威胁监控
- **[Elastic Cloud SIEM 集成](docs/SIEM_INTEGRATION_ELASTIC.md)** - 与 Elastic Cloud + Kibana 集成
- **[测试指南](docs/TESTING_GUIDE.md)** - 完整的测试场景和自动化测试套件
- **[安全修复](docs/SECURITY_FIXES.md)** - 安全改进和最佳实践
## 🔧 配置
创建 `.env` 文件(可选 - 仅在需要 API 密钥时使用):
```
make env-setup
```
编辑 `.env` 并添加您的凭据:
```
# 威胁情报
OTX_API_KEY=your-otx-key
# Slack 通知
SLACK_BOT_TOKEN=xoxb-your-token
SLACK_CHANNEL_SECURITY=#security-alerts
# SentinelOne webhook
SENTINELONE_WEBHOOK_SECRET=shared-secret
# REST API
REST_API_AUTH_TOKEN=your-api-token
```
## 🎯 用例
### 1. 安全运营中心 (SOC)
利用多源威胁情报丰富安全警报:
```
# 分析师收到包含 IP 198.0.2.12 的告警
# 通过 Slack 查询 Watchtower
/watchtower check 198.0.2.12
# 响应:确认为恶意(3 个来源,confidence 90%)
# 决策:升级至 incident response
```
### 2. 供应链安全
在 CI/CD 中监控恶意软件包:
```
# 检查 package 版本是否安全
grpcurl -d '{"value": "lodash@4.17.0"}' \
localhost:50051 watchtower.Watchtower/SearchIOC
# 如果存在漏洞:阻止部署
# 如果安全:继续 pipeline
```
### 3. 威胁狩猎
跨 endpoint 搜索 indicator:
```
# 获取所有已知的恶意 IP
curl "http://localhost:8080/api/v1/iocs/feed?format=json&since=7d"
# 查询 EDR 以获取与这些 IP 的连接
# 识别受损的 endpoints
```
### 4. 事件响应
在调查期间丰富 IOC:
```
# 发现可疑 IP:203.0.113.5
grpcurl -d '{"value": "203.0.113.5"}' \
localhost:50051 watchtower.Watchtower/SearchIOC
# 响应显示:
# - URLhaus:http://203.0.113.5/malware.sh
# - OTX:C2 server(3 个 pulses)
# - 首次发现:3 天前
```
## 📈 性能
- **摄取**:在 < 5 分钟内处理 100,000+ 个 IOC
- **查询延迟**:精确匹配 < 10ms,模式搜索 < 100ms
- **数据库大小**:完全摄取后约 50-100MB
- **内存使用**:约 200MB (gRPC server),约 300MB (REST API)
## 🐳 部署
### Docker Compose
```
docker-compose up -d
```
服务:
- `watchtower-grpc` - gRPC server (端口 50051)
- `watchtower-api` - REST API server (端口 8080)
- `postgres` - PostgreSQL 数据库 (端口 5432)
### Kubernetes
请参阅 `k8s/` 目录获取 manifest。
## 📊 项目状态
- ✅ **gRPC API** - 生产就绪
- ✅ **威胁情报摄取** - 生产就绪
- ✅ **供应链检测** - 生产就绪
- ✅ **版本追踪** - 生产就绪
- ✅ **IOC 组件提取** - 生产就绪
- ✅ **REST API** - 准备好测试
- ✅ **SentinelOne 集成** - 准备好测试
- ✅ **Slack 通知** - 准备好测试
- 🚧 **SIEM 数据源** - CEF/STIX 导出器已实现,需要测试
## 🔗 资源
- **威胁数据源**:
- [AlienVault OTX](https://otx.alienvault.com/)
- [URLhaus](https://urlhaus.abuse.ch/)
- [Google OSV](https://osv.dev/)
- [DigitalSide 威胁情报](https://osint.digitalside.it/)
- **集成**:
- [SentinelOne API](https://xsoar.pan.dev/docs/reference/integrations/sentinel-one-v2)
- [Slack API](https://api.slack.com/)
## 📄 许可证
MIT 许可证 - 详情请参阅 LICENSE 文件。
## 🆘 支持
- 运行 `make help` 查看所有可用命令
- 查看 [docs/MAKEFILE_GUIDE.md](docs/MAKEFILE_GUIDE.md) 进行故障排除
- 提交 GitHub issue 报告 bug 或功能请求
**专为安全团队用 ❤️ 构建** | 使用 Go 编写 🐹 | 由 PostgreSQL 提供支持 🐘
标签:CISA项目, EDR集成, EVTX分析, Go, IOC聚合, IP 地址批量处理, Python工具, Ruby工具, 威胁情报, 子域名突变, 开发者工具, 日志审计, 测试用例, 版权保护, 网络信息收集, 网络安全, 请求拦截, 隐私保护