malekgulam/SIEM-System-Project
GitHub: malekgulam/SIEM-System-Project
一款基于 Python/Flask 的 SIEM 平台,通过日志标准化、MITRE ATT&CK 规则检测和风险评分实现威胁告警与事件调查的全流程模拟。
Stars: 1 | Forks: 0
# SIEM 系统项目
这是一个使用 Python 和 Flask 开发的应用程序,用于模拟安全运营中心 (SOC) 的工作流程。它能够摄取 Linux 身份验证日志和 Apache 访问日志,将其标准化为统一的事件模型,运行映射到 MITRE ATT&CK 的检测规则,为告警分配风险评分,并提供一个 Web 界面用于调查、案例管理和检测报告。
## 截图
### 仪表板

### 告警调查

### 事件浏览器

### 案例

### 案例详情

### 检测指标

### ATT&CK 覆盖率

### 搜索

## 架构

## 功能
- 摄取 Linux 身份验证日志和 Apache 访问日志
- 将事件标准化为统一的事件模型
- 五条映射到 MITRE ATT&CK 的检测规则及 JSON 规则库
- 基于严重程度、时间、用户上下文和源 IP 历史记录的告警风险评分
- 告警与事件关联——每条告警都链接到触发它的原始日志事件
- 事件浏览器,用于独立于告警调查标准化后的遥测数据
- 告警分类处理,包括状态跟踪、分析师备注和判定分配
- 带有时间戳调查备注的案例管理
- 使用相同生产级检测流水线的检测规则模拟器
- 针对每条规则的真实阳性、误报和精确度跟踪
- 支持导出 Navigator layer 的 MITRE ATT&CK 覆盖率仪表板
- 支持 Anthropic、OpenAI 和 Google 的 AI 辅助调查摘要
## 检测规则
| 规则 ID | 规则名称 | 技术 | 战术 | 触发条件 |
|---------|-----------|-----------|--------|---------|
| BF-001 | SSH 暴力破解 | T1110 | 凭据获取 | 60 秒内来自同一 IP 的 5 次以上 SSH 登录失败 |
| OHL-001 | 非工作时间登录 | T1078 | 防御规避 | 在 00:00 到 05:00 之间成功登录 |
| WS-001 | Web 扫描活动 | T1595 | 侦察 | 30 秒内来自同一 IP 的 10 次以上 HTTP 404 响应 |
| PFS-001 | 通过 sudo 进行权限提升 | T1548 | 权限提升 | 任何 sudo 命令的执行 |
| CSF-001 | 撞库攻击 | T1110.004 | 凭据获取 | 60 秒内来自同一 IP 针对 3 个以上用户名的登录失败 |
规则存储在 `Detection/rules.json` 中,包含严重程度、规则类型、技术和战术。添加新规则只需要一个 JSON 文件——无需修改 Python 代码。
## 风险评分
每条告警在检测时都会获得一个介于 0 到 100 之间的风险评分。
该评分由四个因素计算得出:
- 基于告警严重程度的**基础分**——HIGH 起评分为 70,MEDIUM 为 40,LOW 为 15
- 如果告警发生在 00:00 到 05:00 之间,**+15**
- 如果目标用户是 root、admin 或 administrator,**+10**
- 如果源 IP 在数据库中有 3 条或更多先前的告警,**+10**
评分上限为 100,并会在整个仪表板中显示,以帮助优先确定要首先调查的告警。
## 项目结构
```
SIEM-System-Project/
├── config.py # All paths and settings
├── requirements.txt
├── Data/ # Log files
├── Generators/ # Synthetic log generators
├── Ingestion/ # Log file reader
├── Parsing/ # Log parsers and event normalization
├── Detection/ # Detection engine and rules.json
├── Storage/ # SQLite database operations
└── Dashboard/ # Flask app, templates, and static files
```
## 数据库 Schema
| 表 | 描述 |
|-------|-------------|
| `events` | 日志处理产生的每一个标准化事件,独立于告警存储 |
| `alerts` | 检测结果,包含严重程度、风险评分、状态、判定和 MITRE 映射 |
| `alert_events` | 将每条告警映射到触发它的具体事件 |
| `cases` | 由告警创建的调查案例,具有独立的状态跟踪 |
| `notes` | 附加到案例的带有时间戳的分析师备注 |
事件和告警分开存储,以便即使在未触发任何检测规则时,分析师也能调查原始遥测数据。
## 安装
```
git clone
cd SIEM-System-Project
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux / macOS
source .venv/bin/activate
pip install -r requirements.txt
```
## 使用说明
### 第 1 步 — 生成示例日志
```
python Generators/auth_log_generator.py
python Generators/access_log_generator.py
```
### 第 2 步 — 启动仪表板
```
python Dashboard/app.py
```
### 第 3 步 — 打开应用程序
```
http://127.0.0.1:5000
```
点击侧边栏中的 **Run Pipeline** 以摄取日志、运行检测并填充仪表板。在生成额外的日志后,可以再次运行流水线——系统会自动防止产生重复的事件和告警。
## 仪表板路由
| 路由 | 描述 |
|-------|-------------|
| `/` | 告警仪表板,包含图表、风险评分和告警队列 |
| `/events` | 浏览所有具有类型筛选功能的标准化事件 |
| `/events/` | 单个事件详情,带有指向相关告警的透视链接 |
| `/alert/` | 告警详情,包含证据、关联事件、判定和案例管理 |
| `/cases` | 调查案例列表,包含状态和判定 |
| `/cases/` | 案例详情,包含备注、判定和关联的告警上下文 |
| `/metrics` | 针对每条规则的检测指标,包括 TP、FP 和精确度 |
| `/coverage` | MITRE ATT&CK 覆盖率仪表板 |
| `/search` | 按 IP、规则 ID、规则名称或技术搜索告警 |
| `/simulator` | 针对检测规则测试单条日志行 |
| `/coverage/export` | 导出 ATT&CK Navigator layer 的 JSON |
| `/run` | 触发检测流水线 |
| `/reset` | 清除所有调查数据 |
## 告警生命周期
```
Open Case → Investigation Notes → Verdict → Case Closed
```
每个案例都链接到一个告警,并独立维护其自身的状态。
关闭案例会自动记录关闭时间戳。
## AI 调查助手
告警详情页面包含一个 AI 助手,它可以根据告警上下文生成调查指南。
它支持三个提供商:
| 提供商 | 示例模型 |
|----------|---------------|
| Anthropic | claude-sonnet-4-6 |
| OpenAI | gpt-4o |
| Google | gemini-2.5-flash |
提供商、模型名称和 API key 在 UI 中输入。
系统不会在任何地方存储 key——每次请求只使用一次该 key,随后将其丢弃。
## 技术栈
- Python 3.10+
- Flask
- SQLite3
- Jinja2
- Chart.js
- MITRE ATT&CK
- ATT&CK Navigator
标签:AMSI绕过, Flask, Python, 后端开发, 威胁检测, 安全运营中心, 无后门, 网络映射, 逆向工具