• IT-Karriere:
  • Services:

Programmiersprachen: Ada und Spark sind sicherer als C

Bei der Programmierung von sicherheitsrelevanter Software ist C immer noch beliebt. Sollte es aber nicht, denn Ada und Spark sind gerade für diesen Bereich viel besser geeignet.

Artikel von Johannes Kanig veröffentlicht am
Wenn es um den Schutz vor Angriffen geht, sind einige Programmiersprachen besser geeignet als andere.
Wenn es um den Schutz vor Angriffen geht, sind einige Programmiersprachen besser geeignet als andere. (Bild: Pixabay)

Bei der Auswahl einer bestimmten Programmiersprache für ein Projekt spielen oft Faktoren wie die Vertrautheit mit der Sprache, die verfügbaren Werkzeuge sowie die Community eine große Rolle. Viel zu selten wird aber die Eignung der Sprache selbst für die Aufgabe zur Entscheidungsfindung hinzugezogen. Dabei hat jede Programmiersprache Vor- und Nachteile und bestimmte Anwendungsgebiete, in denen sie einfach eine bessere (oder schlechtere) Wahl wäre.

Inhalt:
  1. Programmiersprachen: Ada und Spark sind sicherer als C
  2. Warum nicht einfach C?
  3. ... und was ist jetzt Spark?

In diesem Artikel wollen wir speziell darauf eingehen, wie Programmiersprachen in sicherheitsrelevanter Software helfen können, bestimmte Ziele der Software zu erreichen. Dabei konzentrieren wir uns auf Ada und Spark, weil wir sie in diesem Kontext für besonders geeignet halten, und stellen sie C gegenüber, das in der Praxis (leider noch) zu oft die Wahl ist.

Was sind Ada und Spark?

Ada ist eine prozedurale Programmiersprache, sie wurde in den 1970er Jahren entwickelt und zuerst 1983 standardisiert. Seitdem wurde sie kontinuierlich weiterentwickelt; die letzte Version ist Ada 2012, die nächste wird wohl kommendes Jahr erscheinen.

Die Sprachfeatures ähneln auf den ersten Blick jenen von C++ oder Java: Es kann auf Objekte sowie Generics zugegriffen werden, es gibt ein umfangreiches Modulsystem. Ein großer Unterschied ist die Syntax. Ada legt großen Wert auf Lesbarkeit und Fehlervermeidung und benutzt auch nicht die für C typischen geschweiften Klammern.

Stellenmarkt
  1. Diehl Defence GmbH & Co. KG, Röthenbach bei Nürnberg
  2. TenneT TSO GmbH, Lehrte, Bayreuth, Arnheim (Niederlande)

Spark ist eine Schwestersprache von Ada, die einige zusätzliche Einschränkungen einführt. Diese Einschränkungen ermöglichen weitreichende Analysen von Spark-Code und garantieren mehr Sicherheit.

Der einfachste Weg, einen Eindruck von Ada zu bekommen, ist die Adacore-Learn-Webseite: Auch ohne Installation können Interessierte gleich mit Ada und Spark loslegen. Für eigene Projekte sollten die nötigen freien Werkzeuge von der Webseite von Adacore heruntergeladen und installiert werden. In der Entwicklungsumgebung mit dem Namen GNATStudio können Interessierte entweder ihr eigenes Programm schreiben (Create New Project im ersten Dialog) oder die vielen Beispiele ansehen (im Menu Help -> GNAT -> Examples).

"Security" ist nicht gleich "Safety"

Immer mehr Software hat heutzutage große Auswirkungen auf unser Leben. Sei es, weil menschliche Leben direkt davon abhängen, etwa bei der Steuerungssoftware eines Flugzeugs oder Pkw, oder sei es, weil große Geldbeträge im Spiel sind, etwa in Bankensystemen. Im Englischen wird hier der Begriff "Safety" verwendet.

In manchen Anwendungsszenarien muss auch die Software selbst vor böswilligen oder unbefugten Eingriffen geschützt werden. Oder sie muss auch dann funktionieren, wenn den Eingaben nicht vertraut werden kann. Hier hat sich im Englischen der Begriff "Security" durchgesetzt. Im Deutschen wird meistens für beides der Begriff "Sicherheit" verwendet.

Moderne Ansätze des Softwaredesigns insbesondere in der Security gehen von einer modularen Architektur aus: Die Software wird in kleine Einheiten geteilt, die unterschiedliche Aufgaben haben und unterschiedlich kritisch sind. Jedes Modul hat andere Anforderungen, die die Software möglichst gut erfüllen soll.

Programming in Ada 2012

Die Sprache nach den Anforderungen aussuchen

Zum Beispiel soll ein Modul eine Benutzereingabe validieren und zur weiteren Verarbeitung weiterleiten. Dieses Modul wird also eine Reihe von Anforderungen zur Validation enthalten sowie Informationen, wohin die Daten befördert werden sollen. Zusätzlich sollte das Modul aber frei von Programmierfehlern sein und insbesondere keine Angriffsflächen wie Pufferüberläufe bieten. Denn das Modul liest direkt Eingaben von potenziell böswilligen Benutzern.

Es gibt eine Klassifizierung von Softwarebugs, genannt CWE, mit Hunderten von Einträgen wie Pufferüberlauf, Dereferenzierung von Nullzeigern und so weiter. Für ein sicherheitskritisches Modul wie das der Eingabevalidierung würde man sie gerne alle vermeiden. Oder zumindest die meisten. Oder wenigstens die häufigsten.

Nach der Einteilung der Software in Module und der Erstellung von Anforderungen für jedes Modul kann im Prinzip mit der Programmierung angefangen werden. Vorher aber sollte man sich fragen: Wie können die Anforderungen am besten und effizientesten eingesetzt werden? Und: Spielt dabei die Wahl der Programmiersprache eine Rolle?

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
Warum nicht einfach C? 
  1. 1
  2. 2
  3. 3
  4.  


Anzeige
Hardware-Angebote
  1. (reduzierte Überstände, Restposten & Co.)

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
       


    •  /