Empfohlene Vorgehensweisen bezüglich der Sicherheit in C++

Dieses Thema enthält Informationen über empfohlene Sicherheitstools und Vorgehensweisen. Die Verwendung dieser Ressourcen und Tools macht eine Anwendung zwar nicht immun gegen Angriffe, aber sie verringert die Wahrscheinlichkeit erfolgreicher Angriffe.

Visual C++-Sicherheitsfeatures

In diesem Abschnitt werden Sicherheitsfeatures erläutert, die in den Visual C++-Compiler und den Visual C++-Linker integriert sind.

  • /GS (Puffer-Sicherheitsüberprüfung)
    Diese Compileroption weist den Compiler an, Ü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)
    Diese Linkeroption weist den Linker an, 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 Nicht-Codepages.

  • /analyze (Codeanalyse in der Enterprise-Version)
    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.

CRT mit erweiterter Sicherheit

Die CRT (C Runtime Library, C-Laufzeitbibliothek) wurde um sichere Versionen von Funktionen erweitert, die ein Sicherheitsrisiko darstellen. (Z. B. die nicht überprüfte strcpy-Funktion zum Kopieren von Zeichenfolgen) Die älteren, nicht sicheren Versionen dieser Funktionen sind jetzt veraltet, sodass ihre Verwendung zu Compilerwarnungen führt. Es wird dringend 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.

SafeInt-Bibliothek

SafeInt Library verhindert Ganzzahlüberläufe und andere als Angriffspunkt geeignete Fehler, die sich ergeben können, wenn die Anwendung mathematische Vorgänge ausführt. Die Bibliothek SafeInt schließt die SafeInt Class, die SafeIntException Class und mehrere SafeInt Functions ein.

Die SafeInt-Klasse schützt vor Ganzzahlüberlauf und Exploits vom Typ "Division durch 0". Damit können Vergleiche zwischen Werten unterschiedlicher Art gezogen werden, und es stehen zwei Fehlerbehandlungsrichtlinien zur Verfügung. 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 Typen 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.

Überprüfte Iteratoren

Ein überprüfter Iterator ist ein Iterator, der Containergrenzen erzwingt. 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 Checked Iterators.

Codeanalyse für verwalteten Code

Codeanalyse für verwalteten Code, auch bekannt als FxCop, ist ein Tool, das Assemblys auf Übereinstimmung mit den Microsoft .NET Framework-Entwurfsrichtlinien überprüft. FxCop analysiert den Code und die Metadaten innerhalb jeder Assembly und prüft in den folgenden Bereichen auf Fehler:

  • Bibliotheksentwurf

  • Lokalisierung

  • Namenskonventionen

  • Leistung

  • Sicherheit

Codeanalyse für verwalteten Code ist in Verwaltung von Anwendungslebenszyklen von Visual Studio enthalten und kann auch unter https://code.msdn.microsoft.com/gotdotnet.aspx heruntergeladen werden.

Windows Application Verifier

Verfügbar als Bestandteil des Anwendungskompatibilitäts-Toolkits ist Application Verifier (AppVerifier), ein Tool, das dem Entwickler das Erkennen potenzieller Kompatibilitäts-, Stabilitäts- und Sicherheitsprobleme in der Anwendung ermöglicht.

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 Quellcodeebenen-Patches für die erkannten Probleme empfohlen.

Das Prüfmodul lässt Sie Folgendes ausführen:

  • Auf potenzielle durch allgemeine Programmierfehler verursachte Anwendungskompatibilitätsfehler prüfen.

  • Eine Anwendung auf speicherbezogene Probleme untersuchen.

  • Testen Sie die Kompatibilität einer Anwendung mit den Anforderungen für aktuelle Logoprogramme z. B. das Windows 7-Softwarelogoprogramn und das Windows Server 2008 R2-Logoprogram.

  • Potenzielle Sicherheitsprobleme in einer Anwendung aufdecken.

Das Windows-Anwendungskompatibilitäts-Toolkit kann auf der Seite "Anwendungskompatibilität" der Website von TechNet heruntergeladen werden.

.NET Framework-Sicherheitsfeatures

Konfigurieren der Sicherheitsrichtlinien beschreibt Richtlinien und Tools zum Anpassen der .NET Framework-Sicherheitsrichtlinien.

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 Gruppe Benutzer.

Erhöhen der Sicherheit durch das Verwenden von Benutzerkontensteuerung unter Windows Vista

Benutzerkontensteuerung (UAC) ist ein Feature von Windows Vista, in dem Benutzerkonten eingeschränkte Berechtigungen haben. Weitere Informationen finden Sie unter Wie Benutzerkontensteuerung (UAC) die Anwendung beeinflusst.

Siehe auch

Referenz

System.Security

Konzepte

Wie Benutzerkontensteuerung (UAC) die Anwendung beeinflusst

Weitere Ressourcen

Sichern von Anwendungen