backdoors101
康奈尔大学开源的 PyTorch 后门研究框架,集成多种攻击/防御方法,支持集中式和联邦学习场景
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
康奈尔大学开源的 PyTorch 后门研究框架,集成多种攻击/防御方法,支持集中式和联邦学习场景
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
深度学习模型的"后门",就像隐藏在代码深处的间谍——平时系统表现一切正常,一旦攻击者精心设计的"触发器"出现,模型就会偏离原本任务,转而执行攻击者预设的恶意行为。这种攻击不修改模型参数本身,却能在关键时刻让AI做出错误决策,其隐蔽性和危害性远超传统对抗样本攻击。
ebagdasa/backdoors101 正是这样一个专注于后门攻击与防御的 PyTorch 研究框架。它由康奈尔大学研究团队开发并维护,代码实现基于 USENIX Security'21 和 AISTATS'20 两篇顶会论文。框架涵盖三大类后门(像素模式、物理、语义)、两种注入方法(数据投毒、损失投毒)、多种防御机制(NeuralCleanse、SentiNet、频谱聚类),并支持集中式与联邦学习两种训练模式。截至目前,该项目在 GitHub 累计获得 382 颗星、85 个 Fork,被 13 个相关 topic 收录。
框架对后门攻击给出了严谨的数学定义。假设正常任务是映射 m: X → Y(输入到标签),后门攻击则在此基础上额外引入一个恶意映射 m: X → Y***。模型同时学习这两个任务,在正常输入下表现正常(任务 m),在带有触发器的输入下执行攻击者指定的行为(任务 m*)。
关键在于输入域的分离:后门输入域 X* 与主输入域 X 应满足 X \ X ≈ 0*(即交集极小),这样两个任务才不会相互干扰——正常样本不会意外触发后门,攻击者的后门样本也不会被正常训练所覆盖。

图1:后门攻击向量对比 — 展示像素模式后门(修改输入像素)、物理后门(由真实物体触发)和语义后门(利用数据集中自然存在的特征)三种攻击向量的差异。
框架采用典型的分层模块化设计,核心组件如下:
| 模块 | 文件 | 职责 |
|---|---|---|
Attack | attack.py | 后门攻击核心逻辑,支持 MGDA/Fixed 损失平衡策略 |
Synthesizer | synthesizers/*.py | 后门样本合成(像素/物理/语义),策略模式实现 |
Task | tasks/task.py | 数据加载、模型构建、训练循环 |
Helper | helper.py | 框架入口,协调各模块 |
Training | training.py | 集中式训练与联邦学习轮次执行 |
关键设计:所有合成器继承自基类 Synthesizer,通过 make_backdoor_batch() 统一接口注入后门。这种策略模式使得新增攻击类型无需修改核心训练代码。
攻击的核心在于平衡多任务损失。框架使用 MGDA(Multi-Task Gradient Descent Analyzer)求解器计算各任务损失的梯度归一化系数,避免梯度冲突导致某一任务退化。同时支持 NeuralCleanse 防御损失,在攻击时同步进行防御逃逸。
联邦学习场景下,后门攻击从单点升级为多点协作。框架在 tasks/fl/ 目录下实现了完整的 FL 训练流程:每个客户端独立训练本地模型,服务器聚合全局梯度。攻击者可以通过控制部分客户端上传恶意梯度,最终影响全局模型。
框架基于 PyTorch 1.7.0 构建,核心依赖包括:
环境要求 Python 3.7+,强烈推荐 NVIDIA GPU(至少 8GB VRAM)以支撑 ImageNet 等大规模数据集上的训练。
框架内置支持多种数据集,涵盖图像分类、人脸识别、文本情感分析等场景:
每种数据集都有对应的 Task 类(如 cifar10_task.py),统一接口包括 get_batch()、reset_metrics()、accumulate_metrics() 等。
最经典的方法,将后门样本直接注入训练数据集。框架支持:
针对梯度裁剪等防御机制的绕过技术。在非投毒客户端上传梯度被裁剪的场景下,投毒者通过修改本地损失值,使梯度的 L2 范数恰好达到上限,从而在服务器看来与正常梯度无异。框架实现了动态损失平衡(见 Sec 3.4 论文)。
直接在训练批次中注入后门样本,不修改原始数据集。通过 poisoning_proportion 参数控制投毒比例,支持 attack.py 中的 make_backdoor_batch() 接口灵活配置。
框架同时收录了主流后门防御方法:
防御与攻击的对抗迭代,正是后门研究的魅力所在。
git clone https://github.com/ebagdasa/backdoors101.git
cd backdoors101
pip install -r requirements.txt
python helper.py --config configs/cifar10_params.yaml
python helper.py --config configs/cifar_fed.yaml
配置通过 YAML 文件管理,包含 task(任务类型)、poisoning_proportion(投毒比例)、loss_tasks(损失任务列表)等关键超参数。
Backdoors 101 的核心价值在于降低后门研究的复现门槛。后门攻击论文往往只描述方法,代码碎片化分布在不同仓库,读者难以完整复现所有基线。ebagdasa/backdoors101 以统一框架整合了 2019-2021 年间的主流方法,研究者可以在同一代码基线上对比不同攻击/防御策略。
该项目在 GitHub 上积累了 382 颗星,Fork 数达 85,说明其在学术社区的认可度。同时,该项目也被收录于 deep-learning-security、adversarial-machine-learning、federated-learning 等多个热门 topic,反映了当前 AI 安全研究的几大热点方向。
对于安全研究者,该框架是理想的实验基线;对于 AI 开发者,理解后门攻击有助于构建更健壮的训练流程(如数据来源审计、模型来源验证);对于政策制定者,该框架展示了 AI 安全问题的现实威胁,值得关注。