白盒攻击是对抗性攻击的一种形式,指攻击者能够完全访问目标模型的结构、参数和梯度信息。利用这些信息,攻击者可以精确地构造对抗样本,以最大化模型误判的可能性

简单来讲,就是针对目标要达到的攻击效果,来有目的性的更新白盒模型的梯度


常见白盒攻击方法

1. FGSM(Fast Gradient Sign Method)

  • 提出者:Goodfellow 等人在 2014 年的论文中提出。
  • 核心思想
    • 使用目标模型的损失函数梯度信息,沿输入的梯度方向快速调整输入样本,以生成对抗样本。
  • 公式
    • $xx$:原始输入。
    • $x′x’$:对抗样本。
    • $ϵ\epsilon$:攻击强度,表示每次扰动的幅度。
    • $∇xJ(θ,x,y)\nabla_x J(\theta, x, y)$:损失函数 JJ 关于输入 xx 的梯度。
    • $sign\text{sign}$:符号函数,确保扰动方向一致。
  • 特点
    • 计算简单,适合快速生成对抗样本。
    • 可控扰动幅度 $ϵ\epsilon$决定攻击强度。

代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 攻击的模型是alexnet
model = models.alexnet(pretrained=True).to(device).eval()
# 先预测出这张img的标签,需要先取他的数据再转移到cpu再转成numpy
label = np.argmax(model(img).data.cpu().numpy())
print("label={}".format(label))
# 图像数据梯度可以获取
img.requires_grad = True

# 冻结模型梯度
for param in model.parameters():
param.requires_grad = False

# 注意这里,和一般的深度学习训练不一样
optimizer = torch.optim.Adam([img],lr=0.01)
loss_func = torch.nn.CrossEntropyLoss()

epochs = 100
target = 288 # 定向攻击的标签
target = Variable(torch.Tensor([float(target)]).to(device).long())
for epoch in range(epochs):
# 梯度清零
optimizer.zero_grad()
# forward + backward
output = model(img)

loss = loss_func(output, target)
label = np.argmax(output.data.cpu().numpy())
print("epoch={} loss={} label={}".format(epoch, loss, label))

# 如果定向攻击成功
if label == target:
break
loss.backward()
optimizer.step()


2. BIM(Basic Iterative Method)

  • 扩展于 FGSM,通过多次迭代调整输入,逐步逼近模型决策边界。
  • 公式

    • $α\alpha$:每次迭代的步长。
    • $clipx,ϵ\text{clip}_{x, \epsilon}$:限制对抗样本的扰动在 ϵ\epsilon 范围内,防止过度修改输入。
  • 特点

    • 相比 FGSM,更强的攻击效果,但计算成本较高。

3. PGD(Projected Gradient Descent)

  • 进一步扩展 BIM,通过优化目标模型的损失函数进行对抗样本生成。
  • 允许在一定的扰动限制范围(如 ϵ\epsilon-ball)内不断优化输入。
  • 特点
    • 是一种强大的多步迭代攻击方法。
    • 被认为是评估对抗鲁棒性的标准攻击方法。

4. CW(Carlini and Wagner Attack)

  • 目标
    • 最大程度降低对抗样本的可察觉性,同时保持高攻击成功率。
  • 方法
    • 通过优化问题,将对抗样本生成形式化为目标函数最小化问题:
      • $f(x′)f(x’)$:表示模型的错误分类目标。
      • $∥x−x′∥p|x - x’|_p$:控制输入与对抗样本的相似性。
      • $cc$:平衡两个目标之间的权重。
  • 特点
    • 非常强大,但计算开销较大。

5. DeepFool

  • 目标
    • 寻找模型分类边界附近的最小扰动,生成对抗样本。
  • 特点
    • 能生成扰动幅度极小的对抗样本。
    • 假设模型是线性分类器,逐步逼近真实分类边界。

6. One-Pixel Attack

  • 核心思想
    • 在输入图像中仅修改一个像素值,测试模型的鲁棒性。
  • 特点
    • 扰动小,便于解释。
    • 攻击能力较弱,适用于简单的模型和任务。