← Neueste Arbeiten
💻 computer science

RustGo: Fairly Directed Greybox Fuzzing for Enforcing Rust Memory Safety

RustGo ist ein neuer gerichteter Greybox-Fuzzer, der Rust-spezifische statische Analyse nutzt, um potenziell fehleranfällige Speicherzielbereiche automatisch zu identifizieren und irrelevante Ausführungspfade zu beschneiden, wodurch die Fuzzing-Effizienz im Vergleich zu bestehenden Ansätzen signifikant verbessert und unbekannte Schwachstellen in unsicherem Rust-Code entdeckt werden.

Ursprüngliche Autoren: Dongyeon Yu (Korea University), Jiun Min (Korea University), Yewan Na (Ulsan National Institute of Science and Technology), Mijung Kim (Ulsan National Institute of Science and Technology), Taegyu Kim
Veröffentlicht 2026-08-07
📖 7 Min. Lesezeit🧠 Tiefgang

Ursprüngliche Autoren: Dongyeon Yu (Korea University), Jiun Min (Korea University), Yewan Na (Ulsan National Institute of Science and Technology), Mijung Kim (Ulsan National Institute of Science and Technology), Taegyu Kim (The Pennsylvania State University), Yuseok Jeon (Korea University)

Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen

Stellen Sie sich vor, Sie sind ein Detektiv, der versucht, einen einzigen, winzigen Fehler in einer riesigen, belebten Stadt zu finden. In der Welt der Software ist diese Stadt ein Programm, und der Fehler ist ein „Memory-Bug“ – ein Fehler, bei dem das Programm versucht, Daten zu greifen, zu verwenden oder wegzuwerfen, die es nicht haben sollte, was zu einem Absturz oder einem Hack führt. Seit Jahrzehnten ist die populärste Methode, um diese Bugs zu finden, das „Fuzzing“. Stellen Sie sich Fuzzing wie das Werfen von Millionen zufälliger, chaotischer Schneebälle gegen die Stadtmauern vor, um zu sehen, ob irgendeiner ein Fenster einschlägt. Normalt funktioniert das bei älteren Sprachen gut, aber es gibt einen Haken: Es ist unglaublich ineffizient. Man wirft vielleicht 99 Schneebälle gegen die stabile, unzerbrechliche Vordertür, nur um das eine schwache Fenster in der Hintergasse zu finden.

Hier kommt Rust ins Spiel, eine moderne Programmiersprache, die wie ein extrem strenger Sicherheitswachmann agiert. Die Regeln von Rust sind so gut, dass 90 % der Stadt, die sie baut, praktisch kugelsicher sind; der Wachmann stellt sicher, dass die meisten „Fenster“ (Speicherbereiche) standardmäßig fest verschlossen sind. Um jedoch bestimmte komplexe Dinge zu bauen, erlaubt Rust den Entwicklern, ein kleines, spezielles Tor namens „unsafe code“ zu öffnen. Dies ist der einzige Ort, an dem die strengen Regeln gelockert werden, und es ist der einzige Ort, an dem sich ein Memory-Bug verstecken kann. Das Problem ist, dass bestehende „Schneeballwerfer“-Werkzeuge dies nicht wissen. Sie werfen weiterhin Schneebälle gegen die 90 % der Stadt, die bereits sicher sind, und verschwenden dabei Zeit und Energie, während sie die wenigen gefährlichen Stellen hinter dem speziellen Tor übersehen. Dieses Paper stellt ein neues Detektiv-Werkzeug namens RustGo vor, das das Spiel verändert, indem es genau weiß, wohin es die Schneebälle werfen muss.

Der smarte Detektiv: RustGo

Die Forscher hinter diesem Paper, ein Team der Korea University und anderer Institutionen, erkannten, dass das zufällige Werfen von Schneebällen auf ein Rust-Programm so ist, als würde man versuchen, eine Nadel im Heuhaufen zu finden, indem man den ganzen Heuhaufen niederbrennt. Da Rust die Sicherheit für den Großteil seines Codes garantiert, fragten sie: Warum überhaupt die sicheren Teile testen? Sie entwickelten RustGo, einen „gerichteten Greybox-Fuzzer“, der wie ein Detektiv mit einer Karte und einer Lupe agiert, statt wie eine blind vorgehende Person, die Steine wirft.

RustGo arbeitet in drei klugen Schritten, um Bugs effizient aufzuspüren:

1. Die richtigen Ziele finden (Die Karte)
Zuerst scannt RustGo den Code, um die „unsafe“-Zonen zu finden, in denen Bugs sich verstecken könnten. Aber es rät nicht einfach. Es nutzt eine spezielle Art der Analyse, um zu untersen, wie Daten durch das Programm fließen. Stellen Sie sich vor, die Stadt hat viele Gassen, aber einige führen in Sackgassen oder Schleifen, die in der Realität niemals tatsächlich vorkommen. RustGo filtert diese heraus. Es identifiziert die spezifischen Stellen, an denen ein Memory-Bug ausgelöst werden könnte, und führt ähnliche Stellen dann zusammen. Wenn zwei verschiedene Pfade im Code zum exakt gleichen gefährlichen Ergebnis führen, behandelt RustGo sie als ein Ziel, damit es nicht zweimal dasselbe prüft. In ihren Tests half dieser Schritt ihnen, die Anzahl der zu prüfenden Ziele um etwa 84 % zu reduzieren, indem sie sich nur auf die wirklich verdächtigen Bereiche konzentrierten.

2. Die Sackgassen abschneiden (Die Lupe)
Sob sobald RustGo weiß, wo es suchen muss, muss es den Rest der Stadt ignorieren. In älteren Fuzzing-Tools enthielt die „Karte“ der Stadt oft die Standardbibliothek (die vorgefertigten Werkzeuge, die Rust nutzt), welche riesig ist und voll von Pfaden, die zwar erreichbar aussehen, es aber eigentlich nicht sind. Dies verwirrte die Tools und ließ sie nutzlose Bereiche erkunden. RustGo führte einen neuen Trick namens „target-specific path pruning“ (zielspezifische Pfad-Beschneidung) ein. Es ist wie ein magischer Zaun, der jeden Pfad, der nicht direkt zu dem aktuell untersuchten Ziel führt, sofort verschwinden lässt. Wenn der Detektiv nach einem Bug in der Bäckerei sucht, blockiert der Zaun die Wege zur Bibliothek oder zum Park, selbst wenn diese Wege technisch gesehen in der Stadt existieren. Dies ermöglichte es RustGo, 78,49 % der irrelevanten Pfade wegzuschneiden, die andere Tools mit Zeit verschwendet hätten.

3. Fair spielen (Die Round-Robin-Strategie)
Hier kommt die letzte, entscheidende Wendung. Wenn ein Detektiv mehrere Verdächtige (Targets) zu prüfen hat, werden ältere Tools oft von dem am leichtesten erreichbaren besessen und ignorieren die schwierigeren. RustGo verwendet ein System namens „dynamic fair toggling“. Stellen Sie sich einen Schiedsrichter vor, der die Aufmerksamkeit des Detektivs in einer perfekten Rotation zwischen den Verdächtigen wechselt. Wenn der Detektiv zu viel Zeit mit Verdächtigem A verbringt, schaltet der Schiedsrichter ihn sofort zu Verdächtigem B um, um sicherzustellen, dass jeder Verdächtige eine faire Menge an Aufmerksamkeit erhält. RustGo macht dies, indem es jedem Ziel seine eigene „Warteschlange“ von Schneebällen und sein eigenes „Scoreboard“ zur Fortschrittskontrolle gibt. Dies stellt sicher, dass kein gefährlicher Ort ungetestet bleibt, nur weil er etwas schwerer zu erreichen ist.

Die Ergebnisse: Schneller und Smarter

Das Team testete RustGo an 13 realen Rust-Anwendungen, die von Webservern bis hin zu Datenverarbeitungstools reichen. Sie verglichen es mit den besten bestehenden Tools, einschließlich des berühmten AFL++ und mehrerer spezialisierter „gerichteter“ Fuzzer. Die Ergebnisse waren beeindruckend.

Weil RustGo aufhörte, Zeit mit den sicheren 90 % des Codes zu verschwenden, und sich rein auf die gefährlichen 10 % konzentrierte, fand es Schwachstellen 2,09- bis 5,08-mal schneller als die anderen Tools. In einigen Fällen, wie bei der Anwendung gimli, war es mehr als 10-mal schneller. Um dies in Perspektive zu setzen: Wenn ein altes Tool 10 Stunden brauchte, um einen Bug zu finden, fand RustGo ihn in weniger als einer Stunde.

Aber Geschwindigkeit ist nicht der einzige Sieg. Das Team nutzte RustGo, um Bugs „in freier Wildbahn“ zu jagen, nicht nur in ihrem Testlabor. Sie entdeckten 13 bisher unbekannte Memory-Bugs in realer Software. Von diesen wurden 10 von den Softwareentwicklern bestätigt und 8 wurden bereits behoben. Noch beeindruckender ist, dass 6 dieser Bugs offizielle Sicherheits-IDs (RUSTSEC) erhielten und einer eine CVE-ID erhielt, was der globale Standard für die Verfolgung schwerwiegender Sicherheitsmängel ist. Dies beweist, dass RustGo nicht nur eine theoretische Idee ist, sondern ein praktisches Werkzeug, das die Software bereits sicherer macht.

Warum das wichtig ist

Dieses Paper schlägt nicht nur vor, dass RustGo eine gute Idee ist; es misst es, beweist, dass es funktioniert, und zeigt, wie es echte Bugs findet, die andere übersehen haben. Es argumentiert explizit gegen die alte Denkweise: dass wir jede einzelne Zeile Code testen müssen, um sicher zu sein. Stattdessen zeigt es, dass wir durch das Verständnis der einzigartigen Regeln von Rust smarter, schneller und effektiver sein können.

Die Forscher adressierten auch ein häufiges Bedenken: „Was passiert, wenn wir einen Bug übersehen, indem wir die sicheren Teile ignorieren?“ Sie erklären, dass die Sicherheitsregeln von Rust so streng sind, dass räumliche Memory-Bugs (wie der Zugriff auf eine falsche Speicheradresse) in den sicheren Teilen des Codes schlichtweg nicht vorkommen können. Daher erzeugt das Ignorieren dieser Teile keine blinden Flecken, sondern entfernt lediglich das „Rauschen“. Für temporale Bugs (Verwendung von Speicher, nachdem er freigegeben wurde) ist RustGo vorsichtig genug, um sicherzustellen, dass es keinen Pfad versehentlich beschneidet, der zu einem Bug führen könnte, indem es einen „konservativen“ Ansatz verwendet, der das Sicherheitsnetz weit genug hält, um alles einzufangen.

Am Ende ist RustGo ein Zeugnis für die Kraft der Spezialisierung. So wie ein Meisterkoch keinen Hammer benutzt, um eine Nuss zu knacken, sollte auch ein moderner Fuzzer kein stumpfes Instrument für eine Sprache wie Rust verwenden. Indem die Autoren den Ansatz auf die einzigartigen Stärken und Schwächen der Sprache zugeschnitten haben, haben sie ein Werkzeug geschaffen, das nicht nur schneller, sondern auch fairer ist und sicherstellt, dass jede potenzielle Gefahr im Code die Aufmerksamkeit erhält, die sie verdient.

Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?

Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.

Digest testen →