
Metasploit para aprendizado de máquina.
Note que deep-pwning em seu estado atual está em lugar nenhum perto da maturidade ou conclusão. Ele deve ser experimentado, expandido e estendido por você. Só assim podemos ajudá-lo a se tornar verdadeiramente o kit de teste de penetração para modelos de aprendizado de máquina estatístico.
Pesquisadores descobriram que é surpreendentemente trivial enganar um modelo de aprendizado de máquina (classificador, clusterizador, regressor, etc.) para que tome decisões objetivamente erradas. Esse campo de pesquisa é chamado de Aprendizado de Máquina Adversarial. Não é exagero afirmar que qualquer atacante motivado pode contornar qualquer sistema de aprendizado de máquina, dado tempo e informações suficientes. No entanto, essa questão é frequentemente ignorada quando arquitetos e engenheiros projetam e constroem sistemas de aprendizado de máquina. As consequências são preocupantes quando esses sistemas são colocados em uso em cenários críticos, como nas áreas médica, de transporte, financeira ou relacionadas à segurança.
Portanto, ao avaliar a eficácia de aplicações que usam aprendizado de máquina, sua maleabilidade em um ambiente adversarial deve ser medida juntamente com a precisão e o recall do sistema.
Esta ferramenta foi lançada no DEF CON 24 em Las Vegas, agosto de 2016, durante uma palestra intitulada Machine Duping 101: Pwning Deep Learning Systems.
Este framework é construído sobre o Tensorflow, e muitos dos exemplos incluídos neste repositório são exemplos modificados do Tensorflow obtidos do repositório GitHub do Tensorflow.
Todos os exemplos e código incluídos implementam redes neurais profundas, mas podem ser usados para gerar imagens adversariais para classificadores com tarefas similares que não são implementados com redes neurais profundas. Isso ocorre devido ao fenômeno de 'transferibilidade' no aprendizado de máquina, que foi exposto de forma magistral por Papernot et al. neste artigo. Isso significa que amostras adversariais criadas com um modelo de rede neural profunda A podem ser capazes de enganar outro modelo de rede neural profunda B de estrutura diferente, bem como algum outro modelo SVM C.
Esta figura retirada do artigo mencionado (Papernot et al.) mostra a porcentagem de classificação incorreta adversarial bem-sucedida para um modelo fonte (usado para gerar a amostra adversarial) em um modelo alvo (no qual a amostra adversarial é testada).
Deep-pwning é modularizado em vários componentes para minimizar a repetição de código. Devido à natureza extremamente diferente das tarefas de classificação potenciais, a iteração atual do código é otimizada para classificar imagens e frases (usando vetores de palavras).
Estes são os módulos de código que compõem a iteração atual do Deep-pwning:
Drivers
Os drivers são o ponto de execução principal do código. É aqui que você pode conectar os diferentes módulos e componentes, e onde pode injetar mais customizações nos processos de geração adversarial.
Models
É aqui que estão localizadas as implementações reais do modelo de aprendizado de máquina. Por exemplo, a definição do modelo lenet5 fornecida está na função model() dentro de lenet5.py. Ela define a rede da seguinte forma:
-> 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 contém o código que gera a saída adversarial para os modelos. A função run() definida em cada uma dessas classes advgen recebe um input_dict, que contém várias operações de tensor predefinidas para o modelo de aprendizado de máquina definido no Tensorflow. Se o modelo para o qual você está gerando a amostra adversarial for conhecido, as variáveis no dict de entrada devem ser baseadas nessa definição de modelo. Caso contrário, se o modelo for desconhecido (geração em caixa-preta), um modelo substituto deve ser usado/implementado, e essa definição de modelo deve ser usada. As variáveis que precisam ser passadas são as variáveis placeholder do tensor de entrada e os rótulos (frequentemente referidos como -> entrada e -> rótulos), a saída do modelo (frequentemente referida como ), e os dados de teste reais e rótulos nos quais as imagens adversariais serão baseadas.
Estes são os diretórios de recursos relevantes para a aplicação:
Checkpoints
O Tensorflow permite carregar um modelo parcialmente treinado para retomar o treinamento, ou carregar um modelo totalmente treinado na aplicação para avaliação ou realização de outras operações. Todos esses 'checkpoints' salvos são armazenados neste diretório de recursos.
Data
Este diretório armazena todos os dados de entrada em qualquer formato que a aplicação driver aceite.
Output
Este é o diretório de saída para toda a saída da aplicação, incluindo imagens adversariais geradas.
Siga as instruções para instalar o tensorflow encontradas aqui https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html que permitirão escolher o binário do tensorflow para instalar.
$ pip install -r requirements.txt
Para restaurar a partir de um checkpoint previamente treinado. (configuração em config/mnist.conf)
$ cd dpwn
$ python mnist_driver.py --restore_checkpoint
Para treinar do zero. (note que qualquer checkpoint anterior localizado na pasta especificada na configuração será sobrescrito)
$ cd dpwn
$ python mnist_driver.py
defense ao projeto para exemplos de algumas defesas propostas na literaturasentiment drivermodels (+ exemplo que os utiliza)Note que dpwn requer Tensorflow 0.8.0. O Tensorflow 0.9.0 introduz algumas
(emprestado do incrível Repositório Requests por kennethreitz)
AUTHORS.md.Há tanto trabalho impressionante de tantos pesquisadores de aprendizado de máquina e segurança que contribuíram direta ou indiretamente para este projeto, e inspiraram este framework. Esta é uma lista inconclusiva de recursos que foram usados ou referenciados de uma forma ou de outra:
xy_y_convConfig
Configurações da aplicação.
Utils
Utilitários diversos que não pertencem a nenhum outro lugar. Estes incluem funções auxiliares para ler dados, lidar com entradas de fila do Tensorflow, etc.