Schwachstelle C/C++
Die mit der Programmiersprache C/C++ verursachten Sicherheitslöcher sind kaum noch unter Kontrolle zu halten.
- Daniel Bachfeld
<FIKTION>
Schwachstelle in Programmiersprache C/C++
Falsche Verwendung der Programmiersprache C/C++ ermöglicht einem Angreifer Zugriff auf beliebige Systeme
In einem auf Bugtraq veröffentlichen Advisory berichten die Entwickler Brian W. Kernighan und Dennis M. Ritchie von kritischen Schwachstellen in der von ihnen erfundenen Programmiersprache C. Betroffen sind alle Versionen von C, inklusive ANSI-C und Service Pack C++. Durch die falsche Benutzung von Puffern, Pointern und Methoden zur Reservierung von Speicher können kritische Zustände in der programmierten Anwendung provoziert werden, die es einem Angreifer ermöglichen, die Kontrolle über die Applikation und die darunter laufende Plattform zu erhalten. Bestätigt wurden bisher Buffer-Overflows, Format-String-Schwachstellen und Heap-Overflows in diversen Applikationen der Betriebssysteme Windows, Linux, Mac OS X, Solaris und vielen mehr.
"Die Programmierer tappen immer wieder in die gleiche Falle, weil sie wichtige Abfragen im Programm einfach vergessen. Bei C sollte man wissen was man tut" so Dennis M. Ritchie gegenĂĽber heise Security. Brian W. Kernighan sinniert: "Als wir C erfunden haben, waren Entwickler noch echte Programmierer und haben ihr Handwerk verstanden. Heute wird jeder, der ein "Hello World" mit Visual Basic zusammenbasteln kann, gleich als Entwickler fĂĽr Serversoftware eingesetzt. Kein Wunder, dass das in die Hose geht!"
Einen Patch stellen der Erfinder nicht zur VerfĂĽgung, als Workaround empfehlen sie den Umstieg auf andere Programmiersprachen, wie zum Beispiel Pascal, Java oder ADA. Mittlerweile hat das U.S. Department of Homeland Security reagiert und einen Gesetzesentwurf vorgelegt, der Softwareherstellern die Teilnahme an staatlichen Ausschreibungen fĂĽr IT-Systeme verbietet, deren Produkte in C/C++ programmiert sind.
</FIKTION>
Warnungen über Sicherheitslöcher gibt es täglich, mittlerweile so viele, dass jeder nur noch schauen kann, ob seine eigenen Systeme betroffen sind. Kern des Problems ist fast immer die Programmiersprache C/C++, die - falsch angewendet - zu sicherheitskritischen Problemen führt. Programmierfehler lassen sich nicht vermeiden, darüber besteht mittlerweile Konsens. In anderen Sprachen führt dies auch nicht gleich zur Kompromittierung der Applikation oder des Betriebssystems. In einer vernetzten Welt kann man sich aber keine Schwachstellen mehr leisten, vor denen selbst Firewalls und Intrusion Detection Systeme nicht schützen. Die Konsequenz kann deshalb nur lauten: Weg mit C/C++ und Umstieg auf eine sicherere Programmiersprache. Schließlich hat alles Bitten und Betteln nichts genützt: Wie man in C/C++ sicher programmieren kann, ist längst bekannt, trotzdem richtet sich keiner danach. C/C++ verlangt dem Programmierer viel an Eigenverantwortung ab, mit der offensichtlich zu viele überfordert sind.
Andere Sprachen sind da weit robuster: Java und ADA zum Beispiel kennen keine Pufferüberläufe oder Zeiger, die überall hinzeigen, nur nicht dorthin wo sie sollen. Programmierfehler produzieren hier zwar unerwünschte Ergebnisse, aber normalerweise nicht auch noch gravierende Sicherheitslöcher. In der Folge gibt es auch weniger Angriffspunkte - und weniger Kosten bei Herstellern und Kunden, um Schwachstellen zu beseitigen. Das eingesparte Geld könnte man ja dann in die Ausbildung der Entwickler investieren: "Sicheres Programmieren in einer vernetzten Welt". (dab)