Es ist wichtig, die typischen Fallen zu kennen, um sie zu vermeiden
CWE Common Weekness Enumeration listet typische Schwachstellen auf - jeder CVE sind ein oder mehrere CWE zugeordnet.
ein Bufferoverflow tritt dann auf, wenn in der Programmiersprache C/C++, die Grösse eines Speicherbereichs nicht überprüft wird. Diese sollten aus der libc entfernt werden, bzw. mit Codecheckern gejagt werden! (vgl. Fehlersuchtechniken) der gcc hat (ab Version 4.2) eine Option -fstack-protector. (siehe GCC instrumentation Options). Nach jedem Rücksprung wird ein "canary value" eingeführt. Wenn dieses überschreiben wird, wird eine Ausnahme (z.b. kernelpanic ausgelöst)
siehe auch Buffer overflow Protection Der virtuelle Speicher (MMU) kann die Ausführung von Code sperren - en. Wikipedia über NX bit (vgl. mprotect(2) für Speichersegmente). Segmente, in denen Code nichts zu suchen hat, wie Stacksegment, und bewusste Datensegmente können so für die Codeausführung gesperrt werden.
Gegenmaßnahmen
Vermeidung von alten libc-Funktionen
Folgende Funktionen aus der libc sollte man nicht mehr verwenden:
Stackprotection des Compilers
siehe auch Stack Smashing Protector, erfunden von IBMData Execution Prevention DEP/NX
(Vorsicht: Java umging diese Sicherheit, indem es diesen Mechanismus ausschaltet, daher kann trotzdem Schadcode ausgeführt werden, der dann andere Bufferoverflows sucht - aus dem eigenen System heraus. [RPO])
In Linux macht das Exec_Shield. Ein Problem ist, dass nur neuere Prozessoren das NX bit unterstützen.
Executable Space Protection ist das selbe wie DEP
StackGhost: Hardware Facilitated Stack Protection beschreibt Stackprotection auf SPARC-Prozessoren und anderen.
Code, Stack, DLLs werden an einen zufälligen Platz gelegt, damit die Bufferoverflows nicht statisch bekannt sind. [RPO]
In Linux ist das eingeschaltet, man kann es explizit für Experimente ausschalten: In /proc/sys/kernel/randomize_va_space kann man ASLR an und ausschalten, voreingestellt ist 2=eingeschaltet, siehe auch Linux and ASLR: kernel/randomize_va_space.
Cracker machen dann Spaying: Test mehrerer Adressen - dies führt dann aber zu auffälligen Signaturen
Oftmals bauen WWW-Seiten auf Datenbanken auf. Gibt man Metazeichen im Eingabeformular ein, so kann man die SQL-Anweisung modifizieren und mehr Informationen herauslesen oder gar modifizieren ...
Daher muss beim Programmieren die Eingabe auf solche Metazeichen überprüft werden ! (z.B mit regulären Ausdrücken.)
DVWA Damn Vulnerable Web Application ist ein Beispiel, um die Gefahren zu verstehen und zu lernen, Fehler nicht zu machen.
Neue Kanäle können auch zur Erlangung von Privilegien genutzt werden, die man sonst nicht hat: