science >> Wetenschap >  >> Elektronica

Machine learning gebruiken om kwetsbaarheden in software te detecteren

Krediet:Markus Spiske op Unsplash

Een team van onderzoekers van R&D-bedrijf Draper en Boston University heeft een nieuw grootschalig kwetsbaarheidsdetectiesysteem ontwikkeld met behulp van machine learning-algoritmen, die kunnen helpen om softwarekwetsbaarheden sneller en efficiënter te ontdekken.

Hackers en kwaadwillende gebruikers bedenken voortdurend nieuwe manieren om IT-systemen en applicaties te compromitteren, meestal door misbruik te maken van kwetsbaarheden in de softwarebeveiliging. Softwarekwetsbaarheden zijn kleine fouten gemaakt door de programmeurs die een systeem hebben ontwikkeld dat zich snel kan verspreiden, vooral door open-source software of door hergebruik en aanpassing van code.

Elk jaar, duizenden van deze kwetsbaarheden worden openbaar gerapporteerd aan de Common Vulnerabilities and Exposures-database (CVE), terwijl vele anderen intern worden opgemerkt en gepatcht door ontwikkelaars. Als ze niet adequaat worden aangepakt, deze kwetsbaarheden kunnen worden misbruikt door aanvallers, vaak met verwoestende gevolgen, zoals bewezen in veel recente spraakmakende exploits, zoals de Heartbleed-bug en de WannaCry ramsomware cryptoworm.

Over het algemeen, bestaande tools om programma's te analyseren kunnen slechts een beperkt aantal potentiële fouten detecteren, die zijn gebaseerd op vooraf gedefinieerde regels. Echter, het wijdverbreide gebruik van open-source repositories heeft nieuwe mogelijkheden geopend voor de ontwikkeling van technieken die kwetsbaarheidspatronen van code kunnen onthullen.

De onderzoekers van Draper en Boston hebben een nieuwe tool voor het detecteren van kwetsbaarheden ontwikkeld die machine learning gebruikt voor geautomatiseerde detectie van kwetsbaarheden in C/C++-broncode. die al veelbelovende resultaten heeft opgeleverd.

Het team stelde een grote dataset samen met miljoenen open-sourcefuncties en labelde deze met behulp van drie statische (pre-runtime) analysetools, namelijk Clang, Cppcheck en Flawfinder, die zijn ontworpen om potentiële exploits te identificeren. Hun dataset bevatte miljoenen voorbeelden op functieniveau van C- en C++-code uit de SATEIV Juliet Test Suite, Debian Linux-distributie, en openbare Git-opslagplaatsen op GitHub.

"Met behulp van deze datasets, we hebben een snelle en schaalbare tool voor het detecteren van kwetsbaarheden ontwikkeld op basis van diepgaand leren van functierepresentaties die lexed-broncode direct interpreteert, ’ schreven de onderzoekers in hun paper.

Aangezien programmeertalen in sommige opzichten vergelijkbaar zijn met menselijke talen, de onderzoekers ontwierpen een techniek voor het detecteren van kwetsbaarheden die gebruikmaakt van natuurlijke taalverwerking (NLP), een AI-strategie waarmee computers menselijke taal kunnen begrijpen en interpreteren.

"We maken gebruik van feature-extraction-benaderingen die vergelijkbaar zijn met die welke worden gebruikt voor zinsentimentclassificatie met convolutionele neurale netwerken (CNN's) en terugkerende neurale netwerken (RNN's) voor classificatie van bronkwetsbaarheid op functieniveau, " legden de onderzoekers uit in hun paper.

Ze combineerden NLP met random forest (RM); een krachtig algoritme dat een ensemble van beslissingsbomen creëert uit willekeurig geselecteerde subsets van de trainingsdataset en deze vervolgens samenvoegt, over het algemeen nauwkeurigere voorspellingen te bereiken.

De onderzoekers testten hun tool op zowel echte softwarepakketten als de NIST STATE IV-benchmarkdataset.

"Onze resultaten tonen aan dat diepgaand leren van functies op broncode een veelbelovende benadering is voor geautomatiseerde detectie van softwarekwetsbaarheid, ", schreven ze. "We hebben een verscheidenheid aan ML-technieken toegepast die zijn geïnspireerd op classificatieproblemen in het natuurlijke taaldomein, verfijnde ze voor onze toepassing, en behaalde de beste algemene resultaten met behulp van functies die zijn geleerd via een convolutief neuraal netwerk en geclassificeerd met een ensemble-boomalgoritme."

Tot dusver, hun werk was gericht op C/C++-code, maar hun methode kan ook worden toegepast op elke andere programmeertaal. Ze kozen er specifiek voor om een ​​aangepaste C/C++ lexer te maken, omdat dit een eenvoudige en generieke weergave van de functiebroncode zou opleveren. wat ideaal is voor machine learning-training.

© 2018 Tech Xplore