TerrifiedBug/chad
GitHub: TerrifiedBug/chad
CHAD 是一个基于 OpenSearch 的轻量级 Sigma 检测引擎,为安全团队提供低成本、无供应商锁定的实时威胁检测能力,填补了日志存储与传统 SIEM 之间的空白。
Stars: 0 | Forks: 0
# CHAD - Cyber Hunting And Detection
**CHAD** 是一个轻量级、Sigma 优先的检测引擎,专为将日志存储在 **OpenSearch** 中,但不想承担传统 SIEM 的成本、复杂性或供应商锁定的团队而设计。
它专注于做一件事并做到极致:
CHAD *不是* 一个完整的 SIEM。它旨在刻意填补廉价的日志存储与昂贵、重量级 SIEM 平台之间的空白。
## 为什么要有 CHAD
当今许多安全团队:
- 已经将日志发送到 OpenSearch 或 Elasticsearch
- 将其用作数据湖,因为它更便宜且更灵活
- 仍然需要真正的检测,而不仅仅是仪表盘
现有的选项通常会陷入以下陷阱之一:
| 方案 | 问题 |
|----------|---------|
| 完整的 SIEM(Splunk、Sentinel) | 成本高,供应商锁定 |
| 定时查询告警 | 噪音大、难以管理、存在延迟 |
| 内置的“安全分析” | 不成熟、不灵活、Sigma 支持有限 |
CHAD 通过提供一个位于 OpenSearch 之上的**专用检测引擎**来弥合这一差距。
## CHAD 是什么(以及不是什么)
### CHAD **是**:
- 一个原生支持 Sigma 的检测引擎
- 专为 OpenSearch 用户设计
- 事件驱动且接近实时
- API 优先且对自动化友好
- 专注于告警质量和规则维护
### CHAD **不是**:
- 一个完整的 SIEM
- 一个日志存储平台
- 一个 UEBA 或 SOAR 系统
- 仪表盘或调查工具的替代品
CHAD 假设您的日志已经存在于 OpenSearch 中,并纯粹专注于检测。
## 核心概念
### Sigma 作为唯一事实来源
所有的检测都是用 **Sigma** 编写的 —— 这是一种开放、供应商中立的检测格式。
Sigma 规则具有以下特点:
- 可跨平台移植
- 被安全工程师广泛理解
- 像代码一样进行版本控制
CHAD 使用 [pySigma](https://github.com/SigmaHQ/pySigma) 将 Sigma 规则转换为 OpenSearch 查询 DSL,并将其存储为 percolator。
### 基于 Percolator 的检测
CHAD 使用 **OpenSearch percolator** 进行检测 —— 这是对常规搜索的一种反转:
| 常规搜索 | Percolation |
|---------------|-------------|
| 存储文档 | 存储查询(规则) |
| 对它们运行查询 | 发送一个文档(事件) |
| 获取匹配的文档 | 获取匹配的规则 |
这非常适合安全检测。
**为什么使用 percolator?**
- 无需维护自定义查询引擎
- 匹配语义与 OpenSearch 搜索完全相同
- OpenSearch 能高效地预过滤候选规则
- 规则集中存储且可搜索
- CHAD 保持无状态且易于操作
## 架构
```
┌─────────────┐
│ Fluentd │
└──────┬──────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ │
┌─────────────┐ ┌─────────────┐ │
│ OpenSearch │ │ CHAD │ │
│ (storage) │ │ (detect) │ │
└─────────────┘ └──────┬──────┘ │
│ │
┌───────▼────────┐ │
│ Percolate API │ │
└───────┬────────┘ │
│ │
┌───────▼────────┐ │
│ Alerts │◄────┘
│ (OpenSearch) │
└───────┬────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌────────┐ ┌─────────┐ ┌─────────┐
│Webhooks│ │ Jira │ │ Email │
└────────┘ └─────────┘ └─────────┘
```
### 检测流程
1. **Fluentd 将日志发送**到 OpenSearch(用于存储)和 CHAD(用于检测)
2. **CHAD 使用**基于每个 index pattern 的身份验证 token **对请求进行身份验证**
3. **CHAD 将**每个事件与已部署的规则进行 percolate 匹配
4. **匹配的规则**生成包含完整日志上下文的告警
5. **告警被**威胁情报和 GeoIP 丰富
6. **通知通过** webhook、Jira 或其他集成触发
## 功能
### 规则管理
- **Monaco YAML 编辑器**,带有 Sigma schema 验证和自动补全
- **字段验证**,基于实际的 OpenSearch index mapping 进行验证
- **版本历史**,带有差异视图和一键回滚功能
- **SigmaHQ 集成** - 浏览、搜索和批量导入社区规则
- **规则测试**,在部署前针对示例日志进行测试
### 检测
- **实时匹配**,通过 OpenSearch percolator 实现
- **阈值告警** - 基于计数的聚合(例如,5 分钟内 10 次登录失败)
- **关联规则** - 多事件检测模式
- **例外规则** - 在不禁用规则的情况下消除误报
### 丰富
- **威胁情报** - CrowdStrike、MISP、VirusTotal、AbuseIPDB
- **IOC 提取** - 自动提取 IP、域名、哈希、URL
- **GeoIP 丰富** - 为 IP 地址提供地理上下文
### 运维
- **MITRE ATT&CK 覆盖图** - 可视化检测盲区
- **健康监控** - 基于每个 index pattern 的延迟和错误跟踪
- **审计日志** - 所有用户操作的完整历史记录
- **批量操作** - 一次性启用、禁用、删除多个规则
### 安全
- **基于角色的访问控制** - Admin、Analyst、Viewer 角色
- **SSO 支持** - OIDC 和 SAML 集成
- **基于 Index 的身份验证 Token** - 安全的日志发送身份验证
- **IP 允许列表** - 限制哪些来源可以发送日志
## 快速开始
### 前置条件
- Docker 和 Docker Compose
- 现有的 OpenSearch 集群
- 日志转发器(Fluentd、Logstash 等)
### 1. 克隆并配置
```
git clone https://github.com/terrifiedbug/chad.git
cd chad
cp .env.example .env
```
使用安全的值编辑 `.env`:
```
POSTGRES_PASSWORD=your-secure-password
JWT_SECRET_KEY=$(openssl rand -base64 32)
SESSION_SECRET_KEY=$(openssl rand -base64 32)
CHAD_ENCRYPTION_KEY=$(openssl rand -base64 32)
APP_URL=https://chad.example.com
```
### 2. 启动 CHAD
```
docker compose up -d
```
### 3. 完成设置向导
打开 `http://localhost` 并完成以下操作:
1. **创建管理员账户**
2. **配置 OpenSearch 连接**
3. **创建第一个 Index Pattern**
### 4. 配置日志传输
必须将日志发送到 CHAD(用于检测)和 OpenSearch(用于存储)**两者**中。
**Fluentd 示例:**
```
@type copy
@type http
endpoint https://chad.example.com/api/logs/winlogbeat
headers {"Authorization": "Bearer YOUR_INDEX_PATTERN_AUTH_TOKEN"}
json_array true
@type memory
flush_interval 1s
@type opensearch
host opensearch.example.com
port 9200
index_name winlogbeat-%Y.%m.%d
```
从以下位置获取您的身份验证 token:**Index Patterns → [您的 Pattern] → Settings → Auth Token**
## CHAD 的适用人群
| 非常适合 | 不太适合 |
|----------|-----------|
| 使用 OpenSearch 的安全团队 | 想要一体化 SIEM 的团队 |
| 被传统 SIEM 价格劝退的组织 | 没有日志数据湖的环境 |
| 希望实现检测即代码的工程师 | 纯粹由 GUI 驱动的安全运营 |
| 重视 Sigma 可移植性的团队 | 需要内置 UEBA 的团队 |
## 设计理念
- **检测优先** - 一件事,做到极致
- **简单胜于取巧** - 易于理解和操作
- **无处不在的 Sigma** - 可移植、供应商中立的规则
- **将 OpenSearch 视为合作伙伴** - 充分利用其最擅长的功能
- **让常见场景变得简单** - 让复杂场景成为可能
## 配置
初始设置完成后,大多数设置都通过 Web UI 进行管理。
### 环境变量
| 变量 | 必填 | 描述 |
|----------|----------|-------------|
| `POSTGRES_PASSWORD` | 是 | 数据库密码 |
| `JWT_SECRET_KEY` | 是 | JWT 签名密钥 |
| `SESSION_SECRET_KEY` | 是 | 会话加密密钥 |
| `CHAD_ENCRYPTION_KEY` | 是 | 凭证加密密钥 |
| `APP_URL` | 是 | 用于 CSRF、SSO 重定向的公共 URL |
| `CHAD_SSO_ONLY` | 否 | 设置为 `true` 以禁用本地登录 |
| `LOG_LEVEL` | 否 | 日志详细程度(默认:`warning`) |
### 可通过 GUI 配置的设置
- **OpenSearch** - 连接、凭证、SSL
- **Index Patterns** - 日志源、字段映射、身份验证 token
- **通知** - webhook、Jira 集成
- **威胁情报** - TI 提供商的 API 密钥
- **身份验证** - SSO(OIDC/SAML)配置
- **AI 映射** - 使用 Ollama、OpenAI 或 Anthropic 提供字段映射建议
## 开发
```
# 启动开发环境
docker compose -f docker-compose.dev.yml up -d
# 运行后端测试
docker compose -f docker-compose.dev.yml run --rm backend pytest
# 运行前端测试
docker compose -f docker-compose.dev.yml run --rm frontend npm test
# Linting
docker compose -f docker-compose.dev.yml run --rm backend ruff check .
docker compose -f docker-compose.dev.yml run --rm frontend npm run lint
```
## 文档
完整文档请访问:**[docs.chad.terrifiedbug.com](https://docs.chad.terrifiedbug.com)**
- [快速入门指南](https://docs.chad.terrifiedbug.com/quickstart)
- [架构概述](https://docs.chad.terrifiedbug.com/architecture)
- [规则管理](https://docs.chad.terrifiedbug.com/guide/rules)
- [字段映射](https://docs.chad.terrifiedbug.com/guide/field-mappings)
## 状态
CHAD 正在积极开发中。欢迎贡献代码、提供反馈和参与设计讨论。
## 许可证
MIT License - 详情请参阅 [LICENSE](LICENSE)。
标签:AMSI绕过, SIEM组件, Sigma规则, 威胁检测, 安全运营, 扫描框架, 日志告警, 测试用例, 目标导入, 网络安全, 请求拦截, 逆向工具, 隐私保护