Harshith-b46/CyberTwin-SOC
GitHub: Harshith-b46/CyberTwin-SOC
CyberTwin-SOC 是一个基于 Mininet 网络仿真的预测性安全运营中心平台,结合规则引擎与机器学习实现混合入侵检测和自动化缓解。
Stars: 0 | Forks: 0
# CyberTwin SOC — 预测性网络防御数字孪生
这是一个模拟的企业网络测试平台,它结合了基于 Mininet 的网络仿真、Zeek 流量监控、基于规则与机器学习的混合入侵检测,以及自动化的实时缓解机制,并通过基于 Streamlit 的安全运营中心(SOC)仪表板进行呈现。
## 架构概述
系统采用三个独立的检测层:
1. **基于规则的引擎** (`flow_aggregator.py`) — 针对实时的 Zeek 流统计数据手工调整的阈值。涵盖 8 种攻击类型:DoS、PortScan、BruteForce、WebAttack、Bot、Exploit、Shellcode、Infiltration。这是实时检测流水线的核心主干。
2. **Isolation Forest**(无监督学习,`isolation_zeek.pkl`) — 在系统自身观察到的良性 Zeek 流量上进行训练。它会在不要求标记样本的情况下,将任何不匹配已知规则引擎特征 flow 标记为“异常”。
3. **Random Forest ×2**(监督学习,`random_forest.pkl` / `rf_unsw.pkl`) — 在 CICIDS2017 和 UNSW-NB15 公共基准数据集上进行训练(准确率分别为 99% / 88%)。这展示了在标准学术数据上的监督机器学习分类能力。**由于特征集不兼容(78 个源自 CICIDS 的统计特征与约 16 个源自 Zeek 的 flow 特征对比),它们目前并未集成到基于 Zeek 的实时检测路径中**。它们的作用是基准测试和演示,而非实时的网络防御。
检测到的事件会被映射到 MITRE ATT&CK 技术,通过差异化的缓解引擎(根据攻击类型,采取立即阻断 / 限速后升级 / 监控后升级),并在 SOC 仪表板中展示。
## 前置条件
- Ubuntu 22.04(或类似的 Linux 发行版)
- Mininet
- Open vSwitch (OVS)
- Zeek 8.0.5(安装在 `/opt/zeek/bin/zeek`)
- Python 3.10,并安装:`pandas`、`numpy`、`scikit-learn`、`streamlit`、`matplotlib`
- `hping3`、`nmap`、`netcat`(用于攻击模拟脚本)
## 完整启动序列
每次会话都必须按顺序执行此序列,因为 Mininet 和 OVS 的状态在重启后不会保留。
### 1. 清理之前的会话
```
sudo pkill -f zeek
sudo pkill -f live_monitor.py
sudo pkill -f blocklist_watcher.py
sudo pkill -f streamlit
sudo mn -c
sudo killall ovs-testcontroller
```
### 2. 启动 Mininet 拓扑
```
sudo python3 ~/cyber_twin/enterprise_network_large.py
```
这会启动一个跨越 7 个 VLAN(Employee、Server、Database、DMZ、Management、IoT、Guest)的包含 30 台主机和 8 台交换机的拓扑,并进入 Mininet CLI (`mininet>`)。
### 3. 设置流量镜像(在新的终端中,一旦出现 `mininet>` 提示符即可执行)
Zeek 只能看到其监听的特定接口上的流量。由于您的拓扑跨越了不同交换机端口上的多个 VLAN,因此必须将核心交换机上的所有流量镜像到一个专用的监控端口。
```
bash ~/cyber_twin/setup_mirror.sh
```
或手动执行:
```
sudo ovs-vsctl -- add-port s1 mirror0 -- set interface mirror0 type=internal
sudo ovs-vsctl -- --id=@mirror0 get port mirror0 -- --id=@m create mirror name=mymirror select-all=true output-port=@mirror0 -- set bridge s1 mirrors=@m
sudo ip link set mirror0 up
```
验证:`sudo ovs-vsctl list mirror` 应显示 `select_all: true`。
### 4. 在镜像接口上启动 Zeek
```
cd ~/cyber_twin/logs
sudo /opt/zeek/bin/zeek -i mirror0 -C
```
### 5. 启动目标监听器(从 `mininet>` 提示符执行)
多种攻击类型要求目标上存在真实的、可响应的服务,以产生真实的流量(否则连接将因零字节而失败,分类器自然无法将其与噪音区分开来)。
```
web1 python3 -m http.server 80 &
ftp bash -c "while true; do python3 /home/harshithb46/cyber_twin/attacks/echo_server.py 21; done" &
web2 bash -c "while true; do python3 /home/harshithb46/cyber_twin/attacks/echo_server.py 4444; done" &
```
### 6. 加载攻击模拟模块(从 `mininet>` 执行)
```
py __import__('sys').path.append('/home/harshithb46/cyber_twin/attacks')
py exec("from dos_attack import run_dos")
py exec("from portscan_attack import run_portscan")
py exec("from bruteforce_attack import run_bruteforce")
py exec("from web_attack import run_web_attack")
py exec("from bot_attack import run_bot_beacon")
py exec("from exploit_attack import run_exploit")
py exec("from shellcode_attack import run_shellcode")
py exec("from infiltration_attack import run_infiltration")
```
### 7. 启动实时监控器
**必须在确认 Zeek 正在运行后,且在任何攻击执行之前启动** — 它在 `conn.log` 中的位置跟踪会在首次读取时初始化为文件末尾,因此在此步骤之前生成的流量将无法被检测到。
```
python3 ~/cyber_twin/live_monitor.py
```
### 8. 启动黑名单监控器(执行实际的缓解措施)
```
sudo python3 ~/cyber_twin/blocklist_watcher.py
```
### 9. 启动仪表板
```
streamlit run ~/cyber_twin/dashboard/app.py
```
默认登录凭据:`admin` / `admin123`,`analyst` / `analyst123`。
## 运行攻击
所有攻击脚本都必须在 Mininet CLI 的 `py` 命令中调用,因为它们需要实时的 Mininet 主机对象:
```
py run_dos(net.get('emp1'), '10.0.2.1', 8)
py run_portscan(net.get('emp2'), '10.0.2.2', '1-1000')
py run_bruteforce(net.get('emp3'), '10.0.2.4', 25)
py run_web_attack(net.get('emp4'), '10.0.2.1')
py run_bot_beacon(net.get('emp5'), '10.0.2.2', 4444)
py run_exploit(net.get('emp6'), '10.0.2.4', 21)
py run_shellcode(net.get('emp7'), '10.0.2.4', 21)
py run_infiltration(net.get('emp8'), '10.0.2.4', 21, 65)
```
**获取干净、不受污染结果的最佳实践:** 每次测试使用一个全新的、之前未被封锁的主机;避免在从同一源发起攻击之前,立即对目标进行连通性检查(`ping`),因为这会混入同一个 flow 聚合窗口中。
对于脚本化的实时序列:`demo_mode.py`(在 Mininet CLI 中使用实时的 `net` 对象调用)。
## 已知局限性
- **检测延迟并不一致。** 快速、突发的攻击(DoS、BruteForce、Shellcode)会在 1~2 秒内完成解析。需要持续连接的攻击(WebAttack、Infiltration)受限于 Zeek 由连接关闭触发的日志刷新机制,在极端情况下可能会引入长达数分钟的延迟。
- **实时监控器偶尔无法显示慢速形成攻击的最终分类结果**,尽管底层的分类(可通过直接离线查询验证)是正确的。这是一个实时轮询显示上的缺陷,而非检测精度缺陷。
- **“预测性”杀伤链组件**(`attack_chain.py`)是一个手工编写的、基于 MITRE 的启发式查找表,而不是一个学习/统计预测模型。
- **反馈到再训练的流水线**目前能将风险评分作为真实信号捕获,但尚未针对每次修正持久化完整的 flow 特征向量。
- 由于公共基准数据集与实时捕获的 flow 统计信息之间的特征集不兼容,**Random Forest 模型未集成到基于 Zeek 的实时检测中**。
- **缺乏针对实时规则引擎在大规模良性流量下的正式误报率评估**;其正确性已通过手动测试针对每种攻击类型进行了验证,而非通过统计基准测试。
- **没有身份验证加固机制**(速率限制、会话过期、HTTPS) — 仪表板登录是一个功能原型,未经过生产环境级别的加固。
- **OVS 镜像和目标监听器设置在 Mininet 重启后不会保留**,必须在每次会话中重新配置。
## 项目结构
```
cyber_twin/
├── enterprise_network_large.py # 30-host, 8-switch, 7-VLAN Mininet topology
├── flow_aggregator.py # Zeek log parsing, flow aggregation, rule-based classification
├── detection_engine.py # Stub for future multi-model fusion (not currently active)
├── live_monitor.py # Main real-time detection loop
├── mitigation_engine.py # Attack-type-specific mitigation strategy execution
├── blocklist.py / blocklist_watcher.py # IP blocklist management and real iptables/tc execution
├── mitre_mapping.py # MITRE ATT&CK technique/tactic mapping
├── attack_chain.py # Heuristic next-attack prediction (kill-chain lookup)
├── email_alerts.py # SMTP alerting with cooldown
├── feedback.py # Analyst feedback recording and export for retraining
├── retrain.py # Model retraining using original data + feedback
├── merge_datasets.py # Builds merged_dataset.csv (required by retrain.py)
├── train_isolation_zeek.py # Trains the Zeek-specific Isolation Forest
├── demo_mode.py # Scripted live attack sequence for demonstrations
├── multi_attacker_simulation.py # Concurrent multi-VLAN attacker demonstration
├── setup_mirror.sh # OVS port-mirror configuration script
├── attacks/ # Individual attack simulation scripts + echo_server.py listener
├── dashboard/app.py # Streamlit SOC dashboard
├── models/ # Trained model artifacts (.pkl) and training scripts
├── features/ # Source datasets (CICIDS2017, UNSW-NB15) and derived feature files
├── logs/ # Runtime state: conn.log, alerts.csv, blocklist.json, feedback.json
└── reports/ # PDF incident report generation
```
标签:Apex, CISA项目, IP 地址批量处理, Kubernetes, 安全运营中心, 插件系统, 机器学习, 网络数字孪生, 网络映射, 自动防御响应, 逆向工具