AdvBox
百度开源的多框架AI模型对抗攻击与鲁棒性评估工具箱,支持PaddlePaddle、PyTorch、T
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
百度开源的多框架AI模型对抗攻击与鲁棒性评估工具箱,支持PaddlePaddle、PyTorch、T
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象你训练好了一个准确率99%的图像分类AI,突然有人只需要对图片做几个像素级的"微调"——人眼完全看不出差别——就能让模型输出一只猫的图识别成汽车,甚至让它把STOP路牌认成绿灯。这就是对抗样本攻击(Adversarial Examples)的威力。
AdvBox 是百度安全实验室开源的对抗样本工具箱,诞生于百度内部大规模AI安全评估需求。它就像AI模型的"红队渗透测试工具包"——让安全工程师和开发者能系统性地评估自己模型的鲁棒性,找到弱点并加固。

图1:AdvBox 工具箱 Logo
2018年前后,随着深度学习在百度的搜索、广告、自动驾驶等核心业务中大规模落地,AI模型安全性从"学术问题"变成了"工程刚需"。彼时对抗样本研究已在学术界火热,但工业界缺乏统一的、跨框架的工具链。
百度安全实验室在内部实践中发现:不同团队使用不同深度学习框架(PaddlePaddle、TensorFlow、PyTorch等),每次做安全评估都要重新适配。AdvBox的核心理念就是**"一次编写,跨框架评估"**——用同一套API测试不同框架训练的模型。
项目由百度 X-Lab 主导维护,GitHub stars 超过 1400,issues 15个,说明项目已相当成熟但仍活跃迭代。
AdvBox 采用家族化架构,分为三个核心子项目:
这是 AdvBox 的核心模块,也是最常用的组件。它将对抗攻击的流程抽象为标准化步骤:
加载模型 → 生成对抗样本 → 评估攻击效果
支持的深度学习框架(实测):
这种多框架支持是通过统一的 ModelBase 抽象类实现的——每个框架有独立的 adapter(paddle.py、pytorch.py、tensorflow.py 等),对外暴露一致的接口。攻击代码与框架解耦,新增框架只需实现 adapter 而无需修改攻击算法本身。
主要攻击算法(核心文件 adversarialbox/attacks/):
| 算法 | 文件 | 类型 |
|---|---|---|
| FGSM(快速梯度符号法) | gradient_method.py | 梯度攻击 |
| BIM(Basic Iterative Method) | gradient_method.py | 迭代攻击 |
| DeepFool | deepfool.py | 几何攻击 |
| Carlini-Wagner (CW) | cw.py / cw2_pytorch.py | 优化攻击 |
| JSMA(Saliency Map Attack) | saliency.py | 显著性图攻击 |
| L-BFGS | lbfgs.py | 传统优化攻击 |
防御模块(adversarialbox/defences/):
| 防御方法 | 文件 | 原理 |
|---|---|---|
| Feature Squeezing | feature_squeezing.py | 降维压缩检测对抗样本 |
| Gaussian Augmentation | gaussian_augmentation.py | 数据增强 |
| Label Smoothing | label_squeezing.py | 标签平滑 |
| Spatial Smoothing | spatial_smoothing.py | 空间平滑 |
针对 PaddlePaddle 的轻量级对抗样本生成 SDK,封装在 advsdk/ 目录。相比 AdversarialBox 更精简,适合嵌入式或移动端集成。
用于从海量数据中检测对抗样本,基于 ODD(Out-of-Distribution Detection)方法,包含 EOT(Expectation Over Transformation)模拟模块。
Data Poisoning 模块,支持对训练数据进行投毒攻击(mnist_paddle.py、poison_mnist_pytorch.py)。
AttackBase 类if platform == 'pytorch' 的条件分支,框架越多维护成本越高pytest 和 pytest-cov 作为测试依赖tests/ 目录,测试覆盖率不明
图2:对抗样本效果——原始图像被模型正确分类,经过AdvBox攻击后生成对抗样本,导致模型分类错误
AdvBox 的核心卖点之一是"Zero-Coding"——不需要写代码,通过命令行工具就能生成对抗样本。
典型使用流程(以图像分类为例):
# 1. 定义模型(以 PyTorch 为例)
from adversarialbox.models.pytorch import PyTorchModel
model = PyTorchModel(model_path, batch_size=1)
# 2. 选择攻击算法
from adversarialbox.attacks.gradient_method import FGSM
attack = FGSM(model)
# 3. 生成对抗样本
adv_sample = attack.attack(adversary_image, target_label=None)
# 4. 评估攻击效果
print("原始预测:", adv_sample.original_predict)
print("对抗预测:", adv_sample.adversarial_predict)
print("扰动幅度:", adv_sample.noise)
从代码量来看,adversary.py 是核心类(约200行),定义了对抗样本的数据结构;attacks/base.py 定义了攻击基类;各攻击算法独立文件。这种设计符合 SOLID 原则中的"开闭原则"——新增攻击方法无需修改现有代码。
AdvBox 最后一次提交已有一段时间,主要原因是百度内部战略调整——2020年后百度将AI安全重心转向了"模型安全加固"而非"攻击工具"。这意味着:
当前 AdvBox 主要支持白盒攻击(需要模型内部参数),黑盒攻击依赖 GraphPipe 进行远程API调用,但使用门槛较高。
没有 Dockerfile 或 docker-compose,无法快速在隔离环境中运行。对于企业安全团队来说,这意味着需要手动配置 Python 环境。
尽管维护状态放缓,AdvBox 在对抗样本工具链中仍有一席之地:
从 GitHub 数据看,267 forks 说明有一定二次开发需求,但 stars 增长已趋缓(1405★),反映项目进入成熟期。
| 维度 | 评估 |
|---|---|
| 容器化 | 无 Dockerfile,部署支持度 1/5 |
| Web界面 | 无,纯 CLI 工具 |
| 硬件要求 | 无强制 GPU 需求,CPU 可运行 |
| 部署难度 | 中等(需手动安装多个框架依赖) |
| 预估时间 | 30分钟(依赖安装占大头) |
| 推荐部署方式 | pip install + 虚拟环境 |

图3:AdvSDK 对 PaddlePaddle 模型进行对抗攻击的示例图像
AdvBox 是百度在 AI 安全领域的一次有诚意的开源实践。它解决了"如何用统一工具评估不同框架模型鲁棒性"的实际问题,架构设计合理,文档相对完整。但由于项目已停止活跃维护,它更适合作为学习对抗样本技术的入门工具或企业内网离线评估场景使用,不建议作为生产环境的持续安全监控工具。
对于想深入对抗样本研究的开发者和安全工程师,AdvBox 的源码(特别是 attacks/ 和 defences/ 目录)是很好的学习材料——它将学术论文中的算法(如 CW 攻击、DeepFool)落地为可运行代码,且代码量适中(约 3000 行核心逻辑),比 FoolBox 2 更适合初学者理解对抗攻击的全流程。