Suchen

Software-Sicherheit – Teil 1

Programme per Debugging, Fuzzing und Reverse Engineering analysieren

Seite: 2/3

Firma zum Thema

Debugger, Disassembler und Decompiler

Ob Programmierer oder Reverse Engineer: Ein Debugger muss sein! Mit ihm lassen sich Befehlsfolgen schrittweise ausführen und falls gewünscht, jederzeit pausieren. Solche Haltepunkte (engl. Breakpoints) können je nach Debugger an eine festgelegte Stelle gesetzt oder an eine Bedingung geknüpft werden – etwa den Inhalt eines CPU-Registers.

Da aber in den meisten Fällen der Quellcode einer Applikation nicht bekannt ist, sind Debugger häufig auch vollwertige Disassembler. Bei der Ausführung hängen sie sich an den gewünschten Prozess und zeigen dessen Befehlsfolge mit mnemonischen Symbolen (kurz Mnemonics) an. Die Lesbarkeit des gewonnenen Assembler-Codes hängt jedoch stark von der Programmiersprache und dem verwendeten Compiler ab.

Im besten aller Fälle handelt es sich um ein Java- oder .NET-Programm, dessen Objektdatei noch viele zusätzliche Informationen enthält. Diese können von einem Decompiler dazu verwendet werden, den ursprünglichen Quellcode funktional nachzuempfinden. Generell gilt: Je mehr Debug-Informationen und je weniger Compiler-Optimierungen, desto leichter lässt sich ein Programm im Nachhinein analysieren und verstehen.

Applikationen mittels Fuzzing unter Beschuss nehmen

Sobald der Code in disassemblierter oder auch dekompilierter Form vorliegt und verstanden wurde, folgt der wohl wichtigste Schritt: Interessante Stellen lokalisieren und isolieren. Aus der Sicht eines Bug Hunters sind dies all jene Orte im Programm, an denen externe Daten (weiter)verarbeitet werden. Von Dateien, die gelesen werden bis hin zu Umgebungsvariablen, variieren die möglichen Angriffsvektoren enorm.

Sind sie allerdings gefunden, kommen häufig so genannte Fuzzing-Werkzeuge zum Einsatz. Diese generieren zufällige Daten, die dann als Eingabewerte in das Programm gespeist werden und dieses aus dem Tritt bringen sollen. Allzu zufällig dürfen sie jedoch häufig auch nicht sein, da viele Programme sie sonst direkt wieder verwerfen. Ist dieser Spagat endlich gelungen, heißt es warten.

Der am meisten kritisierte Aspekt dieser Technik, ist die Ungewissheit. Es ist völlig unabsehbar, ob und wann genau ein Fehler gefunden wird. Wer sicher gehen will, kommt an einer manuellen Bewertung des disassemblierten Codes nicht vorbei. Unternehmen wie Immunity oder Zynamics haben dieses Problem erkannt und spezielle Debugger entwickelt, die das Auffinden von Software-Fehlern stark vereinfachen sollen.

Inhalt

  • Seite 1: Software als Einfallstor
  • Seite 2: Debugger, Disassembler und Decompiler
  • Seite 3: Verhaltensmuster in einer Sandbox analysieren

(ID:2050210)