← Nieuwste papers
💻 computer science

From TinyGo to gc Compiler: Extending Zorya's Concolic Framework to Real-World Go Binaries

Dit artikel presenteert een uitbreiding van het Zorya-concolische-uitvoeringskader om multi-threaded Go-binarieën, gecompileerd met de standaard gc-compiler, te ondersteunen, waardoor het detecteren van kwetsbaarheden uit de echte wereld in productieprojecten zoals Kubernetes en Go-Ethereum mogelijk wordt door thread-staten te herstellen, runtime-preemptie te neutraliseren en overlay-paadanalyse toe te passen.

Oorspronkelijke auteurs: Karolina Gorna, Nicolas Iooss, Yannick Seurin, Rida Khatoun, Keith Makan

Gepubliceerd 2026-05-06
📖 5 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Karolina Gorna, Nicolas Iooss, Yannick Seurin, Rida Khatoun, Keith Makan

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 een veiligheidsinspecteur bent die probeert verborgen valstrikken te vinden in een enorme, complexe fabriek. Deze fabriek is een stuk software geschreven in de Go-programmeertaal.

Lange tijd hadden veiligheidsinspecteurs een speciaal hulpmiddel genaamd Zorya dat uitstekend was in het inspecteren van kleine, eenvoudige fabrieken (zogenaamde "TinyGo"-binaries). Maar de fabrieken uit de echte wereld die worden gebruikt door grote bedrijven zoals Kubernetes en Ethereum zijn enorm, chaotisch en draaien tegelijkertijd op vele arbeiders (threads). Het oude Zorya-hulpmiddel kon deze grote fabrieken niet aan; het raakte in de war door het lawaai en de complexiteit.

Dit artikel gaat over het upgraden van Zorya zodat het eindelijk deze fabrieken uit de echte wereld met meerdere arbeiders in Go kan inspecteren. Hier is hoe ze dat deden, eenvoudig uitgelegd:

1. Het Probleem: De "Drukkende Fabriek"

De standaard Go-compiler (genaamd gc) bouwt software die een heel team van onzichtbare arbeiders (OS-threads) opstart om het werk te beheren. Het heeft ook een "verkeersregelaar" (de runtime) die op elk moment elke arbeider kan stoppen om iemand anders de voorrang te geven.

  • Het Oude Hulpmiddel: Zorya werd gebruikt om rustige fabrieken met één arbeider te inspecteren. Toen het probeerde drukke fabrieken met meerdere arbeiders te bekijken, kon het niet uitzoeken wie wat deed of waar de arbeiders stonden.
  • Het Doel: Zorya slim genoeg maken om het chaos te pauzeren, een momentopname van elke arbeider te nemen en vervolgens het werk zorgvuldig te inspecteren zonder verdwaald te raken.

2. De Oplossing: Drie Nieuwe Superkrachten

De auteurs gaven Zorya drie nieuwe trucs om de grote fabrieken aan te kunnen:

  • De "Tijdsreis-Momentopname" (Herstellen van Thread-staten):
    Stel je voor dat de fabriek op volle snelheid draait. In plaats van te proberen de arbeiders in real-time te volgen (wat te snel en verwarrend is), drukt de nieuwe Zorya op "pauze", maakt een hoogwaardige foto van de handen, gereedschappen en locatie van elke enkele arbeider en slaat deze op. Wanneer het zijn inspectie start, laadt het deze foto's weer in zodat het precies weet waar iedereen was voordat het begon. Hierdoor kan het het lawaai van de "verkeersregelaar" negeren en zich richten op de daadwerkelijke code.

  • De "Wat-als" Spiegel (Overlay Path-analyse):
    Normaal gesproken, wanneer een arbeider een splitsing in de weg bereikt, kiest hij één pad en loopt die uit. Het andere pad wordt genegeerd.

    • De Oude Manier: Zorya controleerde alleen het pad dat de arbeider daadwerkelijk nam.
    • De Nieuwe Manier: Zorya creëert een "spookspiegel" van de fabriek. Wanneer de arbeider het linkerpad kiest, stuurt Zorya een "spookarbeider" het rechterpad op voor slechts een paar stappen. Het controleert of dat pad een valstrik heeft (zoals een gat in de vloer of een kapot gereedschap) zonder het daadwerkelijk te bewandelen. Als het spook een valstrik vindt, geeft Zorya alarm. Dit heet Copy-on-Write: het kopieert alleen de delen van de fabriek die het spook aanraakt, wat enorm veel energie bespaart.
  • De "Stille Valstrik"-Detector:
    Sommige valstrikken maken geen luid geluid (zoals een crash of een panic). Bijvoorbeeld, een getal kan zo groot worden dat het "omslaat" en weer klein wordt, waardoor de wiskunde stilzwijgend kapot gaat. Andere tools missen deze omdat ze alleen zoeken naar harde crashes. Zorya gebruikt een superslim wiskundig brein (genaamd een SMT-oplosser) om de wiskunde in zijn hoofd te doen. Het kan zeggen: "Hé, als dit getal groter wordt, zal het de wiskunde stilzwijgend kapotmaken", zelfs als het programma niet crasht.

3. De Test: Echte Bugs Vinden

Het team testte deze opgegradueerde Zorya op 11 echte beveiligingsgaten die werden gevonden in beroemde software zoals Kubernetes, Go-Ethereum en CoreDNS. Ze vergeleken Zorya met andere tools zoals statische checkers (die code lezen als een grammaticacontrole), fuzzers (die willekeurige data op de software gooien) en andere beveiligingsscanners.

De Resultaten:

  • Zorya vond 7 van de 11 bugs.
  • De "Stille" Overwinning: Een van de bugs die Zorya vond, was een "stille integer overflow". Het was een rekenfout die het programma niet liet crashen en geen alarm deed afgaan. Geen enkele andere tool vond deze bug tenzij iemand hen handmatig precies had verteld waar ze naar moesten zoeken. Zorya vond het automatisch.
  • De Afweging: Zorya is trager dan de tools die "willekeurige data gooien" (fuzzers). Waar een fuzzer misschien binnen seconden een crash vindt, duurt het ongeveer 16 minuten voor Zorya om een bug te vinden. Echter, Zorya heeft geen mens nodig om een specifiek testschript voor elke functie te schrijven; het analyseert het binary-bestand direct.

4. De Conclusie

Dit artikel toont aan dat we nu geavanceerde "spookarbeider"-inspecties kunnen gebruiken om diepe, verborgen beveiligingsgaten te vinden in complexe, multi-threaded Go-software. Hoewel het iets langer duurt dan andere methoden, kan het "stille" bugs vinden die andere tools volledig missen, waardoor onze digitale infrastructuur veiliger wordt.

Kortom: Ze leerden een beveiligingsrobot hoe het een chaotische fabriek moet pauzeren, een momentopname van de arbeiders moet nemen en de paden moet controleren die niemand anders bewandelt, waardoor het succesvol verborgen valstrikken vond die voorheen onzichtbaar waren.

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.

Probeer Digest →