
Metasploit per l'apprendimento automatico.
Si noti che deep-pwning nel suo stato attuale è lontano dall'essere maturo o completo. È pensato per essere sperimentato, ampliato ed esteso da te. Solo allora potremo davvero aiutarlo a diventare il toolkit di penetration testing per modelli statistici di machine learning di riferimento.
I ricercatori hanno scoperto che è sorprendentemente banale ingannare un modello di machine learning (classificatore, clusterer, regressore, ecc.) portandolo a prendere decisioni oggettivamente errate. Questo campo di ricerca è chiamato Adversarial Machine Learning. Non è un'esagerazione affermare che qualsiasi attaccante motivato può bypassare qualsiasi sistema di machine learning, date sufficienti informazioni e tempo. Tuttavia, questo problema viene spesso trascurato quando architetti e ingegneri progettano e costruiscono sistemi di machine learning. Le conseguenze sono preoccupanti quando questi sistemi vengono utilizzati in scenari critici, come nei settori medico, dei trasporti, finanziario o legati alla sicurezza.
Pertanto, quando si valuta l'efficacia di applicazioni che utilizzano il machine learning, la loro malleabilità in un contesto avversario dovrebbe essere misurata insieme alla precisione e al richiamo del sistema.
Questo strumento è stato rilasciato al DEF CON 24 a Las Vegas, nell'agosto 2016, durante un intervento intitolato Machine Duping 101: Pwning Deep Learning Systems.
Questo framework è costruito su Tensorflow, e molti degli esempi inclusi in questo repository sono esempi Tensorflow modificati ottenuti dal repository Tensorflow su GitHub.
Tutti gli esempi e il codice inclusi implementano reti neurali profonde, ma possono essere utilizzati per generare immagini adversariali per classificatori con compiti simili che non sono implementati con reti neurali profonde. Questo è dovuto al fenomeno della 'trasferibilità' nel machine learning, che Papernot et al. hanno brillantemente spiegato in questo articolo. Ciò significa che campioni adversariali creati con un modello DNN A potrebbero essere in grado di ingannare un altro modello DNN B con struttura diversa, così come qualche altro modello SVM C.
Questa figura tratta dal suddetto articolo (Papernot et al.) mostra la percentuale di misclassificazione adversarial di successo per un modello sorgente (usato per generare il campione adversarial) su un modello target (su cui il campione adversarial viene testato).
Deep-pwning è modularizzato in diversi componenti per ridurre al minimo la ripetizione del codice. A causa della natura molto diversa dei potenziali compiti di classificazione, l'iterazione corrente del codice è ottimizzata per classificare immagini e frasi (usando vettori di parole).
Questi sono i moduli di codice che compongono l'iterazione corrente di Deep-pwning:
Driver
I driver sono il punto di esecuzione principale del codice. Qui è dove puoi collegare i diversi moduli e componenti, e dove puoi iniettare più personalizzazioni nei processi di generazione adversarial.
Modelli
Qui si trovano le implementazioni effettive dei modelli di machine learning. Ad esempio, la definizione del modello lenet5 fornita si trova nella funzione model() all'interno di lenet5.py. Definisce la rete come segue:
-> Input
-> Convolutional Layer 1
-> Max Pooling Layer 1
-> Convolutional Layer 2
-> Max Pooling Layer 2
-> Dropout Layer
-> Softmax Layer
-> Output
Adversarial (advgen)
Questo modulo contiene il codice che genera output adversariali per i modelli. La funzione run() definita in ciascuna di queste classi advgen prende un input_dict, che contiene diverse operazioni tensoriali predefinite per il modello di machine learning definito in Tensorflow. Se il modello per cui stai generando il campione adversarial è noto, le variabili nel dizionario di input dovrebbero basarsi su quella definizione del modello. Altrimenti, se il modello è sconosciuto (generazione black box), dovrebbe essere utilizzato/implementato un modello sostitutivo, e quella definizione del modello dovrebbe essere usata. Le variabili che devono essere passate sono le variabili placeholder dei tensori di input e le etichette (spesso indicate come -> input e -> etichette), l'output del modello (spesso indicato come ), e i dati di test effettivi e le etichette su cui si baseranno le immagini adversariali.
Queste sono le directory delle risorse rilevanti per l'applicazione:
Checkpoints
Tensorflow permette di caricare un modello parzialmente addestrato per riprendere l'addestramento, o caricare un modello completamente addestrato nell'applicazione per la valutazione o l'esecuzione di altre operazioni. Tutti questi 'checkpoint' salvati sono memorizzati in questa directory di risorse.
Data
Questa directory memorizza tutti i dati di input nel formato che l'applicazione driver accetta.
Output
Questa è la directory di output per tutti gli output dell'applicazione, incluse le immagini adversariali generate.
Segui le istruzioni per installare tensorflow che si trovano qui https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html, che ti permetteranno di scegliere il binario tensorflow da installare.
$ pip install -r requirements.txt
Per ripristinare da un checkpoint precedentemente addestrato. (configurazione in config/mnist.conf)
$ cd dpwn
$ python mnist_driver.py --restore_checkpoint
Per addestrare da zero. (nota che eventuali checkpoint precedenti nella cartella specificata nella configurazione verranno sovrascritti)
$ cd dpwn
$ python mnist_driver.py
defense al progetto per esempi di alcune difese proposte in letteraturasentiment drivermodels (+ esempio che li utilizza)Nota che dpwn richiede Tensorflow 0.8.0. Tensorflow 0.9.0 introduce alcune
(tratto dal fantastico Repository Requests di kennethreitz)
AUTHORS.md.C'è così tanto lavoro impressionante da molti ricercatori di machine learning e sicurezza che hanno contribuito direttamente o indirettamente a questo progetto, e che hanno ispirato questo framework. Questa è una lista non conclusiva delle risorse che sono state utilizzate o citate in un modo o nell'altro:
xy_y_convConfig
Configurazioni dell'applicazione.
Utils
Utilità varie che non appartengono ad altre categorie. Queste includono funzioni di supporto per leggere dati, gestire input di code Tensorflow, ecc.