Aufmacher PIXABAY-binary-823331

(Bild: Pixabay)

UnrealIRCd ist ein Open-Source-IRC-Server (Internet Relay Chat), der auf der ganzen Welt sehr verbreitet ist und deshalb von Hackern gern als lohnendes Angriffsziel ins Visier genommen wird. Am 12. Juni 2010 postete ein Mitglied des Server-Support-Teams die folgende Nachricht in der Mailing-Liste:

„Ich möchte Ihnen hiermit mitteilen, dass die unrealircd-Website und der ftp-Server kompromittiert wurden und dass das Tarball-Release 3.2.8.1 durch eine mit einer Backdoor versehene Kopie ersetzt wurde.“

Ein Unbekannter hatte also heimlich den offiziellen Download-Tarball durch eine Version mit einer absichtlich eingebauten Hintertür ersetzt, die es Hackern ermöglichte, beliebigen Code auf dem Server auszuführen. Der Austausch musste irgendwann im November des Vorjahres erfolgt sein, sodass die Sicherheitslücke bei ihrer Entdeckung bereits mehr als sechs Monate existierte. Der Bericht über diesen Defekt ist in der CVE-Datenbank unter CVE-2010-2075 zu finden.

Es muss schlimm gewesen sein für die Entwickler, als die Sache ans Licht kam. Ohne selbst einen Fehler gemacht zu haben, waren sie für böswillige Zwecke ausgenutzt worden. Obwohl die Entwickler das Thema Sicherheit sehr ernst nahmen, wurden ihre Vorsichtsmaßnahmen und gegenseitigen Kontrollen vollständig umgangen.

Es gibt absolut keine Beweise oder auch nur Hinweise, dass der Angriff von einem der Entwickler der Software aufgezogen wurde. Wahrscheinlich nutzten die Angreifer eine Schwachstelle in der Konfiguration des Download-Servers, um die offizielle Tarball-Datei durch ihre eigene, korrumpierte Version zu ersetzen. Dennoch weist dieser Angriff einige Parallelen zu Insider-Attacken auf. Diese basieren häufig auf Sicherheitslücken, die absichtlich in den Code eingebaut wurden, und die Angreifer sind in der Regel sehr darauf bedacht, ihre Absichten durch Verschleierung ihrer Editierungen zu verbergen.

Wie lassen sich Insider-Attacken aufdecken?

Abb 01-command-injection

Bild 1: Beispiel für eine Command-Injection-Warnung. Grammatech

Nach Überlegungen, wie Insider-Attacken aufgedeckt werden können, stattete Grammatech sein Codesonar 4 mit neuer Funktionalität zum Detektieren solcher Angriffe aus. Somit ist ein Blick zurück auf den betreffenden Code äußerst lehrreich, um zu untersuchen, wie man die Sicherheitslücke mit einem statischen Analysetool hätte aufdecken können.

Code-Defekte, die einem Angreifer die Verarbeitung beliebiger Befehle gestatten, bezeichnet man in der Regel als Code-Injection-Fehler. Lässt man den Code von Codesonar untersuchen, wird deshalb eine Command-Injection-Warnung erzeugt (Bild 1).

Auf den ersten Blick sieht der Code eigentlich harmlos aus. Der Defekt wird in Zeile 1436 beim Aufruf von DEBUG3_LOG gemeldet. Wer keinen Grund hat an der Unschädlichkeit dieses Codes zu zweifeln, wird hier kaum etwas Verdächtiges erkennen.

Abb 02-command-injection

Bild 2: Detailliertes zweites Makro. Grammatech

Doch das Infofenster rechts unten in Bild 1 zeigt, dass DEBUG3_LOG ein Makro ist. Erweitert man die Definition des Makros (Bild 2), erkennt man, dass es ein weiteres Makro mit der Bezeichnung DEBUG_DOLOG_SYSTEM benutzt, das wiederum zum Aufruf von „system()“ erweitert wird.

Jetzt ist die Absicht klar: Ist die Bedingung erfüllt, wird der in readbuf befindliche String an system() übergeben, und dort als Prozess mit den gleichen Privilegien ausgeführt, die auch der Server besitzt. Die nächste Frage lautet: Wie kann die Bedingung erfüllt werden? Es geht dabei um einen Vergleich der ersten zwei Zeichen des Strings mit DEBUGMODE3_INFO. Dieses Makro erweitert sich zu der Zeichenfolge „AB“. Ein Angreifer kann diese Stelle also ausnutzen, indem er einen String wie etwa „AB; rm –rf /“ sendet. Das „AB“ ergibt einen Fehler, doch der zweite Befehl versucht, alle Dateien im Stammverzeichnis zu löschen.

Der Command Injection Checker ist ein neues Feature in Version 4 von Codesonar und nutzt die Taint-Analysis-Funktionalität des Tools. Die Taint-Analyse verfolgt den Weg potenziell gefährlicher Informationen von ihren Ursprüngen (Taint-Quellen) bis zu den Stellen, an denen sie Schaden anrichten können (Taint-Senken). Abhängig von der Herkunft der Information und der Art, wie das Programm installiert ist, gibt es verschiedene Taint-Arten. Dabei müssen einige Arten nicht einmal bösartig sein. Im obigen Beispiel handelt es sich um „Network Taint“, also um eine Variante, die für einen Server dieser Art wohl am gefährlichsten sein dürfte. Weitere Taint-Arten sind beispielsweise File System, Environment, Clock oder DNS Record.

Die rote Unterstreichung in der Warnungsliste weist darauf hin, dass der Wert potenziell verfälscht ist. Zusätzlich wird der Taint-Typ angezeigt, sobald der Mauszeiger über das zugehörige Token bewegt wird.

 

Themen auf der nächsten Seite: Visualisierte Analysen des Laufwegs verfälschter Daten sowie binäre Analysen zum Aufdecken von Attacken.

Visualisierte Analysen des Laufwegs verfälschter Daten

Abb 03-taint-vizualization

Bild 3: Visualisierung Taint-Quellen und -Senken. Grammatech

Die Taint-Eigenschaften des Programms lassen sich noch auf eine weitere Art sichtbar machen: Eine Maßzahl, die aus der Zahl der Taint-Quellen und -Senken hergeleitet wird, lässt sich über eine Visualisierung der Programmstruktur legen. In Bild 3 stehen die Kästen der oberen Ebene für Quelldateien, während die der unteren Ebene die einzelnen Funktionen repräsentieren. Die Linien symbolisieren die Funktionsaufrufe.

Abb 04-taint-vizualization

Bild 4: Visualisierung der Taint-Quellen, Variante 2. Grammatech

In dieser Visualisierung gibt die Stärke der Rotfärbung den Wert der Taint-Quellen-Maßzahl an. Auf dieser Basis lässt sich leicht die Angriffsoberfläche der Applikation beurteilen. Ein Prüfer, der die Sicherheit des Quellcodes bewerten soll, wird nach einem Blick auf diese Grafik umgehend jene Teile unter die Lupe nehmen, die verfälschte Informationen erzeugen. Damit lässt sich verstehen, ob diese Informationen an sensible Bereiche gelangen können, ohne zuvor auf ihre Gültigkeit geprüft worden zu sein.

Abb 05-command-injection

Bild 5: Screenshot der Warnmeldungen von Codesonar. Grammatech

Im vorliegenden Fall gehört die im oberen Teil dargestellte Datei „s_bsd.c“ zu den drei wichtigsten Taint-Quellen. Untersucht man sie genauer, treten die dafür verantwortlichen Funktionen zutage. In Bild 4 wurde ein anderes Layout gewählt, und die Anzeige so verändert, dass die Intensität der blauen Umrandung proportional zum Wert der Taint-Senken-Maßzahl ist.

Bei der Funktion „read_packet()“ handelt es sich um jene, bei der die Command-Injection-Schwachstelle gefunden wurde. Wie man sieht, zieht sie die Aufmerksamkeit auf sich, weil sie sowohl Taint-Quellen als auch Taint-Senken enthält.

Binäre Analysen zum Aufdecken von Attacken

Der gleiche Command-Injection-Defekt lässt sich auch mit dem binären Analysetool von Grammatech finden. Die binäre Analysetechnologie von Codesonar kann optimierte Executables ohne jedes Beiwerk analysieren. Grob gesagt, findet sie die gleiche Art von Defekten, die man auch im Quellcode entdecken kann. Die Fähigkeit diese integrierten Analyse, Quell- und Binärdateien gleichzeitig zu untersuchen, ist immer dann nützlich, wenn man beim Großteil des Projekts auf Binärdateien zurückgreifen kann, während bei einigen Komponenten nur Binärbibliotheken zur Verfügung stehen.

In diesem Fall wurde das Executable geprüft, das durch Kompilieren von UnrealIRCd entstand. Bild 5 zeigt den Screenshot der Warnmeldung. In gewisser Hinsicht lässt sich diese Sicherheitslücke im Maschinencode sogar etwas einfacher verstehen, da die durch den Präprozessor entstandene Verschleierung hier entfernt ist. Während es im Quellcode noch nach dem harmlosen Aufruf eines Makros aussah, sticht der Aufruf von system() hier deutlich heraus.

Eck-DATEN

Grammatech hat sein Analyse-Werkzeug Codesonar 4 mit neuer Funktionalität zum Detektieren von Insider-Attacken ausgestattet. Insider-Attacken basieren häufig auf Sicherheitslücken, die absichtlich in den Code eingebaut wurden, und mit herkömmlichen Methoden nur sehr schwer aufzuspüren sind. Codesonar setzt auf eine Taint-Analysis-Funktionalität, um den Weg potenziell gefährlicher Informationen von ihren Ursprüngen (Taint-Quellen) bis zu den Stellen zu verfolgen, an denen sie Schaden anrichten können (Taint-Senken).

Dr. Paul Anderson

(Bild: Grammatech)
Vice President of Engineering bei Grammatech

(ku)

Sie möchten gerne weiterlesen?