Verwenden von sicheren ganzzahligen Funktionen
Eine Möglichkeit, Sicherheitsprobleme zu minimieren, besteht darin, ganzzahlige Über- und Unterläufe zu verhindern. Ganzzahlüberläufe treten auf, wenn das Ergebnis eines arithmetischen Vorgangs größer ist als der Speicherplatz des Datentyps, der für den Empfang festgelegt ist. Dies führt zum Abschneiden der ganzen Zahl und zu einem falschen Ergebnis. Ein Unterlauf tritt auf, wenn ein Vorgang, in der Regel subtraktion, ein falsches Ergebnis liefert. Die Umwandlung zwischen zwei Datentypen kann auch zu falschen Ergebnissen führen, da ein Ergebnis abgeschnitten wird, das nicht dem neuen Speicherplatz entspricht.
Die ntintsafe-Bibliothek stellt eine Reihe von C-Funktionen bereit, die sichere arithmetische Ganzzahloperationen mit Begrenzungsüberprüfung ausführen, um Über- und Unterläufe im Kernelmoduscode zu verhindern. Diese Funktionen entsprechen den Windows IntSafe-Funktionen, die vom Anwendungscode verwendet werden. Sie verwenden diese Funktionen, um eine Index- oder Puffergröße zu berechnen oder eine andere Form der Begrenzungsprüfung zu berechnen. Die Funktionen sind auf Geschwindigkeit optimiert.
Sichere ganzzahlige Funktionen bieten die folgenden Vorteile:
Die Größe des Zielpuffers wird immer für die Funktion bereitgestellt, um sicherzustellen, dass die Funktion nicht über das Ende des Puffers schreibt.
Puffer werden garantiert null-endend, auch wenn der Vorgang das beabsichtigte Ergebnis abschneidet.
Alle Funktionen geben einen NTSTATUS mit nur einem möglichen Erfolgscode (STATUS_SUCCESS) und einer möglichen Fehlerbedingung (STATUS_INTEGER_OVERFLOW) zurück.
Die ntintsafe-Bibliothek verfügt über zwei Kategorien von Funktionen:
Konvertierungsfunktionen: Diese Funktionen führen Konvertierungen zwischen zwei Datentypen durch.
Arithmetische Funktionen: Diese Funktionen führen Additions-, Subtraktions- und Multiplikationsvorgänge für jeden Datentyp aus.