Control Flow Graph Recovery for Dynamically Loaded Code via Symbolic Library Resolution
Dit artikel stelt een veilige, op symbolische uitvoering gebaseerde analysetechniek voor die speculatieve bibliotheekvoorbelading combineert met aangepaste haken om Control Flow Graphs te herstellen uit dynamisch geladen code, waarmee aanzienlijke verbeteringen in het herstel van knopen en randen ten opzichte van statische analyse worden bereikt, terwijl 100% precisie en recall bij bibliotheekdetectie worden behouden.
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 te begrijpen hoe een complexe machine werkt door naar de blauwdrukken ervan te kijken. In de wereld van computersoftware worden deze blauwdrukken Stuurbesturingsgrafieken (CFG's) genoemd. Ze in kaart brengen elke mogelijke route die een programma kan nemen, en tonen je waar de code als nächst naartoe gaat.
Echter, moderne software (en kwaadaardige programma's zoals malware) heeft een truc geleerd om hun blauwdrukken te verbergen. Ze maken gebruik van een techniek die dynamische laden wordt genoemd. In plaats van dat alle onderdelen vanaf het begin in de hoofdmachine zijn ingebouwd, houden ze sommige onderdelen in een vergrendelde kist en openen ze de kist en assembleren ze de onderdelen terwijl de machine draait.
Het probleem: De onzichtbare onderdelen
Traditionele softwareanalyse-tools zijn als statische architecten. Ze kijken naar de blauwdrukken op tafel en zeggen: "Hier is het pad." Maar als de machine tijdens het draaien een verborgen onderdeel uit een kist haalt, ziet de statische architect niets. Ze zien een lege ruimte waar een deur zou moeten zijn, dus kunnen ze het pad erdoorheen niet tekenen.
Dit is een enorm probleem voor beveiliging. Als je de verborgen paden niet kunt zien, kun je niet zeggen of de machine veilig is of dat het een valstrik is.
De oplossing: De "speculatieve" detective
De auteur van dit artikel, O. S. Mostovyi, bouwde een nieuw soort detective-tool. In plaats van alleen naar de blauwdrukken te kijken, handelt deze tool als een tijdsreizende simulator.
Zo werkt het, met een eenvoudige analogie:
- De simulatie (Symbolische uitvoering): Stel je een robot voor die de software kan draaien zonder deze echt aan te zetten. Het voert de code uit in een "wat-zou-als"-wereld. Het voert de gevaarlijke onderdelen niet daadwerkelijk uit; het denkt er alleen doorheen.
- De tweeledige architectuur: De tool heeft twee speciale zintuigen die samenwerken:
- Niveau 1 (De bibliothecaris): Dit deel ziet hoe de software om nieuwe onderdelen vraagt. Wanneer de software zegt: "Ik heb een bibliotheek uit het netwerk nodig" of "Ik heb een bestand uit een verborgen geheugenplek nodig", onderschept de bibliothecaris het verzoek. Zelfs als de software zegt dat de bestandsnaam versleuteld of verward is, gebruikt de tool wiskunde om uit te zoeken wat het bestand eigenlijk is. Vervolgens laadt het die bestanden "speculatief" in de simulatie, zodat de robot ze kan zien.
- Niveau 2 (De verkeersagent): Dit deel ziet de wegen die de robot aflegt. Wanneer de robot een kruispunt bereikt waar de richting afhangt van een verborgen variabele (zoals een geheim adres), controleert de verkeersagent de "wat-zou-als"-scenario's om te zien waar die weg eigenlijk naartoe leidt.
Hoe het lastige trucs aankan
Het artikel legt uit dat boeven veel manieren gebruiken om hun laadproces te verbergen. De tool is ontworpen om ze allemaal te vangen:
- Bestandsloze uitvoering: Sommige programma's maken bestanden die niet op de harde schijf bestaan, maar alleen in het RAM-geheugen leven. De tool ziet deze onzichtbare bestanden.
- Netwerkladen: Sommige programma's downloaden hun code van internet tijdens het draaien. De tool simuleert deze download om te zien wat er aankomt.
- Versleutelde namen: Als het programma zegt "Laad bestand [versleutelde code]", gebruikt de tool een wiskundige solver om de code te kraken en de echte bestandsnaam te vinden.
De resultaten: Het invullen van de ontbrekende kaart
Om dit te testen, creëerde de auteur 16 verschillende "valstrikken" (benchmarks) die verschillende verbergtechnieken gebruikten, van simpele trucs tot complexe, meerstapsversleuteling.
De resultaten waren zeer duidelijk:
- Volledigheid: De tool vond 29,8% meer paden (knopen) en 26,5% meer verbindingen (randen) dan traditionele statische tools. Het vulde de lege ruimtes op de kaart in.
- Nauwkeurigheid: Het was 100% accuraat. Elke keer dat het zei dat het een verborgen bibliotheek had gevonden, had het gelijk. Het gaf geen valse alarmen.
- Veiligheid: Omdat het gebruikmaakte van simulatie (symbolische uitvoering) in plaats van het daadwerkelijk draaien van de gevaarlijke code, kon het deze lastige programma's veilig analyseren zonder het risico dat de malware ontsnapte of schade veroorzaakte.
De beperkingen
De auteur is eerlijk over wat de tool nog niet kan:
- Het is een detective, geen tovenaar: Het kan de verborgen deuren vinden en de paden tekenen, maar het "ontdoet" complexe obsfuscatie (verwarring) niet automatisch om de code leesbaar te maken. Dat is nog steeds een moeilijk probleem.
- Platformbeperkingen: Het werkt momenteel goed voor Linux-systemen (specifiek ELF-bestanden) op bepaalde computerchips, maar nog niet voor Windows of andere besturingssystemen.
- Verborgen stromen: Het volgt data die expliciet beweegt, maar het mist soms data die op subtiele, indirecte manieren beweegt (zoals via complexe wiskundige functies).
Samenvatting
Kortom, dit artikel presenteert een nieuwe methode om software in kaart te brengen die zijn onderdelen verbergt totdat het draait. Door een "wat-zou-als"-simulator te combineren met een slim systeem dat verborgen bestandsverzoeken onderschept en oplost, kan de tool een complete kaart van het gedrag van het programma tekenen, waardoor paden zichtbaar worden die voorheen onzichtbaar waren voor beveiligingsanalisten. Het testte dit succesvol op 16 verschillende scenario's, wat bewijst dat het verborgen bibliotheken met perfecte nauwkeurigheid kan vinden.
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.