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.

52 2 Programmieren <strong>mit</strong> <strong>Unix</strong>-Prozessen<br />

StackSegment<br />

Neuer Code<br />

Zeiger<br />

Zeiger<br />

4 Füllzeichen<br />

8 Füllzeichen<br />

Exploit<br />

Rücksprungadresse<br />

StackBasiszeiger<br />

int ok;<br />

char buffer[8];<br />

HeapSegment (dynamische Bereiche)<br />

BSS/DataSegment (globale Variablen)<br />

TextSegment (Programmcode)<br />

Abb. 2.8. Einbringen eigenen Codes in Beispiel 2.11<br />

verprogramms – <strong>und</strong> das sind sehr oft Administratorrechte! – der interaktive<br />

Zugriff auf das betroffene Rechnersystem möglich wird.<br />

Bei den bislang beschriebenen Buffer-Overflows handelt es sich durchwegs<br />

um die klassischen, Stack-basierte Buffer-Overflows, bei denen die Puffer,<br />

deren Grenzen (un)absichtlich überschritten werden, durchwegs im Stack-<br />

Segment des laufenden Programms untergebracht sind. Ist der Buffer-Overflow<br />

im Heap-Segment angesiedelt, dies ist z. B. bei allen <strong>mit</strong>tels malloc() <strong>und</strong><br />

Co. angeforderten Speicherbereichen der Fall, spricht man stattdessen von<br />

einem Heap-basierten Buffer-Overflow. Die überschreibbaren Puffer der BSSbasierten<br />

Buffer-Overflows liegen analog dazu im BSS-Segment (dies betrifft<br />

die globalen <strong>und</strong> die statisch vereinbarten lokalen Variablen). Die hier nicht<br />

weiter besprochenen Angriffsmethoden gegen diese Overflow-Varianten sind<br />

dabei eng <strong>mit</strong> den Stack-basierten Angriffen verwandt.<br />

Die überwiegende Zahl von Buffer-Overflows kann direkt zu einer fahrlässigen<br />

Verwendung einer unsicheren Routine der C-Bibliothek zurückgeführt werden.<br />

In den meisten Fällen handelt es sich dabei um String-Operationen wie<br />

strcpy(), strcat(), sprintf(), odergets(). Insofern sind pauschale Regeln<br />

wie vermeide strcpy()“ oder benutze niemals gets()“ ganz sicher<br />

” ”<br />

nicht die schlechtesten Ratgeber. Die gets()-Funktion ist praktisch das Paradebeispiel<br />

für die für Buffer-Overflows anfälligen Funktionen: Die Funktion<br />

liest eine Textzeile von der Standard-Eingabe <strong>und</strong> beachtet dabei keinerlei<br />

Puffergrenzen. Der Lesevorgang endet erst dann, wenn in der Eingabe ein<br />

Zeilentrenner oder das Dateiende erreicht ist. Die passende Alternative zu<br />

gets() liefert die Funktion fgets(), <strong>mit</strong> der sich die gleichen Aufgaben lösen

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!