• Home
  • Chimica
  • Astronomia
  • Energia
  • Natura
  • Biologia
  • Fisica
  • Elettronica
  • Utilizzo dell'apprendimento automatico per rilevare le vulnerabilità del software

    Credito:Markus Spiske su Unsplash

    Un team di ricercatori della società di ricerca e sviluppo Draper e della Boston University ha sviluppato un nuovo sistema di rilevamento delle vulnerabilità su larga scala utilizzando algoritmi di apprendimento automatico, che potrebbe aiutare a scoprire le vulnerabilità del software in modo più rapido ed efficiente.

    Gli hacker e gli utenti malintenzionati escogitano costantemente nuovi modi per compromettere sistemi e applicazioni IT, tipicamente sfruttando le vulnerabilità della sicurezza del software. Le vulnerabilità del software sono piccoli errori commessi dai programmatori che hanno sviluppato un sistema in grado di propagarsi rapidamente, soprattutto attraverso software open source o attraverso il riutilizzo e l'adattamento del codice.

    Ogni anno, migliaia di queste vulnerabilità sono segnalate pubblicamente al database Common Vulnerabilities and Exposures (CVE), mentre molti altri vengono individuati e corretti internamente dagli sviluppatori. Se non sono adeguatamente affrontati, queste vulnerabilità possono essere sfruttate dagli aggressori, spesso con effetti devastanti, come dimostrato in molti recenti exploit di alto profilo, come il bug Heartbleed e il cryptoworm ramsomware WannaCry.

    In genere, gli strumenti esistenti per analizzare i programmi possono rilevare solo un numero limitato di potenziali errori, che si basano su regole predefinite. Però, l'uso diffuso di repository open source ha aperto nuove possibilità per lo sviluppo di tecniche che potrebbero rivelare modelli di vulnerabilità del codice.

    I ricercatori di Draper e Boston hanno sviluppato un nuovo strumento di rilevamento delle vulnerabilità che utilizza l'apprendimento automatico per il rilevamento automatico delle vulnerabilità nel codice sorgente C/C++, che ha già mostrato risultati promettenti.

    Il team ha compilato un ampio set di dati con milioni di funzioni open source e lo ha etichettato utilizzando tre strumenti di analisi statica (pre-runtime), vale a dire Clang, Cppcheck e Flawfinder, che sono progettati per identificare potenziali exploit. Il loro set di dati includeva milioni di esempi a livello di funzione di codice C e C++ tratti dalla SATEIV Juliet Test Suite, distribuzione Debian Linux, e repository Git pubblici su GitHub.

    "Utilizzando questi set di dati, abbiamo sviluppato uno strumento di rilevamento delle vulnerabilità veloce e scalabile basato su un apprendimento approfondito della rappresentazione delle funzionalità che interpreta direttamente il codice sorgente lessato, " hanno scritto i ricercatori nel loro articolo.

    Poiché i linguaggi di programmazione sono in qualche modo simili ai linguaggi umani, i ricercatori hanno progettato una tecnica di rilevamento delle vulnerabilità che utilizza l'elaborazione del linguaggio naturale (NLP), una strategia di intelligenza artificiale che consente ai computer di comprendere e interpretare il linguaggio umano.

    "Sfruttiamo approcci di estrazione delle funzionalità simili a quelli utilizzati per la classificazione del sentimento delle frasi con reti neurali convoluzionali (CNN) e reti neurali ricorrenti (RNN) per la classificazione della vulnerabilità delle sorgenti a livello di funzione, " hanno spiegato i ricercatori nel loro articolo.

    Hanno combinato la PNL con la foresta casuale (RM); un potente algoritmo che crea un insieme di alberi decisionali da sottoinsiemi selezionati casualmente del set di dati di addestramento e quindi li unisce insieme, generalmente ottenendo previsioni più accurate.

    I ricercatori hanno testato il loro strumento sia su pacchetti software reali che sul set di dati di riferimento NIST STATE IV.

    "I nostri risultati dimostrano che l'apprendimento approfondito della rappresentazione delle funzionalità sul codice sorgente è un approccio promettente per il rilevamento automatico delle vulnerabilità del software, " hanno scritto. "Abbiamo applicato una varietà di tecniche ML ispirate a problemi di classificazione nel dominio del linguaggio naturale, li abbiamo messi a punto per la nostra applicazione, e ha ottenuto i migliori risultati complessivi utilizzando le funzionalità apprese tramite la rete neurale convoluzionale e classificate con un algoritmo ad albero di insieme".

    Finora, il loro lavoro si è concentrato sul codice C/C++, ma il loro metodo potrebbe essere applicato anche a qualsiasi altro linguaggio di programmazione. Hanno scelto specificamente di creare un lexer C/C++ personalizzato in quanto ciò produrrebbe una rappresentazione semplice e generica del codice sorgente della funzione, che è l'ideale per la formazione sull'apprendimento automatico.

    © 2018 Tech Xplore




    © Scienza https://it.scienceaq.com