Bjarne Stroustrup, der Schöpfer von C++, hat Einwände gegen die Schlussfolgerungen des NSA-Berichts erhoben, in dem empfohlen wurde, von Programmiersprachen wie C und C++, die das Speichermanagement den Entwicklern überlassen, abzusehen und stattdessen Sprachen wie C#, Go, Java, Ruby, Rust und Swift zu verwenden, die automatisches Speichermanagement oder Prüfungen auf sichere Speicherbenutzung während der Kompilierung bieten.
Stroustrup ist der Meinung, dass die im NSA-Bericht genannten sicheren Sprachen in wichtigen Anwendungen seiner Ansicht nach nicht besser sind als C++. Insbesondere decken die in den letzten Jahren entwickelten grundlegenden Empfehlungen zur Verwendung von C++ (C++ Core Guidelines) Methoden für sicheres Programmieren ab und schreiben den Einsatz von Mitteln vor, die eine sichere Arbeit mit Typen und Ressourcen gewährleisten. Entwicklern, die solche strengen Sicherheitsgarantien nicht benötigen, wird die Möglichkeit belassen, weiterhin alte Entwicklungsmethoden zu verwenden.
Stroustrup ist der Ansicht, dass ein guter statischer Analyzer, der den Empfehlungen der C++ Core Guidelines entspricht, die notwendigen Sicherheitsgarantien für C++-Code bieten kann und dabei erheblich weniger Aufwand erfordert als der Wechsel zu neuen sicheren Programmiersprachen. Beispielsweise sind die meisten Empfehlungen der Core Guidelines bereits im statischen Analyzer und im Profil für sichere Speicherbenutzung von Microsoft Visual Studio umgesetzt. Teile der Empfehlungen sind auch im statischen Analyzer Clang tidy berücksichtigt.
Auch die Fokussierung des NSA-Berichts auf die Probleme der Speicherverwaltung wurde kritisiert, während viele andere Probleme von Programmiersprachen, die die Sicherheit und Zuverlässigkeit betreffen, außer Acht gelassen wurden. Stroustrup betrachtet Sicherheit als ein umfassenderes Konzept, dessen verschiedene Aspekte durch eine Kombination aus Programmierstil, Bibliotheken und statischen Analyzern erreicht werden können. Um die Einhaltung von Regeln zu steuern, die die Sicherheit im Umgang mit Typen und Ressourcen gewährleisten, wird empfohlen, Annotationen im Code und Compiler-Optionen zu verwenden.
In Anwendungen, in denen Leistung wichtiger ist als Sicherheit, ermöglicht dieser Ansatz eine selektive Anwendung von Sicherheitsmaßnahmen, die nur dort garantieren, wo es nötig ist. Sicherheitsverbesserungswerkzeuge können ebenfalls teilweise angewendet werden, z. B. zu Beginn auf Prüfregeln für Bereiche und Initialisierungen beschränken und dann den Code schrittweise an striktere Anforderungen anpassen.
Quelle: opennet.ru
