sayhakilic61/soc-triage
GitHub: sayhakilic61/soc-triage
面向 SOC 团队的实时告警分诊引擎,通过多维度加权评分和 MITRE ATT&CK 映射自动对安全告警进行优先级排序,缓解告警疲劳问题。
Stars: 0 | Forks: 0
# SOC 告警分诊与事件控制台






为**安全运营中心 (SOC)** 设计的实时**告警分诊**引擎。来自传感器(IDS、防火墙、身份验证、EDR、DNS)的安全告警流入数据流;分诊引擎通过**资产关键性 × 传感器重要性 × 威胁情报 (IOC) × MITRE ATT&CK 技术严重性 × 关联性**对每个告警进行评分,生成 **P1–P4 优先级**,将关联告警绑定到**事件 (incident)**,并提示分析师“优先查看此项”。仪表板通过**可解释的拆解**展示了每个告警*为什么*会获得该优先级。
## 为什么需要分诊?
SOC 团队最大的困扰是**告警疲劳**:每天会产生数以千计的告警,其中大部分是噪音,但一旦漏掉其中的几个关键事件,后果将是灾难性的。该项目通过对原始告警进行**优先级排序和丰富化处理**,将分析师的注意力引导到正确的地方——这是 SIEM/SOAR 领域的核心问题。
## 架构
```
flowchart LR
SEN["Sensörler
IDS · FW · AUTH · EDR · DNS"] -->|POST /api/simulate| API["API · FastAPI"] API -->|XADD| S1[("Redis Stream
alerts.raw")] S1 -->|consumer group| ENG["Triyaj Motoru
skorlama + korelasyon"] ENG -->|XADD| S2[("Redis Stream
alerts.scored")] ENG <-->|varlık · IOC · korelasyon| ST[("Redis
durum + olaylar")] ENG -.->|ui:events pub/sub| API API -.->|WebSocket| UI["Dashboard · nginx"] classDef stream fill:#0B2E52,stroke:#0B2E52,color:#fff; class S1,S2,ST stream; ``` | 服务 | 角色 | 技术 | 主机端口 | |---|---|---|---| | **frontend** | 企业仪表板(优先级指标 + MITRE) | nginx | **唯一开放端口** | | **api** | 告警生成器 + WebSocket 桥接 + 统计数据 | FastAPI + asyncio | (内部) | | **engine** | 分诊 + 关联消费者 | asyncio + Redis Streams | (内部) | | **redis** | 数据流 + 状态 + 事件记录 | Redis 7.2 | (内部) | **无端口冲突:** 仅仪表板会开放一个主机端口(`SOC_PORT`,默认为 8097)。其他服务完全位于内部网络中。 ## 分诊评分 分数在 0–100 之间累积;优先级区间为:**≥80 P1(关键) · ≥55 P2(高) · ≥30 P3(中) · <30 P4(低)。** | 因素 | 捕获内容 | 贡献度 | |---|---|---| | **传感器重要性** | 传感器的原始重要级别 (1–4) | +8…65 | | **资产关键性** | 关键资产 / 服务器 / 工作站 | +4…25 | | **MITRE 技术严重性** | ATT&CK 技术的权重 | +7…22 | | **威胁情报 (IOC)** | 源/目标是已知的恶意 IP | +18 | | **攻击成功** | 确实获得了访问权限 | +15 | | **关联性** | 来自同一来源的 ≥3 个关联告警 → 事件 | +15 | | **可信度** | 传感器可信度百分比(缩放比例) | ×0.6–1.0 | 此外,每个告警都会映射到相应的 **MITRE ATT&CK** 技术和战术(例如 `T1041 · 通过 C2 通道外泄 → 外泄`),以便分析师了解攻击处于哪个阶段。 ## 场景 | 场景 | MITRE | 预期结果 | |---|---|---| | 暴力破解 → 登录成功(关键 DB) | T1110 | **P1** | | 数据外泄(外泄至 C2) | T1041 | **P1** | | 勒索软件嫌疑 | T1486 | **P1** | | 横向移动(SMB,关联性) | T1021.002 | **P1** | | 已知恶意 IP 联系 (C2) | T1071 | **P2** | | 可疑的 PowerShell (LOLBin) | T1059.001 | **P2** | | 端口扫描 | T1046 | **P3** | | 暴力破解(低危) | T1110 | **P4** | ## 运行 ``` git clone https://github.com/sayha2304/soc-triage.git cd soc-triage cp .env.example .env ``` 检查端口是否空闲(如果被占用,请在 `.env` 中修改 `SOC_PORT`): ``` ss -tlnp | grep ":8097 " || echo "8097 boş" ``` 接着执行: ``` docker compose up -d --build ``` 仪表板:**http://SUNUCU_IP:8097** → 选择场景 → **生成告警**。优先级指标、MITRE 映射、原因拆解和告警队列将会更新。 健康检查:`curl http://SUNUCU_IP:8097/api/stats` · 停止:`docker compose down` 如需扩展分诊引擎(consumer group 会自动分配): ``` docker compose up -d --scale engine=3 ``` ## 引擎测试 分诊引擎无依赖且具备单元测试(涵盖每个因素、优先级区间、MITRE 映射和关联性): ``` python3 -m unittest triage.test_triage -v ``` ## 项目结构 ``` soc-triage/ ├── triage/ # triyaj motoru (bağımlılıksız, testli) │ ├── alerts.py # Alarm modeli, varlık envanteri, IOC, senaryolar │ ├── mitre.py # MITRE ATT&CK teknik/taktik kataloğu │ ├── rules.py # ağırlıklı skorlama → P1-P4 + neden + MITRE │ └── test_triage.py # birim testler ├── engine/ # Redis Streams tüketicisi (korelasyon + olay) ├── api/ # FastAPI üretici + WebSocket köprüsü ├── frontend/ # kurumsal dashboard (gauge + MITRE + döküm) ├── docker-compose.yml └── .env.example ``` ## 注意 本系统**旨在用于防御目的**,且仅处理合成告警数据;它不会监控或收集真实人员/系统的数据。其目的是全面展示 SOC 分诊和 MITRE ATT&CK 映射的工作流程。 ## 许可证 **保留所有权利。** 代码可供查看,但未经许可不得使用、复制或分发。详情请参阅 [LICENSE](LICENSE)。 *Sayha Kılıç · 安全运营与支付系统 — [sayha.cloud](https://sayha.cloud)*
IDS · FW · AUTH · EDR · DNS"] -->|POST /api/simulate| API["API · FastAPI"] API -->|XADD| S1[("Redis Stream
alerts.raw")] S1 -->|consumer group| ENG["Triyaj Motoru
skorlama + korelasyon"] ENG -->|XADD| S2[("Redis Stream
alerts.scored")] ENG <-->|varlık · IOC · korelasyon| ST[("Redis
durum + olaylar")] ENG -.->|ui:events pub/sub| API API -.->|WebSocket| UI["Dashboard · nginx"] classDef stream fill:#0B2E52,stroke:#0B2E52,color:#fff; class S1,S2,ST stream; ``` | 服务 | 角色 | 技术 | 主机端口 | |---|---|---|---| | **frontend** | 企业仪表板(优先级指标 + MITRE) | nginx | **唯一开放端口** | | **api** | 告警生成器 + WebSocket 桥接 + 统计数据 | FastAPI + asyncio | (内部) | | **engine** | 分诊 + 关联消费者 | asyncio + Redis Streams | (内部) | | **redis** | 数据流 + 状态 + 事件记录 | Redis 7.2 | (内部) | **无端口冲突:** 仅仪表板会开放一个主机端口(`SOC_PORT`,默认为 8097)。其他服务完全位于内部网络中。 ## 分诊评分 分数在 0–100 之间累积;优先级区间为:**≥80 P1(关键) · ≥55 P2(高) · ≥30 P3(中) · <30 P4(低)。** | 因素 | 捕获内容 | 贡献度 | |---|---|---| | **传感器重要性** | 传感器的原始重要级别 (1–4) | +8…65 | | **资产关键性** | 关键资产 / 服务器 / 工作站 | +4…25 | | **MITRE 技术严重性** | ATT&CK 技术的权重 | +7…22 | | **威胁情报 (IOC)** | 源/目标是已知的恶意 IP | +18 | | **攻击成功** | 确实获得了访问权限 | +15 | | **关联性** | 来自同一来源的 ≥3 个关联告警 → 事件 | +15 | | **可信度** | 传感器可信度百分比(缩放比例) | ×0.6–1.0 | 此外,每个告警都会映射到相应的 **MITRE ATT&CK** 技术和战术(例如 `T1041 · 通过 C2 通道外泄 → 外泄`),以便分析师了解攻击处于哪个阶段。 ## 场景 | 场景 | MITRE | 预期结果 | |---|---|---| | 暴力破解 → 登录成功(关键 DB) | T1110 | **P1** | | 数据外泄(外泄至 C2) | T1041 | **P1** | | 勒索软件嫌疑 | T1486 | **P1** | | 横向移动(SMB,关联性) | T1021.002 | **P1** | | 已知恶意 IP 联系 (C2) | T1071 | **P2** | | 可疑的 PowerShell (LOLBin) | T1059.001 | **P2** | | 端口扫描 | T1046 | **P3** | | 暴力破解(低危) | T1110 | **P4** | ## 运行 ``` git clone https://github.com/sayha2304/soc-triage.git cd soc-triage cp .env.example .env ``` 检查端口是否空闲(如果被占用,请在 `.env` 中修改 `SOC_PORT`): ``` ss -tlnp | grep ":8097 " || echo "8097 boş" ``` 接着执行: ``` docker compose up -d --build ``` 仪表板:**http://SUNUCU_IP:8097** → 选择场景 → **生成告警**。优先级指标、MITRE 映射、原因拆解和告警队列将会更新。 健康检查:`curl http://SUNUCU_IP:8097/api/stats` · 停止:`docker compose down` 如需扩展分诊引擎(consumer group 会自动分配): ``` docker compose up -d --scale engine=3 ``` ## 引擎测试 分诊引擎无依赖且具备单元测试(涵盖每个因素、优先级区间、MITRE 映射和关联性): ``` python3 -m unittest triage.test_triage -v ``` ## 项目结构 ``` soc-triage/ ├── triage/ # triyaj motoru (bağımlılıksız, testli) │ ├── alerts.py # Alarm modeli, varlık envanteri, IOC, senaryolar │ ├── mitre.py # MITRE ATT&CK teknik/taktik kataloğu │ ├── rules.py # ağırlıklı skorlama → P1-P4 + neden + MITRE │ └── test_triage.py # birim testler ├── engine/ # Redis Streams tüketicisi (korelasyon + olay) ├── api/ # FastAPI üretici + WebSocket köprüsü ├── frontend/ # kurumsal dashboard (gauge + MITRE + döküm) ├── docker-compose.yml └── .env.example ``` ## 注意 本系统**旨在用于防御目的**,且仅处理合成告警数据;它不会监控或收集真实人员/系统的数据。其目的是全面展示 SOC 分诊和 MITRE ATT&CK 映射的工作流程。 ## 许可证 **保留所有权利。** 代码可供查看,但未经许可不得使用、复制或分发。详情请参阅 [LICENSE](LICENSE)。 *Sayha Kılıç · 安全运营与支付系统 — [sayha.cloud](https://sayha.cloud)*
标签:AV绕过, Docker, FastAPI, Python, Redis Streams, 告警分诊, 安全运营, 安全防御评估, 扫描框架, 无后门, 计算机取证, 请求拦截, 逆向工具