
Metasploit для машинного обучения.
Обратите внимание, что deep-pwning в его текущем состоянии далеко от зрелости или завершения. Он предназначен для того, чтобы вы могли с ним экспериментировать, расширять и дополнять его. Только тогда мы сможем помочь ему стать настоящим инструментом пентестинга для статистических моделей машинного обучения.
Исследователи обнаружили, что удивительно легко обмануть модель машинного обучения (классификатор, кластеризатор, регрессор и т.д.), заставив её принять объективно неверное решение. Эта область исследований называется Adversarial Machine Learning. Не будет преувеличением утверждать, что любой мотивированный злоумышленник может обойти любую систему машинного обучения, имея достаточно информации и времени. Однако эту проблему часто упускают из виду, когда архитекторы и инженеры проектируют и создают системы машинного обучения. Последствия вызывают беспокойство, когда такие системы используются в критических сценариях, например, в медицинской, транспортной, финансовой сферах или сферах, связанных с безопасностью.
Поэтому при оценке эффективности приложений, использующих машинное обучение, их податливость в условиях противостояния должна измеряться наряду с точностью и полнотой системы.
Этот инструмент был представлен на DEF CON 24 в Лас-Вегасе в августе 2016 года во время доклада под названием Machine Duping 101: Pwning Deep Learning Systems.
Этот фреймворк построен на основе Tensorflow, и многие включенные примеры в этом репозитории являются модифицированными примерами Tensorflow, взятыми из .
Все включенные примеры и код реализуют глубокие нейронные сети, но их можно использовать для создания состязательных изображений для аналогично настроенных классификаторов, которые не реализованы с помощью глубоких нейронных сетей. Это связано с феноменом 'переносимости' в машинном обучении, который был подробно описан Papernot и др. в этой статье. Это означает, что состязательные образцы, созданные с помощью модели DNN A, могут обмануть другую модель DNN B с иной структурой, а также некоторую модель SVM C.
Этот рисунок, взятый из упомянутой статьи (Papernot и др.), показывает процент успешной состязательной ошибочной классификации для исходной модели (используемой для генерации состязательного образца) на целевой модели (на которой тестируется состязательный образец).
Deep-pwning модуляризирован на несколько компонентов для минимизации повторения кода. Из-за сильно различающейся природы возможных задач классификации текущая версия кода оптимизирована для классификации изображений и фраз (с использованием векторов слов).
Вот модули кода, составляющие текущую версию Deep-pwning:
Драйверы
Драйверы являются основной точкой выполнения кода. Здесь вы можете связывать различные модули и компоненты и вносить дополнительные настройки в процессы генерации состязательных примеров.
Модели
Здесь находятся фактические реализации моделей машинного обучения. Например, предоставленное определение модели lenet5 находится в функции model() внутри lenet5.py. Она определяет сеть следующим образом:
-> Вход
-> Сверточный слой 1
-> Слой подвыборки (максимальный пулинг) 1
-> Сверточный слой 2
-> Слой подвыборки (максимальный пулинг) 2
-> Dropout слой
-> Softmax слой
-> Выход
Состязательный модуль (advgen)
Этот модуль содержит код для генерации состязательного вывода для моделей. Функция run(), определенная в каждом из этих классов advgen, принимает input_dict, который содержит несколько предопределенных тензорных операций для модели машинного обучения, определенной в Tensorflow. Если модель, для которой вы генерируете состязательный образец, известна, переменные во входном словаре должны основываться на определении этой модели. В противном случае, если модель неизвестна (генерация черного ящика), следует использовать/реализовать модель-заменитель, и следует использовать определение этой модели. Переменные, которые необходимо передать: переменные-заполнители входных тензоров и метки (часто обозначаемые как 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 в проект с примерами некоторых защит, предложенных в литературеsentiment drivermodels (с примером их использования)Обратите внимание, что dpwn требует Tensorflow 0.8.0. Tensorflow 0.9.0 вносит некоторые
(позаимствовано из замечательного Requests репозитория от kennethreitz)
AUTHORS.md.Существует множество впечатляющих работ многих исследователей в области машинного обучения и безопасности, которые прямо или косвенно внесли вклад в этот проект и вдохновили этот фреймворк. Вот неполный список ресурсов, которые были использованы или упомянуты в том или ином виде: