Mihnea1711/SOC_System
GitHub: Mihnea1711/SOC_System
一个基于Docker容器化部署的实时SOC系统学术论文项目,通过投票机制和异常检测规则实现威胁的检测、防护与响应。
Stars: 1 | Forks: 0
# 分布式入侵检测系统
这是一个容器化、事件驱动的安全运营中心 (SOC),旨在实时摄取、处理和分析网络与主机数据。该系统结合使用基于特征的规则和流式机器学习 (ML),以检测已知攻击和零日异常。
## 系统架构与数据流
该系统建立在事件驱动的微服务架构之上,使用 Kafka 作为中枢神经系统。数据流经四个主要层级:
1. **采集:** Beats 代理从受监控的环境中捕获原始流量和日志。
2. **传输:** 事件被流式传输到 Kafka topic(`raw.logs`, `raw.packets`)中。
3. **处理与检测:** Python 引擎消耗原始数据流,对其进行清理并应用检测逻辑。告警将被推送回 Kafka(`alerts.signatures`, `alerts.anomalies`)。
4. **存储与可视化:** Elasticsearch 对告警进行索引,随后在 Kibana 中进行可视化展示。
## 层级与服务
### 1. 采集器 (采集层)
- **Nginx (受监控主机):** 一个模拟 Web 服务器,用作 Web 攻击模拟的目标。
- **SSH Server (受监控主机):** 一个开放 22 端口的 Ubuntu 容器,用作暴力破解攻击的目标。
- **MySQL Database (受监控主机):** 一个数据库容器,用作数据泄露和暴力破解攻击的目标。
- **DNS Server (受监控主机):** 一个 Bind9 容器,用作 DNS 隧道传输和数据泄露的目标。
- **Filebeat:** 持续读取并解析 Nginx 的 `access.log` 和 `error.log` 文件。
- **Packetbeat:** 嗅探 Docker 桥接网络上的原始网络流量(TCP/HTTP 流、MySQL 线协议、DNS 查询、SSH 流)。
### 2. 消息代理 (传输层)
- **Kafka (KRaft 模式):** 处理高吞吐量的实时数据流,无需 Zookeeper。将采集层与处理层解耦,确保在检测引擎重启时不会丢失数据。
### 3. 检测引擎 (处理层)
一个定制的 Python 服务,充当系统的大脑。它通过严格的 pipeline 处理事件:
- **噪声过滤器:** 丢弃不相关的背景噪声(例如静态资源请求、内部 Docker DNS 检查)以节省处理能力。
- **标准化器:** 将不同的日志格式(Filebeat 与 Packetbeat)标准化为统一的 JSON schema。
- **富化器:** 为事件添加深度上下文,例如精确的 GeoIP 定位(城市、坐标、ASN/ISP)和结构化的威胁情报(对已知恶意 IP 进行分类并分配置信度分数)。
- **特征检测:** 使用有状态和无状态规则来捕获已知攻击(SQLi、XSS、路径遍历、暴力破解、帐号失陷)。
- **ML 异常检测:** 使用在线学习模型(`river` Half-Space Trees)跟踪滚动的 IP 统计信息(错误率、请求计数),并在无需预定义规则的情况下检测异常行为模式。
### 4. 存储与展示 (数据湖层)
- **Elasticsearch:** 一个针对搜索进行优化的 NoSQL 数据库,用于存储所有生成的告警。
- **Kibana:** 前端 UI,用于构建仪表板、搜索告警以及监控系统的健康状况。
### 5. 自动化事件响应
- **事件响应:** 一个 Python 服务,监听 Kafka 告警并采取自动化行动(例如,动态更新 Nginx 黑名单或使用 Docker API 隔离失陷的容器)。
### 6. 攻击模拟器
- **场景运行器:** 一个 Python 框架,用于编排基于 YAML 的攻击场景(例如,使用正常流量预热 ML 模型,然后发起分布式暴力破解或 SQL 注入攻击)。
## 预期输出
当检测引擎识别出恶意活动时,它会生成告警。这些告警会被推送到 Kafka 并在 Elasticsearch 中建立索引。
典型的告警输出如下所示(JSON 格式):
```
{
"rule_name": "ML Anomaly Detected",
"severity": "HIGH",
"source_ip": "45.133.1.22",
"destination_ip": "172.20.0.5",
"description": "Anomalous behavior detected with score 0.99",
"@timestamp": "2026-05-31T19:12:37.000Z",
"metadata": {
"anomaly_score": 0.997,
"features": {
"request_count": 10.0,
"error_rate": 1.0,
"avg_payload_size": 0.0,
"variance_score": 1.0
}
},
"event": {
"event_type": "web_log",
"http_method": "POST",
"url_path": "/login",
"status_code": 401,
"geoip": {
"country": "Unknown"
},
"threat_intel": {
"is_known_attacker": true
}
}
}
```
### 如何运行
1. **启动环境:** 启动基础设施、采集器和检测引擎。
./scripts/bootstrap.sh
2. **运行攻击场景:** 使用场景运行器生成正常流量(预热)并模拟攻击。
cd app/attacks
# 首先,预热 ML 模型
python scenario_runner.py scenarios/scenario_0_warmup.yaml
# 然后,运行攻击场景
python scenario_runner.py scenarios/scenario_1_recon_brute.yaml
python scenario_runner.py scenarios/scenario_2_brute_xss.yaml
python scenario_runner.py scenarios/scenario_3_web_exfil.yaml
python scenario_runner.py scenarios/scenario_4_ssh_compromise.yaml
python scenario_runner.py scenarios/scenario_5_mysql_exfiltration.yaml
python scenario_runner.py scenarios/scenario_6_dns_tunneling.yaml
3. **停止并清理:** 关闭环境,并可选择清空所有数据卷(Kafka、Elasticsearch)。
./scripts/teardown.sh [--wipe]
标签:Elastic Stack, Kafka, SonarQube插件, 入侵检测系统, 安全数据湖, 安全运营中心, 安全防护, 异常检测, 流量重放, 网络映射