Directed Symbolic Execution for Path Feasibility Analysis]{Directed Symbolic Execution for Path Feasibility Analysis in Software Security Testing
Dit artikel presenteert een gerichte symbolische executiemethode die statische beveiligingsanalyse verbetert door interprocedurale padhaalbaarheid efficiënt te verifiëren via geautomatiseerde symbolisering en limieten voor loopiteratie, waardoor de precisie aanzienlijk wordt verbeterd terwijl de recall behouden blijft op real-world benchmarks.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
Softwarebeveiliging is een constante strijd tegen verborgen gebreken, vergelijkbaar met een stadsplanner die probeert te garanderen dat elke brug en tunnel in een uitgestrekte metropool een aardbeving kan weerstaan. Om dit te doen, gebruiken ingenieurs geautomatiseerde tools die code scannen zonder deze daadwerkelijk uit te voeren, waarbij ze elke mogelijke route in kaart brengen die een programma zou kunnen nemen. Deze kaarten, bekend als control flow graphs, zijn ongelooflijk gedetailleerd en laten zien hoe een programma van de ene instructie naar de andere springt. Deze kaarten zijn echter vaak té grondig; ze benadrukken paden die op papier gevaarlijk lijken, maar in de echte wereld fysiek onmogelijk te bewandelen zijn. Dit creëert een vloedgolf aan valse alarmen, waardoor menselijke experts tijd verspillen aan het onderzoeken van spoken in de machine. De uitdaging is dan om een systeem te bouwen dat snel onderscheid kan maken tussen een pad dat theoretisch mogelijk is en een pad dat daadwerkelijk uitvoerbaar is, zonder verloren te raken in de enorme hoeveelheid mogelijkheden.
Een team onderzoekers aan de Russisch-Armeense Universiteit heeft een nieuwe methode ontwikkeld om dit probleem op te lossen, gebruikmakend van een techniek genaamd directed symbolic execution. Stel je een reiziger voor die probeert te verifiëren of er een specifieke route door een complexe stad bestaat. Een standaardbenadering zou zijn om ontdekkingsreizigers uit te sturen om elke straat in de stad te bewandelen om te zien waar ze toe leiden, een taak die eeuwig zou duren en het team zou overbelasten. In plaats daarvan werkt de methode van de onderzoekers als een rondleiding. Het neemt een specifiek gerapporteerd pad van een beveiligingsscanner en stuurt een virtuele ontdekkingsreiziger aan om alleen dat pad te volgen, waarbij alle andere straten die niet naar de bestemming leiden, worden genegeerd. Deze "gerichte" benadering stelt het systeem in staat om te controleren of het gerapporteerde gevaar echt is, zonder energie te verspillen aan irrelevante omwegen.
De kern van dit werk ligt in de manier waarop het systeem omgaat met het onbekende. In echte software werken programma's vaak met gegevens die nog niet zijn ingesteld, of ze roepen functies aan uit externe bibliotheken waar de interne code verborgen is. Een traditionele ontdekkingsreiziger zou vast kunnen lopen of opgeven wanneer hij geconfronteerd wordt met deze lege plekken. Het systeem van de onderzoekers is echter ontworpen om deze onbekenden te behandelen als flexibele variabelen. Als een programma een geheugenlocatie leest die nog niet is ingevuld, wijst het systeem deze een symbolische waarde toe, waardoor het elke mogelijke uitkomst die waarde kan aannemen, kan verkennen. Het doet hetzelfde voor de resultaten van externe functies en complexe pointer-argumenten, die fungeren als dynamische adressen die afhankelijk van de situatie naar verschillende plaatsen kunnen wijzen. Door deze gaten automatisch in te vullen met mogelijkheden in plaats van concrete gissingen, kan het systeem het pad door de code volgen, zelfs wanneer het volledige beeld niet zichtbaar is.
Een andere grote hindernis bij het navigeren door software is de loop, een sectie code die zichzelf herhaalt. In een echt programma kan een loop een paar keer of miljoenen keren draaien, en in een symbolische analyse kan het een ontdekkingsreiziger in een oneindige cyclus vangen. De onderzoekers introduceerden een strategie om dit aan te pakken door een limiet in te stellen op hoe vaak het systeem een loop zal volgen voordat het wordt gedwongen te stoppen. Dit is geen willekeurige afkapbaarheid; het systeem legt zorgvuldig vast wat er tijdens die iteraties gebeurde en springt vervolgens naar het punt waar de loop van nature zou eindigen. Dit stelt de analyse in staat om voorbij de repetitieve sectie te gaan zonder vast te lopen, waardoor de tool het einde van het te onderzoeken pad kan bereiken.
Om hun methode te testen, paste het team deze toe op echte software en een standaard collectie testgevallen die bekend staat als de Juliet suite. Ze controleerden eerst hun systeem tegen paden die zijn geëxtraheerd uit de GNU Coreutils, een fundamentele set hulpprogramma's voor het Linux-besturingssysteem. Het systeem verifieerde succesvol dat 95,3% van deze real-world paden inderdaad haalbaar was, wat bewees dat het complexe, verweven code kan afhandelen. Ze integreerden hun methode vervolgens met een bestaande beveiligingstool genaamd MLH. Vóór deze toevoeging signaleerde de tool 666 valse alarmen uit duizenden rapporten. Na het toepassen van de nieuwe pad-haalbaarheidsanalyse verdwenen deze valse alarmen volledig, terwijl de tool nog steeds elke echte kwetsbaarheid die hij eerder had gevonden, wist te vangen. Dit betekende dat de precisie van de beveiligingscontrole sprong van 56,6% naar 100% op de geteste subset, zonder verlies in het vermogen om echte bugs te vinden.
De onderzoekers vergeleken hun aanpak ook met KLEEF, een andere gespecialiseerde tool die ontworpen is voor soortgelijke taken. Wanneer getest op rapporten gegenereerd door twee andere grote beveiligingsscanners, Infer en Clang Static Analyzer, waren de resultaten scherp. KLEEF had aanzienlijke problemen en slaagde er niet in om de meeste van de true positive rapporten te verifiëren, waardoor de prestatiescores drastelijk daalden. In contrast hiermee behield de nieuwe methode de prestaties van de oorspronkelijke scanners of verbeterde deze zelfs licht. Het verifieerde succesvol alle echte kwetsbaarheden die de Infer-tool rapporteerde en handelde het overgrote deel van de Clang-rapporten, wat aantoont dat het robuust genoeg is om met industriële code te werken.
De bevindingen suggereren dat deze gerichte benadering een praktische manier biedt om de ruis in softwarebeveiligingstesten op te ruimen. Door zich alleen te concentreren op de paden die er toe doen en automatisch om te gaan met de complexiteit van geheugen en externe functies, filtert de methode onmogelijke scenario's weg die menselijke tijd verspillen. Hoewel het systeem een berekende afweging maakt door het aantal loop-iteraties te beperken om de voortgang te waarborgen, laten de resultaten zien dat dit niet ten koste gaat van het missen van echte gevaren. Het werk biedt een duidelijk pad naar het betrouwbaarder maken van geautomatiseerde beveiligingstools, zodat wanneer er een waarschuwing wordt gegeven, het een echte dreiging is die het onderzoeken waard is.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.