Buffer overflow

Angenommen Ihr System geht davon aus,
das Ihr Parameter (Eingabe; Übergabe) maximal 60 Zeichen umfasst. Was
passiert in Ihrem Programm wenn der Parameter mehr als das angenommene
hat ? In den meisten Programmiersprachen wird für den Buffer ein
Speicherbereich angefordert in den dieser Parameter geschrieben wird.
Dieser Speicherbereich hat nun eine vorgegeben Grösse. Hinter diesem
reserviertem Bereich stehen die Daten der nächsten Variable oder ein
Programmteil (was auch immer…).
Nun überschreibt der Parameter ( > 60 Zeichen) einen Teil des
dahinterligenden Speichers. Im Normalfall bekommt der Anwender einen
Absturz des Systems mit. Der Einbrecher jedoch kann dies ausnützen
indem er diese Schwäche ausnützt. So geschen bei Sendmail im Bereich
des VRFY Commands.

echo "vrfy" ‚perl -e ‚print "a" x 1000“" | nc www.targetsystem.com 25

Der Buffer des VRFY-Commands hat 128 Byte. Mit der übermittelden Anzahl
von 1000 Byte stirbt der Sendmaildaemon (Denial of Service).
Schlimmer wird damit:

char shellcode[] =
"xebx1fx5ex89x76x08x31xc0x88x46x07x89x46x0cxb0x0b"
"x89xf3x8dx3ex08x8dx56x0cxcdx80x31xdbx89xd8x40xcd"
"x80xe8xdcxffxffxff/bin/sh";
 

 Der Angreifer erhält ROOT-ACCESS da der Sendmaildaemon (der gerade gestorben ist) mit Rootrechten läuft !!!!!
Schutz gegen solche Attacken (bei eigenen Programmen )
Besserer Programmierstil (vor allem Fehlerquellen wie Eingaben und Parameterübergaben)
Verwenden Sie andere Compiler die Sie dabei unterstützen (UNIX: http://immunix.org/)
Verwenden Sie sicherer Routinen : fget(), strncopy(), strncat() usw…..
Reduzieren Sie die Codezeilen die unter anderen Berechtigungen laufen (SUID)
Solaris (mit Vorsicht zu genissen)
/etc/system
set noexec_user_stack=1
 set noexec_user_stack_log=1

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert