• IT-Karriere:
  • Services:

Warum nicht einfach C?

Die Programmiersprache C ist gerade in den Bereichen, in denen Sicherheit am wichtigsten ist, also in der eingebetteten Programmierung sowie Kryptographie, immer noch extrem beliebt. Dabei ist die Sprache dafür gar nicht wirklich gut geeignet. Es gibt einfach zu viele Fehlerquellen.

Stellenmarkt
  1. Versicherungskammer Bayern, München
  2. DLR Deutsches Zentrum für Luft- und Raumfahrt e.V., Oberpfaffenhofen bei München

Die Liste ist lang, hier nur einige Beispiele: Textuelle Inklusion mit #include sowie allgemein der textbasierte Preprozessor machen es schwer, Definitionen zu finden, zu sehen, welcher Code aktiv ist, und manchmal auch, was Code eigentlich bedeutet (insbesondere Makros, die anstelle von Funktionen verwendet werden).

Syntaktische Eigenheiten wie die Zuweisung mit, if-Statements, switch-Statements sowie Schleifen, bei denen mit optionalem Ende-Marker nicht klar ist, wo sie aufhören, machen den Code weniger lesbar und Fehler damit schlechter auffindbar. Gleiches gilt für Abkürzungen wie "i++", deren einziger Vorteil es ist, dass sie einfach zu schreiben sind.

Viele C-Programmierer haben diese Schwächen erkannt, möchten oder können aber nicht die Sprache wechseln. So hat zum Beispiel der Linux-Kernel-Entwickler Kees Cook in einem Vortrag mit dem Titel Making C Less Dangerous Vorschläge gemacht, wie manche der Probleme umgangen werden können. Im eingebetteten Bereich ist der Standard MISRA-C beliebt, der die gefährlichsten C-Konstrukte verbietet.

Die meisten und die am weitesten verbreiteten CWE-Einträge - Ausnahmen sind Bugs, die speziell in Webtechnologien relevant sind, wie Cross-site Scripting - sind in C nicht nur möglich, sondern fast an der Tagesordnung. Ist die Vermeidung von Sicherheitslücken wie CWE ein Ziel, dann ist die Benutzung von C kontraproduktiv.

Ada und C im Vergleich

Ada versucht, eine möglichst klare, lesbare und von Stolpersteinen freie Syntax anzubieten - und vermeidet dabei die größten Probleme der C-Syntax. Die Tabelle gibt einen Überblick, wie die typischen Stolpersteine in C in Ada vermieden werden.

  • Vergleich C und Ada (Tabelle: Johannes Kanig)
Vergleich C und Ada (Tabelle: Johannes Kanig)

Die Vorteile von Ada gehen jedoch über solche syntaktischen Verbesserungen hinaus. Das Typsystem von Ada ist deutlich besser und strenger, es kann viele Fehler sehr zeitig entdecken. Arrays sind Teil des Typsystems und enthalten ihre Länge, so dass Verwirrung über den belegten Speicherbereich viel seltener ist.

Ein weiteres Feature von Ada sind Laufzeitüberprüfungen. Wenn in C eine Integer-Variable mit Vorzeichen ihren Wertebereich überschreitet, geht die Ausführung in der Regel einfach mit einem falschen Wert weiter. In Ada wird der Überlauf zur Laufzeit entdeckt und eine Exception ausgelöst.

Programming in Ada 2012

Das Gleiche gilt für die Division durch null, Zugriffe auf Arrays außerhalb der Indexgrenzen, sogenannte Pufferüberläufe und mehr. Für Informationssicherheit sowie Testläufe ist das sehr wertvoll. Denn in der Regel ist es besser, dass die Software abstürzt, als dass ein Angreifer eindringen kann, denn Pufferüberläufe sind oft auch Sicherheitslücken.

In eingebetteten Systemen, wo in der Regel kein Absturz erwünscht ist, können diese Überprüfungen für Produktionscode auch ausgeschaltet werden.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Programmiersprachen: Ada und Spark sind sicherer als C... und was ist jetzt Spark? 
  1.  
  2. 1
  3. 2
  4. 3
  5.  


Anzeige
Spiele-Angebote
  1. (u. a. Star Wars: The Force Unleashed - Ultimate Sith Edition für 4,20€, Star Wars: Knights of...
  2. 16,99€
  3. 31,99€

amagol 03. Sep 2020 / Themenstart

Eine C/C++ library kann man in den meisten Faellen auch von anderen Sprachen aus...

TheNX 02. Sep 2020 / Themenstart

Ich habe mich mal für Ada im kommerziellen Bereich interessiert. Kurzum, die Situation...

igor37 02. Sep 2020 / Themenstart

Jede gefundene Lücke basierend auf ungültigen Pointerzugriffen, data races...

captain_spaulding 02. Sep 2020 / Themenstart

Dann eben neu. Von Pascal hab ich schon lang nichts mehr gelesen und hab es im Job oder...

captain_spaulding 02. Sep 2020 / Themenstart

Ist aus Safety/Security-Sicht quatsch. Es kommt auf die Fehlerhäufigkeit an. Fehler in...

Kommentieren


Folgen Sie uns
       


    •  /