|
Fast alle Buffer-Overruns legen den auszuführenden
Code in den Buffer auf den Stack.
| |
Da normalerweise der Stack-Bereich keinen ausführbaren
Code enthält, ist es sinnvoll, hier die Ausführungsrechte
wegzunehmen. Dies ist bei allen modernen Prozessoren möglich.
| |
Unter Solaris läßt sich das mit Kernel-Parametern
einrichten, die leider so nicht voreingestellt sind, unter
Linux ist das ein wenig komplizierter, hier wird ein
Kernelpatch benötigt.
| |
Wenn es dann trotzdem probiert wird, gibt es einen
schönen Eintrag im Log:
|
/var/adm/messages |
Jun 26 03:31:40 turing genunix: [ID 533030 kern.notice] NOTICE: buggyd[8971] attempt to execute code on stack by uid 120 |
Man hüte sich jedoch davor anzunehmen, dies reiche aus.
Für Solaris 7 und 8 gibt es einen Remote-Root-Exploit für
snmpxdmid, dem es gelingt, den auszuführenden Code
im Heap unterzubringen, wo diese Restriktion nicht greift.
| |
Auch in unserem Fall findet sich der Code im Heap, denn
die Funktion readstr kopiert ihn mit strdup genau dort hin.
Allerdings ist es in der Regel schwieriger, die
richtige Adresse im Heap, an der die Kopie landet,
vorauszusagen.
|
Copyright © 2002 Andreas Borchert/Christian Ehrhardt, in HTML konvertiert am 18.06.2002 |