Sicherheit in vernetzten Systemen - RRZ Universität Hamburg
Sicherheit in vernetzten Systemen - RRZ Universität Hamburg
Sicherheit in vernetzten Systemen - RRZ Universität Hamburg
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