内容简介:安全比赛Geekpwn今年开始强调"人工智能安全", 办了一个整个CAAD比赛分为online和live CTF两部分. online部分使用了NIPS17的CAAD比赛的形式: defenser提交自己的ImageNet分类器,attacker提交自己的黑盒攻击代码. 主办方把所有的attacker和defenser搞在一起互相打,然后对defenser和attacker分别排名.今年暑假,Cihang同学来FAIR当Kaiming的intern, 我们一起搞了一些巨牛的defense模型,于是参加了o
安全比赛Geekpwn今年开始强调"人工智能安全", 办了一个 CAAD对抗样本攻防赛 . 这让我在多年没碰CTF之后又有了一个CTF的机会,只是这次攻击的是ImageNet分类器..
整个CAAD比赛分为online和live CTF两部分. online部分使用了NIPS17的CAAD比赛的形式: defenser提交自己的ImageNet分类器,attacker提交自己的黑盒攻击代码. 主办方把所有的attacker和defenser搞在一起互相打,然后对defenser和attacker分别排名.
今年暑假,Cihang同学来FAIR当Kaiming的intern, 我们一起搞了一些巨牛的defense模型,于是参加了online的比赛拿到了defenser第一名, 同时我们也获得了参加CAAD CTF的机会.
Geekpwn CAAD CTF今年十月在上海举行,比赛主要分为两部分:
-
上半场类似于传统CTF中的jeopardy解题. 在这一部分我们的任务就是在半小时内完成主办方设定好的几种攻击场景, 包括一个ImageNet target attack, 一个ImageNet untarget attack, 和一个人脸识别target attack. attack时对原始图片的扰动越小,分数越高. 这一部分的现场直播被传到了 B站上 .. 我们在这一阶段的比赛中做出了全部三道题拿到冠军.
-
比赛的下半场是攻防: 所有队伍事先提交防御模型(也即一个ImageNet分类器), 在比赛的一个多小时中, 主办方向我们提供原始图片和target, 我们利用target attack手段生成adversarial examples,再通过主办方的API发送给别的队伍. 对抗样本成功骗过别的队伍,便可抢夺对方一定的分数,扰动越小分数越高.
在防御上我们有巨牛的防御模型所以不虚. 我们的攻击,在比赛一开始效率很低, 因此分数落后一些. 在比赛进行了一段时间之后, 我开始根据各个队伍的强弱, 对每个队伍使用不同的扰动大小,因此得以后来居上,最后也拿到了冠军.
这篇文章主要介绍我们对人脸识别的攻击, 攻击的代码已经放到了 github上 . 比赛中其他类型的攻击,我们使用的也是类似的算法,只是换了不同的CNN. 防御相关的内容,我们过几天会放出paper,代码和模型不久之后也会开源.
这两个比赛总共拿了十几万的奖金. 其实本可以再去参加一下NIPS18的比赛的,但是NIPS18 今年把难度降低了: 做的是100类小图片的tiny-imagenet, 也没什么奖金, 所以我们觉得没什么意思就忙着写paper去了..
Face Attack
The Problem
在赛前一周我们得知要黑盒攻击一个未知的人脸识别模型 $ f: I \rightarrow \text{name}$. 对一个现场临时给定的不是施瓦辛格的图片$I$, 在$I$附近$\epsilon$范围内构造图片$I'$, 使得$f(I') = $施瓦辛格. 比赛中,我们拿到了比赛主持人,最强大脑蒋昌建的照片. 赛后,主办方告诉大家被攻击的模型是 Amazon 的 Celebrity Recognition API .
由于人脸识别和图片分类不同,学的是每张脸的embedding及他们之间的distance. 因此我们并不确定adversarial examples是不是容易generalize到未知模型上. 其中最主要是担心,模型训练时用的数据集,loss function,都可能对学出的embedding的结构有影响.
Attack Method
虽然最近陆续出现了一些高级的攻击算法,我们的黑盒攻击还是很传统的,就是拿已知模型做梯度下降.
-
Model:
搜了搜github上的人脸识别代码, 找了个5分钟内能跑起来的 facenet . 毕竟github上大部分代码质量堪忧,有不少项目完全是靠README骗star的. 能否短时间内复现evaluation结果是评判质量的重要metric. 更何况, 我这次只需要能evaluation就够了.
facenet的人脸识别流程很标准: 对每张脸$I$输出一个vector $f(I)$, 然后通过比较不同脸的$f(I)$之间的cosine distance进行人脸识别.
-
Objective:
对于分类器的target/untarget attack,没什么好说的,就是minimize/maximize一个 cross entropy loss. 而对于人脸,我们首先收集target人物的 N 张人脸图片, 运行模型得到 N 个 embedding vector $v_i$ . 我们的objective就是minimize 输入图片的embedding 到这N个embedding的平均距离:
$$ \text{minimize}\ L = \frac{1}{N} \sum_{i=1}^{N} \text{dist} (f(I), v_i) $$
-
Attack:
我们在最原始的PGD (Projected Gradient Descent)攻击上加了点trick. 原始的PGD就是
- 算objective对输入图片的梯度 $\Delta I$
- 更新输入 $ I \leftarrow I-\text{sign}(\Delta I)$
- clip以免输入超出允许范围: $ I \leftarrow clip(I, I_{orig}-\epsilon, I_{orig} + \epsilon) $
- 回第一步循环
这里有不少trick可以提高黑盒攻击的generalization能力:
- 对梯度normalize一下, 然后更新时用0.9的momentum
- 在循环每一步给图片随机加点小noise
- 在循环每一步对输入图片做些乱七八糟的随机resize变换
这些trick从去年的NIPS比赛之后就陆续被大家用了. 第三条是我比赛时发现代码不work临时加上的. 事后验证发现, 这一点尤其重要. 如果不加的话攻击很难成功.
Results
回家后应主办方要求整理了一下代码, 也对着AWS的API调了调更好的参数. 现在这份开源的代码,以$\epsilon=8 $ (像素范围0~255)攻击 "蒋昌建-施瓦辛格", 在AWS上成功率极高:
用同样的参数试了试"川普-希拉里",成功率低了不少,而且换了一次原始图片才找到比较容易成功的. 毕竟两个人Amazon都认识, 又跨性别, 难度肯定大一些.
拿这些图片又试了试 Microsoft Azure Vision API 和 Clarifai Celebrity Recognition API , 也都有一些成功的例子. 在 github 上 可以看到.
In general, 黑盒攻击能够成立, 也即adversarial examples能够generalize/transfer到其他模型上这件事, 我一直都是觉得很神奇的.. 事实证明,对于人脸识别模型,这种黑盒攻击仍然成立, 这个结果还是让我们挺吃惊的. 赛后,机器之心对我们的攻击 做了报道 .
最近, NIPS18有一篇号称adversarial examples还能generalize到human vision的文章: Adversarial Examples that Fool both Computer Vision and Time-Limited Humans . 文章的实验挺有意思的, 大意就是不给人类足够的时间看图的话, adversarial examples能够对人类有一定的效果. 而其中最神奇的还是文中的这两张图:
即使给足够的时间看, 人也会觉得左边是狗右边是猫吧.
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 鲁棒异构判别分析的单样本人脸识别(文末附文章地址)
- GeekPwn对抗样本挑战赛冠军队伍开源人脸识别攻击解决方案
- python数据分析于实现,单样本体检验、独立样本体检验、相关分析、列联表分析!
- 鬼影样本分析
- 恶意样本分析手册——文件封装篇
- 利用ngrok传播样本挖矿
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。