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. Java-Entwickler (w/m/d) After Sales
    SSI SCHÄFER Automation GmbH, Giebelstadt, Dortmund, Münster
  2. Solution Designer - Identity und Access-Management (IAM) (m/w/d)
    Stadtwerke München GmbH, München
Detailsuche

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.

Golem Akademie
  1. Advanced Python – Fortgeschrittene Programmierthemen: virtueller Zwei-Tage-Workshop
    27.–28. Januar 2022, Virtuell
  2. Jira für Anwender: virtueller Ein-Tages-Workshop
    10. November 2021, virtuell
Weitere IT-Trainings

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.  


amagol 03. Sep 2020

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

TheNX 02. Sep 2020

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

igor37 02. Sep 2020

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

captain_spaulding 02. Sep 2020

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

captain_spaulding 02. Sep 2020

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



Aktuell auf der Startseite von Golem.de
OneXPlayer 1S im Test
Die Über-Switch

Mit schnellem Prozessor, viel RAM und integrierter Intel-GPU soll der OneXPlayer zum stärksten Spiele-Handheld werden. Das klappt zumindest teilweise.
Ein Test von Martin Wolf

OneXPlayer 1S im Test: Die Über-Switch
Artikel
  1. Edge-Browser: Microsoft will Installation von Chrome verhindern
    Edge-Browser
    Microsoft will Installation von Chrome verhindern

    Microsoft intensiviert sein Vorgehen gegen andere Browser: Vor der Installation von Chrome wird Edge übertrieben gelobt.

  2. Lieferdienst: Gorillas wollen Anhebung des Mindestlohns zuvorkommen
    Lieferdienst
    Gorillas wollen Anhebung des Mindestlohns zuvorkommen

    Die selbstständigen Streiks bei Gorillas zeigen Wirkung. Gegen den neuen Betriebsrat will die Geschäftsführung eventuell weiter gerichtlich vorgehen.

  3. Ikea Åskväder: Modulare Steckdosenleiste startet in Deutschland
    Ikea Åskväder
    Modulare Steckdosenleiste startet in Deutschland

    Die modulare Steckdosenleiste von Ikea ermöglicht viele Anpassungen und wird erstmals auf der Ikea-Webseite gelistet.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Saturn-Advent: Toshiba Canvio 6TB 88€ • KFA2 Geforce RTX 3070 OC 8GB 1.019€ • Netgear günstiger (u. a. 5-Port-Switch 16,89€) • Norton 360 Deluxe 2022 18,99€ • Gaming-Monitore zu Bestpreisen (u. a. Samsung G3 27" FHD 144Hz 219€) • Spiele günstiger (u. a. Hades PS5 15,99€) [Werbung]
    •  /