sujalthakur-03/SOAR-PROJECT
GitHub: sujalthakur-03/SOAR-PROJECT
一套面向 SOC 的轻量级 SOAR 平台,通过可视化 Playbook 编排实现安全告警的自动富化、调查与标准化响应。
Stars: 1 | Forks: 0
# CyberSentinel SOAR
**安全编排、自动化与响应平台**
CyberSentinel 是一个面向安全运营中心 的全栈 SOAR 平台。它从 Wazuh(通过专用的转发器)摄取安全告警,将其与用户定义的 Playbook 进行匹配,并执行自动化的响应工作流——包括富化、条件分支、人工审批关卡、遏制措施以及通知。
## 架构
```
┌──────────────────────┐
│ Wazuh Manager │
│ (Alert Source) │
└─────────┬────────────┘
│ Forwarder (Python, runs on Wazuh server)
│ POST /api/webhooks/trigger/:playbookId/:secret
▼
┌──────────────────────────────────────────────────────────┐
│ soar-backend (Node.js / Express) port 3001 │
│ ─ Webhook ingestion & trigger evaluation │
│ ─ Playbook execution engine (step-by-step) │
│ ─ Connector integrations (VirusTotal, AbuseIPDB, …) │
│ ─ Approval workflow management │
│ ─ REST API for frontend │
└─────────┬────────────────────────────────────────────────┘
│ MongoDB (persistent storage)
▼
┌──────────────────────────────────────────────────────────┐
│ soar-database (MongoDB 7.0) port 27017 │
│ ─ Playbooks, Executions, Cases, Audit Logs │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ soar-frontend (React / TypeScript / Vite) port 3000 │
│ ─ Playbook manager & visual drag-and-drop editor │
│ ─ Execution timeline (live updates) │
│ ─ Approval console │
│ ─ Connector status, Audit log, SOC metrics dashboard │
└──────────────────────────────────────────────────────────┘
```
## 技术栈
| 层级 | 技术 |
|-----------|----------------------------------------------------|
| Frontend | React 18, TypeScript, Vite, Tailwind CSS, ReactFlow, shadcn/ui |
| Backend | Node.js 18, Express, Mongoose |
| Database | MongoDB 7.0 |
| Forwarder | Python 3 (运行在 Wazuh 服务器上) |
| Deployment| Docker Compose |
## 前置条件
- **Docker & Docker Compose**(推荐的部署方式)
- 或:Node.js 18+, MongoDB 7.0+(用于手动设置)
- 如果需要真实的告警摄取,需要一个 Wazuh 服务器
## 快速开始
```
git clone https://github.com/sujalthakur-03/SOAR-PROJECT.git
cd SOAR-PROJECT
# 根据示例创建 backend env 文件
cp backend/.env.example backend/.env
# 使用您的 API keys 编辑 backend/.env(见下方 Environment 章节)
# 构建并启动所有服务
docker compose up -d --build
# 查看日志
docker compose logs -f
```
运行后:
| 服务 | URL |
|----------|----------------------------|
| Frontend | http://localhost:3000 |
| Backend | http://localhost:3001 |
| MongoDB | mongodb://localhost:27017 |
## 手动设置(不使用 Docker)
```
# Terminal 1 — Backend
cd backend
npm install
cp .env.example .env # then edit .env
npm start # listens on port 3001
# Terminal 2 — Frontend
npm install
npm run dev # listens on port 3000
```
MongoDB 必须在本地默认端口上运行,或者在 `backend/.env` 中设置 `MONGODB_URI`。
## 环境配置
所有后端配置位于 `backend/.env`。关键变量:
```
# MongoDB
MONGODB_URI=mongodb://localhost:27017
MONGODB_DB_NAME=cybersentinel
# Authentication
JWT_SECRET=
# Wazuh Active Response(不用于告警摄取)
WAZUH_API_URL=https://your-wazuh-server:55000
WAZUH_API_USERNAME=...
WAZUH_API_PASSWORD=...
# Threat Intelligence
VIRUSTOTAL_API_KEY=...
ABUSEIPDB_API_KEY=...
# Notifications
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=...
SMTP_PASS=...
# Firewall
FIREWALL_API_URL=...
FIREWALL_API_KEY=...
# Server
PORT=3001
NODE_ENV=production
```
请参阅 `backend/.env.example` 获取带有描述的完整列表。
## Forwarder 设置
**CyberSentinel Forwarder** 是一个运行在 Wazuh 服务器上的轻量级 Python 脚本。它实时读取 Wazuh `alerts.json` 文件中的告警,并将匹配的告警转发到 SOAR 后端的 Webhook 端点。
它是单独部署的——不在 Docker Compose 内部。请参阅 `forwarder/` 目录以获取其配置和设置说明。
## 创建 Playbook
1. 在 `http://localhost:3000` 打开 Frontend
2. 在侧边栏导航到 **Playbooks**
3. 点击 **Create Playbook** 并使用可视化拖放编辑器定义步骤
4. 保存 Playbook —— 后端会自动生成一个 Webhook URL
5. 复制 Webhook URL 并在 Forwarder 的路由规则中进行配置
或者,通过 API:
```
# 创建 playbook
curl -X POST http://localhost:3001/api/v2/playbooks \
-H "Content-Type: application/json" \
-d '{
"name": "SSH Brute Force Response",
"description": "Automated response to SSH brute force attacks",
"trigger": {
"type": "webhook",
"conditions": { "rule_id": "5763", "severity": "high" }
},
"dsl": {
"steps": [
{ "step_id": "enrich-1", "type": "enrichment", "connector": "abuseipdb", "action": "check_ip" },
{ "step_id": "cond-1", "type": "condition", "field": "enrich-1.abuse_score", "operator": "gt", "value": 80 },
{ "step_id": "action-1", "type": "action", "connector": "firewall", "action": "block_ip" },
{ "step_id": "notify-1", "type": "notification", "connector": "slack", "action": "send_message" }
]
}
}'
# 从响应中获取 webhook URL
# POST alerts 到该地址:
curl -X POST http://localhost:3001/api/webhooks/trigger// \
-H "Content-Type: application/json" \
-d '{ "rule": { "id": "5763" }, "data": { "srcip": "1.2.3.4" } }'
```
## 项目结构
```
SOAR-PROJECT/
├── src/ # Frontend source
│ ├── components/
│ │ ├── views/ # Dashboard views (Playbooks, Executions, etc.)
│ │ ├── playbook-editor/ # Visual drag-and-drop editor (ReactFlow)
│ │ ├── cases/ # Case management components
│ │ ├── layout/ # Sidebar, TopBar
│ │ └── ui/ # shadcn/ui primitives
│ ├── hooks/ # React Query hooks (usePlaybooks, useExecutions, …)
│ ├── lib/ # API client, utilities
│ ├── types/ # TypeScript type definitions
│ └── pages/ # Route pages
├── backend/
│ └── src/
│ ├── models/ # Mongoose schemas (playbook-v2, execution, case, …)
│ ├── routes/ # Express route handlers
│ ├── services/ # Business logic (execution engine, metrics, SLA, …)
│ ├── executors/ # Step executors (enrichment, action, notification)
│ ├── integrations/ # External API clients
│ └── index.js # Express app entry point
├── forwarder/ # Python forwarder (deployed on Wazuh server)
├── docker-compose.yml # Full-stack Docker deployment
├── Dockerfile # Frontend container
└── backend/Dockerfile # Backend container
```
## API 端点
### Playbooks
| Method | Endpoint | Description |
|--------|-------------------------------------|--------------------------|
| GET | `/api/v2/playbooks` | 列出所有 Playbook |
| POST | `/api/v2/playbooks` | 创建一个 Playbook |
| GET | `/api/v2/playbooks/:id` | 通过 ID 获取 Playbook |
| PUT | `/api/v2/playbooks/:id` | 更新一个 Playbook |
| DELETE | `/api/v2/playbooks/:id` | 删除一个 Playbook |
### Webhooks & Executions
| Method | Endpoint | Description |
|--------|--------------------------------------------------|--------------------------------|
| POST | `/api/webhooks/trigger/:playbookId/:secret` | 通过 Webhook 触发 Playbook |
| GET | `/api/v1/executions` | 列出执行记录 |
| GET | `/api/v1/executions/:id` | 获取执行详情 |
| GET | `/api/v1/executions/stats` | 执行统计信息 |
### Approvals, Cases, Metrics
| Method | Endpoint | Description |
|--------|--------------------------------|----------------------------|
| GET | `/api/v1/approvals` | 待处理审批 |
| POST | `/api/v1/approvals/:id/decide` | 批准 / 拒绝 |
| GET | `/api/v1/cases` | 列出 Cases |
| POST | `/api/v1/cases` | 创建一个 Case |
| GET | `/api/soc/kpis` | SOC 指标 & KPI |
### Health
| Method | Endpoint | Description |
|--------|------------|-------------------|
| GET | `/health` | Backend 健康检查 |
## 许可证
MIT
标签:AbuseIPDB, AMSI绕过, Ask搜索, CISA项目, DAST, Express, GNU通用公共许可证, IP 地址批量处理, LIDS, MITM代理, MongoDB, Node.js, PE 加载器, Python, SOAR平台, SOC效率提升, VirusTotal, Wazuh集成, Webhook, 事件响应工作流, 人工审批, 全栈安全平台, 剧本引擎, 力导向图, 告警分类, 威胁情报丰富, 威胁检测, 安全工具集成, 安全运营中心, 审计日志, 密码管理, 恶意软件分析, 插件系统, 无后门, 日志处理, 网络安全审计, 网络映射, 自动化响应, 自动化调查, 自定义脚本, 请求拦截, 逆向工具