Einführung in Integer-Überläufe und Unterläufe
Integer-Überlauf- und Unterlauf-Schwachstellen gelten als die achtgefährlichste Sicherheitsanfälligkeit in der Common Weakness Enumeration (CWE) Top 25 Liste von 2019. Diese Arten von Sicherheitsanfälligkeiten entstehen durch Missbrauch von Variablentypen und können ausgenutzt werden, um den Schutz vor anderen Arten von Sicherheitsanfälligkeiten wie Pufferüberläufen zu umgehen.
Variablentypen und -größen
Jede Programmiersprache hat das Konzept verschiedener Variablentypen. Ein Zeichen, das Textdaten enthalten kann, unterscheidet sich stark von einer Ganzzahl oder einem Gleitkommawert. Über diese allgemeinen Typen hinaus gibt es jedoch zusätzliche Unterschiede zwischen Variablen, und diese Unterschiede machen Integer-Überlauf- und Unterlauf-Schwachstellen möglich.
Die meisten Programmiersprachen haben das Konzept von vorzeichenbehafteten und vorzeichenlosen Ganzzahlen. Eine Ganzzahl mit Vorzeichen (wie der Name schon sagt) hat ein Vorzeichen, sodass sowohl positive als auch negative Werte gespeichert werden können. Eine Variable ohne Vorzeichen hingegen kann nur positive Zahlen speichern.
Wie im obigen Bild gezeigt, werden vorzeichenbehaftete und vorzeichenlose Variablen einer bestimmten Größe identisch in den Speicher eines Computers geschrieben. Der einzige Unterschied besteht darin, wie der Wert interpretiert wird. In einem vorzeichenbehafteten Wert bedeutet ein führender Wert eine negative Zahl, während in einem vorzeichenlosen Wert eine Eins an der ersten Stelle nur eine große Zahl bedeutet.
Der andere Hauptunterschied zwischen verschiedenen „Integer“ -Variablentypen ist die Größe des Werts, den sie enthalten können. Programmiersprachen haben die Konzepte short, integer, long und beyond , von denen jede die Größe des für diese Variable zugewiesenen Speicherplatzes und den Wertebereich definiert, den sie enthalten kann.
Integer-Überläufe und -unterläufe
Integer-Überlauf- und -unterlauf-Sicherheitsanfälligkeiten führen zu einer unsicheren Konvertierung zwischen vorzeichenbehafteten und vorzeichenlosen Variablen und Integer-Variablentypen unterschiedlicher Größe. Es ist in der Regel zwischen diesen verschiedenen Typen zu konvertieren erlaubt und, in vielen Fällen, (Lesen Sie mehr…)