![]() |
|
URL dieser Newsmeldung:
02.06.2005
About Security #8: Vorbeugung — Pufferüberläufe verhindernWie Entwickler Pufferüberlaufschwachstellen in ihren Programmen verhindern können, erfahren Sie in dieser Folge. N E U ! Security
aktuell Ursache eines Pufferüberlaufs ist das ungeprüfte Kopieren von vom Benutzer gelieferten Daten in Puffer fester Größe. Um einen Pufferüberlauf zu verhindern, müssen also "nur" alle von außen kommenden Daten vor dem Schreiben auf ihre Größe geprüft werden. Und zwar wirklich alle Daten, unabhängig davon, wie sie an das Programm übergeben wurden. Nur die innerhalb des eigenen Programms geprüften Daten sind sicher. Einige Beispiele:
Pufferüberläufe verhindern
Die erste Maßnahme besteht darin, keine Funktionen zu verwenden, die
Daten ungeprüft kopieren. In einigen Sprachen, z.B. in Java, wird die
Größe automatisch während der Laufzeit überprüft.
In C sollte man z.B. beim Kopieren eines Strings statt der Funktion
Die nächste Möglichkeit besteht im Austausch gefährlicher Funktionen durch sichere Versionen. Diesen Ansatz verfolgt die Linux-Bibliothek Libsafe: Die gefährdeten Funktionen der Bibliothek libc werden durch Versionen ersetzt, die die Größe der kopierten Daten überwachen. Dadurch werden alle Programme, die diese Funktionen verwenden, ohne weitergehende Anpassung geschützt. Die aktuelle Version von Libsafe ist allerdings von 2002, und in der Zwischenzeit wurden Schwachstellen in der Bibliothek gefunden, z.B. im April 2005 eine Möglichkeit, die Schutzfunktion in bestimmten Fällen zu umgehen. Eine weitere Möglichkeit besteht in der Modifikation des Compilers. StackGuard (PDF), ein Patch für den C-Compiler gcc, schützt die Rücksprungadresse. Unter der Rücksprungadresse wird ein Kontrollzeichen, genannt Canary, gespeichert. Dessen Wert wird vor dem Rücksprung aus der Funktion überprüft. Wurde es verändert, wird eine Warnmeldung ins Syslog geschrieben und das Programm beendet. Inzwischen wurde StackGuard durch das von IBM aus dessen Prinzipien weiterentwickelte ProPolice ersetzt. IBM nennt das Verfahren auch "GCC extension for protecting applications from stack-smashing attacks", kurz "stack-smashing protector (ssp)". Für Linux gibt es auch die gcc-Erweiterung StackShield. Dabei wird bei jedem Funktionsaufruf die Rücksprungadresse am Anfang des Datensegments gesichert und vor dem Rücksprung mit der auf dem Stack gespeicherten Version verglichen. Stimmen die Adressen nicht überein, wird das Programm beendet oder die ursprüngliche Adresse restauriert. Der dazu notwendige Code wird am Anfang und Ende jedes Funktionsaufrufs eingefügt. Am einfachsten lassen sich Pufferüberläufe bzw. allgemein Schwachstellen verhindern, wenn dies gleich beim Entwurf der Software berücksichtigt wird. Es besteht aber auch die Möglichkeit, später noch nach möglichen Schwachstellen zu suchen. Diese Audit-Verfahren sind das Thema der nächsten Folge. Wenn Sie Fragen oder Themenvorschläge haben, können Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen! About Security – Übersicht zum aktuellen Thema "Eine typische Schwachstelle: Der Pufferüberlauf"
About Security (#1): IT-Sicherheit -- Was ist das eigentlich? (http://www.entwickler.com/itr/news/psecom,id,21135,nodeid,82.html) About Security (#2): Angriffsszenarien (http://www.entwickler.com/itr/news/psecom,id,21262,nodeid,82.html) About Security (#3): Eindringlinge abwehren (http://entwickler.com/itr/news/psecom,id,21388,nodeid,82.html) About Security (#4): Gefährdung aus der Peripherie (http://www.entwickler.com/itr/news/psecom,id,21551,nodeid,82.html) About Security (#5): Der Pufferüberlauf (http://www.entwickler.com/itr/news/psecom,id,21633,nodeid,82.html) About Security (#6): Ausnutzung von Pufferüberlauf- Schwachstellen (http://www.entwickler.com/itr/news/psecom,id,21754,nodeid,82.html) About Security (#7): Gegenwehr -- Pufferüberläufe verhindern (http://www.entwickler.com/itr/news/psecom,id,21897,nodeid,82.html) |
||
|