前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >苏涛:对抗样本技术在互联网安全领域的应用

苏涛:对抗样本技术在互联网安全领域的应用

原创
作者头像
DataFunTalk
发布于 2022-06-09 04:13:37
发布于 2022-06-09 04:13:37
1K0
举报
文章被收录于专栏:DataFunTalkDataFunTalk

导读:验证码作为网络安全的第一道屏障,其重要程度不言而喻。当前,卷积神经网络的高速发展使得许多验证码的安全性大大降低,一些新型验证码甚至选择牺牲可用性从而保证安全性。针对对抗样本技术的研究,给验证码领域带来了新的契机,并已应用于验证码反识别当中,为这场旷日持久攻防对抗注入了新的活力。

分享内容包括三大方面:

  • 对抗样本介绍
  • 极验对抗样本技术探索与应用
  • 后续的工作与思考

--

01 对抗样本介绍

1. 什么是对抗样本

对抗样本 ( Adversarial Examples ) 的概念最早是 Christian Szegedy(克里斯蒂安·塞格迪)在 ICLR2014 (国际学习表征会议)上提出来的,即在数据集中通过故意添加细微的非随机的干扰所形成输入样本,受干扰之后的输入导致模型以高置信度给出了一个错误的输出。

如上图(左)原始图像以57%的置信度判断为“熊猫”,但是加入了微小的干扰之后,在人眼完全看不出差别的情况下,模型却以99%的置信度输出“长臂猿”。

当然,对抗样本不仅仅会出现在图片上,语音、文本上也会出现对抗样本,一段语音上加入微不可察的背景音,可以让语音识别模型输出错误的语音内容;在一段文本上使用近义词替换,也可以构造出对抗样本,误导语言模型。

那么为什么深度神经网络会出现对抗样本呢?

目前获得普遍认可的15年古德菲洛的观点,是深度神经网络的高维线性性导致了对抗样本的出现。

直观的理解,在进行一个高维度的线性运算时,每个维度都做一些微小的改动,会使输出结果发生巨大的变化。如上图,原始的输入是x,线性运算的权重是w,此时将样本分类到类别1的概率是5%,但是我们将输入的每一个维度都改变0.5,此时将样本分类到类别1的概率就变成了88%。

以上是对抗样本的一些简单的定义和目前比较被广泛认可的原因。

2. 为什么需要对抗样本

自从2012年AlexNet诞生以来,深度神经网络迎来了一段爆发式发展,并且广泛地应用于自动驾驶、医疗、金融、安防等领域。可以说深度神经网络模型已经深入我们生活的方方面面。对抗样本对这些模型的威胁是一个客观存在的事实,如果将STOP交通指示牌上加上一些微小的扰动,就会被检测模型识别为减速。行人穿上带有训练好的马赛克图案的衣服,就能在智能监控模型的视线中“隐身”。

所以,我们大力研究对抗样本技术,一方面是利用对抗样本探索深度神经网络的安全性,另一个方面利用对抗样本防御AI滥用的情况,如自动化验证码的识别,人脸识别模型的滥用,自动化鱼叉式的钓鱼攻击。

3. 对抗样本发展史和研究态势

Szegedy在2014年的表征学习国际会议上提出对抗样本的概念,他认为这是高维非线性导致的,并且提出了基于优化方法的L-BFGS方法。第二年Goodfellow等人,证明了对抗样本的出现是高维线性的结果,并提出了基于梯度的快速梯度符号法。之后,各种以FGSM为基础的对抗样本生成方法纷纷出现,其中比较有代表性的是I_FGSM,它在FGSM基础上进行多次迭代。

在L-BFGS基础上提出的C&W,这个奇怪的名字是两位作者名字的首字母 。

2018年肖超伟提出的advGAN,输入原始clean图片,使用生成对抗网络来生成对抗图片。

随后各种基于梯度迭代的攻击方法,基于优化的攻击方法和基于GAN的方法逐渐丰富起来。并且,对抗样本在计算机视觉、nlp、语音识别等各个领域的应用也逐渐被挖掘出来。

在dblp搜索adversarial example可以发现,从14年以来,对抗样本相关的论文也日益增长,对抗样本俨然成为了一大热门的研究领域。

--

02 极验对抗样本技术探索与应用

上面我们已经对对抗样本技术有了一个些初步的了解,下面我们来介绍一下我们极验在对抗样本技术上的探索与对抗样本技术在验证码上的应用。

1. 验证码的破解方法

极验从2012年就开发了拼图验证码,随后又上线了九宫格验证码和文字点选验证码。我们也研究了各种市面上的验证码的破解方法。

图片中分别是极验的九宫格验证码和文字点选验证码。

对于九宫格验证码,我们的破解方式和破解流程如下:从验证码上抠出上面的提示词,进入CRNN网络,输出这个提示词的内容。然后分别抠出9个小图片,进入CNN,预测出每个图片的类别。结合给出的提示词的内容和每个小图片的类别,得到最后的答案。

对于文字点选验证码的破解,同样是抠出提示词,进入到CRNN。但是对于文字位置的识别,我们需要用到一个目标检测的模型来检测出文字的位置,然后再根据位置将图片中的每个字抠出来,之后的流程与九宫格验证码的破解方式相同。

洞悉了主流的九宫格验证码和文字点选验证码的破解方式,我们就可以针对模型识别的每一个环节来生成对抗样本。例如针对提示词的对抗,针对图片分类的对抗,针对目标检测定位文字位置的对抗。

2. 几何感知对抗样本生成框架

  • 黑点表示clean样本
  • 两条虚线f,h分别是训练模型和验证模型,实线g测试模型

整个框架做的事情就是,迭代的在模型f上运行attack算法,直到得到的adv image在验证模型h上的输出正确类别的概率小于某一个阈值,并且在迭代的过程中逐步放开对抗干扰的L-p范数的限制。

为什么要把模型分成训练模型、验证模型和测试模型?主要是为了提升对抗样本的转移率,也就是说,在模型A上训练得到的对抗样本,在模型B上也能有很好的效果。这方面可以类比为提升一个模型在没有见过的数据集上的泛化性。

比如,黄色菱形表示f的最优对抗样本,如果不用验证模型h做一下约束,只利用训练模型f生成对抗样本,那么很可能迭代到这个位置就停止了,这样对抗样本在训练模型f上,过拟合了。

至于为什么要逐步放开对抗干扰的约束限制,主要是为了保证在达到对抗效果的情况下,能够使对抗图片相对于原始图片,看起来差不多。

比如,对于一张图片,先设定干扰的约束值为6,如果更新几次后就能够达到攻击的效果,那么迭代停止;如果多次更新仍然不能达到攻击效果,那么再增大约束值到10,继续更新。

上图中最右边的样本,经过2次增大约束值,就达到了攻击的效果,最左边的样本,经过了4次,才达到效果。

3. 具体的攻击方法

内部的攻击方法比较简单,用的是FGSM和它的一些增加了技巧的变体,主要是为了提升对抗样本的对抗性和转移力。

FGSM,是最速梯度符号法,算法的思想很简单:

训练模型时增大loss函数,需要计算loss函数对干扰噪声的梯度,此时我们在梯度的正方向上更新参数,就能够使loss函数增大。

  • FGSM只进行一次参数的更新,I-FGSM迭代多次。
  • MI-FGSM引入动量m,保留短期梯度的历史信息,提升稳定性。
  • DI-FGSM以一定的概率p,对输入进行多样化处理,可以理解成一个小的data augmentaion。
  • TI-FGSM利用一个事先定义好的kernel,对扰动参数的梯度进行卷积平滑,同样是为了提升对抗转移率。

以上就是我们的整个架构内部攻击的一些方法。

4. 对抗样本初步效果

这里我们利用在imagenet预训练的参数,微调出10个识别九宫格验证码的模型,这10个模型有不同的结构——有vision transformer、resnet、inception作为基础block的深度神经网络。这些模型在干净样本上的分类准确度均达到了98%以上。

以 model7作为攻击目标,model1作为训练模型,model0作为验证模型,允许的最大干扰像素值为64(这个参数会影响生成的对抗样本图片的质量),并且对抗样本在验证模型上对正确类别上的置信度小于0.01。

实验结论 :

如上图(左上)条形图是各个模型分别在干净样本和在对抗样本上的分类准确度,从实验的结果来看,仅仅在单个模型上训练的对抗干扰,就能将其他没见过的模型的分类准确度下降到20%以下。

如上图(右)热图,反应每个类别、各个模型在对抗样本上的分类准确率。对抗样本在各个类别的图片上对抗效果都比较理想。

如上图(左下)最大扰动像素值的分布图,大部分的对抗图片的最大扰动像素值是64,可以预见这批对抗图片与原始图片的差异较大。

如图,上图是对抗图片生成的验证码,下图是干净图片生成的验证码;可以看出对抗图片较为模糊,与原图差距非常大,部分图片仅仅只能通过物品的轮廓勉强分辨图片的内容(如椅子、水壶、斧头等),有的图片甚至完全无法辨认(如右一的火箭)。

这是我们初步实验的结果。模型的对抗性和可用性可能需要经过一系列的权衡,最终达到一个均衡的效果。

5. 权衡图片质量与对抗效果

设置最大干扰像素值为64,验证模型置信度阈值0.01时,训练得到的对抗样本图片干扰太过严重,使得图片雪花点比较多、比较模糊,图片可用性小。

逐渐减少最大干扰像素,增大验证模型置信度阈值,同时将训练模型和验证模型配置为多个模型的Ensemble,这样使对抗样本在不损失太多对抗性的情况下,提升图片质量。

以 model7作为攻击目标,model 01239作为训练模型,model 489作为验证模型,允许的最大干扰像素值为20,并且对抗样本在验证模型上对正确类别上的置信度小于0.05。

对抗图片在目标模型上的分类准确度在30%左右,同时在其他没见过的模型上的准确度也在30%-40%,对抗效果与之前的训练设置相比存在下降。

但是,分析最大干扰像素的分布,大部分图片在像素阈值增大到10之后就达到对抗效果,并停止了迭代。此时对抗图片的图片质量能够保证可用性。

图片中虽然还是存在少量比较模糊的图片,比如右上角听诊器,但是大部分图片跟原始图片相差不是很大。在真正使用的时候,我们可以用评估图片质量的算法将这些比较模糊的图片剔除掉。

6. 语序识别的对抗初探

除了对九宫格验证码的破解模型生成了防御性质的对抗样本,在针对语序识别的crnn和针对文字位置识别的目标检测模型的对抗做了初步的探索。

同样是用I_FGSM攻击方法,迭代使crnn模型的ctc loss不断增大,生成的对抗样本在训练crnn模型上输出错误的结果,如“炸南瓜条” 被识别为“艺南蜜贵”,“燕喜堂”被识别为“煎元宝”。但是肉眼看上去,对抗样本与原始的干净样本差别不大。

7. 目标识别的对抗

目标检测对抗样本,我们尝试了针对yolov3的攻击,初始化干扰,加到原始图片上进入yolov3检测模型,迭代更新干扰,最小化真实文字位置的预测置信度。

攻击的结果,如上图yolov3对文字点选验证码中的文字无法完全定位,而且肉眼也几乎无法分辨对抗样本与干净样本的差别。

8. 九宫格对抗样本的工程化

我们先爬取各种需要类别的图,然后更新模型库的每一个模型,进入刚才提到的几何感知的框架,训练得到对抗样本的图片,再经过一轮图片的筛选,就得到一个静态资源库。

而生成九宫格验证码的时候,从静态资源库里提取图片,生成九宫格验证码的图片,再生成干净的提示词,之后利用CRNN的攻击,生成对抗的提示词,组合得到最终的九宫格验证码的对抗样本。

--

03 后续的工作与思考

以上是我们目前做的关于对抗样本在验证码领域应用的一些工作和探索,对后续的工作我们也有一些规划和思考。

1. 基于GAN的生成技术AdvGAN

之前我们使用FGSM这个比较简单的方法来生成对抗样本,生成的过程和模型训练的过程是没有办法分开的,这样没有办法把模型的框架完整移植到针对目标检测和针对提示词的攻击上。我们想到换一个框架,用基于GAN的生成技术,比如AdvGAN。

基于GAN的对抗样本生成方式,好处是直接在G模型训练的过程中,将对抗干扰的特征保存在G模型的参数中,实现模型的训练和对抗样本生成的过程解耦。对抗样本的生成过程,不再需要迭代或者优化,提升生成的效率,也减小了部署的成本。

今天的分享就到这里,谢谢大家。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python做微信回复机器人_Python自动化脚本
最近因为太无聊了就考虑能不能做一些好玩的东西出来,正好在CSDN的推荐上看到大佬做的微信自动回复机器人,觉得很有趣,因此想着自己也能动手做一个。在此就写下我的具体思路和实现过程吧。
全栈程序员站长
2022/11/10
1.9K1
python做微信回复机器人_Python自动化脚本
十行python代码定时给微信好友发送晚安,自动应答--python云舔狗
每当我看到这一幅幅漫画就想起了我那逝去的青春,作为一只快乐的小狗在夕阳下奔跑,追逐那位(些)不曾回头的她(们),如果早早学会python,成为一只“云舔狗”,也许她(们)就能回头上下滚动查看更多
行哥玩Python
2020/07/14
4.7K0
十行python代码定时给微信好友发送晚安,自动应答--python云舔狗
python itchat库的使用
itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。 使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。 当然,该api的使用远不止一个机器人,更多的功能等着你来发现. 1. 实现微信消息的获取 import itchat @itchat.msg_register(itchat.content.TEXT) def print_content(msg): print(msg['Text']) itchat.auto_login() itchat.run(
润森
2019/08/29
2.6K0
python itchat库的使用
微信机器人
使用它可以方便的完成 回复消息、搜索好友、被添加自动回复、获取好友信息等功能,当然功能不止于这些,这里我们用到了回复信息功能
双鬼带单
2018/12/05
7.4K2
10分钟教你用Python实现微信自动回复
相信大家都有忙碌的时候,不可能一直守在微信上及时回复消息。但微信又不能像QQ一样设置自动回复。无妨,今天,我们就来用Python实现微信的自动回复功能吧,并且把接收到的消息统一发送到文件助手里面,方便统一查看。
短短的路走走停停
2019/05/14
6.4K1
【Python】30行代码教你将微信变成智能回复机器人
摘要:使用微信itchat接口和图灵机器人接口,三十行代码将你的微信变成聊天机器人,自动回复来自好友的消息。 01 — itchat安装与使用说明 itchat安装 简单安装:pip install itchat 源码安装(下载地址):https://pypi.python.org/pypi/itchat#downloads windows:下载whl包,直接pip install *.whl即可;Linux 下载tar.gz包运行setup.py即可。 itchat使用说明 具体详情可以参见
CodeInHand
2018/03/26
2.8K0
【Python】30行代码教你将微信变成智能回复机器人
Python中的itchat模块的使用
@CSDN:https://blog.csdn.net/weixin_44510615/article/details/105340263
润森
2020/04/08
9290
Python中的itchat模块的使用
Python实现微信自动回复和群聊助手
本文已转载我的简书:https://www.jianshu.com/p/4b7b4f4fb0e4
月小水长
2019/07/31
4.4K0
Python实现微信自动回复和群聊助手
微信模拟个人号itchat库使用教程
chatgpt的这把火也把QQ机器人,WX机器人,WEB机器人各种智能问答类的应用带火了。
手撕代码八百里
2023/11/17
3.6K0
微信模拟个人号itchat库使用教程
Python实现微信机器人——itchat库
itchat是一个开源的微信个人号接口,可以使用该库进行微信网页版中的所有操作,比如:所有好友、添加好友、拉好友群聊、微信机器人等等。详细用户请看文档介绍,在这里。
程序员迪迪
2021/12/21
1.9K0
30行代码实现微信自动回复机器人
前段时间写过一篇微信好友大揭秘,很多朋友对itchat非常感兴趣,今天下午又学到了itchat另一种有趣的玩法---微信自动回复机器人。
PM小王
2019/07/02
3.5K0
30行代码实现微信自动回复机器人
使用Python操作机器人聊天
萌新偶然发现一个好玩的东西 使用Python和机器人聊天 效果 工具 图灵机器人API itchat(提前安装) 准备 自己需要去图灵机器人注册账号,拿到APIkey,大家也可以直接使用我这个 ca0
小歪
2018/04/04
1.6K0
使用Python操作机器人聊天
微信机器人进化指南
听说阿尔法狗又要挑战柯杰了。时至今日,人工智能不断刷新我们对这个世界的理解。或许再过不久,你真的不知道跟你在网上聊天的对象还是不是一个“人”,也不知道自己的工作会不会有天就被机器给取代了。 要想不被机器淘汰,那只能“进化”得比机器还快! 之前我们介绍了一个可以记录微信撤回消息的小工具,参见 再也不用担心错过几个亿啦:基于Python的微信消息防撤回工具 今天我们就来讲讲它的实现基础 - itchat。文末将给出一个基于 itchat 开发的微型微信聊天机器人。 itchat 是一个开源的微信个人公众号接口,
Crossin先生
2018/04/17
4K0
微信机器人进化指南
用Python玩转微信的正确姿势!
0. itchat 最近研究了一些微信的玩法,我们可以通过网页版的微信微信网页版,扫码登录后去抓包爬取信息,还可以post去发送信息。 然后发现了itchat这个开源项目,作者是@LittleCoder,已经把微信的接口完成了,大大的方便了我们对微信的挖掘,以下的功能也通过itchat来实现。 安装itchat这个库 pip install itchat 先来段简单的试用,实现微信的登录,运行下面代码会生成一个二维码,扫码之后手机端确认登录,就会发送一条信息给‘filehelper’,这个filehelpe
Python中文社区
2018/01/31
2.3K1
用Python玩转微信的正确姿势!
基于itchat实现微信群消息同步机器人1.0
上次的微信消息同步机器人存在一些问题,在使用过程中也有些不方便。今天终于不能忍了,抽出时间改了改,进行了一些改进,以下是完善后的版本。 ---- 最近 全栈数据工程师养成攻略 的微信群已经将近500人,开了二群之后为了打通不同微信群之间的消息,花了点时间做了个消息同步机器人,在任意群收到消息时同步到其他群,并且将聊天内容上传至数据库,以供进一步分析、统计和展示。 基本思路是,用 Python 模拟微信网页版登陆,接收到群里消息后,对文本、图片、分享等各类消息类型分别处理,并转发至其他群。 前期准备 首先得
张宏伦
2018/06/07
3.1K0
再不怕和老外聊天了!我用python写了个微信聊天翻译助手!
在前面的一篇文章如何用python“优雅”的调用有道翻译?中咱们清楚的写过如何一层一层的解开有道翻译的面纱,并且笔者说过那只是脑洞的开始。现在笔者又回来了。Teach you how to flirt gracefully with code。在本文中,我将详细讲解这个翻译的具体实现!对于实现的主要功能:通过微信聊天监听一些关键的口令,开启自己说的话的翻译模式和对面说的话的翻译模式!一方面可以应付老外,另一方面可以zhuang x行骗.
bigsai
2020/01/17
5870
再不怕和老外聊天了!我用python写了个微信聊天翻译助手!
云拜年攻略!用Python自动回复拜年消息,还能“抗”七姑八姨的灵魂问题
从年三十到今天,手机上的拜年消息就没停过,大多还是群发,不回复显得很没有礼貌,一一回复又累心劳神。
大数据文摘
2020/02/21
7840
Python实现自动回复_python 微信机器人
wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。实现了微信登录、收发消息、搜索好友、数据统计等功能。
全栈程序员站长
2022/09/28
1.4K0
Python实现自动回复_python 微信机器人
【Python】利用python爬取微信朋友info
#前言 今天在工作室学习时,偶然被某公众号推送了《我用python爬了爬自己的微信朋友》,因为本身也是在学习python的过程,索性就中断了手头的工作,点进去看,并操作了一番,学习了itchat模块,并查阅了相关资料做了一些拓展学习。
肓己
2021/08/12
7361
itchat微信的python库2023.5.4
用户7138673
2023/08/16
1.2K1
itchat微信的python库2023.5.4
相关推荐
python做微信回复机器人_Python自动化脚本
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档