Home arrow Papers arrow Papers (German) arrow Funktionshooking unter Linux 1: LD_PRELOAD (German)

main

Home
Blog
IRC


Netgarage RSS Feed
Linux Powered
Hacker Emblem
Apache 2.0 Power
Valid XHTML








Funktionshooking unter Linux 1: LD_PRELOAD (German)
Written by cr   
Wednesday, 16 May 2007
Ein etwas älterer Text der Möglichkeiten des Funktionshooking unter Linux beschreibt in 4 Teilen. Teil 1 bschreibt an einem einfachen Beispiel LD_PRELOAD.

Funktionshooking Teil 1: LD_PRELOAD

LD_PRELOAD ist eine Umgebungsvariable der Shell, die angibt welche dynamischen
Bibliotheken zur Laufzeit in das Programm geladen werden. Dadurch ist es
möglich eigenen Code mit Hilfe anderer Programme auszuführen.

Beispiel:
Ein Programm namens geteuid das über die Systemfunktion geteuid() die euid des
ausführenden Users abfragt.

-------------geteuid.c-----------------

#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>

int main(void)
{
printf("EUID=%i\n",geteuid());
return 0;
}

-------------geteuid.c-----------------

cr@chronos:~$ gcc -o geteuid geteuid.c
cr@chronos:~$ ./geteuid
EUID=1000
cr@chronos:~$

Wenn wir jetzt uns selber eine andere euid geben wollen könnte man das zb. über
eine eigene geteuid()Funktion machen.
Dazu schreiben wir als erstes die entsprechende Funktion:

-------------euid.c-----------------

#include <unistd.h>
#include <sys/types.h>

uid_t geteuid(void)
{
return 666;
}

-------------euid.c-----------------

Im Anschluss kompilieren wir diese als shared libary:

gcc -c -fPIC euid.c
gcc -shared -Wl,-soname,libeuid.so.1 -o libeuid.so euid.o

Wenn wir jetzt export LD_PRELOAD=./libeuid.so machen und anschliessend
das ursprüngliche Programm geteuid ausführen erhalten wir die korrigierte guid.

Eleganter ist es dafür ein kleines Shellscript zu basteln wie zb:

------------seuid.sh-----------------

#!/bin/sh
export LD_PRELOAD=./libeuid.so
exec ./geteuid

------------seuid.sh-----------------

cr@chronos:~$ chmod +x seuid.sh
cr@chronos:~$ ./seuid.sh
EUID=666
cr@chronos:~$


Schutz:
Prüfen ob zum Zeitpunkt der Ausführung des Programms die Umgebungsvariable
gesetzt ist und gegebenenfalls das Programm abbrechen. Einen weiteren Schutz
bietet die Tatsache das setuid root Programme die LD_PRELOAD Variable nicht
nutzen wenn die wirkliche uid nicht 0 (root) ist.

Info:
Autor cr

Last Updated ( Friday, 18 May 2007 )
 
< Prev