libsafe


- Veröffentlicht in freeX 01/01 -



Bei den CERT-Meldungen in den Jahren 1997 bis 1999 nehmen Buffer-Overflow-Lücken einen Anteil von ca. 50% der gesamten Meldungen in Anspruch. Bei derartigen Angriffen nutzt ein Angreifer den Umstand aus, das C-Programme Funktionsparameter auf dem Stack hinterlegen. Diese Parameter sind üblicherweise nicht beschränkt und können von einem Angreifer dazu benutzt werden einen Überlauf des Puffers herbeizuführen. Diese überschüssigen Daten können ein von einem Angreifer erzeugter Code sein, der dem Angriff dient. Ein Buffer-Overflow kann in der Weise erfolgen, daß die vom Programm vermerkte Rücksprungadresse auf den eigenen schädlichen Code zeigt.

Mit dem Programm libsafe werden die wichtigsten Standardfunktionen zur Speichermanipulation überwacht. Die folgende Tabelle zeigt diese Funktionen.

FunktionPotentielle Gefährdung
strcpy(char *dest, const char *src) dest
strcat(char *dest, const char *src) dest
getwd(char *buf) buf
gets(char *s) s
fscanf(FILE *stream, const char *format, ...) alle Argumente
scanf(const char *format, ...) alle Argumente
realpath(char *path, char resolv_path[]) path
sprintf(char *str, const char *format, ...) str

Die Installation erweist sich als erfreulich einfach. Die Datei ist unter http://www.bell-labs.com/org/11356/html/security.html oder als RPM-Paket unter http://linuxfort.com/libsafe erhältlich. Mit make werden die Bibliothek libsafe.o und die mitgelieferten Exploits erzeugt und die anschließende Installation erfolgt mit make install. Falls eine Benachrichtigung per E-Mail über potentielle Sicherheitsprobleme gewünscht wird, ist die Option -DNOTIFY_WITH_EMAIL vor der Übersetzung in ./libsafe/src/Makefile zu setzen.

Die Nutzung von libsafe erfolgt durch Setzen der Umgebungsvariablen LD_PRELOAD vor dem Start der Applikation. Dies kann in den Dateien .profile oder .cshrc aber auch in einem entsprechenden Startskript erfolgen. Die Shell-Syntax ist dabei wie folgt,

LD_PRELOAD=/lib/libsafe.so.1
export LD_PRELOAD

Für die csh ist die Syntax

setenv LD_PRELOAD /lib/libsafe.so.1

Um die Wirkungsweise von libsafe zu testen, können die mitgelieferten Exploits aufgerufen werden. Wie das folgende Beispiel verdeutlicht, wird die Ausführung des Programms exploit-non-exec-stack verhindert.

$ ./exploit-non-exec-stack
This program demonstrates how a (stack) buffer overflow
can attack linux kernels with *non-executable* stacks.
This is variation on return-int-libc attack.
If you get a /bin/sh prompt, then the exploit has worked.
Press any key to continue...
Detected an attempt to write across stack boundary.
Terminating /opt/libsafe/exploits/exploit-non-exec-stack.
$

Im Hintergrund spielt sich dabei folgendes ab. Vor Programmausführung wird die Größe der reservierten Bereiche im Stack für die einzelnen Parameter ermittelt. Anschließend werden die Zählervariablen überprüft, sind diese größer als der reservierte Bereich, wird das Programm mit SIGKILL abgebrochen und ein entsprechender Log-Eintrag in die Datei /var/log/secure geschrieben.

Oct 11 09:42:08 localhost libsafe.so[824]: version 1.3
Oct 11 09:42:08 localhost libsafe.so[824]: detected an attempt to write across stack boundary.
Oct 11 09:42:08 localhost libsafe.so[824]: terminating /opt/libsafe/exploits/exploit-non-exec-stack
Oct 11 09:42:08 localhost libsafe.so[824]: overflow caused by memcpy()



| Home | Artikel | Bücher | Touren | Photos | Impressum |
Rücksprachen, Anmerkungen, Anregungen, .... bitte an info@noatun.net