Bjarne Stroustrup, der Schöpfer der Programmiersprache C++, hat Einwände gegen die Schlussfolgerungen des NSA-Berichts erhoben, in dem empfohlen wurde, auf Programmiersprachen wie C und C++ zu verzichten, die die Speicherverwaltung dem Entwickler überlassen. Stattdessen sollten Sprachen wie C#, Go, Java, Ruby, Rust und Swift verwendet werden, die eine automatische Speicherverwaltung oder Sicherheitsüberprüfungen zur Compile-Zeit bieten.
Laut Stroustrup übertreffen die im NSA-Bericht erwähnten sicheren Sprachen C++ in wichtigen Anwendungen nicht. Insbesondere beinhalten die in den letzten Jahren entwickelten grundlegenden Empfehlungen zur Verwendung von C++ (C++ Core Guidelines) Methoden für sicheres Programmieren und fordern den Einsatz von Werkzeugen, die die sichere Handhabung von Typen und Ressourcen garantieren. Entwicklern, die solche strengen Sicherheitsgarantien nicht benötigen, wird jedoch die Möglichkeit eingeräumt, weiterhin ältere Entwicklungsmethoden anzuwenden.
Stroustrup ist der Meinung, dass ein guter statischer Analyzer, der den C++ Core Guidelines entspricht, die notwendigen Sicherheitsgarantien für C++-Code bieten kann, während er deutlich weniger Aufwand erfordert als der Übergang zu neuen, sicheren Programmiersprachen. So sind die meisten Empfehlungen der Core Guidelines bereits im statischen Analyzer sowie im Profil für sicheres Speichermanagement der Microsoft Visual Studio implementiert. Einige Empfehlungen sind außerdem im statischen Analyzer Clang tidy berücksichtigt.
Kritik erhielt auch der Bericht der NSA, da er sich ausschließlich auf Probleme mit dem Speichermanagement fokussiert und viele andere Sicherheits- und Zuverlässigkeitsprobleme von Programmiersprachen außer Acht lässt. Stroustrup betrachtet Sicherheit als ein umfassenderes Konzept, dessen verschiedene Aspekte durch eine Kombination aus Schreibstil, Bibliotheken und statischen Analyzern erreicht werden können. Um Regeln zu verwalten, die die Sicherheit bei der Arbeit mit Typen und Ressourcen gewährleisten, wird vorgeschlagen, Anmerkungen im Code und Compiler-Optionen zu nutzen.
In Anwendungen, bei denen die Leistung wichtiger ist als die Sicherheit, ermöglicht dieser Ansatz die selektive Anwendung von Sicherheitsmaßnahmen, die nur dort implementiert werden, wo es erforderlich ist. Sicherheitsverbesserungswerkzeuge können ebenfalls schrittweise angewendet werden, beispielsweise indem man zunächst die Regeln für Bereichsprüfungen und Initialisierungen einschränkt und dann den Code nach und nach für strengere Anforderungen anpasst.
Quelle: opennet.ru
