Verwenden von Sicheren Zeichenfolgenfunktionen
Viele Systemsicherheitsprobleme werden durch eine schlechte Pufferbehandlung und die daraus resultierenden Pufferüberläufe verursacht. Eine schlechte Pufferbehandlung ist häufig mit Zeichenfolgenbearbeitungsvorgängen verbunden. Die Standardmäßigen Zeichenfolgenbearbeitungsfunktionen, die von C/C++-Sprachlaufzeitbibliotheken (strcat, strcpy, sprintf usw.) bereitgestellt werden, verhindern nicht das Schreiben über das Ende von Puffern hinaus.
Zwei neue Sätze von Zeichenfolgenbearbeitungsfunktionen, die als sichere Zeichenfolgenfunktionen bezeichnet werden, bieten zusätzliche Verarbeitung für die ordnungsgemäße Pufferbehandlung in Ihrem Code. Diese sicheren Zeichenfolgenfunktionen sind im Windows Driver Kit (WDK) und für Microsoft Windows XP SP1 und höhere Versionen des Driver Development Kit (DDK) und des Windows SDK verfügbar. Sie sollen ihre integrierten C/C++-Entsprechungen und ähnliche Routinen ersetzen, die von Windows bereitgestellt werden.
Ein Satz sicherer Zeichenfolgenfunktionen ist für die Verwendung im Kernelmoduscode vorgesehen. Diese Funktionen werden in einer Headerdatei namens Ntstrsafe.h prototypiert. Diese Headerdatei und eine zugeordnete Bibliothek sind im WDK verfügbar.
Die anderen Sicheren Zeichenfolgenfunktionen sind für die Verwendung in Anwendungen im Benutzermodus vorgesehen. Eine entsprechende Headerdatei, Strsafe.h, enthält Prototypen für diese Funktionen. Diese Datei und eine zugeordnete Bibliothek sind im Windows SDK verfügbar. Weitere Informationen zu Strsafe.h finden Sie unter Verwenden der Strsafe.h-Funktionen.
Der Satz der Sicheren Zeichenfolgenfunktionen im Kernelmodus besteht aus den folgenden zwei Teilmengen:
Sichere Zeichenfolgenfunktionen für Unicode- und ANSI-Zeichen
Jede dieser Funktionen ist in einer W-Suffix-Version verfügbar, die Doppelbyte-Unicode-Zeichen und eine Version mit A-Suffix unterstützt, die ANSI-Zeichen mit Einzelbyte unterstützt. Beispielsweise ist RtlStringCbCatN, das zwei Zeichenfolgen verkettet und die Länge der angefügten Zeichenfolge begrenzt, als RtlStringCbCatNW und RtlStringCbCatNA verfügbar.
Sichere Zeichenfolgenfunktionen für UNICODE_STRING Strukturen
Jede dieser Funktionen akzeptiert eine UNICODE_STRING-Struktur als Eingabe- oder Ausgabeparameter oder beides. Beispielsweise akzeptiert RtlStringCbCopyUnicodeString die Struktur als Eingabeparameter, RtlUnicodeStringCopyString akzeptiert die Struktur als Ausgabeparameter, und RtlUnicodeStringCopy akzeptiert die Struktur sowohl als Eingabe- als auch als Ausgabeparameter.
Die Funktionen für sichere Zeichenfolgen im Kernelmodus bieten die folgenden Features:
Jede Sichere Zeichenfolgenfunktion empfängt die Größe des Zielpuffers als Eingabe. Die Funktion kann somit sicherstellen, dass sie nicht über das Ende des Puffers schreibt.
Die Unicode- und ANSI-Zeichenfolgenfunktionen beenden alle Ausgabezeichenfolgen mit einem NULL-Zeichen, auch wenn der Vorgang das beabsichtigte Ergebnis abschneidet.
Alle sicheren Zeichenfolgenfunktionen geben einen NTSTATUS-Wert mit nur einem möglichen Erfolgscode (STATUS_SUCCESS) zurück.
Die meisten sicheren Zeichenfolgenfunktionen sind sowohl in einer Byte- als auch in einer Zeichenzählungsversion verfügbar. Beispielsweise verkettet RtlStringCbCata zwei bytegezählte Zeichenfolgen und RtlStringCchCata zwei zeichengezählte Zeichenfolgen.
Die meisten sicheren Zeichenfolgenfunktionen sind in einer erweiterten Version mit ex-Suffix verfügbar, die zusätzliche Funktionen bietet. Beispielsweise erweitert RtlStringCbCatExa die Funktionalität von RtlStringCbCata.
Dieser Abschnitt schließt folgende Themen ein:
Zusammenfassung der Kernel-Mode Sicheren Zeichenfolgenfunktionen