tsao0809/ddos-warning-system

GitHub: tsao0809/ddos-warning-system

基于 Prophet 时间序列基线与 RandomForest 分类器的双层 DDoS 预警原型,针对金融交易流量模拟攻击早期检测并评估端到端确认延迟。

Stars: 0 | Forks: 0

# 双层 DDoS 预警系统 一个用于金融交易网络流量的双层 DDoS 预警原型。 - **第一层(基线预警)**:Prophet 学习交易时段(09:00-13:30)的开盘/收盘周期性;当流量显著超出置信区间时触发预警。 - **第二层(分类确认)**:基于数据包/连接特征(速率、唯一源 IP 计数、SYN 比率、协议分布等)训练的 RandomForest 用于判断警报是否为真实攻击,如果是,则确定其类型(SYN flood / UDP flood / ICMP flood / 混合协议攻击)——从而过滤掉第一层的误报。 - **核心指标**:从攻击真实开始到第二层首次确认警报的延迟(以秒为单位)。 - 包含端到端的回放 pipeline 以及一个 Streamlit dashboard,用于交互式地模拟和可视化任何攻击类型及注入时间。 有关完整的实现过程、设计决策以及对本项目方法局限性的批判性审查,请参阅 [WRITEUP.md](WRITEUP.md)。 ## 结果概览 - 分类器(4 种攻击类型 + 正常流量,包括一个高吞吐量合法突发流量的困难负样本 —— 见下文)达到了 100% 的测试准确率(按捕获实例进行分组划分,因此测试集完全是未见的攻击实例) - 新增的 `legit_burst` 场景(高吞吐量但表现良好的流量,模拟真实的新闻/IPO 驱动的交易激增)验证了双层架构的实际核心卖点:第一层会因为流量偏离基线而触发警报,而第二层在 5 个测试注入时间内的所有 7 次触发中,都正确地将其判定为正常流量 - 端到端检测延迟约为 1-4 秒——**但这个数字直接取决于假设的攻击爬升速率(`ramp_seconds`),而不是系统本身的稳健属性**;如果爬升速度较慢(更接近真实的低速慢速攻击),攻击可能会在其持续时间内完全无法被检测到。详见 WRITEUP.md 第 6.4 节。 - 在正常交易日的基础误报率约为 1.5%,主要集中在高方差的开盘/收盘时刻 **已知局限性**(详见 WRITEUP.md 第 6-7 节):训练和测试数据均来自本项目自己的流量生成器,未经过任何外部/真实流量的验证;低速慢速攻击及其他非流量型攻击类型尚未经过测试;100% 的准确率数据仅基于 36 次捕获的小样本。 ## 安全声明 第二层的训练数据**完全在本地生成**:`src/traffic_gen/attack_traffic.py` 仅将流量发送至 `127.0.0.1`(环回地址)——此限制是硬编码的,绝不会向外部主机发送任何流量。原计划使用 `hping3`,但它需要 raw-socket (root) 权限,因此攻击模式改由无权限的 Python socket 实现(通过非阻塞 TCP connect 实现 SYN flood,通过普通 UDP socket 实现 UDP flood,通过 Linux 无权限 ICMP ping socket 实现 ICMP flood,以及并发运行前两者的混合协议攻击)。此外还有 `legit_burst`:高吞吐量但行为规范的流量(真实握手,真实的请求/响应),用作分类器的困难负样本。数据包捕获使用 `dumpcap`(需要用户位于 `wireshark` 组中,该组授予 `cap_net_raw`/`cap_net_admin` 文件权限,无需 root)。 ## 环境配置 ``` python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` 需要安装 `dumpcap`(Wireshark 包的一部分),并且运行该程序的用户需处于 `wireshark` 组中。 ## 复现 Pipeline ``` source .venv/bin/activate # 1. 生成合成的正常 trading-traffic 时间序列(用于 baseline 训练) python3 src/traffic_gen/normal_traffic.py # 2. 在本地生成攻击/正常流量并捕获数据包(6 个类别 x 6 次运行,几分钟) python3 src/traffic_gen/collect_training_captures.py # 3. 从捕获的数据中提取 sliding-window flow 特征,并按类别进行标注 python3 src/features/flow_features.py # 4. 训练 Layer-1 Prophet baseline python3 src/layer1_baseline/train_baseline.py # 5. 训练 Layer-2 RandomForest 分类器 python3 src/layer2_classifier/train_classifier.py # 6. 运行端到端 replay pipeline 并打印 delay metric python3 src/pipeline/replay_pipeline.py # 7. 启动 dashboard streamlit run src/dashboard/app.py ``` ## 项目结构 ``` src/ ├── traffic_gen/ │ ├── normal_traffic.py Synthetic normal trading-traffic time series │ ├── attack_traffic.py SYN/UDP/ICMP/Mixed flood, legit_burst, and normal-probe generators │ ├── capture.py dumpcap packet-capture wrapper │ └── collect_training_captures.py Capture orchestration: runs attacks + background traffic, writes the manifest ├── features/ │ └── flow_features.py pcap -> sliding-window flow features, labeled by class ├── layer1_baseline/ │ ├── train_baseline.py Trains the Prophet baseline │ └── detect_deviation.py Compares against the confidence interval, flags early warnings ├── layer2_classifier/ │ ├── train_classifier.py Trains the RandomForest (group-based split) │ └── classify.py Single-window inference ├── pipeline/ │ └── replay_pipeline.py End-to-end replay: inject attack -> Layer 1 -> Layer 2 -> delay metric └── dashboard/ └── app.py Streamlit visualization tests/ └── test_pipeline.py pytest unit tests ``` ## 测试 ``` python3 -m pytest tests/ -v ``` ## 许可证 [MIT License](LICENSE)
标签:Apex, DDoS预警, Kubernetes, 安全规则引擎, 异常检测, 时间序列分析, 机器学习, 逆向工具, 防御框架, 随机森林