05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2.3 Buffer-Overflows <strong>und</strong> Format-String-Schwachstellen 57<br />

eine der Funktionen aus der printf()-Familie auf dieses Zeichen, so wird<br />

der korrespondierende Wert auf dem Stack als unsigned int interpretiert<br />

<strong>und</strong> in Hexadezimal-Notation ausgegeben. Ein Aufruf der printf()-Funktion,<br />

wie etwa printf("%08x;%08x;%08x;%08x\n");, liefert dem Angreifer da<strong>mit</strong><br />

einen Auszug aus dem aktuellen Programmstack.<br />

Es ist darüber hinaus sogar möglich, durch das Ausnutzen von Format-String-<br />

Schwachstellen einen Auszug von beliebigen Speicherregionen zu erstellen. Dazu<br />

muß der Angreifer allerdings schon etwas tiefer in die Trickkiste greifen.<br />

Es gilt hier, zunächst eine geeignete Adresse auf dem Stack zu plazieren, ab<br />

der die Ausgabe schließlich erfolgen soll. Danach kann dann über %s ein Speicherauszug<br />

erzeugt werden. Das ganze klingt schwieriger als es ist, denn der<br />

Format-String selbst liegt ja ebenfalls auf dem Stack <strong>und</strong> über den Format-<br />

String haben wir als Angreifer schließlich die Kontrolle.<br />

Das Umwandlungszeichen %n bietet eine alternative Technik, ein Programm<br />

über eine Format-String-Schwachstelle zum Absturz zu bringen. Trifft eine der<br />

Funktionen aus der printf()-Familie auf dieses Zeichen, so wird die Anzahl<br />

der bislang von der Funktion ausgegebenen Zeichen an die in der Parameterliste<br />

korrespondierende Adresse geschrieben.<br />

2.3.3 Geeignete Gegenmaßnahmen<br />

Nachdem sowohl Buffer-Overflows als auch Format-String-Schwachstellen immer<br />

auf nachlässige <strong>und</strong> in der Folge fehlerhafte Programmierung zurückzuführen<br />

sind, ist die sicherste Gegenmaßnahme gegen diese beiden Problemfelder<br />

natürlich die Vermeidung derartiger Nachlässigkeiten. In einem<br />

sorgfältig entworfenen Programm werden also u. a. immer alle Eingabewerte<br />

geprüft <strong>und</strong> die jeweiligen Bereichsgrenzen <strong>mit</strong> Hilfe geeigneter Funktionen<br />

eingehalten. Darüber hinaus befinden sich die verwendeten Format-Strings<br />

niemals ganz oder auch nur teilweise außerhalb der Kontrolle des Programms.<br />

Diese Form der Fehlervermeidung ist allerdings stets vom Können <strong>und</strong> auch<br />

von der Aufmerksamkeit der beteiligten Softwareentwickler abhängig, weshalb<br />

der Wunsch nahe liegt, entweder die Fehlerquellen automatisiert aufzudecken<br />

oder zumindest die möglichen Auswirkungen unentdeckter Buffer-Overflows<br />

<strong>und</strong> Format-String-Schwachstellen effizient einzuschränken [Kle04, BST99,<br />

TS01]. Für die automatisierte Lokalisierung diverser Schwachstellen stehen<br />

eine Menge statischer oder semantischer Analysewerkzeuge wie Flawfinder 12 ,<br />

RATS 13 oder Splint 14 zur Verfügung [WK02, WK03]. Eine Beschränkung<br />

der Auswirkungen von Format-String-Schwachstellen <strong>und</strong> Buffer-Overflows<br />

beruht dagegen meist auf speziellen Compiler-Anpassungen wie StackGuard 15<br />

12 http://www.dwheeler.com/flawfinder/<br />

13 http://www.securesw.com/rats/<br />

14 http://www.splint.org/<br />

15 http://www.immunix.org/

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!