
Metasploit pour l’apprentissage automatique.
Notez que deep-pwning dans son état actuel est loin d'être mature ou complet. Il est conçu pour être expérimenté, enrichi et étendu par vous. Ce n'est qu'ainsi que nous pourrons l'aider à devenir la véritable boîte à outils de test de pénétration pour les modèles d'apprentissage statistique.
Des chercheurs ont découvert qu'il est étonnamment trivial de tromper un modèle d'apprentissage automatique (classifieur, clusterizer, régresseur, etc.) pour lui faire prendre des décisions objectivement erronées. Ce domaine de recherche s'appelle l'Apprentissage Automatique Adversarial. Il n'est pas exagéré d'affirmer que tout attaquant motivé peut contourner n'importe quel système d'apprentissage automatique, avec suffisamment d'informations et de temps. Cependant, ce problème est souvent négligé lorsque les architectes et ingénieurs conçoivent et construisent des systèmes d'apprentissage automatique. Les conséquences sont inquiétantes lorsque ces systèmes sont mis en œuvre dans des scénarios critiques, comme dans les domaines médical, des transports, financier ou lié à la sécurité.
Par conséquent, lorsqu'on évalue l'efficacité des applications utilisant l'apprentissage automatique, leur malléabilité dans un cadre adversarial devrait être mesurée en même temps que la précision et le rappel du système.
Cet outil a été publié au DEF CON 24 à Las Vegas, en août 2016, lors d'une conférence intitulée Machine Duping 101: Pwning Deep Learning Systems.
Ce framework est construit sur Tensorflow, et la plupart des exemples inclus dans ce dépôt sont des exemples Tensorflow modifiés obtenus à partir du dépôt GitHub Tensorflow.
Tous les exemples et le code inclus implémentent des réseaux de neurones profonds, mais ils peuvent être utilisés pour générer des images adversariales pour des classifieurs similaires qui ne sont pas implémentés avec des réseaux de neurones profonds. Cela est dû au phénomène de 'transferabilité' en apprentissage automatique, que Papernot et al. ont expliqué de manière experte dans cet article. Cela signifie que des échantillons adversariaux conçus avec un modèle DNN A peuvent tromper un autre modèle DNN B de structure distincte, ainsi qu'un autre modèle SVM C.
Cette figure tirée de l'article susmentionné (Papernot et al.) montre le pourcentage de mauvaises classifications adversariales réussies pour un modèle source (utilisé pour générer l'échantillon adversarial) sur un modèle cible (sur lequel l'échantillon adversarial est testé).
Deep-pwning est modulaire en plusieurs composants pour minimiser la répétition de code. En raison de la nature très différente des tâches de classification potentielles, l'itération actuelle du code est optimisée pour la classification d'images et de phrases (en utilisant des vecteurs de mots).
Voici les modules de code qui composent l'itération actuelle de Deep-pwning :
Pilotes (Drivers)
Les pilotes sont le point d'exécution principal du code. C'est ici que vous pouvez relier les différents modules et composants, et où vous pouvez injecter plus de personnalisations dans les processus de génération adversarial.
Modèles
C'est ici que se trouvent les implémentations réelles des modèles d'apprentissage automatique. Par exemple, la définition du modèle lenet5 fournie se trouve dans la fonction model() au sein de lenet5.py. Elle définit le réseau comme suit :
-> Entrée
-> Couche convolutive 1
-> Couche de max pooling 1
-> Couche convolutive 2
-> Couche de max pooling 2
-> Couche de dropout
-> Couche Softmax
-> Sortie
Adversarial (advgen)
Ce module contient le code qui génère la sortie adversarial pour les modèles. La fonction run() définie dans chacune de ces classes advgen prend un input_dict, qui contient plusieurs opérations de tenseur prédéfinies pour le modèle d'apprentissage automatique défini dans Tensorflow. Si le modèle pour lequel vous générez l'échantillon adversarial est connu, les variables dans le dictionnaire d'entrée doivent être basées sur cette définition de modèle. Sinon, si le modèle est inconnu (génération boîte noire), un modèle de substitution doit être utilisé/implémenté, et cette définition de modèle doit être utilisée. Les variables à passer sont les variables d'espace réservé du tenseur d'entrée et les étiquettes (souvent appelées x -> entrée et y_ -> étiquettes), la sortie du modèle (souvent appelée y_conv), ainsi que les données et étiquettes de test réelles sur lesquelles les images adversariales seront basées.
Config
Configurations de l'application.
Utils
Utilitaires divers qui n'ont pas leur place ailleurs. Ceux-ci incluent des fonctions d'aide pour lire les données, gérer les entrées de file d'attente Tensorflow, etc.
Voici les répertoires de ressources pertinents pour l'application :
Checkpoints
Tensorflow vous permet de charger un modèle partiellement entraîné pour reprendre l'entraînement, ou de charger un modèle entièrement entraîné dans l'application pour évaluation ou pour effectuer d'autres opérations. Tous ces 'checkpoints' sauvegardés sont stockés dans ce répertoire de ressources.
Data
Ce répertoire stocke toutes les données d'entrée dans le format que l'application pilote accepte.
Output
C'est le répertoire de sortie pour toutes les sorties de l'application, y compris les images adversariales générées.
Veuillez suivre les instructions pour installer tensorflow trouvées ici https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html qui vous permettront de choisir le binaire tensorflow à installer.
$ pip install -r requirements.txt
Pour restaurer à partir d'un checkpoint préalablement entraîné. (configuration dans config/mnist.conf)
$ cd dpwn
$ python mnist_driver.py --restore_checkpoint
Pour entraîner à partir de zéro. (notez que tout checkpoint précédent situé dans le dossier spécifié dans la configuration sera écrasé)
$ cd dpwn
$ python mnist_driver.py
defense au projet pour des exemples de certaines défenses proposées dans la littératuresentiment drivermodels (+ exemple qui les utilise)Notez que dpwn nécessite Tensorflow 0.8.0. Tensorflow 0.9.0 introduit quelques
(emprunté au formidable dépôt Requests par kennethreitz)
AUTHORS.md.Il y a tellement de travaux impressionnants de tant de chercheurs en apprentissage automatique et en sécurité qui ont directement ou indirectement contribué à ce projet et ont inspiré ce framework. Voici une liste non exhaustive des ressources qui ont été utilisées ou référencées d'une manière ou d'une autre :