seccamp2022 専門D参加記録

この記事はセキュキャンgroup workのチーム「timeoverflow」1によるリレーブログの一環として書かれています。前回の担当者はkgtkrさんで自宅サーバ環境の紹介です。次回の担当者はsei0oさんでseccamp2022チューター参加の記録です。

こんにちはryoryon(twitter:@ryoryon66)です。セキュリティキャンプに参加させて頂いたので感想などを書いておこうと思います。(セキュキャンに興味あるよという方、参考になるかもしれません。)

まあかなり冗長なので、ざっくり知りたい人は最終日の発表会で使ったスライド(多少違いますが)を見てもらった方がいいかもしれません。スライド

セキュリティキャンプとは

公式ページを見てもらうのがいいと思います。(この節の存在意義?知りませんね。。。)セキュリティとついていますが、あんまりセキュリティに関係なさそうなものもあるので毎年募集コースを見てみるといいかもしれません。課題による選考(全体で倍率2-3倍程度だったかな。区分によるらしいけど。)と年齢制限があるので、毎年興味のあるところがないか見て申し込んでみるといいと思います。

実際に参加して思ったのが、講義が始まる前に複数回ハラスメントの防止(技術力の有無でどうこうしないとか)や質問の推奨(他の人の学びにもなる!)についてのアナウンスがあるので、安心して(自分では程度が低いなと思っても)質問を投げることができて非常に良いということです。技術ハラスメント的なことにならないように、いい感じに言葉を選んでくれているなと思えることが多々ありました。平和な世界。参加前はもっと殺伐(これは誇張)としてると思ってました。

参加理由

B1の夏頃に大学の人々がいっぱい参加していて楽しそうで「セキュリティ知識ないけどいつかセキュキャン参加できたらなー」と思っていたので一応公式HPを確認してみました。松尾研のDL基礎講座を受講していたこともあり、DコースのAI Attack & Defence という講義がとても面白そうだなー 2 とおもって選考課題を見てみると3/4ぐらいは気合でどうにかかけそうだなと思い応募することにしました。

選考課題については別記事で詳細を書こうと思います(ほんまか?)。

専門講義について

Dコースの専門講義の種類とちょっとした内容紹介、感想などを書きます。講義中に取っていた自分の解釈を混ぜ込んだメモを参考に書いているのでもし間違っていたらすいません。

  • [D1, D4, D5, D6] 実践 AIシステム Attack&Defense
    • 4コマかけてAIに対する攻撃とその防御をCIFAR-10を用いたハンズオンとコンテストを通して学びました。
    • ハンズオンについては「AIディフェンス研究所」というところで公開されているので試せます!是非。
    • 次の節で詳細を書いてます。
  • [D2] 機械学習による検知など近年のフェイクニュースに対する取り組み
    • フェイクニュースそもそも定義難しくないですか?
      • そもそもこんな曖昧な言葉をつかわないようにしようという動きも
    • 様々なフェイクニュース検知モデルの紹介
      • モデルはあるけど、学習させるデータの問題が難しい
      • 学習データが一般的な人には手に入りにくいらしい
        • 研究者が研究のためにまとめたデータセットとか使うらしい。(twitter15とか使った)
    • 検知以外のタスク
      • ファクトチェックをネット上から根拠を探し出すAIで自動化
      • そもそもフェイク判定の対象とすべき事柄なのか判断するAI(e.g. 害のないジョークとかは判定の必要なし)
  • [D3] AI技術最前線

    • AIの技術的な話というよりAIをいかに社会的に生かすかという話
    • とりあえずAIをつかって何かしよう×
        1. Problem first
        1. Data second
        1. AI third
    • AIはDXの二つの段階であるデジタイゼーションとデジタライゼーションに役立つ
      • デジタイゼーション: 非構造化データの構造化データへの変換
      • デジタライゼーション:構造化データを用いて業務に役立つ分析をする
      • 構造化データ 表にできるデータ
      • 非構造化データ 表形式にできない音声や画像などのデータ
    • AI Lean Canvas
      • AIを用いて問題解決しようというときに用いる考えを整理する表
        • 解決すべき問題や、何がうれしいか、コストなどの面から総合的に考える。
  • [D7] これからのAIにとってのセキュリティを考える

    • AIモデルの普及に際して重要な問題についてディスカッション
      • AIとプライバシー
        • 暗号化してたらなんでもデータ使っていいのか?
        • 情報銀行のidea
      • AIと品質保証
        • AIの品質ってそもそもなんぞ?
          • 精度?
          • 保守性?
          • セキュリティ?
        • とりあえずAIも攻撃対象であるという認識を広める必要はあると思った。
        • AI保険で第三者に責任転嫁みたいなIdeaを出してる人がいて面白いねなどと思った。
      • AIと責任
        • 誤推論で損害出たらだれの責任?
        • 準委任契約?請負契約?
        • 契約前にはっきりさせとくといいと思う
    • チューターの方々の示唆に富んだ意見や、進行によく助けられました。

[D1, D4, D5, D6] 実践 AIシステム Attack&Defenseについて詳しく説明します。

AI Attack & Defence

D1 攻撃手法

AIシステムへの攻撃概要 - 学習データの収集 学習データ作成 - 信頼できるところからデータを得ている?。 - 細工されたデータが入ってませんか - 教師データのラベル付けはただしいですか? - モデルの学習 - 事前学習モデルは信頼できるものですか? - 例えば事前学習モデルはlink1,link2,link3などから入手できるらしい。3 - 細工されていませんか? - trojan nodeとか任意コード実行できるtensorflowのλレイヤの悪用 - 安全なフレームワークを正しく使ってる? - モデルの設置(運用) - 入力データは細工されていないか - 不正な入力データに対してロバストであるか - 必要以上の情報を応答していないか - モデル抽出攻撃とかでモデル剽窃されるかも - 経済的に損だし剽窃攻撃から別の攻撃につなげれるし厄介 - モデル学習の時間と金を剽窃で節約する輩がいるかも

今回の講義ではモデルの運用段階での入力データに細工を加える攻撃である「敵対的サンプル」4に入門した。

ホワイトボックスシナリオ

まず基本的な攻撃について学ぶために、攻撃対象のNNモデルが手元に存在し、自由に使うことができるホワイトボックスシナリオでの攻撃について学んだ。

敵対的サンプルは入力データに微小な摂動(ノイズ)を与えて分類AIの誤分類を引き起こそうとするもの。以下に分けられる。 - 非標的型攻撃 どのラベルに間違えさせてもいい攻撃。 - 例 分類システムの精度をただただ落としたいとか - 標的型攻撃 狙ったラベルに誤分類させる。 - 例 顔認証システムの突破

画像を微小に変えてやって、正しい領域から決定境界の外側へおしやるイメージ。具体的には?→FGSM(Fast Gradient Sign Method)という方法がある。

  • FGSM(非標的型の場合)
    1. 入力画像をNNに突っ込んでLossを計算し、Lossの画像の画素による偏微分を考える。5
    2. Lossが大きくなる方向に、つまり勾配方向に画像にノイズを付与。
    3. 誤差が十分に大きくなるまで以上を繰り返し、画像にノイズをましましで乗せていく。
    4. 完成。

意外と簡単な気がするのでいつか自分で実装してみたい。。。

講義中に質問したところ、ラベルAに誤解させることをねらう標的型攻撃の場合には、上のLossの代わりに,ラベルAとの"距離"となるような指標を考えてそれを最小化することを目指すそうです。

FGSMではパラメタをうまく調整すれば、人間には正常な画像に見えるけど、AIにはささる画像を生成することができます。

(これらは全て飛行機の画像で左:加工なし、中央:わずかに加工、右:加工マシマシでそれぞれ10クラス分類タスクで脆弱なAIは左:53% 飛行機、中央:95% カエル、右:99.2%カエルと判断しました。6)

  • ハンズオンの実験結果
    • Accuracy on benign test example: 75.4%
    • Accuracy on Adversarial Exmaples: 23.24%
    • 10クラス分類なのでほぼランダムといえるほどに正解率悪化。
ブラックボックスシナリオ

ブラックボックスシナリオでは、攻撃対象のAIのアーキテクチャなどを知ることができない状況下での攻撃を考えます。

  • FGSMの難しさ
    • 誤差がおおきくなる方向をしらないといけないので標的のモデルの構造を知る必要性がある.

上のような事情で、ホワイトボックス攻撃よりは成功しにくいですが、うまくやると攻撃を行うことができます。どうするの?対象AIと同じような再現モデルを手元に用意してホワイトボックスモデルに帰着してやるのです。敵対的サンプルは似たような構造のAIについては、同様に誤分類を引き起こしやすい「転移性」という性質があります。攻撃対象AIの決定境界をうまく近似することができれば攻撃の成功率は上がります。

  • どうやって再現モデルを用意するのか
    • まずはOSINTなどで企業のブログなどに情報が落ちていないか合法的に確かめる。
    • 前もってモデル剽窃などの攻撃をしてモデルをコピーする。
    • ざっくりとAIのアーキテクチャを合わせようと試行錯誤する
    • 同じような学習結果を得たいので、お相手の学習データの分布を推測し、同じような分布の学習データを何とか使って学習する。(学習に使ったdata setを公開することも危険かも??)

このようにして手元に用意したAIに対して、FGSMを実行して、敵対的サンプルを得ることができます。

  • ハンズオンでの実験結果
    • Accuracy on benign test example: 75.4%
    • Accuracy on Adversarial Exmaples: 23.24%
    • ホワイトボックスほどにはうまくいかないけど十分悪化した。

モデルの訓練時間くそほど暇なので、雑談が行われていました。 - ほんとにcolabのGPUで当たり引けない。 - キャンプ中で当たり引けた人はいなかったはず。 - 脆弱性を探すためのペイロードをGANで生成するみたいなお話があったりするらしい。AIへの攻撃以外にもAIのセキュリティへの応用も研究進んでるんだなーなどと思った。 - 製造業だと推論時間に制約があるよーとかの話もあった。

D4 防御手法

攻撃についてはD1で学んだので、次は防御について学んだ。

防御手法の例

  • ネットワークの蒸留
    • 「蒸留」とは、訓練済みAIモデルの入力と出力を、よりシンプルなモデルに与えて学習させることで、コンパクトなモデルが手に入る。
  • アンサンブルメソッド
    • 機械学習モデルを複数作って結果を統合する.出力の平均とるとか。
  • AIによる検出
    • 異常データを入力前にはじく。
  • データ拡張(data augmentation)
  • フィルタ処理
  • 敵対的学習

最後の三つの手法について実験結果を交えて個別に説明しておきます。

データ拡張

AIの学習データに変化を施すことでデータを水増しする。学習データに多様性を持たせることで、AIの 頑健性 向上に寄与する。敵対的サンプルへの頑健性向上のためだけに使われる手法というわけではない。

変化の例 - 回転 - 反転 - 平行移動 - 拡張 縮小 - ぼかし処理

他にもいろいろなデータ拡張の方法があります。

  • ハンズオンでの実験結果
    • Vulnerable classifier: Accuracy on test example: 82.56%
    • Vulnerable classifier: Accuracy on Adversarial Exmaples: 9.94%
    • Data Augmented classifier: Accuracy on test example: 80.54%
    • Data Augmented classifier: Accuracy on Adversarial Exmaples: 19.6%

たしか回転とか平行移動を使っていた思います。

フィルタ処理

AIへの入力画像に変化を加えて情報量を削減し、敵対的サンプルを無効化する方法.

  • Feature Squeezing
    • カラービット深度削減や、平滑化でノイズをつぶす。攻撃者の摂動の探索空間を狭くする。
  • JPEG Compression
    • 圧縮してノイズをつぶす.

前処理で情報が失われてしまうので、精度とのトレードオフになることが多い.

  • ハンズオンでの実験結果

    • Non-filtered : Accuracy on Adversarial Exmaples: 10.100000000000001%
    • Feature Squeezing: Accuracy on Adversarial Exmaples: 34.94%
    • Non-filtered : Accuracy on Adversarial Exmaples: 10.100000000000001%
    • JPEG Compression: Accuracy on Adversarial Exmaples: 46.44%

3,4倍ぐらい識別できていてすごい。

敵対的学習

正常データと敵対的サンプルをまぜて学習する。

  1. 学習中のAIを利用して敵対的サンプルを作成する
  2. AIに正常データxとその敵対的サンプルx'を入力し、それぞれの誤差を求める
  3. それぞれで得た誤差に重みalpha,1-alphaをつけて係数を足し合わせる。
  4. 足し合わせた誤差が最小となるように重みを更新.

  5. ハンズオンでの実験結果

    • Vulnerable classifier: Accuracy on test example: 83.39%
    • Vulnerable classifier: Accuracy on Adversarial Exmaples: 10.51%
    • Robustness classifier: Accuracy on test example: 75.92999999999999%
    • Robustness classifier: Accuracy on Adversarial Exmaples: 77.10000000000001%

だいぶすごいですよね。でもくそほど学習に時間がかかりました。。。今までのが15minぐらいで学習終わっていたんですが、これは45分ぐらい待たされました。学習中に毎回、敵対的サンプルを作っているので大変そうです。これの高速化みたいな話が研究ではホットな話題だとか。

D5,D6 AI Attack & Defence contest

最後のふたコマでは今まで習ったことを活用するコンテストを行いました。18:00ぐらいから12:00までだったのでとても時間が厳しかった。。。(講義時間自体は6h程度。)受講生+αで十数人が参加していました。なんか競技用のwebサイトが構築されていて想像してたより本格的でスゲーってなりました。

ルール説明

各自CIFAR-10の画像を適切に分類するNNモデルをつくって競技サーバにモデルをアップロードします。参加者はAttack pointとDefence pointを後述するように得ることができて、その合計点を競います。

Attack pointは、他の人のAIモデルに対して、細工したデータ100枚を投げつけて、誤分類を引き起こすことで得ることができます。画像の提出は講義中に限定されており、同じ人に対しては30min間の間隔をおいて画像を入力することができます。(講義時間に限定しないと絶対徹夜して攻撃しまくった人が勝っちゃうので。。。)攻撃がおわると、入力ごとに相手AIがラベルごとにつけた自信度をJSON形式でサーバーがお知らせしてくれます。(ここでいう自信度とは、NNの最後のsoftmax関数の出力のことで、labeliとなる確率piと解釈することができるものです。)ちなみに、ノイズを乗せまくるほど誤分類を誘発できるのですが、あまりにも元画像と異なった入力を与えた場合には、自動的に提出に失敗するようになっています。(提出の権利が消えるわけではない。)講義で扱ったARTというライブラリではFGSMにおけるノイズの量をepsという引数で指定することができるのですが、eps=5とかにすると原形をとどめていない謎の画像が生成されます。

Defence pointは運営があらかじめ用意してくださった正常データと敵対的サンプルが混じった画像を適切に10個のクラスに分類することで獲得することができます。運営からの画像の入力は講義中に30minごとに与えられるので、入力が飛んでくる前にツヨツヨモデルをサーバーにアップしておく必要がありました。

競技ページでは、他の参加者のAttack、Defenceポイントを閲覧することができたのでドキドキハラハラ感がすごかったです。競技中にどんどん他の人のAIが頑健なものに置き換わるので工夫しないとどんどんAttackが成功しにくくなっていきました。

他にも細かいことはいろいろあるのですが、紹介はこの程度にしておきます。

結果

なんと総合1位を取ることができました。表彰状もらえてうれしい。後半で急に他の受講生にAttack Pointで抜かされて焦りましたが、Defence Pointで逃げ切ることができました。攻撃部門2位、防御部門1位.

私がやったこと

まずAttackの方が 1. 採点回数が単純に多い点 2. 試行に時間がかからない点

でDefenceの方よりコスパがいいのでAttackの改善にほとんどの時間をかけていました。

  • 防御について

ハンズオンでつくった敵対的学習によるモデルをサーバーにいったんアップしました。ただハンズオンでつくったモデルはepoch数が少なかったため、とりあえずもっと学習を進める必要があると思い、コンペが始まる前にも学習だけさせていました。(ほんとに時間がかかるので攻撃がメインの講義中にやっている余裕がない。)

またハンズオンで作ったモデルはeps=0.05の値で生成した敵対的サンプルを混ぜ込んで敵対的学習を行っていたのですが、自分はeps=0.08で生成した敵対的サンプルをまぜこんで追加で学習を30epochぐらい回しました。他の人からやってくる攻撃はepsが高めに設定されているだろうから学習時のepsをあげておいた方が良いという判断です。(ちなみになぜeps=0.08にしたのかというと、講義中に他の人がeps=0.08の攻撃が通りました!と言っているのを聞いて、みんなそれに合わせに行くんじゃないかなと思ったからです。他の人のAttack pointを下げにいけたのではないかと思います。)

防御についてはこれぐらいしかやっていないのですが、最後までこの方針でDefence1位を守り抜くことができました。本当はモデルのアーキテクチャから変えたりした方がいいと思いましたが、学習時間もなかったので妥協。

  • 攻撃について

先に書いた通り、ARTライブラリではepsという引数を調整することで、敵対的サンプルの作成につかうノイズの量を調整することができます。基本的にはepsをガンガン上げていく方がattackに成功しやすいのですが、サーバーであまりにノイズの乗った画像ははじかれるので、メタいですが、サーバーにはじかれないぎりぎりのepsの値を最初に探索しeps=1.2ぐらいに設定しました。7

それで一旦みんなに攻撃を投げてやると、JSONが返ってくるのでそれをpandasで読み込んで適当に分析しました。すると誤分類の行き先がやたらとfrogに集まっているなということに気づきました(他より数倍程度frogに集まりやすかった)。よって誤分類をfrogに集中させる標的型攻撃に方針を切り替えることにしました。すると自分が初期の防御用に使っていた学習が進んでいないAIでの正答率を11%ぐらいに下げることができました。で、分類結果を見てみるとfrog以外の画像を分類させることができていて満足.しかし当然ながらこのままだとfrogもfrogに分類されてしまうのでfrogの画像からは非標的型で敵対的サンプルを生成するようにすると1%まで認識率を下げることができました。

これで他の人を攻撃すると75%とかそれぐらいの割合で間違えさせることができていましたが、一人だけ20%ぐらいしか誤分類をさせることができていませんでした。しかもその人は、Defenceポイントがその時点では相対的に小さかったので???になりました。JSONを見てみてもfrogの確率が高くはなかったので、その人に対しては特注で非標的型に戻して攻撃をしました。すると80%ぐらい間違えさせることができてニンマリです。余計な情報をサーバーから返すのは攻撃者に悪用される恐れがあってやめた方がいいなということが身に染みてわかりました。

後半に入って、他の人にAttack Pointが抜かされてしまい、焦って攻撃データを作るときにつかうAIを自分の最新のモデルではなくてあえて学習の進度を落としたり、より弱いモデルを使うようにするなどの試行を試しましたがあまり刺さりませんでした。(刺さった人には以降それをずっと投げてましたが。)敵対的サンプルの転移性を十分に発揮するには、相手のAIと似たモデルを攻撃の際に使った方がいいと思ったのに割と謎です。(当時のDefence Pointの差分を見ると自分のモデルが一番大きかったので、Defence Pointが低い人に対して刺さってないのかなとか思っていました。)

こんな感じでどんどんAttackで逆転されていくのを眺めながら、最後の提出で悪あがきでepsの小数点第三位の調整をするとeps=0.124がサーバーにはじかれずに通ることに気づいてしまいました。最後の攻撃でのAttack Pointの変異は自分が他の人より大きかったのでeps調節ゲーであることが発覚しました。悪あがきでAttack一位との差をすこし縮めるも追いつききれず終了。(感想戦ではAttack一位の人が自分が抜かれたタイミングでeps=0.122に設定したと言っていたので、もっとしっかりとeps調整するべきだった。まさか小数点第三位が効くとは。。。)ちなみにeps=0.125は通りませんでした。Attackがepsゲーになってしまったうーんって感じだけどどうすればいいかといわれてもうーんってなるのでどうにもならなさそう。

最初の方にも載せていましたが画像をもう一回貼っておきます。

他の人の攻撃だとPGDという手法を使ったものがありました。8

  • 苦労した点

colabのリソース制限がとってもきつかった。自由に使えるGPU欲しい。AzureとかAWSとか使わせてもらえると嬉しいなー(我儘)来年以降の受講生を支援してくださる企業さんいませんかね?

その他

  • セキュキャン開催前にセキュキャンを支援してくださっている企業の方々から多くのノベルティーグッズが届きました。ありがとうございます!

  • LT会

    • C言語のやばい構文について
      • int d = (1,2,3,4) + (5,6,7,8);とかびっくりした
    • 大腸菌で計算しようみたいな話
    • OSINTについて
    • ガチガチセキュリティーみたいな話が知識0の自分にはよくわからなかったので無知であることによる機会損失の大きさに気づいた。(企業交流でもそんな感じだったので強い人はより機会をいかせているんだろうなのお気持ちに。)
    • 他にもいろいろ面白いお話が聞けて面白かった。(発表者の方々、お強い。。。)
  • ネクストキャンプのチューターや講師の方々のzoom背景が燃えていて🔥、ネクストキャンプのイメージに熱血がついた。たぶん『大熱血!アセンブラ入門』の著者が講師にいらっしゃったからだと思う。zoom背景熱血で仁王立ちして映ってる人が複数いたので腹筋崩壊。ネクストの人が話し出すとdiscordの雑談に🔥がめっちゃ投下される。

  • 開発コースX(確か)の人々がラジオ体操をやたらとしていたのが記憶に残っている。これまたzoomの背景でずっと踊ってたり、リアタイで踊ってたりして面白かった。ZコースのCTFで間違ったフラグを適当に送るとなめらかに動くXの人々のラジオ体操の様子が「はずれ!もう一度ラジオ体操をして頭を整理してみよう」という煽りと共に送られてきました...

  • Cコンパイラゼミの発表で、自作Cコンパイラで回転するドーナツがターミナルに表示されているのと、バグった時の表示がえぐいのを見て、Cコンパイラのオンラインブックがちょっとやりたくなった。

  • グループワークで毎週目標をたてて、達成できなかった人がいたらその分だけ連帯責任で筋トレ100回みたいなのをする人々がいて笑ってた。発表のメインが鍛えたい筋肉の紹介だったり、入団者募集だったり。(これ人が増えれば増えるほど苦しむシステムなんだよな。。。)

  • CTF勢の密度高すぎる。(2022は例年より多かったっポイ。)

最後に

貴重な学習機会を与えてくださった講師やチューターのみなさんをはじめとする運営に関わってくださった方々、一緒に受講してくれた方々、本当にありがとうございました。 セキュリティキャンプ全体で質問しやすい雰囲気が作られていて(質問することは他の人の為にもなるという話をn回聞けて安心)些細なことでも質問を投げることが気楽にできました。キャンプ終了後からも圧倒的、爆発的🔥成功を遂げたいところです。とりあえずIPAさんにお世話になったので10月のAPを受ける予定です。


  1. チーム名の由来は初回の集まりでチーム名が時間以内に決まらなかったことです。優柔不断ですね。

  2. AIを用いた攻撃があるのは想像つくけど、AIに対する攻撃とかいう概念を初めて知ったので興味大だった。選考課題がセキュリティ知識ほぼ0の私でも取り組めそうな感じだったのもある。参加にセキュリティ知識が必要かはわりとコースに依存すると思う。

  3. チューターさんに教えてもらいました。他にもzoomのチャットをdiscordに貼り付けてくれて見直せるようにしてくれたりしました。助かりました。

  4. 敵対的サンプルは、手法自体を指すこともあるし、その手法で作られた細工されたデータのことをいうこともある。講義では画像で実習したが、自然言語などでも研究あり。

  5. モデルを学習させたいわけではないので、重みは固定し、入力を攻撃に最適なものに近づけていくことに注意。

  6. これらの画像と数値はもう一回ハンズオンを動かすのもめんどくさかったのでコンペ中のものを掲載しています。

  7. 人力で†二分探索†を最初の方はしてしまったが、たまたま成功してしまうと詰め切れていない攻撃で権利を使ってしまうので、epsを上から時間が許す限り徐々に下げていく方が賢かったなーと。まあ本質的ではない。

  8. チューターさんがコンペ終了後にリンクPGDとAEsの違いをくれました。