Skip to content

Apples zwei Lektionen zur IT-Sicherheit

Eine 0-Day-Schwachstelle in QuickTime, die man fast als Backdoor bezeichnen kann, liefert den Ausgangspunkt für zwei wichtige Lektionen zur IT-Sicherheit: Beim Entfernen von Code kann man genau so schlimme Fehler machen wie beim Hinzufügen, und Schwachstellen können durchaus öfter als einmal entdeckt werden.

Die vergessene Hintertür

Die erste Lektion: Beim Entfernen von Code kann man genau so schlimme Fehler machen wie beim Hinzufügen. Die von Ruben Santamarta entdeckte aktuelle QuickTime-Schwachstelle besteht darin, dass über den undokumentierten Parameter _MARSHALED_PUNK im ActiveX-Plugin ein Objekt-Pointer übergeben werden kann, über den dann Funktionen in beliebigen DLLs aufgerufen werden können. Die Schwachstelle kann z.B. über eine präparierte Webseite zum Einschleusen von Code ausgenutzt werden. Der Parameter ist ein Überbleibsel einer Funktion, die Ruben Santamarta in der aus dem Jahr 2004 stammenden Version 6.5.1.17 des ActiveX-Controls gefunden hat, und wurde sehr wahrscheinlich beim Entfernen dieser Funktion schlicht und ergreifend übersehen und daher nicht gelöscht.

Sorgfalt bei Implementierung UND Löschung

Damit hat Apple eine schöne Lektion zur IT-Sicherheit geliefert: Wenn man Funktionen entfernt, muss man genau so sorgfältig vorgehen wie bei ihrer Implementierung. Es dürfen keine nach dem Entfernen der Funktion ungenutzten Codereste zurück bleiben. Die Gefahr, sich darüber eine Schwachstelle einzuhandeln, ist einfach zu gross. Bevor ein Programm ausgeliefert wird, muss der Code von sämtlichen für den Produktivbetrieb nicht benötigten Teilen bereinigt werden. Egal ob es sich um Test- oder für den Produktivbetrieb nicht benötigte Debugfunktionen, nicht mehr benötigte oder noch nicht einsatzreife Programmfunktionen handelt, alles, was nicht zur aktuellen Version gehört und im Produktivbetrieb benötigt wird, hat im ausgelieferten Programm nichts zu suchen. Dass das Löschen von Funktionen gerade in älteren und komplexen Programmen mit einer "durchwachsenen" Codebasis schwierig ist, ist keine Ausrede dafür, dass Code zurück bleibt. Beim Implementieren neuer Funktionen muss man mit dem Code ja auch klar kommen, und dann ist es doch allemal besser, wenn man dabei nicht plötzlich über Codereste stolpert, die schon längst hätten entsorgt werden können, oder?

Auch Vertraulich gemeldete Schwachstellen können ausgenutzt werden

Kommen wir zur zweiten Lektion: Schwachstellen können durchaus öfter als einmal entdeckt werden. Spätestens nach den Erfahrungen mit der 0-Day-Schwachstelle im Internet Explorer, die im Rahmen der "Operation Aurora" genannten gezielten Angriffe auf Google und andere Unternehmen ausgenutzt wurde, sollte allen eins klar sein: Nur, weil eine Schwachstelle vom Entdecker vertraulich an den Hersteller gemeldet wurde, bedeutet das nicht, dass diese Schwachstelle nicht auch von anderen gefunden und dann für Angriffe ausgenutzt werden kann. Die 0-Day-Schwachstelle war Microsoft seit Anfang September 2009 bekannt, also lange bevor sie im Dezember für die Angriffe ausgenutzt und Mitte Januar 2010 allgemein bekannt wurde.

Der aktuelle Fall

Etwas weniger dramatisch ist das aktuelle Beispiel: Einen Tag, nachdem Santamarta die Schwachstelle veröffentlicht hat, wurde von der Zero Day Intiative ein Advisory zur gleichen Schwachstelle veröffentlicht: ZDI-10-168 enthält den Hinweise

"Apple states:
There is no update from Apple regarding this vulnerability. This bug was independently discovered by Ruben Santamarta and publicly disclosed on 08/30/10.

Disclosure Timeline
2010-06-30 - Vulnerability reported to vendor
2010-08-31 - Coordinated public release of advisory "

Die Schwachstelle war Apple also 2 Monate bekannt, bevor sie von Ruben Santamarta veröffentlicht wurde (wann er sie entdeckt hat, ist nicht bekannt). Und laut Ruben Santamartas Advisory sind auch die QuickTime-Versionen von 2004 angreifbar:

"* Apple Quicktime 7.x, 6.x ( 2004 versions are also vulnerable, older versions not checked )"

Wir haben hier also eine Schwachstelle, die 6 Jahre lang unentdeckt geblieben ist und nun kurz nacheinander von 2 Personen unabhängig voneinander entdeckt wurde. Irgendwie ist das doch etwas merkwürdig, oder? Aber wäre sie schon früher entdeckt und nicht veröffentlicht, sondern ausgenutzt worden, hätte der Exploit eigentlich einem der Antiviren-Hersteller auffallen müssen. Also scheint die Schwachstelle tatsächlich so lange unentdeckt geblieben zu sein.

Außer dem von Santamarta veröffentlichten Exploit, der auch in der Exploit-DB aufgenommen wurde, gibt es auch bereits ein Modul für das Metasploit-Framework zum Testen der Schwachstelle.

Schwachstellen entstehen beim Programmieren, nicht beim Entdecken

Also noch mal zur Erinnerung und Verdeutlichung: Schwachstellen entstehen nicht, weil sie jemand entdeckt, sondern weil sie jemand programmiert. Jede Schwachstelle ist von dem Moment an, in dem sie als Fehler im Programmcode eingebaut wurde, vorhanden. Nur, weil jemand sie findet und freundlicherweise vertraulich an den Entwickler meldet, bedeutet dass nicht, dass die Schwachstelle nun ungefährlich ist. Sie kann jederzeit von einem Dritten entdeckt werden, der sie dann womöglich ausnutzt und nicht an den Entwickler meldet. Ungefährlich ist die Schwachstelle erst, wenn sie behoben wurde und der entsprechende Patch bzw. das entsprechende Update überall installiert wurde. Falls Sie also eine Schwachstelle in einem ihrer Programme haben und ihnen die vertraulich gemeldet wird (oder Sie sie sogar selbst finden): Beeilen Sie sich mit dem Beheben, bevor ein anderer sie findet und ausnutzt. Wie dringend ein Patch ist, darf immer nur anhand der möglichen Folgen eines Angriffs abgeschätzt werden, nie am aktuellen Bekanntheitsgrad der Schwachstelle.

Backdoor oder Schwachstelle?

Kleines Kuriosum am Rande: Da der Parameter mit Absicht eingebaut wurde, handelt es sich genau genommen um eine Backdoor und nicht um eine in Folge eines Programmierfehlers entstandene Schwachstelle. Wie man diese Möglichkeit, Code einzuschleusen, nun nennt, ist aber eigentlich egal. Hauptsache, sie wird jetzt irgendwann behoben... so ungefähr 6 Jahre, nachdem sie gemacht wurde

Carsten Eilers

Trackbacks

Keine Trackbacks