given_to_fly Geschrieben 10. Oktober 2003 Geschrieben 10. Oktober 2003 Hi ihr. Vorweg: Ich bin nicht auf der Suche nach einer Anleitung für Exploits oder sonst irgendwelchen Tools mit denen man Bufferoverflows hervorrufen kann. Meine Frage beschränkt sich eher auf die Entdeckung solcher Fehler. Also da ich mich in letzter Zeit etwas intensiver mit Shellcode u. Exploits beschäftige, stellt sich für mich die Frage wie man solche Zeilen überhaupt im Code findet und diese dann ausnutzt. Dieser Fehler im Code kann doch nur ausgenutzt werden wenn ich es schaffe den ausführbaren Code im Stack so zu platzieren und den passenden Rücksprung auf diesen Teil schaffe. Nun meine Frage: Wie komme ich nun darauf das genau an dieser Stelle ein solcher Fehler möglich ist ? Gut es gibt gewissen Funktionen mit denen so etwas möglich ist ( strcp ) aber ich meine man muss doch irgendwie den Code übergeben können um so etwas herauszufinden ?! Geht man da wirklich Zeile für Zeile den Code durch und schaut sich an wo so etwas möglich sein könnte ? oder wie funktioniert so eine Suche nach einer verwundbaren Stelle im Code ?! Und wie übergebe ich meinen Wert dann genau in diese Stelle ?! z.B. beim Apache über die URL aber da muss man ja auch erstmal draufkommen das wenn ich den Wert so übergebe er dann irgendwann im Codefehler landet ?! Debuggt man dann wirklich das komplette Programm durch und schaut wo welcher Input landet ?! Bei kleineren Programmen ist es ja mit dem gcc auf Assambler ziemlich angenehm aber bei riesigen Programmen wird man doch dabei ziemlich schnell dumm Könnte mir vllt. mal jemand erklären wie das funzt ?! ich kann mir das nicht im geringstem vorstellen... Und BITTE keine Anleitung wie ich so einen Code etc.. schreibe denn ich will nicht das dieser Thread geschlossen wird sondern nur Infos wie man solche Codestellen aufspürt ... Vielen Dank hoffe jemand kann mir da weiterhelfen Zitieren
nic_power Geschrieben 10. Oktober 2003 Geschrieben 10. Oktober 2003 Hallo, Im Prinzip musst Du tatsaechlich den kompletten Quellcode durchgehen und nach moeglichen Bufferoverflows suchen. Es gibt jedoch einige Funktions bzw. Konstrukte, die besonders anfaellig sind (weil beispielsweise eine Bibliotheksfunktion keinerlei Laengernueberpruefung der Argumente durchfuehrt). Das erleichtert die Suche natuerlich um einiges. Es gibt auch Software, die Programme auf Speicherfehler hin untersucht. Das die Suche nach Overflows nicht trivial ist, zeigt auch die Tatsache, dass regelmaessig exploits von Programmen veroeffentlich werden, die bereits seit Jahren als "sicher" gelten. Eine einfache - und vereinfachte - Variante eines Bufferoverflows sieht folgendermassen aus: In Deinem Programm tritt folgende Code-Sequenz auf: char meinBuffer[100]; char rootCommand="/bin/irgendwas"; meinBuffer ist ein Stueck speicher, in dem Du beispielsweise Benutzereingaben zwischenspeicherst. rootCommand ist ein Kommando, welches ueber "system" zu einem bestimmten Zeitpunkt innerhalb des Programms mit root-rechten ausgefuehrt wird. Schaut man sich das Speicherlayout an, wird man feststellen, dass beide Speicherbereiche direkt aneinander grenzen (vereinfacht ausgedrueckt, in der Praxis kann es da noch ein paar feine Unterschiede geben). Wenn jetzt einen Nutzereingabe ohne Laengenueberpruefung in "meinBuffer" kopiert wird, kann es passieren dass der String in "rootCommand" mit einem Teil der Eingabe ueberschrieben wird, sofern diese laenger als der reservierte Speicher ist. D.h., dass im spaeteren Verlauf des Programms nicht mehr /bin/irgendwas ausgefuehrt wird sondern der Teil der Eingabe, der am Ende des Nutzerstrings stand. Nic Zitieren
given_to_fly Geschrieben 13. Oktober 2003 Autor Geschrieben 13. Oktober 2003 Hi. Damit hast du mir schonmal viel weiter geholfen. Aber ein Frage habe ich noch: Bei einer CString Variable könnte das Problem aber nicht auftreten oder ? Sondern nur bei fest vorgegebenen Größen eine Variable .... Zitieren
nic_power Geschrieben 16. Oktober 2003 Geschrieben 16. Oktober 2003 Hallo, das Problem kann auch bei Variablen auftreten, die dynamisch allociert werden (Overflow auf dem Stack), allerdings dürfte das deutlich schwieriger nachzuvollziehen sein, da das Stack-Layout erst zur Laufzeit fest steht. Nic Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.