
Metasploit para aprendizaje automático.
Tenga en cuenta que deep-pwning en su estado actual está lejos de madurez o completitud. Está pensado para que experimentes con él, lo expandas y lo extiendas. Solo así podremos ayudarlo a convertirse realmente en el kit de herramientas de pruebas de penetración para modelos de aprendizaje automático estadístico.
Los investigadores han descubierto que es sorprendentemente trivial engañar a un modelo de aprendizaje automático (clasificador, agrupador, regresor, etc.) para que tome decisiones objetivamente incorrectas. Este campo de investigación se llama Aprendizaje Automático Adversario. No es una exageración afirmar que cualquier atacante motivado puede eludir cualquier sistema de aprendizaje automático, dada suficiente información y tiempo. Sin embargo, este problema a menudo se pasa por alto cuando los arquitectos e ingenieros diseñan y construyen sistemas de aprendizaje automático. Las consecuencias son preocupantes cuando estos sistemas se ponen en uso en escenarios críticos, como en los campos médico, de transporte, financiero o relacionados con la seguridad.
Por lo tanto, al evaluar la eficacia de las aplicaciones que utilizan aprendizaje automático, su maleabilidad en un entorno adversario debe medirse junto con la precisión y el recall del sistema.
Esta herramienta fue lanzada en DEF CON 24 en Las Vegas, agosto de 2016, durante una charla titulada Machine Duping 101: Pwning Deep Learning Systems.
Este framework está construido sobre Tensorflow, y muchos de los ejemplos incluidos en este repositorio son ejemplos de Tensorflow modificados obtenidos del repositorio de Tensorflow en GitHub.
Todos los ejemplos y código incluidos implementan redes neuronales profundas, pero se pueden usar para generar imágenes adversarias para clasificadores con tareas similares que no estén implementados con redes neuronales profundas. Esto se debe al fenómeno de 'transferibilidad' en el aprendizaje automático, del cual hablaron expertamente Papernot et al. en este artículo. Esto significa que las muestras adversarias creadas con un modelo DNN A pueden engañar a otro modelo DNN B con estructura diferente, así como a algún otro modelo SVM C.
Esta figura tomada del artículo mencionado anteriormente (Papernot et al.) muestra el porcentaje de clasificaciones erróneas adversarias exitosas para un modelo fuente (utilizado para generar la muestra adversaria) en un modelo objetivo (sobre el cual se prueba la muestra adversaria).
Deep-pwning está modularizado en varios componentes para minimizar la repetición de código. Debido a la naturaleza muy diferente de las posibles tareas de clasificación, la iteración actual del código está optimizada para clasificar imágenes y frases (usando vectores de palabras).
Estos son los módulos de código que componen la iteración actual de Deep-pwning:
Drivers
Los drivers son el punto de ejecución principal del código. Aquí es donde puedes unir los diferentes módulos y componentes, y donde puedes inyectar más personalizaciones en los procesos de generación adversaria.
Models
Aquí es donde se encuentran las implementaciones reales de los modelos de aprendizaje automático. Por ejemplo, la definición del modelo lenet5 proporcionado se encuentra en la función model() dentro de lenet5.py. Define la red de la siguiente manera:
-> Input
-> Convolutional Layer 1
-> Max Pooling Layer 1
-> Convolutional Layer 2
-> Max Pooling Layer 2
-> Dropout Layer
-> Softmax Layer
-> Output
Adversarial (advgen)
Este módulo contiene el código que genera la salida adversaria para los modelos. La función run() definida en cada una de estas clases advgen toma un input_dict, que contiene varias operaciones de tensor predefinidas para el modelo de aprendizaje automático definido en Tensorflow. Si el modelo para el que estás generando la muestra adversaria es conocido, las variables en el dict de entrada deben basarse en esa definición del modelo. De lo contrario, si el modelo es desconocido (generación de caja negra), se debe usar/implementar un modelo sustituto, y se debe usar esa definición del modelo. Las variables que deben pasarse son las variables placeholder del tensor de entrada y las etiquetas (a menudo denominadas -> entrada y -> etiquetas), la salida del modelo (a menudo denominada ), y los datos de prueba reales y las etiquetas en las que se basarán las imágenes adversarias.
Estos son los directorios de recursos relevantes para la aplicación:
Checkpoints
Tensorflow te permite cargar un modelo parcialmente entrenado para reanudar el entrenamiento, o cargar un modelo completamente entrenado en la aplicación para evaluación o realización de otras operaciones. Todos estos 'checkpoints' guardados se almacenan en este directorio de recursos.
Data
Este directorio almacena todos los datos de entrada en el formato que la aplicación controladora acepte.
Output
Este es el directorio de salida para toda la salida de la aplicación, incluidas las imágenes adversarias generadas.
Siga las instrucciones para instalar tensorflow que se encuentran aquí https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html, lo que le permitirá elegir el binario de tensorflow a instalar.
$ pip install -r requirements.txt
Para restaurar desde un checkpoint previamente entrenado. (configuración en config/mnist.conf)
$ cd dpwn
$ python mnist_driver.py --restore_checkpoint
Para entrenar desde cero. (tenga en cuenta que cualquier checkpoint anterior ubicado en la carpeta especificada en la configuración se sobrescribirá)
$ cd dpwn
$ python mnist_driver.py
defense al proyecto para ejemplos de algunas defensas propuestas en la literaturasentiment drivermodels (+ ejemplo que los use)Tenga en cuenta que dpwn requiere Tensorflow 0.8.0. Tensorflow 0.9.0 introduce algunos
(tomado del increíble repositorio Requests de kennethreitz)
AUTHORS.md.Hay tanto trabajo impresionante de tantos investigadores de aprendizaje automático y seguridad que contribuyeron directa o indirectamente a este proyecto e inspiraron este framework. Esta es una lista no concluyente de recursos que se utilizaron o referenciaron de una u otra manera:
xy_y_convConfig
Configuraciones de la aplicación.
Utils
Utilidades misceláneas que no pertenecen a ningún otro lugar. Estas incluyen funciones auxiliares para leer datos, manejar entradas de cola de Tensorflow, etc.