Was ist eine Format-String-Sicherheitslücke?
Um zu verstehen, was für ein Format-String-Lücke ist, müssen Sie zunächst wissen, was eine Format-String ist. Eine Format-String ist ein Weg, sagt der C-Compiler, wie sie sollte Format-Nummern, wenn sie gedruckt werden.
Format-Strings in C
In der Programmiersprache C gibt es eine Reihe von Funktionen, die ein Format-String als Argument. Zu diesen Funktionen gehören fprintf, printf, sprintf, snprintf, vfprintf, vprintf, vsprintf, vsnprintf, setproctitle, syslog und anderen.
Die häufigste von ihnen ist printf. Die Verwendung von printf ist:
printf Format [Argumente ...]
printf gibt den Wert von [Argumente ...] in dem Format von Format.
Ein Beispiel zu nennen printf ist:
printf ( "Der Bereich ist:% d \ n", 303);
Unterstützte Format Spezifikation unterscheiden sich von einem C-Compiler, um zur nächsten. Das Format Spezifikation unterstützt unter FreeBSD sind:
% d Ganzzahl zu konvertieren unterzeichnet decimal String. % u Ganzzahl zu konvertieren unsigned decimal String. % i Ganzzahl zu konvertieren unterzeichnet decimal string; die Ganzzahl kann entweder in dezimal, in oktal (mit führender 0) oder hexadezimal (mit einem führenden 0x). % o Wandeln Sie auf unsigned Integer oktal String. % x oder% X Wandeln Sie auf unsigned integer hexadezimale Zeichenfolge, mit Ziffern 0123456789abcdef ``''für x und `` 0123456789ABCDEF''für X). % c Ganzzahl zu konvertieren, die Unicode-Zeichen es ist. % s Keine Konvertierung; einfach String. % f Wandeln Sie Fließkomma-Zahl um unterzeichnet decimal String der Form xx.yyy, wo die Zahl der Y's wird durch die Präzision (Standard: 6). Wenn die Genauigkeit ist 0, dann kein Dezimalpunkt ausgegeben. % e oder% E Wandeln Sie Fließkomma-Zahl an den wissenschaftlichen Notation in Form x.yyye +-zz, wo die Zahl der Y's wird durch die Präzision (Standard: 6). Wenn die Genauigkeit ist 0, dann kein Dezimalpunkt ausgegeben. Wenn die E-Form verwendet wird, dann ist E gedruckt statt e. % g oder% G Wenn der Exponent kleiner als -4 oder größer als oder gleich der Präzision, dann konvertieren Fließkomma-Zahl für% e oder% E. Andernfalls konvertieren für% f. Nachfolgende Nullen und einem abschließenden Dezimalpunkt weggelassen. %% Keine Konvertierung: einfach%.
Für weitere Informationen über Format Spezifikation, auf die man-Seite für "Format" auf Ihrem nächsten Unix-System.
Format-String-Schwachstelle Attacken
Format-String-Schwachstelle Angriffe lassen sich in drei Kategorien: Denial-of-Service, Lesen und Schreiben.
- Format-String-Sicherheitslücke Denial-of-Service-Angriffe zeichnen sich durch den Einsatz mehrerer Instanzen des% s-Format zu lesen SPECIFIER Daten aus dem Stack, bis das Programm versucht das Lesen von Daten aus einer illegalen Adresse, die dazu führen, dass das Programm zum Absturz zu bringen.
- Format-String-Schwachstelle Lesung Angriffe der Regel nutzen die x%-Format zu drucken SPECIFIER Teile des Speichers, den wir normalerweise nicht zugreifen können.
- Format-String-Schwachstellen schriftlich Angriffe nutzen die% d,% u% oder X-Format Planern zu überschreiben die Instruction Pointer und Kraft Ausführung von Benutzer-Shell-Code geliefert.
Zusätzliche Quellen von Informationen über Format-String-Schwachstellen
Für weitere Informationen über die Nutzung der Format-String-Schwachstellen finden Sie unter Nutzung der Format-String-Schwachstellen von SCUT und Format-String Angriffe von Tim Newsham.
Erfahren Sie, wie Sie verhindern, dass Format-String-Schwachstellen in Ihrem Source-Code mit diesen ausgezeichneten Bücher über sicheres Programmieren von Amazon.com
|


