minkong05/LDR-platform
GitHub: minkong05/LDR-platform
一个自建的微型 SOC 平台,为小型 Web 服务提供日志采集、规则检测、告警调查和安全响应的完整闭环。
Stars: 1 | Forks: 0






# 轻量级检测与响应 (LDR) 平台
一个自建的微型 SOC 平台,用于 Web 服务——作为一个为期 16 周的学习和作品集项目而构建。它从 Flask 和 Nginx 接收日志,将其规范化为受 ECS 启发的 schema,运行基于 YAML 的检测规则,在调查看板中展示告警,并支持带有完整审计跟踪的安全响应操作。
## 功能说明
```
Agent → Ingest API → Normaliser → Event Store → Detection Worker
↓
Alert Writer → Email
↓
Investigation Dashboard
↓
Response Actions → Audit Log
```
1. 日志 **agent** 使用共享密钥 token 将批量事件(Flask 访问日志、Nginx 访问日志)传送到 ingest API。
2. **ingest API** 对每个事件进行去重、限流、解析,并将其规范化为受 ECS 启发的 schema,然后将其存储在 PostgreSQL 中。
3. **检测 worker** 每 30 秒轮询一次,根据最近的事件评估 YAML 阈值规则,并将告警写入数据库。高危和严重告警会触发邮件通知。
4. **调查看板**(Flask + Bootstrap 5)允许分析师浏览告警,切换到 IP 时间线,查看风险评分,并将证据包导出为 ZIP 文件。
5. 在任何 IP 调查页面,分析师都可以一键**封禁或解封** IP。每一个操作都会写入在看板中可见的、不可篡改的**审计日志**。
## 路线图
- [x] Ingestion API — agent token 认证、稳定的去重哈希、限流
- [x] 规范化 — Nginx + Flask 解析器 → 受 ECS 启发的 schema
- [x] 事件存储 + 查询 endpoint — 过滤、分页、IP 摘要
- [x] 运营基础 — 结构化日志、request-id、全局错误处理、保留策略 CLI
- [x] 检测引擎 — YAML 规则加载器、阈值窗口、告警写入器
- [x] 邮件通知 — 高危/严重告警触发 SMTP 邮件
- [x] 调查看板 — 告警列表、告警详情、分类处理工作流
- [x] IP 调查 — 事件时间线、风险评分、热门路径、状态码
- [x] 证据导出 — ZIP 包(summary.md + alerts.json + events.json)
- [x] 响应操作 — 封禁 IP、解封 IP、封禁状态 — 完整的审计跟踪
- [x] 审计日志看板 — 所有响应操作的分页视图
## 技术栈
| 层级 | 技术 |
|---|---|
| 后端 API | FastAPI + Pydantic v2 + SQLAlchemy 2 |
| 看板 | Flask 3 + Bootstrap 5 暗黑主题 + Jinja2 |
| 数据库 | PostgreSQL(JSONB 列)+ Alembic 迁移 |
| 检测 worker | Python 轮询循环、YAML 规则、structlog |
| 认证 | 共享 agent token(X-Agent-Token 标头)|
| 测试 | pytest — 单元测试 + 集成测试(RUN_INTEGRATION_TESTS=1)|
| CI | GitHub Actions |
| 基础设施 | Docker Compose |
## 快速开始
```
git clone https://github.com/minkong05/LDR-platform.git
cd LDR-platform
cp .env.example .env # review defaults before running
./scripts/dev_up.sh # starts postgres, backend, worker, dashboard
# 验证 stack 已启动
curl http://localhost:8000/v1/health # {"status": "ok"}
open http://localhost:5001 # dashboard
```
### 填充演示数据
```
# 使用 synthetic events 触发所有 detection rules
./scripts/trigger_all_rules.sh
# 等待约 30 秒让 worker 触发,然后打开 dashboard
open http://localhost:5001
```
### 攻击模拟与检测覆盖率报告
`python -m app.cli simulate`(从 `apps/backend` 运行)会根据每条检测规则伪造一批合成攻击,等待 worker 对其进行评估,并检查哪些规则实际被触发——其理念与 `trigger_all_rules.sh` 相同,但这不仅是一个可测试的 Python 工具,还会报告此检测套件*未*涵盖的内容(参见 `mitre_reference.py`)。它会将一份可重新生成的报告写入 `docs/detection-coverage.md`。仅限本地/演示使用——当 `ENV=production` 时将拒绝运行。
## 项目结构
```
LDR-platform/
├── apps/
│ ├── backend/ # FastAPI — ingest, events, alerts, entities, response
│ │ ├── app/
│ │ │ ├── routers/
│ │ │ ├── services/ # detection, normaliser, risk, evidence, email, response
│ │ │ ├── db/ # ORM models + Alembic migrations
│ │ │ └── schemas/
│ │ └── tests/ # unit + integration
│ ├── worker/ # detection polling loop
│ └── dashboard/ # Flask UI
│ └── dashboard/
│ ├── routes/
│ └── templates/
├── rules/ # YAML detection rules
├── scripts/ # dev helpers
└── docs/
```
## 检测规则
规则以 YAML 文件的形式存放在 `rules/` 目录中。示例:
```
id: LDR-WEB-001
name: Brute force login failures
severity: high
confidence: high
technique_id: T1110
condition:
type: threshold
field: event.action
value: login_failed
threshold: 10
window_seconds: 300
group_by:
- source.ip
```
引擎会根据规范化后事件的滑动窗口对每条规则进行评估。当越过阈值时,将写入一条带有计算出的风险评分的告警。
## 测试
```
# Unit tests(无外部依赖)
pytest -q
# Integration tests(需要运行中的 Postgres)
docker compose up -d postgres
RUN_INTEGRATION_TESTS=1 pytest -q
# 运行所有内容
./scripts/test_all.sh
```
## 已知局限性
这些是刻意的设计决策和环境限制,并非 bug。
- **封禁执行仅限于数据库层面。** 封禁 IP 会向 PostgreSQL 和审计日志写入一条记录。这里没有 Nginx 或防火墙的执行机制——因为该平台是为无法访问系统网络配置的受限本地环境而设计的。但其架构设计允许真实的执行层(iptables、Nginx `geo` 封禁、云端 WAF)读取 `blocked_ips` 表来实施强制封禁。
- **单一 SMTP 收件人。** 邮件通知仅发送至一个地址(`SMTP_TO`)。未实现多收件人或值班路由功能。
- **看板无身份认证。** Flask 看板没有登录拦截。仅适用于内部/本地使用。
- **无跨规则关联。** 检测引擎独立评估每条规则。不支持“当规则 A 和规则 B 同时针对同一个 IP 触发时才告警”。
- **Redis 已预配但未被使用。** Docker Compose 技术栈中包含了 Redis,预留给未来的限流存储或任务队列使用。目前使用的是基于内存的限流器。
## 作者
由 **Kong Yu Min** 构建
格拉斯哥大学
Python | 后端 | 安全
[GitHub](https://github.com/minkong05) · [LinkedIn](https://linkedin.com/in/kong-yu-min)
标签:AMSI绕过, AV绕过, FastAPI, Flask, Python, SIOS, 威胁检测, 安全规则引擎, 安全运营, 扫描框架, 无后门, 测试用例, 版权保护, 逆向工具