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

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

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

黑盒攻击

人们发现结构类似的神经网络模型在面对相同的对抗样本攻击时,会有类似的表现。也就是说,基于类似已知模型,采用白盒攻击来产生对抗样本,可能对未知模型也有攻击作用,称之为对抗样本的迁移能力(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: 联邦学习的模型中毒攻击与防御优化
|
8天前
|
机器学习/深度学习 数据采集 安全
一些关于防御机器学习模型攻击的安全措施
保护机器学习模型免受攻击的常见措施包括对抗样本检测过滤、模型集成验证、模型退化重训练、输入数据预处理、监测记录模型行为以及安全增强训练。例如,使用Foolbox库检测过滤对抗样本,通过模型集成平均多个模型的预测结果,定期退化模型模糊攻击者了解,使用对抗训练提升模型鲁棒性。同时,对输入数据预处理、监测模型输出和记录行为也是重要步骤。这些方法能增强模型安全性,但并非万无一失,需结合具体场景和专业安全团队实施。
|
5月前
|
机器学习/深度学习 人工智能 安全
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)(下)
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)
123 1
|
5月前
|
自然语言处理 安全 API
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)(上)
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)
161 0
|
10月前
|
机器学习/深度学习 网络安全 SDN
在软件定义网络中使用机器学习的方法进行 DDOS 攻击检测与缓解--实验
在软件定义网络中使用机器学习的方法进行 DDOS 攻击检测与缓解--实验
|
11月前
|
SQL 存储 安全
红蓝对抗-基础学习
安全是一个整体,正如木桶定律,最短的木板是评估木桶品质的标准,安全最薄弱环节也是决定系统好坏的关键。而网络红蓝军对抗的目的就是用来评估企业安全性,有助于找出企业安全中最脆弱的环节,提升企业安全能力的建设。
|
11月前
|
机器学习/深度学习 安全 算法
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?(1)
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?
|
11月前
|
机器学习/深度学习 算法 安全
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?(2)
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?
|
11月前
|
机器学习/深度学习 安全 计算机视觉
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?(3)
深度学习中,面对不可知攻击,如何才能做到防御「有的放矢」?
136 0
|
机器学习/深度学习 运维 安全
学习笔记——对抗攻击模型
学习笔记——对抗攻击模型
186 0
学习笔记——对抗攻击模型