sheryar827/fl-iot-botnet-nbaiot-cic-iot2023

GitHub: sheryar827/fl-iot-botnet-nbaiot-cic-iot2023

该项目比较了三种联邦学习聚合策略在非独立同分布 IoT 流量数据上进行僵尸网络检测的性能与鲁棒性。

Stars: 0 | Forks: 0

# fl-iot-botnet-nbaiot-cic-iot2023 [![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.20456827-blue)](https://doi.org/10.5281/zenodo.20456827) 比较 **FedAvg**、**FedProx** 和 **FedTrimmedAvg** 在 **non-IID** 客户端分布下,基于 **N-BaIoT** 和 **CIC-IoT2023** 数据集进行 IoT 僵尸网络 检测的性能。 本代码库伴随一篇网络安全硕士学位论文,研究在客户端数据异构(non-IID,这对于分布式 IoT 部署是现实的)的情况下,联邦聚合策略的选择如何 影响僵尸网络检测的性能。 ## 研究问题 在跨客户端的 IoT 流量符合现实的 non-IID 划分下,对于僵尸网络的检测准确率、F1 和收敛速度,鲁棒和近端聚合策略(FedProx、FedTrimmedAvg)与 原始的 FedAvg 相比,以及与中心化性能上界相比,表现如何? ## 数据集 | 数据集 | 来源 | 备注 | |---|---|---| | N-BaIoT | UCI Machine Learning Repository | 来自 9 台商用 IoT 设备的网络流量;包含良性 + Mirai/BASHLITE 攻击流量 | | CIC-IoT2023 | Canadian Institute for Cybersecurity (CIC) | 跨多种攻击类别的大规模 IoT 攻击数据集 | ## 方法 - **聚合策略:** FedAvg、FedProx(近端项 μ)、FedTrimmedAvg(逐坐标截断均值) - **模型:** MLP 和 CNN 分类器 - **数据划分:** - IID 基线 - 通过在多个浓度值 α 下进行 Dirichlet 标签划分实现 Non-IID(α 越低 = 偏斜越大) - **基线:** 每个模型的中心化训练(性能上界) - **可复现性:** 每种配置在多个随机种子上运行;结果报告为 **mean ± std** ### 实验配置 报告运行中使用的值(来自每个 notebook 中的 `CFG` 块): | 参数 | 值 | |---|---| | 客户端数量 | 9 | | FL 轮数 | 30 | | 本地 epoch | 3 | | Batch size | 512 | | 学习率 | 1e-3 | | 测试集比例 | 0.2 | | 收敛阈值 (F1) | 0.95 | | 每个攻击类型 CSV 的最大样本数 | 20,000 | | Dirichlet α 值 | 1.0, 0.5, 0.1 | | FedProx μ | 0.01 | | FedTrimmedAvg 截断比例 | 0.1 | | 随机种子 | 42, 123, 7 (3 个种子) | 每个 (model, seed) 共有 **11 个实验**:1 个中心化基线 + 1 个 IID FedAvg 基线 + 一个 3×3 的矩阵:{FedAvg, FedProx, FedTrimmedAvg} × {三个 Dirichlet α 值}。 ## 代码库结构 ``` . ├── FL_IoT_Botnet_NBaIoT_MLP_CNN.ipynb # N-BaIoT experiments ├── FL_IoT_Botnet_CIC_IoT2023_MLP_CNN.ipynb # CIC-IoT2023 experiments ├── fl_nbaiot_results/ # N-BaIoT outputs (CSVs, figures) ├── fl_cic_iot_2023_results/ # CIC-IoT2023 outputs (CSVs, figures) ├── .gitignore ├── LICENSE # MIT └── README.md ``` ## 结果文件 每个结果文件夹包含: | 文件 | 内容 | |---|---| | `csv/all_runs_raw.csv` | 每个 (model, run, seed) 一行:最终/最佳准确率 & F1、收敛轮次 | | `csv/experiment_summary_mean_std.csv` | 跨种子聚合的人类可读摘要(`mean ± std`) | | `csv/experiment_summary_numeric.csv` | 相同的聚合结果,数字列用于绘图/分析 | | `csv/history_*.csv` | 单次运行的每轮准确率/F1 历史记录 | **阅读摘要:** 在 `experiment_summary_mean_std.csv` 中,`Seeds` 列报告了每行包含多少个种子的结果。`Conv_Round` 是运行 达到其收敛标准时的轮次(越低越快)。 ## 结果 所有图表均为 macro-F1 (%),在 3 个种子上的 mean ± std。在两个数据集中使用了相同的超参数, 因此数据集是比较中的唯一变量。 ### 核心结论:各策略在 non-IID 下的最佳 F1(最异构的设置,α = 0.1) | 数据集 | 模型 | FedAvg | FedProx | FedTrimmedAvg | |---|---|---|---|---| | N-BaIoT | MLP | 81.27 ± 5.69 | 76.48 ± 6.41 | **83.34 ± 2.78** | | N-BaIoT | CNN | 78.21 ± 1.46 | 68.69 ± 0.38 | **77.66 ± 3.20** | | CIC-IoT2023 | MLP | 44.68 ± 7.19 | 50.13 ± 9.07 | **60.86 ± 2.08** | | CIC-IoT2023 | CNN | 41.66 ± 7.62 | 38.08 ± 10.72 | **56.34 ± 2.15** | ### 对异构性的鲁棒性(F1 从 α = 1.0 降至 α = 0.1) 越小越好 - 它衡量了随着客户端数据 变得更加倾斜,性能损失了多少。 | 数据集 | 模型 | FedAvg | FedProx | FedTrimmedAvg | |---|---|---|---|---| | N-BaIoT | MLP | 6.41 pp | 10.84 pp | **4.37 pp** | | N-BaIoT | CNN | 9.46 pp | 18.65 pp | **9.95 pp** | | CIC-IoT2023 | MLP | 21.42 pp | 12.89 pp | **6.20 pp** | | CIC-IoT2023 | CNN | 21.78 pp | 18.55 pp | **7.46 pp** | (中心化性能上界:N-BaIoT ≈ 87.8% F1;CIC-IoT2023 ≈ 70.7% (MLP) / 68.8% (CNN)。N-BaIoT 是更容易区分的任务;CIC-IoT2023 则相当 困难。) ### 主要发现 **FedTrimmedAvg 是 non-IID 数据下最鲁棒的聚合策略。** 在每个数据集/模型组合中,它都提供了最佳(或统计学上并列最佳)的 non-IID F1,关键在于,随着客户端倾斜 增加,它损失的性能*最少*。在 CIC-IoT2023 上,从 α = 1.0 到 α = 0.1,它仅下降了约 6–7 pp, 而 FedAvg 为约 21 pp。逐坐标修剪丢弃了最极端的 客户端更新,这恰恰是严重标签倾斜 导致的失败模式 - 因此该结果与该方法的设计初衷一致。 **FedProx 在此表现不佳,这是调参导致的问题,而非方法** 本身的缺陷。** FedProx 旨在*帮助*应对异构性, 但在 α = 0.1 时它经常表现最差,且带有最大的 方差(例如 CIC-IoT2023 CNN 上的 ±10.72)。近端系数被固定 在 μ = 0.01 应用于所有倾斜级别;如此小的值几乎不约束局部 漂移,因此 FedProx 的表现接近 FedAvg,但增加了优化噪声。针对每种倾斜程度进行 μ 扫描 将是很自然的后续工作;目前的结果应该被 解读为“μ = 0.01 时的 FedProx”,而不是对 FedProx 的普遍性评判。 **MLP 始终与 CNN 持平或表现更佳。** 对于工程化的统计 流特征,不存在可供卷积利用的空间结构,因此更简单的 MLP 具有竞争力且通常表现更好 - 这是一个值得一提的预期结果。 **关于 IID/non-IID 边界的说明:** 在 CIC-IoT2023 上,最佳的 α = 0.5 运行 (67.68%) 略微超过 IID 基线 (67.51%)。这个差异完全 在一个标准差(±1.57)之内,反映的是种子噪声,而非真正的 反转。 ## 复现实验 1. 在 Google Colab(或 Jupyter)中打开相关的 notebook。 2. 从其来源下载数据集(参见**数据集**),并将数据加载单元格指向它。 3. 按照上面列出的内容设置 `CFG` 参数(或使用您自己的)。 4. 运行所有单元格。编排循环在每次运行后都会保存检查点,因此如果 会话中断,将在下次执行时从每次运行的历史 CSV 文件中恢复已完成的 运行。 5. 摘要单元格将 `all_runs_raw.csv` 聚合为 mean ± std 表格。 ## 引用本工作 如果您使用了此代码或结果,请引用该代码库(参见 [`CITATION.cff`](CITATION.cff)) - GitHub 将渲染一个**“Cite this repository”** 按钮。如需创建永久的、可引用的归档,请考虑通过 [Zenodo](https://zenodo.org) 生成 DOI。 ## 许可证 基于 [MIT 许可证](LICENSE) 发布。各数据集保留其各自的 许可证;请参阅原始来源。 ## 作者 **Sheryar Kiani: 2504142, Saad Farooq: 2504108** - 网络安全硕士,伊斯兰堡航空大学。
标签:Apex, FedAvg, NoSQL, 僵尸网络检测, 凭据扫描, 机器学习, 物联网安全, 联邦学习, 逆向工具, 非独立同分布