FunFuzz: An LLM-Powered Evolutionary Fuzzing Framework
FunFuzz is een multi-eiland evolutionair fuzzing-framework dat gebruikmaakt van Large Language Models met adaptieve, feedback-gestuurde prompts en periodieke migratie van kandidaten om promptgevoeligheid en steekproefvariatie te overwinnen, waardoor het superieure compilerdekking bereikt en meer unieke fout-activerende invoer vindt dan eerdere door LLM-aangedreven benaderingen.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://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
Stel je voor dat je probeert verborgen valstrikken te vinden in een enorm, complex doolhof. Dit doolhof is een compiler — de software die door mensen geschreven code vertaalt in instructies die een computer daadwerkelijk kan uitvoeren. Als de compiler een bug heeft, kan hij crashen of verkeerde antwoorden geven, wat alles wat erbovenop is gebouwd, kan doen falen.
Decennialang hebben experts "fuzzers" gebruikt om deze bugs te vinden. Denk aan een fuzzer als een robot die miljoenen willekeurige testgevallen op het doolhof gooit om te zien of er iets kapotgaat. Maar moderne compilers zijn zo complex dat willekeurig gooien vaak de diepe, lastige hoekjes mist.
Onlangs zijn mensen begonnen met het gebruik van AI (Large Language Models) om deze testgevallen te schrijven. De AI is slim en kan code schrijven die er zeer realistisch uitziet. Het artikel stelt echter dat het gebruik van AI op deze manier een probleem heeft: het raakt in een patstelling. Als je een AI vraagt om code te schrijven, kan het blijven genereren van dezelfde vijf soorten zinnen, keer op keer, alleen met andere woorden. Het stopt met het verkennen van nieuwe delen van het doolhof.
Hier komt FunFuzz.
De auteurs hebben een nieuw systeem ontwikkeld, genaamd FunFuzz, om dit op te lossen. Hieronder wordt uitgelegd hoe het werkt, met behulp van een eenvoudige analogie:
1. De "Multi-Island"-strategie
Stel je voor dat je een team schatzoekers hebt dat op zoek is naar een verloren stad.
- De oude manier (Enkele AI): Je stuurt één jager eropuit. Die begint te lopen, vindt een pad en blijft dat volgen. Uiteindelijk raakt hij verveeld of blijft hij in een lus hangen, en stopt hij met het vinden van nieuwe dingen.
- De FunFuzz-methode: Je stuurt vijf aparte teams (zogenaamde "eilanden") eropuit. Elk team begint in een volledig ander deel van de jungle, met een andere kaart en een ander doel.
- Team A krijgt de opdracht te zoeken naar "oude ruïnes".
- Team B krijgt de opdracht te zoeken naar "verborgen grotten".
- Team C krijgt de opdracht te zoeken naar "rivieroverstekingen".
Omdat ze starten met verschillende instructies, lopen ze niet allemaal hetzelfde pad. Ze verkennen gelijktijdig verschillende delen van het doolhof.
2. Het "Migratie"-systeem
Elke paar uur komen de teams bij elkaar rond een kampvuur.
- Als Team A een echt cool, zeldzaam artefact vindt (een programma dat de compiler laat crashen of iets vreemds laat doen), houden ze het niet voor zichzelf. Ze delen een kopie met Team B en Team C.
- Cruciaal: Ze sturen Team B niet uit hun kamp. Ze voegen het nieuwe artefact gewoon toe aan de collectie van Team B. Op deze manier kan Team B dat nieuwe idee gebruiken om dieper te graven, zonder de vooruitgang die ze al hadden, te verliezen.
Dit voorkomt dat de hele groep in dezelfde lus blijft hangen, terwijl de beste ontdekkingen zich toch kunnen verspreiden.
3. De "Fitness Score" (Hoe ze weten wat goed is)
Hoe weet de AI welk testgeval beter is?
- Het systeem compileert de code die de AI heeft geschreven.
- Het telt hoeveel nieuwe regels van de eigen interne code van de compiler door dat testgeval zijn aangeraakt.
- Als een testgeval de compiler ertoe brengt een deel van zichzelf te bekijken dat het nog nooit eerder heeft gezien, krijgt dat testgeval een hoge score.
- Het systeem kiest de tests met de hoogste scores om de volgende generatie tests te "kweken", waardoor het zoeken voortdurend wordt verfijnd.
Wat hebben ze gevonden?
De onderzoekers testten FunFuzz tegen andere top-tools (zoals Fuzz4All, dat AI gebruikt maar slechts één team, en Kitten, dat miljoenen willekeurige mutaties gooit) op twee grote compilers: GCC en Clang.
- Betere dekking: FunFuzz vond meer "nieuw terrein" binnen de compilers dan de andere tools. Het ging dieper en verder.
- Meer bugs: Tijdens 24-uurs tests vond FunFuzz 119 unieke bugs die ervoor zorgden dat de compilers crashten of intern faalden.
- Reële impact: Ontwikkelaars bevestigden 80 van deze bugs.
- Efficiëntie: Hoewel FunFuzz niet meer totale programma's genereerde dan de snelste tools, waren de programma's die het wel genereerde van veel hogere kwaliteit. Het vond meer bugs per uur.
De conclusie
FunFuzz is als een slimme schatzoektocht die een team van ontdekkingsreizigers gebruikt in plaats van een enkele hardloper. Door de teams gescheiden te houden maar hen hun beste vondsten te laten delen, voorkomt het dat ze vast komen te zitten in saaie lussen en graaft het veel dieper in de complexe mechanica van moderne compilers, waardoor het bugs vindt die andere methoden missen.
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.