Montag, 1. Dezember 2008

News

präsentiert von: entwickler.com
Donnerstag, 16. Juni 2005

About Security #10: Software- Audit — Schwachstellensuche in Binaries

About Security #10: Software-Audit — Schwachstellensuche in Binaries

In About Security #9 erfuhren Sie, wie Pufferüberlauf-Schwachstellen im Sourcecode gefunden werden können. Der liegt aber nicht immer vor, Schwachstellen z.B. in Bibliotheken müssen in den fertig kompilierten Binärdateien gesucht werden. In dieser Folge geht es um die Frage, wie Sie Pufferüberlauf-Schwachstellen in Binaries finden können. Dafür gibt es drei Lösungsansätze: Die Fault Injection, die dynamische Analyse und das Reverse Engineering.

N E U ! Security aktuell
Täglich aktuelle Security-Infos!

Fault Injection

Bei der Fault Injection wird das zu untersuchende Programm mit überlangen oder ungewöhnlichen Parametern aufgerufen bzw. Environment-Variablen auf entsprechende Werte gesetzt. Enthält das Programm eine Pufferüberlauf-Schwachstelle, wird es eine unerwartete Reaktion auf die Eingabe geben, meist einen Absturz. Läuft das Programm normal weiter, enthält es entweder keine durch den entsprechenden Parameter ausnutzbare Pufferüberlauf-Schwachstelle oder der übergebene Parameter war noch nicht groß genug.

Zum einen kann das Programm manuell mit entsprechenden Parametern aufgerufen werden, zum anderen gibt es spezielle Testprogramme dafür. Dabei unterscheidet man zwischen hostbasierten und netzwerkbasierten Programmen.

Hostbasierte Programme sind z.B. BFBTester und Sharefuzz. BFBTester (Brute Force Binary Tester) kann einzelne und mehrere Parameter oder Environment-Variablen entsprechend manipulieren. Sharefuzz dient ausschließlich der Suche nach Pufferüberlauf-Schwachstellen bei der Verarbeitung von Environment-Variablen.

Netzwerkbasierte Programme sind z.B. Hailstorm oder Spike. Hailstorm dient der Suche nach Schwachstellen in Webanwendungen. Außer nach Pufferüberlauf-Schwachstellen kann das Programm auch nach Cross-Site-Scripting- und SQL-Injection-Schwachstellen suchen. Spike dient der Untersuchung von Netzwerkprotokollen und der damit verbundenen Programme.

Dynamische Analyse

Bei der dynamischen Analyse, d.h. der Analyse während der Laufzeit, werden zwei Sorten von Programmen eingesetzt: Tracer und Debugger.

Ein Tracer protokolliert den Ablauf eines Programms. Das erstellte Protokoll wird danach auf verdächtige Vorfälle wie z.B. ungeprüfte Puffer untersucht. Es ist auch möglich, die Verwendung von Variablen nachzuvollziehen und diese dann später gezielt mittels Fault Injection zu testen.

Ein Debugger kann nicht nur wie ein Tracer den Ablauf protokollieren, sondern ihn auch manipulieren. Die möglichen Manipulationen reichen vom Verschieben des Instruction Pointers bis zur Änderung von Variablen oder Befehlen. Bekannte Beispiele für Debugger sind der Gnu-Debugger gdb und der 2006 eingestellte Debugger SoftICE.

Reverse Engineering
About Security: Die komplette Serie

Beim Reverse Engineering wird zu einem vorhandenen Programm der Sourcecode entwickelt. Dazu wird das Programm disassembliert oder dekompiliert. Ein dazu häufig verwendetes Programm ist der interaktive Dissassembler IDA-Pro. Interaktiv bedeutet in diesem Zusammenhang, dass der Entwickler während des Dissassemblierens selbst entscheidet, ob Daten als Daten oder Code interpretiert werden sollen. Als Ergebnis erhält man den Sourcecode des Binary in Assembler. Darin kann dann, wie beim Sourcecode Audit beschrieben, nach verdächtigen Funktionsaufrufen gesucht werden. BugScam, eine Erweiterung für IDA-Pro, hilft dabei.

Ein Beispiel

Ein nur binär vorliegendes Programm soll auf Pufferüberlauf-Schwachstellen untersucht werden. Dabei könnte es sich z.B. um einen Editor handeln, der über die Kommandozeile mit dem Namen der zu öffnenden Datei aufgerufen wird. Zuerst kann man versuchen, mittels Fault Injection eine ungewöhnliche Reaktion hervorzurufen:

tester edit `perl -e 'print "A"x1024'`

Damit wird der Editor mit einem 1024 Zeichen langen Parameter als Name der zu öffnenden Datei aufgerufen. Kommt es zu einem Pufferüberlauf, wird höchstwahrscheinlich ein Segmentation fault gemeldet. Vielleicht reicht einem das Ergebnis schon, vielleicht möchte man aber auch mehr wissen. Wenn schon ein überlanger Dateiname zu einem Pufferüberlauf führt, gibt es vielleicht noch mehr derartige Schwachstellen. In diesem Fall könnte z.B. eine nähere Untersuchung der Environment-Variablen interessant sein. Aber auch weitere Kommandozeilenparameter sind lohnende Testobjekte. Um sich die Suche zu erleichtern, kann man nun z.B. BFBTester verwenden:

tester bfbtester -a edit
*** Crash </home/test/edit> ***
args: -h [05120]
envs:
Signal: 11 ( Segmentation fault )
Core? Yes

Das Programm ist beim Aufruf mit der Option -h und einem 5.120 Zeichen langen Parameter mit einem Segmentierungsfehler abgestürzt. Möchte man noch mehr wissen, kann man mit einem Debugger den Programmablauf näher untersuchen. Dabei interessiert dann meist die Frage, ob es sich um eine reine Denial-of-Service-Schwachstelle handelt oder ob die Ausführung eingeschleusten Codes möglich ist. Notwendig hierfür ist das Überschreiben für den Programmablauf wichtiger Variablen.

Damit ist das Thema "Pufferüberläufe" vorerst abgeschlossen. Ab der nächsten Folge geht es um die Sicherheit von Webanwendungen, zuerst um SQL Injection.

Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

About Security – Übersicht zum aktuellen Thema "Eine typische Schwachstelle: Der Pufferüberlauf"

Konferenzen

BASTA! Spring 2009

BASTA! Spring 2009

23.-27. Februar 2009
Maritim Rhein-Main Hotel Wissenschaftsstadt Darmstadt

BASTA! Italia 2009

BASTA! Italia 2009

16.-18. März 2009
Holiday Inn EUR Parco dei Medici, Roma

PHPCon Italia 2009

PHPCon Italia 2009

18.-20. März 2009
Holiday Inn EUR Parco dei Medici, Roma

JAX 09

JAX 09

20.-24. April 2009
Rheingoldhalle Mainz

webinale 09

webinale 09

25.-27. Mai 2009
Berlin

Werbung
Top-Jobs

Software & Support Verlag GmbH

Volontär (w/m) Redaktion, Vollzeit

Software & Support Verlag GmbH

Redakteur (m/w), Vollzeit

Endress+Hauser GmbH+Co. KG

Entwickler Datenbanksysteme (m/w)

Signsoft GmbH

Java-Entwickler (m/w)

Software & Support Verlag GmbH

Lektor (m/w), Vollzeit
JAX 09

Magazine

Entwickler Magazin - Enterprise Technologies & Business Solutions

Entwickler Magazin

Enterprise Technologies & Business Solutions

dot.net magazin - die unabhängige Quelle für .NET-Technologien

dot.net magazin

Die Quelle für .NET-Technologien

Eclipse Magazin

Eclipse Magazin

Weltweit erstes Magazin für Eclipse-Entwickler

Java Magazin - Internet & Enterprise Technology

Java Magazin

Internet & Enterprise Technology

CREATE OR DIE - Ein Leben für die Kreativität

CREATE OR DIE

Ein Leben für die Kreativität

Business Technology - Management Magazin

Business Technology

Management Magazin

PHP Magazin - Professional PHP Development

PHP Magazin

Professional PHP Development

Bücher


hosted by HostEurope