m-carneiro/watchtower

GitHub: m-carneiro/watchtower

Watchtower 是一个集中式威胁情报聚合平台,整合多源 IOC 数据并对接 EDR、SIEM 与 Slack,为安全团队提供警报丰富、供应链恶意软件检测和可操作情报推送。

Stars: 1 | Forks: 0

# Watchtower **威胁情报聚合平台**,具备供应链安全、SentinelOne 集成以及多来源 IOC 丰富功能。 [![Go Version](https://img.shields.io/badge/Go-1.25+-00ADD8?style=flat&logo=go)](https://go.dev/) [![架构](https://img.shields.io/badge/Architecture-Hexagonal-blue)](docs/CLAUDE.md) [![许可证](https://img.shields.io/badge/License-MIT-green)](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工具, 威胁情报, 子域名突变, 开发者工具, 日志审计, 测试用例, 版权保护, 网络信息收集, 网络安全, 请求拦截, 隐私保护