
Metasploit für maschinelles Lernen.
Beachten Sie, dass deep-pwning in seinem aktuellen Zustand bei weitem nicht reif oder fertig ist. Es soll von Ihnen experimentiert, erweitert und ausgebaut werden. Nur dann können wir ihm wirklich dabei helfen, das Penetrationstest-Toolkit für statistische maschinelle Lernmodelle zu werden, das es sein soll.
Forscher haben herausgefunden, dass es überraschend einfach ist, ein maschinelles Lernmodell (Klassifikator, Clusterer, Regressor usw.) dazu zu bringen, objektiv falsche Entscheidungen zu treffen. Dieses Forschungsfeld wird als Adversarial Machine Learning bezeichnet. Es ist keine Übertreibung zu behaupten, dass jeder motivierte Angreifer jedes System des maschinellen Lernens umgehen kann, sofern genügend Informationen und Zeit vorhanden sind. Dieses Problem wird jedoch oft übersehen, wenn Architekten und Ingenieure Systeme des maschinellen Lernens entwerfen und bauen. Die Folgen sind besorgniserregend, wenn diese Systeme in kritischen Szenarien wie im medizinischen, Transport-, Finanz- oder Sicherheitsbereich eingesetzt werden.
Daher sollte bei der Bewertung der Wirksamkeit von Anwendungen, die maschinelles Lernen nutzen, ihre Verformbarkeit in einer adversariellen Umgebung zusammen mit der Präzision und dem Recall des Systems gemessen werden.
Dieses Tool wurde auf der DEF CON 24 in Las Vegas im August 2016 während eines Vortrags mit dem Titel Machine Duping 101: Pwning Deep Learning Systems veröffentlicht.
Dieses Framework basiert auf Tensorflow, und viele der in diesem Repository enthaltenen Beispiele sind modifizierte Tensorflow-Beispiele aus dem Tensorflow GitHub Repository.
Alle enthaltenen Beispiele und Code implementieren tiefe neuronale Netze, können aber verwendet werden, um adversarielle Bilder für ähnlich aufgabenorientierte Klassifikatoren zu generieren, die nicht mit tiefen neuronalen Netzen implementiert sind. Dies liegt am Phänomen der 'Übertragbarkeit' im maschinellen Lernen, das Papernot et al. in diesem Paper fachkundig dargelegt haben. Das bedeutet, dass adversarielle Stichproben, die mit einem DNN-Modell A erstellt wurden, ein anderes, anders strukturiertes DNN-Modell B sowie ein SVM-Modell C täuschen können.
Diese aus dem genannten Paper (Papernot et al.) entnommene Abbildung zeigt den Prozentsatz erfolgreicher adversarieller Fehlklassifikationen für ein Quellmodell (verwendet zur Generierung der adversariellen Stichprobe) auf ein Zielmodell (auf dem die adversarielle Stichprobe getestet wird).
Deep-pwning ist modularisiert in mehrere Komponenten, um Code-Wiederholungen zu minimieren. Aufgrund der stark unterschiedlichen Art potenzieller Klassifikationsaufgaben ist die aktuelle Iteration des Codes optimiert für die Klassifizierung von Bildern und Phrasen (mittels Wortvektoren).
Dies sind die Code-Module, die die aktuelle Iteration von Deep-pwning ausmachen:
Treiber
Die Treiber sind der wichtigste Ausführungspunkt des Codes. Hier können Sie die verschiedenen Module und Komponenten miteinander verknüpfen und weitere Anpassungen in die adversariellen Generierungsprozesse einbringen.
Modelle
Hier befinden sich die tatsächlichen Implementierungen des maschinellen Lernmodells. Beispielsweise befindet sich die bereitgestellte lenet5-Modelldefinition in der model()-Funktion innerhalb von lenet5.py. Sie definiert das Netzwerk wie folgt:
-> Input
-> Convolutional Layer 1
-> Max Pooling Layer 1
-> Convolutional Layer 2
-> Max Pooling Layer 2
-> Dropout Layer
-> Softmax Layer
-> Output
Adversarial (advgen)
Dieses Modul enthält den Code, der adversarielle Ausgaben für die Modelle generiert. Die in jeder dieser advgen-Klassen definierte run()-Funktion nimmt ein input_dict entgegen, das mehrere vordefinierte Tensor-Operationen für das in Tensorflow definierte maschinelle Lernmodell enthält. Wenn das Modell, für das Sie die adversarielle Stichprobe generieren, bekannt ist, sollten die Variablen im Eingabe-Dict auf dieser Modelldefinition basieren. Wenn das Modell unbekannt ist (Black-Box-Generierung), sollte ein Ersatzmodell verwendet/implementiert werden, und diese Modelldefinition sollte verwendet werden. Variablen, die übergeben werden müssen, sind die Platzhaltervariablen des Eingabe-Tensors und die Labels (oft als -> Eingabe und -> Labels bezeichnet), die Modellausgabe (oft als bezeichnet) sowie die tatsächlichen Testdaten und Labels, auf denen die adversariellen Bilder basieren.
Dies sind die für die Anwendung relevanten Ressourcenverzeichnisse:
Checkpoints
Tensorflow ermöglicht es Ihnen, ein teilweise trainiertes Modell zu laden, um das Training fortzusetzen, oder ein vollständig trainiertes Modell in die Anwendung zur Bewertung oder Durchführung anderer Operationen zu laden. Alle diese gespeicherten 'Checkpoints' werden in diesem Ressourcenverzeichnis gespeichert.
Daten
Dieses Verzeichnis speichert alle Eingabedaten in dem Format, das die Treiberanwendung erwartet.
Ausgabe
Dies ist das Ausgabeverzeichnis für alle Anwendungsausgaben, einschließlich generierter adversarieller Bilder.
Bitte folgen Sie den Anweisungen zur Installation von Tensorflow unter https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html, wo Sie das zu installierende Tensorflow-Binary auswählen können.
$ pip install -r requirements.txt
Um von einem zuvor trainierten Checkpoint wiederherzustellen. (Konfiguration in config/mnist.conf)
$ cd dpwn
$ python mnist_driver.py --restore_checkpoint
Um von Grund auf zu trainieren. (Beachten Sie, dass alle vorherigen Checkpoints im im Konfigurationsordner angegebenen Ordner überschrieben werden)
$ cd dpwn
$ python mnist_driver.py
defense-Modul zum Projekt hinzufügen für Beispiele einiger in der Literatur vorgeschlagener Abwehrmaßnahmensentiment driver hinzufügenmodels hinzufügen (+ Beispiel zur Nutzung)Beachten Sie, dass dpwn Tensorflow 0.8.0 benötigt. Tensorflow 0.9.0 führt einige
(aus dem großartigen Requests Repository von kennethreitz entliehen)
AUTHORS.md hinzufügen.Es gibt so viel beeindruckende Arbeit von so vielen Forschern im Bereich maschinelles Lernen und Sicherheit, die direkt oder indirekt zu diesem Projekt beigetragen und dieses Framework inspiriert haben. Dies ist eine unvollständige Liste von Ressourcen, die auf die eine oder andere Weise verwendet oder referenziert wurden:
xy_y_convKonfiguration
Anwendungskonfigurationen.
Hilfsprogramme
Verschiedene Dienstprogramme, die nirgendwo anders hinpassen. Diese umfassen Hilfsfunktionen zum Lesen von Daten, zum Umgang mit Tensorflow-Warteschlangeneingaben usw.