Pre-Model Representation Failures in GNN-Based Smart Contract Vulnerability Detection
Dit artikel presenteert een foutenanalyse van op GNN gebaseerde detectoren voor kwetsbaarheden in smart contracts, waarbij wordt onthuld dat kritieke gebreken in de graafrepresentatielaag — zoals hardcoded variabelen-whitelists, structurele ambiguïteiten en ontbrekende semantische knopen — kunnen ervoor zorgen dat identieke code verschillende grafen produceert en volledig exploiteerbare contracten als veilig worden geclassificeerd, waardoor daaropvolgende modelverbeteringen ineffectief worden.
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
In de digitale wereld van gedecentraliseerde financiën beweegt geld zich via zelfuitvoerende computerprogramma's die smart contracts worden genoemd. Deze programma's leven op een blockchain, een openbaar grootboek dat elke transactie registreert, en ze zijn ontworpen om echte activa te beheren zonder menselijke tussenpersonen. Omdat deze contracten waardevolle fondsen beheren, kan één verborgen fout leiden tot onmiddellijke en onomkeerbare diefstal. Om dit te voorkomen, hebben onderzoekers geautomatiseerde systemen ontwikkeld die code scannen om zwakheden te vinden voordat ze worden misbruikt. Een populaire aanpak maakt gebruik van een type kunstmatige intelligentie dat bekend staat als een graph neural network. Om te begrijpen hoe dit werkt, stel je voor dat je een complex stuk code omzet in een kaart van verbonden punten en lijnen, waarbij de punten de onderdelen van het programma vertegenwoordigen en de lijnen laten zien hoe ze met elkaar interageren. De computer bestudeert deze kaart vervolgens om te beslissen of het programma veilig of gevaarlijk is. De hoop is dat door naar de structuur van de code te kijken in plaats van deze regel voor regel te lezen, deze systemen subtiele vallen kunnen opsporen die mensen zouden kunnen missen.
Een team van onderzoekers van Carnegie Mellon University Africa besloot de fundering van deze aanpak te testen. Ze richtten zich op een specif으로 systeem genaamd GNNSCVulDetector, dat veel wordt gebruikt om een gevaarlijk gebrek te vinden dat bekend staat als reentrancy. Dit gebrek treedt op wanneer een programma geld verzendt voordat het zijn eigen registers bijwerkt, waardoor een dief het systeem kan misleiden om meer uit te betalen dan het zou moeten. De onderzoekers testten niet hoe goed de computer leert of hoe snel hij denkt. In plaats daarvan onderzochten ze de stap die plaatsvindt voordat de computer de data überhaupt ziet: het proces van het omzetten van de broncode naar de kaart. Ze wilden weten of de kaart accuraat reflecteerde wat de code die het moest vertegenwoordigen, werkelijk was. Hun onderzoek onthulde een schokkende waarheid: het proces van het maken van de kaart zelf was op manieren defect die geen enkele hoeveelheid training kon oplossen.
Het eerste probleem dat ze ontdekten, was dat het systeem gemakkelijk werd misleid door eenvoudige wijzigingen in de code. De onderzoekers namen een bekende kwetsbare contract en veranderden simpelweg de onderdelen ervan: ze veranderden de naam van het contract zelf, de namen van de functies en de namen van de variabelen die het geld bevatten. Ze voegden ook regels code toe die niets deden, enkel om het bestand te vervuilen. In een normale wereld zouden deze wijzigingen het programma er anders uit laten zien, zelfs als de gevaarlijke logica hetzelfde bleef. Echter, toen de onderzoekers zowel de originele als de gewijzigde versies in het systeem invoerden, produceerde de computer kaarten die identiek waren tot op de laatste byte. Het systeem kon het verschil niet zien tussen de twee. Dit betekent dat een aanvaller de beveiligingscontrole kan omzeilen door simpelweg variabelen te hernoemen, zonder dat hij hoeft te weten hoe de detector werkt of welke data waarop is getraind. Het systeem was blind voor de werkelijke structuur van de code en zag slechts een rigide patroon van namen.
Door dieper te graven, ontdekten de onderzoekers waarom dit gebeurde. De tool die de kaart bouwt, leest en begrijpt de code niet zoals een menselijke programmeur dat doet. In plaats daarvan vertrouwt het op een hardgecodeerde lijst van zevenenveertig specifieke variabelenamen die het mag herkennen. Als de code een naam gebruikt die op deze lijst staat, maakt de tool een knoop (node) op de kaart. Als de naam niet op de lijst staat, negeert de tool deze of maakt een generieke placeholder aan. De onderzoekers testten dit door vier verschillende contracten te maken die allemaal exact hetzelfde gevaarlijke gebrek hadden, maar verschillende namen gebruikten voor de geldvariabelen. Wanneer de variabelenaam perfect overeenkwam met de lijst, zag de kaart er normaal uit. Wanneer de naam er iets van afweek, veranderde de kaart op verwarrende wijze. Wanneer de naam volledig nieuw was en niet op de lijst stond, raakte de kaart gedegradeerd en verloor het belangrijke details. In het ergste geval, wanneer er helemaal geen namen overeenkwamen, fabriceerde de tool delen van de kaart die niet in de originele code bestonden, waardoor een structuur werd gecreëerd op basis van niets anders dan zijn eigen interne regels. Dit betekende dat de kwaliteit van de kaart volledig afhing van de vraag of de programmeur toevallig een van de zevenenveertig goedgekeurde namen gebruikte.
De tweede grote fout betrof een specifiek deel van de kaart dat de aanvaller vertegenwoordigt. In het ontwerp van het systeem is er een knoop bedoeld om de externe oproeper te representeren—de externe entiteit die de aanval triggert. Voor een reentrancy-gebrek moet deze externe oproeper aanwezig zijn in de kaart. De onderzoekers ontdekten dat voor het meest beroemde voorbeeld van een kwetsbaar contract in de literatuur, deze knoop volledig ontbrak. De tool slaagde er niet in de verbinding te tekenen tussen de aanvaller en de kwetsbare functie, zelfs terwijl de code dit duidelijk liet zien. Dit was geen beperking van het ontwerp van de kaart, aangezien andere contracten in de trainingsdata wel deze verbinding vertoonden. Het was een inconsistentie in hoe de tool besloot de kaart op te bouwen. Omdat de verbinding ontbrak, had de computer geen enkele manier om het aanvallingspatroon te zien, ook al was het patroon gewoon aanwezig in de code.
Om te bewijzen dat dit ontbrekende stukje de oorzaak was van het falen van het systeem, bouwden de onderzoekers een minimaal, doelgericht contract dat een volledig exploiteerbaar reentrancy-gebrek bevatte. Ze gebruikten een variabelenaam die bekend stond als zijnde op de goedgekeurde lijst, om er zeker van te zijn dat het eerste probleem met het hernoemen niet zou interfereren. Ze voerden dit contract in het systeem in. Het resultaat was een duidelijke misclassificatie: het systeem bestempelde het gevaarlijke contract als veilig. De reden was simpel en direct. Omdat de tool er niet in slaagde de verbinding tussen de externe oproeper en de kwendebare functie te tekenen, miste de kaart het cruciale signaal dat nodig is om de dreiging te identificeren. De computer zat niet fout in zijn berekening; hij werkte simpelweg met een onvolledig beeld. De informatie die nodig was om de juiste beslissing te nemen, was weggegooid voordat de computer überhaupt begon na te denken.
Deze bevindingen suggereren dat de hoge nauwkeurigheidscijfers die in eerdere studies werden gerapporteerd, misleidend zijn omdat ze werden gemeten onder omstandigheden die deze gebreken niet blootlegden. De systemen presteerden goed omdat de testdata toevallig de specifieke namen en patronen gebruikte die de tool kon herkennen. In de echte wereld, waar code wordt geschreven met andere naamgevingsconventies en structuren, kunnen deze systemen stilzwijgend falen. De onderzoekers benadrukken dat het verbeteren van het kunstmatige intelligentiemodel zelf dit probleem niet zal oplossen. Geen enkele hoeveelheid betere training of meer data kan een probleem oplossen waarbij de kaart in de eerste plaats onjuist is getekend. De oplossing vereist het veranderen van de manier waarop de code in een kaart wordt omgezet, waarbij men beweegt van eenvoudige naamherkenning naar een dieper begrip van wat de code daadwerkelijk doet. Totdat de fundering is hersteld, blijven de beveiligingssystemen die erop gebouwd zijn kwetsbaar voor precies de aanvallen die ze bedoeld zijn te voorkomen.
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.