はじめに
基礎技術研究室リサーチエンジニアの茂木です。 最近、Adversarial Example についてまとめたホワイトペーパーを出しました。 こちらがホワイトペーパーのリンクです。
先日、「AIを騙す」攻撃であるAdversarial Exampleについてホワイトペーパーを公開しました。https://t.co/trhcAHIffz
— FFRI_Research (@FFRI_Research) June 21, 2021
画像処理や自然言語処理、音声といった各分野におけるAdversarial Exampleや、防御手法・そのバイパスについても紹介しています。#ffri_research
今回は、このホワイトペーパーで触れた、Adversarial Example の検知のバイパスについて、実際に行ってみます。
Adversarial Example とは
まず、Adversarial Example について簡単にご説明いたします。
Adversarial Example とは、微小な摂動を加えることで、機械学習モデルに誤分類を起こさせる攻撃です。
図 1 では、パンダの画像に摂動を加えることで、テナガザルに誤分類させています。
画像だけでなく、自然言語や、音声など、他の分野でも Adversarial Example は問題となっています。
さて、Adversarial Example の研究が進むにつれ、防御手法も複数提案されました。
ですが、真に防御することは難しく、機械学習のトップ国際会議にアクセプトされたような手法でも次々に破られていきました[2,3,4]。
詳しくはホワイトペーパーをご参照ください。
検知手法のバイパス例
さて、ここではホワイトペーパーでご紹介した検知手法のバイパスについて、実際に行ってみます。
まず、ベースとなる分類モデルを作成します。 今回は、MNIST データセット[5]で学習した CNN モデルを作成します。MNIST データセットは、手書きの 0 から 9 までの画像とその数字のラベルのついたデータセットです。今回はこれを 10 クラスに分類します。
10 エポック学習した結果、約 98% の正解率でした。
ubuntu@hoge:~/break-defense$ poetry run python break_defense/main.py train-base 1/10, train_loss: 0.83113, val_loss: 0.25082 #省略 10/10, train_loss: 0.08940, val_loss: 0.05574 test loss: 0.05145, acc: 0.98340
(作成したスクリプトの出力の数字以外を一部改変して示しています。)
次に、このベースモデルに対し、Adversarial Example を作成します。
今回は、(Targeted) PGD Attack を使い Adversarial Example を生成します。PGD Attack には advertorch[6] を用いました。
ubuntu@hoge:~/break-defense$ poetry run python break_defense/main.py create-adv
生成された Adversarial Example は、図 2 のようなものです。
次にこれらを検知するモデルを作成します。 今回用いる手法は、Adversarial Example であった場合に 11 クラス目として分類する分類器を作成することで、検知するものです。ここで、Adversarial Example でなければ元々の 10 クラスに分類します。この手法は[7]で提案されました。
結果、検知率は 100% と極めて良好でした。
ubuntu@hoge:~/break-defense$ poetry run python break_defense/main.py train-detector 1/10, train_loss: 0.47912, val_loss: 0.12336 # 省略 test loss: 0.02711, acc: 0.99120 detection rate: 1.00000
さて、本題である検知のバイパスを行います。 実はバイパスの手法は単純です。 本来のクラスでも、11 番目のクラスでもないクラスに誤分類されるような Adversarial Example を検知器に対して生成するだけです。 例えば 2 の手書き文字であれば 3 に分類されるように摂動を加える、といった方法です。この手法は[3]で提案されました。
実際にやってみると、攻撃成功率(狙ったクラスに誤分類させた率)は約 97 %でした。また検知率は約 1.5% にまで低下しました。
ubuntu@hoge:~/break-defense$ poetry run python break_defense/main.py bypass attack success rate: 0.96750 detection rate: 0.01540
つまり、検知器のバイパスが成功しています。
これによって生成された Adversarial Example は図 3 のようなものでした。
おわりに
今回、Adversarial Example の検知手法のバイパスを行いましたが、これを体験できるインターンを行います。Adversarial Example の生成手法の実装も行います。
詳しい内容は以下のリンクからご覧ください。 https://open.talentio.com/r/1/c/ffri.1440_recruit/pages/21697
また、私の所属する基礎技術研究室では、この他にも「CPU レベルでの脆弱性防御機構の作成」というインターンも開催します。 このインターンでは、近年注目を集めているオープンな命令セットアーキテクチャ RISC-V を題材にしています。脆弱性を突く攻撃コードの作成とそれを通じた防御に必要な知識の習得、CPU レベルで脆弱性攻撃から防御する機構の自作を体験できます。
こちらのインターンの説明は以下のリンクからご覧ください。 https://open.talentio.com/r/1/c/ffri.1440_recruit/pages/20767
FFRIセキュリティではサイバーセキュリティに関する研究開発を希望するエンジニアを募集しています。採用に関しては こちら を御覧ください。
参考文献
[1] Ian J. Goodfellow, Jonathon Shlens, Christian Szegedy, "Explaining and Harnessing Adversarial Examples." ICLR(Poster) 2015
[2] Nicholas Carlini, David A. Wagner, "Towards Evaluating the Robustness of Neural Networks." IEEE Symposium on Security and Privacy 2017: 39-57
[3] Nicholas Carlini, David A. Wagner, "Adversarial Examples Are Not Easily Detected: Bypassing Ten Detection Methods." AISec@CCS 2017: 3-14
[4] Anish Athalye, Nicholas Carlini, David A. Wagner, "Obfuscated Gradients Give a False Sense of Security: Circumventing Defenses to Adversarial Examples." ICML 2018: 274-283
[5] "THE MNIST DATABASE of handwritten digits." http://yann.lecun.com/exdb/mnist/
[6] Gavin Weiguang Ding, Luyu Wang, Xiaomeng Jin, "advertorch v0.1: An Adversarial Robustness Toolbox based on PyTorch." https://arxiv.org/abs/1902.07623
[7] Kathrin Grosse, Praveen Manoharan, Nicolas Papernot, Michael Backes, and Patrick McDaniel, "On the (Statistical) Detection of Adversarial Examples." https://arxiv.org/abs/1702.06280