17.06.2014 Aufrufe

Sicherheit in vernetzten Systemen - RRZ Universität Hamburg

Sicherheit in vernetzten Systemen - RRZ Universität Hamburg

Sicherheit in vernetzten Systemen - RRZ Universität Hamburg

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.

11.3. GRUNDLAGEN (WIEDERHOLUNG)<br />

entspricht hierbei der <strong>in</strong> Abbildung 11.1. Neue Variablen werden auf dem Stack beg<strong>in</strong>nend mit hohen<br />

Speicheradressen und zu den niedrigeren Speicheradressen fortschreitend angelegt. Man sagt, daß der<br />

Stack „von oben nach unten“ wächst 10 (auf Abbildung 11.1 <strong>in</strong> Pfeilrichtung), so daß <strong>in</strong> unserem Beispiel<br />

der Stackpo<strong>in</strong>ter und die Parameter gewissermaßen „über“ dem str<strong>in</strong>g buffer liegen, weil diese<br />

vorher dort abgelegt wurden.<br />

bottom of<br />

memory<br />

Stack<br />

buffer sfp ret *str<br />

top of<br />

memory<br />

top of stack<br />

bottom of<br />

stack<br />

Abbildung 11.1: Der Ausführungsstack unter Unix (Beispiel) (nach [Aleph One 1997])<br />

Bei dem <strong>in</strong> der Funktion enthaltenen strcpy() Befehl wird der Puffer buffer jedoch von unten nach<br />

oben überschrieben, so daß tatsächlich der vom Unterprogramm abgespeicherte Framepo<strong>in</strong>ter(sfp),<br />

die Rücksprungadresse(ret), und sogar die Variable *str selbst überschrieben wird.<br />

In der Praxis ist die Folge meistens e<strong>in</strong>e Schutzverletzung (segmentation fault), da bei Beenden des<br />

Unterprogramms versucht wird, die Rücksprungadresse aufzusuchen, die durch zufällig im Str<strong>in</strong>g<br />

vorhandene Daten überschrieben wurde. Wenn allerd<strong>in</strong>gs (z.B. <strong>in</strong> e<strong>in</strong>er Str<strong>in</strong>gvariable) im Speicher e<strong>in</strong><br />

Masch<strong>in</strong>enprogramm abgelegt wird, das etwa unter Unix e<strong>in</strong>e shell aufruft, und der Puffer gezielt mit<br />

der Adresse dieses Masch<strong>in</strong>enprogramms überschrieben wird, ist der Effekt deutlich kontrollierter:<br />

Da die Rücksprungadresse der Funktion mit der Adresse e<strong>in</strong>es gültigen Masch<strong>in</strong>enprogramms überschrieben<br />

wurde, wird nach Beendigung der Funktion die Kontrolle an eben dieses Programm übergeben.<br />

So läßt sich an e<strong>in</strong> Programm, das diesen Implementierungsfehler 11 enthält, beliebiger Programmcode<br />

übergeben, der dann mit den Rechten des laufenden Prozesses ausgeführt wird. Da unter<br />

Unix e<strong>in</strong>ige Prozesse mit den Rechten des Benutzers root laufen, ist dies e<strong>in</strong>e Möglichkeit, sich<br />

unautorisiert root-Rechte auf e<strong>in</strong>em System zu verschaffen.<br />

Es ist wichtig zu bemerken, daß diese Technik nur bei Programmen funktioniert, die auf diese spezielle<br />

Art falsch implementiert wurden. Allerd<strong>in</strong>gs bekommt man beim Lesen der Mail<strong>in</strong>gliste bugtraq<br />

(die unter [securityfocus] archiviert wird), den E<strong>in</strong>druck, daß dieses Problem auf e<strong>in</strong>en Großteil der<br />

e<strong>in</strong>gesetzten Programme zutrifft. Fast alle gängigen Anwendungen oder Serverprogramme enthalten<br />

oder enthielten zu irgende<strong>in</strong>er Zeit e<strong>in</strong> derartiges Problem 12 .<br />

Wird e<strong>in</strong> „buffer overrun“ Problem bei e<strong>in</strong>er Software bekannt, schreibt irgendjemand e<strong>in</strong> Programm,<br />

was diese <strong>Sicherheit</strong>slücke ausnutzt (im allgeme<strong>in</strong>en werden solche Programme als „exploits“ bezeichnet).<br />

In der Regel wird das Programm dann auf e<strong>in</strong>er Mail<strong>in</strong>gliste (wie z.B. bugtraq) veröffentlicht,<br />

um zu demonstrieren, daß die <strong>Sicherheit</strong>slücke ausgenutzt werden kann, aber auch um Adm<strong>in</strong>istratoren<br />

die Möglichkeit zu geben, zu testen, ob ihr Server verwundbar ist. Die Etikette gebietet<br />

zwar, mit der Veröffentlichung e<strong>in</strong>es „exploits“ zu warten, bis e<strong>in</strong> Patch für das Problem erhältlich<br />

ist, aber selbst wenn sich daran gehalten wird, bedeutet das noch lange nicht, daß alle betroffenen<br />

10 dieses Wachsen „nach unten“ ist laut [Aleph One 1997] auf vielen Prozessorarchitekturen die Regel.<br />

11 Die Möglichkeit, daß e<strong>in</strong> Puffer <strong>in</strong> nicht vom Programmierer beabsichtigter Weise überschrieben werden kann.<br />

12 So z.B. sendmail, syslog, XFree86, wu-ftp, pro-ftp, p<strong>in</strong>e, CDE, die rpc-Suite und viele, viele mehr.<br />

SS 99, Sem<strong>in</strong>ar 18.416: <strong>Sicherheit</strong> <strong>in</strong> <strong>vernetzten</strong> <strong>Systemen</strong> 173

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!