Empfohlene Vorgehensweisen bezüglich der Sicherheit in C++

 

Veröffentlicht: Juli 2016

Die neueste Dokumentation zu Visual Studio 2017 finden Sie unter Dokumentation zu Visual Studio 2017.

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.

Diese Sicherheitsfunktionen sind in den Visual C++-Compiler und den Visual C++-Linker integriert:

/guard (Ablaufsteuerungsschutz aktivieren)
Veranlasst den Compiler, die Ablaufsteuerung für indirekte Aufrufziele zum Zeitpunkt der Kompilierung zu analysieren und dann Code einzufügen, um die Ziele zur Laufzeit zu überprüfen.

/GS (Puffer-Sicherheitsüberprü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 (Abbild verfügt über 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 Kompatibilität mit der Datenausführungsverhinderung. 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 Übersicht über die Codeanalyse für C/C++.

/DYNAMICBASE (Address Space Layout Randomization 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.

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 Sicherheitsfunktionen in der CRT.

SafeInt-Bibliothek verhindert Ganzzahlüberläufe und andere als Angriffspunkt geeignete Fehler, die sich ergeben 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. I stellt zwei Fehlerbehandlungsrichtlinien 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.

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 überprüfter Iterator stellt andere Antwortebenen bereit, die von Werten abhängig sind, die Präprozessordefinitionen zugewiesen sind, z. B. _SECURE_SCL_THROWS und _ITERATOR_DEBUG_LEVEL. Bei _ITERATOR_DEBUG_LEVEL=2 stellt ein überprüfter Iterator z. B. umfassende Korrektheitsüberprüfungen im Debugmodus bereit, die mit Assertionen verfügbar gemacht werden. Weitere Informationen finden Sie unter Überprüfte Iteratoren.

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

  • Namenskonventionen

  • Leistung

  • Sicherheit

Der Application Verifier (AppVerifier) kann Ihnen dabei helfen, mögliche Probleme bei der Kompatibilität, der Stabilität und der Sicherheit der Anwendung 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.

Der AppVerifier ist ein Bestandteil des Anwendungskompatibilitäts-Toolkits, das unter der Anwendungskompatibilität auf der TechNet-Website verfügbar ist.

NIB: Configuring Security Policy beschreibt Richtlinien und Tools zum Anpassen der .NET Framework-Sicherheitsrichtlinien.

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 Gruppe Benutzer und Wie Benutzerkontensteuerung (UAC) die Anwendung beeinflusst.

System.Security
Security
Wie Benutzerkontensteuerung (UAC) die Anwendung beeinflusst

Anzeigen: