8 Punkte von ahwjdekf 2025-03-16 | Noch keine Kommentare. | Auf WhatsApp teilen

Ist Rust wirklich sicher?

Ist C++ wirklich so unsicher?

Ich habe einen Vortrag zu einem interessanten Thema auf YouTube gefunden und bringe ihn hier mit.
Wenn man den Titel übersetzt, wirkt die Nuance etwa so: „Zu sagen, man solle einfach eine speichersichere Sprache verwenden, ist nicht so einfach.“
Der Vortragende äußert seine Gedanken aus einer vergleichsweise fairen, nicht einseitigen Perspektive.

  • Rust verhindert durch Panics die Ausführung speicherunsicheren Codes, aber „unsafe Rust“ kann diese Schutzmechanismen umgehen.
  • Allerdings erfordert unsafe Rust ein ausdrückliches Opt-in und fällt dadurch stärker auf als unsicheres C/C++. Dieser Teil kann gezielt überprüft werden.
  • Etwa 30 % der Rust-Crates verwenden unsicheren Code, in Embedded-Systemen sogar doppelt so häufig.
  • Sanitizer (dynamische Analysewerkzeuge) können Speicherfehler sowohl in Rust- als auch in C/C++-Code erkennen.
  • 70 % der Rust-Entwickler rufen unsicheren Code über FFI (Foreign Function Interface) zu C/C++-Bibliotheken auf.
  • Viele wichtige Bibliotheken, die auch in Rust-Projekten verwendet werden, sind in C/C++ geschrieben (SQLite, OPCUA-Bibliotheken).
  • Sanitizer können Rust- und C/C++-Code auf der LLVM-IR-Ebene analysieren, sofern der Quellcode vorliegt.
  • Miri ist ein ergänzendes Werkzeug, um undefiniertes Verhalten in Rust auf der Mid-level-Representation zu erkennen.
  • Vorteile von Miri: Es liefert klare Fehler und prüft sämtliches undefiniertes Verhalten gleichzeitig. Einschränkung: Es kann C/C++-Code nicht interpretieren.
  • Etwa 20 % der Funktionen der Rust-Standardbibliothek verwenden unsicheren Code.
  • Kritische Infrastruktur braucht nicht nur speichersicheren Code, sondern korrekten Code, um Sachschäden oder Gefährdungen von Menschenleben zu verhindern.
  • Selbst sichere Rust-Programme können Fehlfunktionen zeigen oder anfällig für Denial-of-Service-Angriffe sein.
  • Property-Testing kann helfen, Randfälle zu finden, indem zufällige Eingaben erzeugt werden, hat aber Schwierigkeiten mit unmöglichen Fehlern.
  • Kani ist ein Model Checker, der mit mathematischen Methoden die Korrektheit eines Programms innerhalb gegebener Einschränkungen überprüft.
  • Vorteile von Kani: Es bewertet alle Eingaben innerhalb der Einschränkungen mathematisch. Einschränkungen: Schleifen müssen entrollt werden, und Concurrency oder C/C++-FFI werden nicht unterstützt.
  • Fazit zu Rust: Rust ist sicher, aber nicht so sicher, wie man vielleicht denkt.
  • Bjarne Stroustrup unterscheidet zwischen C und C++ und merkt an, dass C++ für sichereren Code entworfen wurde.
  • Die C++ Core Guidelines bieten Profile für Type Safety, Bounds Safety und Lifetime Safety und nähern sich damit den Garantien von Rust an.
  • Das größte Problem von C++ ist, dass es standardmäßig zu leicht ist, unsicheren Code zu schreiben. Es liegt nicht daran, dass Entwickler sich nicht bemühen.

Noch keine Kommentare.

Noch keine Kommentare.