9.2.4 在AdvBox中使用黑盒攻击算法
9.2.4 在advbox中使用黑盒攻击算法
首先介绍一下graphpipe,graphpipe是甲骨文开源的通用深度学习模型部署框架。官方对graphpipe的定义为,这是一种协议和软件集合,旨在简化机器学习模型部署并将其与特定于框架的模型实现分离。甲骨文表示,这一新工具可提供跨深度学习框架的模型通用api、开箱即用的部署方案以及强大的性能。
graphpipe为在网络上传递张量数据提供了一个标准、高性能的协议,以及客户端和服务器的简单实现,因而使得从任何框架部署和查询机器学习模型变得轻而易举。graphpipe的高性能服务器支持tensorflow、pytorch、mxnet、cntk和caffe2等,如图9-4所示。
图9-4 graphpipe架构图
advbox同时支持graphpipe,屏蔽了底层使用的深度学习平台,用户可以零编码,仅通过几个命令就可以对paddlepaddle、pytorch、caffe2、mxnet、cntk、scikitlearn以及tensorflow平台生成的模型文件进行黑盒攻击,如图9-5所示。
advbox提供了零编码黑盒攻击工具。以tensorflow为例,tensorflow提供了丰富的预训练模型,假设攻击常见的图像分类模型squeezenet。首先在docker环境下启动基于graphpipe的预测服务,graphpipe环境已经完全封装在docker镜像中,不用单独安装。
docker run -it --rm
-e https_proxy=${https_proxy}
-p 9000:9000
sleepsonthefloor/graphpipe-tf:cpu
--model=https://oracle.github.io/graphpipe/models/squeezenet.pb
--listen=0.0.0.0:9000
图9-5 advbox对graphpipe的支持原理
如果网速有限,可以先下载squeezenet.pb,使用本地模式启动。
docker run -it --rm
-e https_proxy=${https_proxy}
-v "$pwd:/models/"
-p 9000:9000
sleepsonthefloor/graphpipe-tf:cpu
--model=/models/squeezenet.pb
--listen=0.0.0.0:9000
之后启动攻击脚本,使用默认参数即可,仅需指定攻击的url。目前提供的黑盒攻击算法为localsearch。
python advbox_tools.py -u http://your ip:9000
经过迭代攻击后,展现攻击结果如图9-6所示,具体运行时间依赖于网速,强烈建议在本机上运行docker服务,可以大大提升攻击速度。
localsearch.py[line:293] info try 3 times selected pixel indices:[ 0 23 24
25 26]
localsearch.py[line:308] info adv_label=504 adv_label_pro=0.00148941285443
localsearch.py[line:293] info try 4 times selected pixel indices:[ 0 22 23
24 25]
localsearch.py[line:308] info adv_label=463 adv_label_pro=0.00127408828121
attack success, original_label=504, adversarial_label=463
save file :adversary_image.jpg
localsearchattack attack done. cost time 100.435777187s
图9-6 在advbox中进行黑盒攻击效果图
onnx(open neural network exchange),即开放的神经网络切换。顾名思义,该项目的目的是让不同的神经网络开发框架做到互通互用。开发者能更方便地在不同框架间切换,为不同任务选择最优工具。每个框架基本都会针对某个特定属性进行优化,比如训练速度、对网络架构的支持、能在移动设备上推理等。在大多数情况下,研发阶段最需要的属性和产品阶段是不一样的。这导致效率的降低,比如把模型转移到另一个框架导致额外的工作,造成进度延迟。使用支持onnx表示方式的框架,则大幅简化了切换过程,让开发者的工具选择更灵活。
目前paddlepaddle、pytorch、caffe2、mxnet、cntk、scikitlearn均支持把模型保存成onnx格式。对于onnx格式的文件,使用类似的命令启动docker环境即可。
docker run -it --rm
-e https_proxy=${https_proxy}
-p 9000:9000
sleepsonthefloor/graphpipe-onnx:cpu
--value-inputs=https://oracle.github.io/graphpipe/models/squeezenet.value_
inputs.json
--model=https://oracle.github.io/graphpipe/models/squeezenet.onnx
--listen=0.0.0.0:9000
首先介绍一下graphpipe,graphpipe是甲骨文开源的通用深度学习模型部署框架。官方对graphpipe的定义为,这是一种协议和软件集合,旨在简化机器学习模型部署并将其与特定于框架的模型实现分离。甲骨文表示,这一新工具可提供跨深度学习框架的模型通用api、开箱即用的部署方案以及强大的性能。
graphpipe为在网络上传递张量数据提供了一个标准、高性能的协议,以及客户端和服务器的简单实现,因而使得从任何框架部署和查询机器学习模型变得轻而易举。graphpipe的高性能服务器支持tensorflow、pytorch、mxnet、cntk和caffe2等,如图9-4所示。
图9-4 graphpipe架构图
advbox同时支持graphpipe,屏蔽了底层使用的深度学习平台,用户可以零编码,仅通过几个命令就可以对paddlepaddle、pytorch、caffe2、mxnet、cntk、scikitlearn以及tensorflow平台生成的模型文件进行黑盒攻击,如图9-5所示。
advbox提供了零编码黑盒攻击工具。以tensorflow为例,tensorflow提供了丰富的预训练模型,假设攻击常见的图像分类模型squeezenet。首先在docker环境下启动基于graphpipe的预测服务,graphpipe环境已经完全封装在docker镜像中,不用单独安装。
docker run -it --rm
-e https_proxy=${https_proxy}
-p 9000:9000
sleepsonthefloor/graphpipe-tf:cpu
--model=https://oracle.github.io/graphpipe/models/squeezenet.pb
--listen=0.0.0.0:9000
图9-5 advbox对graphpipe的支持原理
如果网速有限,可以先下载squeezenet.pb,使用本地模式启动。
docker run -it --rm
-e https_proxy=${https_proxy}
-v "$pwd:/models/"
-p 9000:9000
sleepsonthefloor/graphpipe-tf:cpu
--model=/models/squeezenet.pb
--listen=0.0.0.0:9000
之后启动攻击脚本,使用默认参数即可,仅需指定攻击的url。目前提供的黑盒攻击算法为localsearch。
python advbox_tools.py -u http://your ip:9000
经过迭代攻击后,展现攻击结果如图9-6所示,具体运行时间依赖于网速,强烈建议在本机上运行docker服务,可以大大提升攻击速度。
localsearch.py[line:293] info try 3 times selected pixel indices:[ 0 23 24
25 26]
localsearch.py[line:308] info adv_label=504 adv_label_pro=0.00148941285443
localsearch.py[line:293] info try 4 times selected pixel indices:[ 0 22 23
24 25]
localsearch.py[line:308] info adv_label=463 adv_label_pro=0.00127408828121
attack success, original_label=504, adversarial_label=463
save file :adversary_image.jpg
localsearchattack attack done. cost time 100.435777187s
图9-6 在advbox中进行黑盒攻击效果图
onnx(open neural network exchange),即开放的神经网络切换。顾名思义,该项目的目的是让不同的神经网络开发框架做到互通互用。开发者能更方便地在不同框架间切换,为不同任务选择最优工具。每个框架基本都会针对某个特定属性进行优化,比如训练速度、对网络架构的支持、能在移动设备上推理等。在大多数情况下,研发阶段最需要的属性和产品阶段是不一样的。这导致效率的降低,比如把模型转移到另一个框架导致额外的工作,造成进度延迟。使用支持onnx表示方式的框架,则大幅简化了切换过程,让开发者的工具选择更灵活。
目前paddlepaddle、pytorch、caffe2、mxnet、cntk、scikitlearn均支持把模型保存成onnx格式。对于onnx格式的文件,使用类似的命令启动docker环境即可。
docker run -it --rm
-e https_proxy=${https_proxy}
-p 9000:9000
sleepsonthefloor/graphpipe-onnx:cpu
--value-inputs=https://oracle.github.io/graphpipe/models/squeezenet.value_
inputs.json
--model=https://oracle.github.io/graphpipe/models/squeezenet.onnx
--listen=0.0.0.0:9000