9.2.4 在AdvBox中使用黑盒攻擊算法
9.2.4在AdvBox中使用黑盒攻擊算法
首先介紹一下GraphPipe,GraphPipe是甲骨文開源的通用深度學習模型部署框架。官方對GraphPipe的定義為,這是一種協議和軟件集合,旨在簡化機器學習模型部署並將其與特定於框架的模型實現分離。甲骨文表示,這一新工具可提供跨深度學習框架的模型通用API、開箱即用的部署方案以及強大的性能。
GraphPipe為在網絡上傳遞張量數據提供了一個標準、高性能的協議,以及客戶端和伺服器的簡單實現,因而使得從任何框架部署和查詢機器學習模型變得輕而易舉。GraphPipe的高性能伺服器支持TensorFlow、PyTorch、MXNet、CNTK和Caffe2等,如圖9-4所示。
圖9-4GraphPipe架構圖
AdvBox同時支持GraphPipe,屏蔽了底層使用的深度學習平台,用戶可以零編碼,僅通過幾個命令就可以對PaddlePaddle、PyTorch、Caffe2、MXNet、CNTK、ScikitLearn以及TensorFlow平台生成的模型文件進行黑盒攻擊,如圖9-5所示。
AdvBox提供了零編碼黑盒攻擊工具。以TensorFlow為例,TensorFlow提供了豐富的預訓練模型,假設攻擊常見的圖像分類模型SqueezeNet。首先在Docker環境下啟動基於GraphPipe的預測服務,GraphPipe環境已經完全封裝在Docker鏡像中,不用單獨安裝。
dockerrun-it--rm
-ehttps_proxy=${https_proxy}
-p9000:9000
sleepsonthefloor/graphpipe-tf:cpu
--model=https://oracle.github.io/graphpipe/models/squeezenet.pb
--listen=0.0.0.0:9000
圖9-5AdvBox對GraphPipe的支持原理
如果網速有限,可以先下載squeezenet.pb,使用本地模式啟動。
dockerrun-it--rm
-ehttps_proxy=${https_proxy}
-v"$PWD:/models/"
-p9000:9000
sleepsonthefloor/graphpipe-tf:cpu
--model=/models/squeezenet.pb
--listen=0.0.0.0:9000
之後啟動攻擊腳本,使用默認參數即可,僅需指定攻擊的URL。目前提供的黑盒攻擊算法為LocalSearch。
pythonadvbox_tools.py-uhttp://yourip:9000
經過疊代攻擊后,展現攻擊結果如圖9-6所示,具體運行時間依賴於網速,強烈建議在本機上運行Docker服務,可以大大提升攻擊速度。
localsearch.py[line:293]INFOtry3timesselectedpixelindices:[02324
2526]
localsearch.py[line:308]INFOadv_label=504adv_label_pro=0.00148941285443
localsearch.py[line:293]INFOtry4timesselectedpixelindices:[02223
2425]
localsearch.py[line:308]INFOadv_label=463adv_label_pro=0.00127408828121
attacksuccess,original_label=504,adversarial_label=463
Savefile:adversary_image.jpg
LocalSearchAttackattackdone.Costtime100.435777187s
圖9-6在AdvBox中進行黑盒攻擊效果圖
ONNX(OpenNeuralNetworkExchange),即開放的神經網絡切換。顧名思義,該項目的目的是讓不同的神經網絡開發框架做到互通互用。開發者能更方便地在不同框架間切換,為不同任務選擇最優工具。每個框架基本都會針對某個特定屬性進行優化,比如訓練速度、對網絡架構的支持、能在流動裝置上推理等。在大多數情況下,研發階段最需要的屬性和產品階段是不一樣的。這導致效率的降低,比如把模型轉移到另一個框架導致額外的工作,造成進度延遲。使用支持ONNX表示方式的框架,則大幅簡化了切換過程,讓開發者的工具選擇更靈活。
目前PaddlePaddle、PyTorch、Caffe2、MXNet、CNTK、ScikitLearn均支持把模型保存成ONNX格式。對於ONNX格式的文件,使用類似的命令啟動Docker環境即可。
dockerrun-it--rm
-ehttps_proxy=${https_proxy}
-p9000: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