Empfohlene Vorgehensweisen bezüglich der Sicherheit in C++
Dieser Artikel enthält Informationen über Sicherheitstools und Vorgehensweisen. Ihre Verwendung macht eine Anwendung zwar nicht immun gegen Angriffe, aber sie verringert die Wahrscheinlichkeit erfolgreicher Angriffe.
Visual C++-Sicherheitsfunktionen
Diese Sicherheitsfeatures sind in den Microsoft C++-Compiler und -Linker integriert:
/guard
(Steuerungsflussschutz aktivieren)
Bewirkt, dass der Compiler den Kontrollfluss für indirekte Aufrufziele zur Kompilierungszeit analysiert und anschließend Code einfügt, um die Ziele zur Laufzeit zu überprüfen.
/GS
(Puffersicherheitsprüfung)
Der Compiler wird angewiesen, Überlauferkennungscode in Funktionen einzufügen, die Angriffen ausgesetzt sein können. Wenn ein Überlauf erkannt wird, wird die Programmausführung angehalten. Diese Option ist standardmäßig aktiviert.
/SAFESEH
(Bild enthält sichere Ausnahmehandler)
Der Linker wird angewiesen, dem Ausgabeabbild eine Tabelle mit den Adressen aller Ausnahmehandler hinzuzufügen. Zur Laufzeit verwendet das Betriebssystem diese Tabelle, um sicherzustellen, dass nur rechtmäßige Ausnahmehandler ausgeführt werden. Dadurch wird verhindert, dass in böswilligen Angriffen zur Laufzeit eingeschleuste Ausnahmehandler ausgeführt werden. Diese Option ist standardmäßig deaktiviert.
/NXCOMPAT
, /NXCOMPAT
(Kompatibel mit Datenausführungsverhinderung) Diese Compiler- und Linkeroptionen ermöglichen die Kompatibilität der Datenausführungsverhinderung (Data Execution Prevention, DEP). DEP schützt die CPU vor der Ausführung von Seiten, die keine Codepages sind.
/analyze
(Codeanalyse)
Diese Compileroption aktiviert die Codeanalyse, die über potentielle Sicherheitslücken wie Pufferüberlauf, nicht initialisierten Speicher, Dereferenzierung von NULL-Zeigern und Speicherverlusten Bericht erstattet. Diese Option ist standardmäßig deaktiviert. Weitere Informationen finden Sie unter Codeanalyse für C/C++ (Übersicht).
/DYNAMICBASE
(Randomisierung des Adressraumlayouts verwenden)
Diese Linkeroption ermöglicht das Erstellen eines ausführbaren Images, das am Anfang der Ausführung an anderen Orten im Arbeitsspeicher geladen werden kann. Durch diese Option lässt sich die Position des Stapels im Arbeitsspeicher auch schlechter vorhersagen.
CRT mit erweiterter Sicherheit
Die C-Laufzeitbibliothek (CRT) wurde um sichere Versionen von Funktionen erweitert, die ein Sicherheitsrisiko darstellen, z. B. die aufwerfen, die ungeprüfte strcpy
-Funktion zum Kopieren von Zeichenfolgen. Da die älteren, nicht sicheren Versionen dieser Funktionen jetzt veraltet sind, verursacht ihre Verwendung Compilerwarnungen. Es wird empfohlen, die sicheren Versionen dieser CRT-Funktionen zu verwenden, anstatt die Compilerwarnungen zu unterdrücken. Weitere Informationen finden Sie unter Security Features in the CRT (Sicherheitsfunktionen in der CRT).
SafeInt-Bibliothek
Die SafeInt-Bibliothek verhindert ganzzahlige Überläufe und andere ausnutzende Fehler, die auftreten können, wenn die Anwendung mathematische Vorgänge ausführt. Die SafeInt
Bibliothek enthält die SafeInt-Klasse, die SafeIntException-Klasse und mehrere SafeInt-Funktionen.
Die SafeInt
-Klasse schützt vor Ganzzahlüberlauf und Exploits vom Typ "Division durch 0". Sie können sie zum Behandeln von Vergleichen zwischen Werten unterschiedlicher Typen verwenden. Sie stellt zwei Richtlinien zur Fehlerbehandlung bereit. Gemäß Standardrichtlinie löst die SafeInt
-Klasse eine SafeIntException
-Klassenausnahme aus, um zu berichten, warum ein mathematischer Vorgang nicht abgeschlossen werden kann. Gemäß der zweiten Richtlinie beendet die SafeInt
-Klasse die Programmausführung. Sie können auch eine benutzerdefinierte Richtlinie definieren.
Jede SafeInt
-Funktion schützt einen mathematischen Vorgang vor einem als Angriffspunkt geeigneten Fehler. Sie können zwei verschiedene Arten von Parametern verwenden, ohne sie in den gleichen Typ konvertieren zu müssen. Verwenden Sie die SafeInt
-Klasse, um mehrere mathematische Vorgänge zu schützen.
Checked Iterators
Ein überprüfter Iterator erzwingt Containergrenzen. Wenn ein überprüfter Iterator außerhalb der zulässigen Grenzen liegt, wird eine Ausnahme generiert und die Programmausführung beendet. Ein aktivierter Iterator stellt weitere Antwortebenen bereit, die von Werten abhängen, die preprozessors zugewiesen sind, z _SECURE_SCL_THROWS
. B. und _ITERATOR_DEBUG_LEVEL
. Bei einem überprüften Iterator werden beispielsweise _ITERATOR_DEBUG_LEVEL=2
umfassende Korrektheitsprüfungen im Debugmodus bereitgestellt, die mithilfe von Assertionen zur Verfügung gestellt werden. Weitere Informationen finden Sie unter Checked Iterators und _ITERATOR_DEBUG_LEVEL
.
Codeanalyse für verwalteten Code
Codeanalyse für verwalteten Code, auch bekannt als FxCop, überprüft Assemblys auf Übereinstimmung mit den .NET Framework-Entwurfsrichtlinien. FxCop analysiert den Code und die Metadaten in jeder Assembly und prüft in den folgenden Bereichen auf Fehler:
Bibliotheksentwurf
Lokalisierung
Benennungskonventionen
Leistung
Sicherheit
Windows Application Verifier
Der Application Verifier (AppVerifier) kann Ihnen helfen, potenzielle Anwendungskompatibilität, Stabilität und Sicherheitsprobleme zu identifizieren.
Der AppVerifier überwacht, wie eine Anwendung das Betriebssystem verwendet. Dateisystem, Registrierung, Arbeitsspeicher und APIs werden beobachtet, während die Anwendung ausgeführt wird, und es werden Quellcodepatches für die erkannten Probleme empfohlen.
Sie können den AppVerifier wie folgt verwenden:
Auf potenzielle durch allgemeine Programmierfehler verursachte Anwendungskompatibilitätsfehler prüfen.
Eine Anwendung auf speicherbezogene Probleme untersuchen.
Potenzielle Sicherheitsprobleme in einer Anwendung aufdecken.
Windows-Benutzerkonten
Das Verwenden von Windows-Benutzerkonten, die zur Gruppe der Administratoren gehören, setzt Entwickler und – durch entsprechende Erweiterung – auch Kunden Sicherheitsrisiken aus. Weitere Informationen finden Sie unter Ausführen als Mitglied der Benutzergruppe und wie sich die Benutzerkontensteuerung (User Account Control, UAC) auf Ihre Anwendung auswirkt.
Leitfaden für spekulative Ausführungsseitige Kanäle
Informationen zum Einrücken und Verringern spekulativer Hardware-Hardwarerisiken für den Ausführungsseitigen Kanal in C++-Software finden Sie unter C++-Entwicklerleitfaden für spekulative Ausführungsseitige Kanäle.
Siehe auch
System.Security
Security
Wie Benutzerkontensteuerung (UAC) die Anwendung beeinflusst