• Home
  • Química
  • Astronomia
  • Energia
  • Natureza
  • Biologia
  • Física
  • Eletrônicos
  • Usar aprendizado de máquina para detectar vulnerabilidades de software
    p Crédito:Markus Spiske em Unsplash

    p Uma equipe de pesquisadores da empresa de P&D Draper e da Universidade de Boston desenvolveu um novo sistema de detecção de vulnerabilidade em grande escala usando algoritmos de aprendizado de máquina, o que pode ajudar a descobrir vulnerabilidades de software de forma mais rápida e eficiente. p Hackers e usuários mal-intencionados estão constantemente descobrindo novas maneiras de comprometer sistemas e aplicativos de TI, normalmente explorando vulnerabilidades de segurança de software. Vulnerabilidades de software são pequenos erros cometidos pelos programadores que desenvolveram um sistema que pode se propagar rapidamente, especialmente por meio de software de código aberto ou por meio da reutilização e adaptação de código.

    p Todo ano, milhares dessas vulnerabilidades são relatadas publicamente ao banco de dados Common Vulnerabilities and Exposures (CVE), enquanto muitos outros são identificados e corrigidos internamente pelos desenvolvedores. Se eles não forem tratados de forma adequada, essas vulnerabilidades podem ser exploradas por invasores, frequentemente com efeitos devastadores, como comprovado em muitas explorações recentes de alto perfil, como o bug Heartbleed e o cryptoworm ramsomware WannaCry.

    p Geralmente, ferramentas existentes para analisar programas só podem detectar um número limitado de erros potenciais, que se baseiam em regras predefinidas. Contudo, o uso generalizado de repositórios de código aberto abriu novas possibilidades para o desenvolvimento de técnicas que podem revelar padrões de vulnerabilidade de código.

    p Os pesquisadores de Draper e Boston desenvolveram uma nova ferramenta de detecção de vulnerabilidade que usa aprendizado de máquina para detecção automatizada de vulnerabilidades no código-fonte C / C ++, que já mostrou resultados promissores.

    p A equipe compilou um grande conjunto de dados com milhões de funções de código aberto e o rotulou usando três ferramentas de análise estática (pré-execução), ou seja, Clang, Cppcheck e Flawfinder, que são projetados para identificar exploits potenciais. Seu conjunto de dados incluiu milhões de exemplos de nível de função de código C e C ++ extraídos do SATEIV Juliet Test Suite, Distribuição Debian Linux, e repositórios Git públicos no GitHub.

    p "Usando esses conjuntos de dados, desenvolvemos uma ferramenta de detecção de vulnerabilidade rápida e escalonável com base na aprendizagem de representação profunda de recursos que interpreta diretamente o código-fonte lexed, "escreveram os pesquisadores em seu artigo.

    p Como as linguagens de programação são em alguns aspectos semelhantes às linguagens humanas, os pesquisadores desenvolveram uma técnica de detecção de vulnerabilidade que usa processamento de linguagem natural (PNL), uma estratégia de IA que permite aos computadores compreender e interpretar a linguagem humana.

    p "Aproveitamos abordagens de extração de recursos semelhantes às usadas para classificação de sentimento de frase com redes neurais convolucionais (CNNs) e redes neurais recorrentes (RNNs) para classificação de vulnerabilidade de fonte em nível de função, "os pesquisadores explicaram em seu artigo.

    p Eles combinaram PNL com floresta aleatória (RM); um algoritmo poderoso que cria um conjunto de árvores de decisão a partir de subconjuntos selecionados aleatoriamente do conjunto de dados de treinamento e, em seguida, os mescla, geralmente alcançando previsões mais precisas.

    p Os pesquisadores testaram sua ferramenta em pacotes de software reais e no conjunto de dados de benchmark NIST STATE IV.

    p "Nossos resultados demonstram que o aprendizado profundo da representação de recursos no código-fonte é uma abordagem promissora para a detecção automatizada de vulnerabilidades de software, "eles escreveram." Aplicamos uma variedade de técnicas de ML inspiradas por problemas de classificação no domínio da linguagem natural, ajustou-os para nosso aplicativo, e alcançou os melhores resultados gerais usando recursos aprendidos por meio de rede neural convolucional e classificados com um algoritmo de árvore de conjunto. "

    p Até aqui, seu trabalho se concentrou em código C / C ++, mas seu método também pode ser aplicado a qualquer outra linguagem de programação. Eles escolheram especificamente criar um lexer C / C ++ personalizado, pois isso produziria uma representação simples e genérica do código-fonte da função, o que é ideal para treinamento de aprendizado de máquina. p © 2018 Tech Xplore




    © Ciência https://pt.scienceaq.com