
機械学習のためのMetasploit。
現在の状態のdeep-pwningは、成熟や完成には程遠い ことに注意してください。これは、あなたが実験し、拡張し、発展させていくことを意図しています。そうすることで初めて、真に 統計的機械学習モデルのための侵入テストツールキット となるのです。
研究者たちは、機械学習モデル(分類器、クラスタリング器、回帰器など)をだまして客観的に誤った決定をさせることが驚くほど簡単であることを発見しました。この研究分野は 敵対的機械学習 と呼ばれています。十分な情報と時間があれば、意欲的な攻撃者はあらゆる機械学習システムを回避できると言っても過言ではありません。しかし、この問題は、アーキテクチャやエンジニアが機械学習システムを設計・構築する際に見落とされがちです。これらのシステムが医療、交通、金融、セキュリティ関連などの重要なシナリオで使用される場合、その結果は憂慮すべきものです。
したがって、機械学習を使用するアプリケーションの有効性を評価する際には、敵対的環境での適応性を、システムの精度と再現率とともに測定する必要があります。
このツールは、2016年8月にラスベガスで開催されたDEF CON 24での講演 Machine Duping 101: Pwning Deep Learning Systems で公開されました。
このフレームワークは Tensorflow 上に構築されており、このリポジトリに含まれる多くのサンプルは Tensorflow GitHubリポジトリ から取得した修正版のTensorflowサンプルです。
含まれるすべてのサンプルとコードは ディープニューラルネットワーク を実装していますが、深層ニューラルネットワークを使用していない同様のタスクの分類器に対しても敵対的画像を生成するために使用できます。これは機械学習における「転移性」と呼ばれる現象によるもので、Papernotらが この論文 で巧みに説明しています。これは、DNNモデル A で作成された敵対的サンプルが、別の構造を持つDNNモデル B や、さらには別のSVMモデル C をも欺く可能性があることを意味します。
前述の論文(Papernotら)から引用したこの図は、ソースモデル(敵対的サンプルの生成に使用)がターゲットモデル(敵対的サンプルがテストされる)に対して敵対的分類ミスに成功した割合を示しています。
Deep-pwningはコードの重複を最小限に抑えるために、いくつかのコンポーネントにモジュール化されています。潜在的な分類タスクの性質が大きく異なるため、現在のコードのイテレーションは 画像 と フレーズ(単語ベクトルを使用)の分類に最適化されています。
これらが、現在のDeep-pwningのイテレーションを構成するコードモジュールです。
ドライバ
ドライバ はコードの メイン 実行ポイントです。ここで異なるモジュールとコンポーネントを結び付け、敵対的生成プロセスにさらにカスタマイズを注入できます。
モデル
ここに実際の機械学習モデルの実装が配置されています。例えば、提供されている lenet5 モデル定義は、lenet5.py 内の model() 関数にあります。ネットワークを次のように定義しています。
-> 入力
-> 畳み込み層 1
-> 最大プーリング層 1
-> 畳み込み層 2
-> 最大プーリング層 2
-> ドロップアウト層
-> ソフトマックス層
-> 出力
敵対的 (advgen)
このモジュールには、モデルの敵対的出力を生成するコードが含まれています。これらの各 advgen クラスで定義された run() 関数は、Tensorflowで定義された機械学習モデルのためのいくつかの事前定義されたテンソル演算を含む input_dict を受け取ります。敵対的サンプルを生成しているモデルが既知の場合、入力dictの変数はそのモデル定義に基づく必要があります。そうでなく、モデルが未知の場合(ブラックボックス生成)、代用モデルを使用/実装し、そのモデル定義を使用する必要があります。渡す必要がある変数は、入力テンソルプレースホルダ変数とラベル(多くの場合 x -> 入力、y_ -> ラベル)、モデル出力(多くの場合 y_conv)、および敵対的画像の基礎となる実際のテストデータとラベルです。
設定
アプリケーション設定。
ユーティリティ
他のどこにも属さない雑多なユーティリティです。データの読み込み、Tensorflowキュー入力の処理などのヘルパー関数が含まれます。
これらは、アプリケーションに関連するリソースディレクトリです。
チェックポイント
Tensorflowでは、部分的に訓練されたモデルをロードして訓練を再開したり、完全に訓練されたモデルをアプリケーションにロードして評価やその他の操作を実行したりできます。これらの保存された「チェックポイント」はすべてこのリソースディレクトリに保存されます。
データ
このディレクトリには、ドライバアプリケーションが受け入れる形式のすべての入力データが保存されます。
出力
これはすべてのアプリケーション出力の出力ディレクトリであり、生成された敵対的画像も含まれます。
以下の手順に従ってTensorflowをインストールしてください。https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html にあります。インストールするTensorflowバイナリを選択できます。
$ pip install -r requirements.txt
以前に訓練されたチェックポイントから復元する場合。(設定は config/mnist.conf)
$ cd dpwn
$ python mnist_driver.py --restore_checkpoint
スクラッチから訓練する場合。(設定で指定されたフォルダにある以前のチェックポイントは上書きされることに注意)
$ cd dpwn
$ python mnist_driver.py
defense モジュールをプロジェクトに追加感情ドライバ で事前学習済みのword2vecモデルのサポートを追加モデル にSVMとロジスティック回帰のサポートを追加(それらを使用する例も含む)dpwnにはTensorflow 0.8.0が必要です。Tensorflow 0.9.0では、いくつかの
(素晴らしい Requestsリポジトリ by kennethreitz から借用)
AUTHORS.md に自分を追加するのを忘れずに。このプロジェクトに直接的または間接的に貢献し、このフレームワークにインスピレーションを与えた、数多くの機械学習およびセキュリティ研究者による非常に印象的な研究があります。これは、何らかの形で使用または参照されたリソースの不完全なリストです。