|
Jede Möglichkeit, mit Benutzereingaben Speicherbereiche
jenseits der dafür vorgesehenen Variablen zu füllen,
birgt die Gefahr, daß beliebiger Code ausgeführt werden kann.
| |
Auch wenn es im Einzelfalle ziemlich knifflig sein kann,
den passenden Exploit zu einem Buffer mit potentiellen
Überlauf schreiben zu können, wurde dies in vielen
Fällen (mit viel Zeitaufwand) gelöst.
| |
Die Standard-C-Bibliothek bietet viele Gefahrenstellen,
weil alle traditionellen String-Funktionen nur einen Zeiger
erhalten, jedoch keine Länge des dahinter liegenden Buffers.
Erst nach und nach kamen andere Varianten mit diesen
zusätzlichen Parametern hinzu.
| |
Häufig wurden solche Sicherheitslücken zunächst
nur dadurch geschlossen, daß die Eingaben in ihrer Länge
begrenzt wurden und anschließend traditionell weitergemacht
wurde, in der Hoffnung, daß die zugehörigen
Abschätzungen (z.B. bei sprintf) korrekt sind. Diese
Hoffnung hat sehr häufig getrogen.
| |
Somit müssen immer und überall Buffer-Grenzen verifiziert
werden, um sich dagegen zu schützen. Am besten geht dies
durch automatisierte Überprüfungen, die der Compiler generiert.
Leider läßt sich das in C nicht umsetzen.
| |
Wenn C verlangt wird, sollte somit ein vollständiger
Abschied von der C-Bibliothek und traditionellen Buffern
fester Länge für Zeichenketten genommen werden. Bislang
hat dies nur D. J. Bernstein für C bei seinen Netzwerkdiensten
konsequent umgesetzt. Siehe http://cr.yp.to/ |
Copyright © 2002,2003 Andreas F. Borchert, in HTML konvertiert am 11.02.2003 |