黑盒攻击中迁移攻击和通用对抗扰动的讲解及实战(附源码)

简介: 黑盒攻击中迁移攻击和通用对抗扰动的讲解及实战(附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

黑盒攻击

人们发现结构类似的神经网络模型在面对相同的对抗样本攻击时,会有类似的表现。也就是说,基于类似已知模型,采用白盒攻击来产生对抗样本,可能对未知模型也有攻击作用,称之为对抗样本的迁移能力(transferable)。

下表中左侧列表表示生成对抗样本的模型,最上面行表示被迁移攻击的模型,表格中的数据表示被迁移攻击模型对生成模型基于优化的方法产生的迁移攻击样本的识别率

从左上角到右下角对角线的数据为0,表明针对本模型的白盒攻击能够在本模型上做到全部攻击成功,当生成模型和迁移攻击模型不同时,对抗样本被识别率大约为百分之十到百分之四十

基于集成的对抗样本生成方法

基本思想是用多个白盒模型共同产生具有高迁移性的对抗样本。 假设有k个白盒模型,它们的输出层采用softmax激活函数,输出向量记为J_1,J_2,…,J_k。原始图像记为x,它的真实标签记为y。记对抗样本为x^∗,定向攻击的标签为y^∗。 基于集成的方法的优化目标为:

优化目标是尽量减少模型输出与定向攻击标签之间和对抗样本与原始样本之间的差异,常量λ用来调节两个差异的重要性。

通用对抗扰动

通用对抗扰动是可以用来以较大概率成功攻击某模型的所有样本的扰动。 记分类模型为k,对d维实数空间中服从分布u的样本x,分类模型的预测标签为k ̂(x)。

d维实数空间中的通用对抗扰动v是满足以下两个条件的扰动:

1)‖v‖_p≤ϵ。 ‖v‖_p是v的p范数(范数的定义见式4‑17),此条件即要求扰动v的大小要限制在常量ϵ以内。

2)P_x~u(k ̂(x+v)≠k ̂(x))≥1−δ。此条件要求添加扰动后的样本的误判率要大于指定的值1−δ。

生成通用对抗扰动的算法先从所有样本中抽样出一批分类均衡的有代表性的测试样本。将通用对抗扰动v设为0初值。然后,从第一个测试样本开始迭代直至最后一个测试样本:如果当前测试样本x_i添加扰动v后不能使模型判断错误,则计算x_i+v到最近分类超平面的向量∆v_i,并更新v←v+∆v_i。∆v_i常通过DeepFool算法得到。

对于上述条件1),在每次更新v后,都要检测p范数是否超出限制ϵ。如果超出了,则按范数的含义进行收缩。比如,对于2范数,则按把2范数收缩到1的比例缩小v的每一维。

对于上述条件2),在每一轮全部测试样本迭代完后,将扰动v添加到所有测试样本上进行预测,并计算成功率,如果达不到1−δ,则继续新一轮迭代。

UPA通用对抗样本下结果如下图

可见成功率还是不低的

部分代码如下

# 时间原因,只取小部分样本进行实验
X_val1 = X_val[:100]
delta = 0.2 # 1-delta为对抗成功率
max_iter = 10 # 最多训练轮数
xi = 10 # 扰动的幅度
fooling_rate = 0.0
n_samples = np.shape(X_val1)[0]
v = 0 # 通用对抗扰动
itr = 0 # 迭代次数
while itr < max_iter:
    np.random.shuffle(X_val1) # 打乱顺序
    # 遍历所有测试样本,计算通用对抗扰动v
    for k in range(n_samples):
        print('序号:', k, '开始调整扰动...')
        cur_img = X_val1[k].reshape(1, 28, 28, 1)
        cur_label = model(cur_img)
        v_label = model(cur_img + v)
        if np.argmax(cur_label) == np.argmax(v_label): # 如果当前扰动不起作用。。。
            succ, adv, r_tot, epochs, label1 = deepfool(cur_img+v, v_label, model, 600) # 找到到最近分类超平面的向量r_tot
            #print('itr:', itr, 'k:', k, 'succ', succ, 'epochs:', epochs)
            if succ: 
                v = v + r_tot
                v = proj_l2(v, xi) # 限制v的大小
    # 验证通用对抗扰动v的效果
    X_perturbed = X_val1 + v # 所有样本加上扰动
    est_labels_pert = np.argmax( model(X_perturbed), axis=1 ) # 扰动后的标签
    est_labels_orig = np.argmax( model(X_val1), axis=1 ) # 扰动前的标签
    fooling_rate = float(np.sum(est_labels_pert != est_labels_orig) / float(n_samples)) # 计算成功率
    if fooling_rate < 1 - delta:
        print('轮次:', itr, '成功率 = ', fooling_rate)
    else:
        print('完成。成功率 = ', fooling_rate)
        break;
    itr += 1

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
【论文速递】NDSS2021 - 操纵 Byzantine: 联邦学习的模型中毒攻击与防御优化
【论文速递】NDSS2021 - 操纵 Byzantine: 联邦学习的模型中毒攻击与防御优化
|
15天前
|
机器学习/深度学习 自然语言处理 安全
NeurIPS 2024:如何防御对抗性提示攻击?AdvUnlearn让图片生成风险骤降
扩散模型在文本到图像生成上取得成功,但也带来安全风险。本文提出AdvUnlearn框架,通过结合对抗性训练增强概念擦除的鲁棒性,有效防止对抗性提示攻击,同时保持模型的图像生成质量和实用性。实验验证了其在多种场景下的优势。
55 19
|
4月前
|
机器学习/深度学习 数据采集
|
4月前
|
安全 数据安全/隐私保护 Windows
某黑产最新免杀攻击样本详细分析
去年使用“银狐”黑客工具的多个黑产团伙非常活跃,今年这些黑产团伙仍然非常活跃,而且仍然在不断的更新自己的攻击样本,采用各种免杀方式,逃避安全厂商的检测,免杀对抗手法一直在升级。
|
SQL 网络安全 数据库
网络安全实验十 sql注入实验(一)
网络安全实验十 sql注入实验(一)
387 0
|
SQL 网络安全 数据库
网络安全实验十一 sql注入实验(二)
网络安全实验十一 sql注入实验(二)
97 0
网络安全实验十一 sql注入实验(二)
|
安全 网络协议 JavaScript
网络安全实验九 恶意代码实验
网络安全实验九 恶意代码实验
327 0
|
机器学习/深度学习 网络安全 SDN
在软件定义网络中使用机器学习的方法进行 DDOS 攻击检测与缓解--实验
在软件定义网络中使用机器学习的方法进行 DDOS 攻击检测与缓解--实验
|
SQL 存储 安全
红蓝对抗-基础学习
安全是一个整体,正如木桶定律,最短的木板是评估木桶品质的标准,安全最薄弱环节也是决定系统好坏的关键。而网络红蓝军对抗的目的就是用来评估企业安全性,有助于找出企业安全中最脆弱的环节,提升企业安全能力的建设。
|
机器学习/深度学习 安全 计算机视觉
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?(3)
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?
208 0