Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Um die Entwicklung sicherer Software zu unterstützen, empfehlen wir, beim Entwickeln von Anwendungen die folgenden bewährten Methoden zu befolgen. Weitere Informationen finden Sie unter Microsoft Security Development Lifecycle.
Lebenszyklus der Sicherheitsentwicklung
Der Security Development Life Cycle (SDL) ist ein Prozess, der eine Reihe von sicherheitsorientierten Aktivitäten und Liefergegenständen für jede Phase der Softwareentwicklung beinhaltet. Zu diesen Aktivitäten und Liefergegenständen gehören:
- Entwickeln von Bedrohungsmodellen
- Verwenden von Tools zum Code-Scanning
- Durchführen von Codeüberprüfungen und Sicherheitstests
Weitere Informationen zum SDL finden Sie im Microsoft Security Development Lifecycle.
Bedrohungsmodelle
Durch die Durchführung einer Bedrohungsmodellanalyse können Sie potenzielle Angriffspunkte in Ihrem Code ermitteln. Weitere Informationen zur Analyse von Bedrohungsmodellen finden Sie unter Howard, Michael und LeBlanc, David [2003], Writing Secure Code, 2d ed., ISBN 0-7356-1722-8, Microsoft Press, Redmond, Washington. (Diese Ressource ist möglicherweise nicht in allen Sprachen und Ländern verfügbar)
Service Packs und Sicherheitsupdates
Build- und Testumgebungen sollten die gleichen Service Packs und Sicherheitsupdates wie die Zielbenutzer verwenden. Es wird empfohlen, die neuesten Service Packs und Sicherheitsupdates für jede Microsoft Plattform oder Anwendung zu installieren, die Teil Ihrer Build- und Testumgebung ist, und Ihre Benutzer dazu auffordern, für die fertige Anwendungsumgebung dasselbe zu tun. Weitere Informationen zu Service Packs und Sicherheitsupdates finden Sie unter Update Windows und Microsoft Security.
Autorisierung
Sie sollten Anwendungen erstellen, die die geringsten Berechtigungen erfordern. Die Verwendung der geringsten möglichen Berechtigungen reduziert das Risiko, dass bösartiger Code Ihr Computersystem beeinträchtigt. Weitere Informationen zum Ausführen von Code in der geringsten Berechtigungsstufe finden Sie unter Ausführen mit speziellen Berechtigungen.
Bewährte Methoden für Kryptografie
Bei der Implementierung von Kryptografie in Windows Anwendungen:
- Verwenden Sie die Kryptografie-API: Next Generation (CNG) für alle neuen Entwicklungen. CryptoAPI wird nur aus Gründen der Abwärtskompatibilität beibehalten.
- Design für Krypto-Agilität und Plan für Post-Quantum. Verteilen Sie keine hartcodierten Algorithmusbezeichner oder Schlüsselgrößen im gesamten Code. Isolieren Sie diese, sodass Algorithmen ohne Neuschreibung ausgetauscht werden können. Die Plattform stellt auf NIST-Post-Quantum-Standards um: ML-KEM (FIPS 203) für die Schlüsseletablierung und ML-DSA (FIPS 204) für Signaturen. Setzen Sie daher schon jetzt auf agile Konzepte – insbesondere bei Daten, die langfristig vertraulich bleiben müssen –, um Angriffe nach dem Muster „Jetzt abgreifen, später entschlüsseln“ abzuwehren.
- Bevorzugen Sie die authentifizierte Verschlüsselung (AEAD). Verwenden Sie AES-GCM, damit die Verschlüsselung auch Manipulationen erkennt. Wenn Sie einen nicht authentifizierten Modus wie CBC verwenden müssen, koppeln Sie ihn mit einer separaten Integritätsprüfung (encrypt-then-MAC) – Vertraulichkeit schützt allein nicht vor Änderungen.
- Verwenden Sie niemals dieselbe Nonce (IV) mit demselben Schlüssel in AES-GCM erneut. Die Wiederverwendung von Nonce in GCM ist katastrophal: Sie kann den Authentifizierungsschlüssel verfügbar machen und Nachrichtenfälschungen aktivieren. Generieren Sie eine eindeutige Nonce für jeden Verschlüsselungsvorgang, z. B. einen Inkrementierungszähler oder einen neuen zufälligen 96-Bit-Wert.
- Verwenden Sie niemals den ECB-Blockchiffremodus. ECB verschlüsselt Blöcke unabhängig voneinander, wodurch Muster in Klartextdaten offengelegt werden.
- Kryptografische Schlüssel niemals fest im Code codieren im Quellcode. Verwenden Sie DPAPI zum Schutz lokaler Schlüssel oder zum CNG-Schlüsselspeicheranbieter für persistente Schlüssel.
- Entfernen Sie Geheimnisse aus dem Speicher, sobald Sie sie nicht mehr benötigen. Überschreiben Sie Schlüsselmaterial, Kennwörter und andere vertrauliche Puffer mit SecureZeroMemory. Im Gegensatz dazu
memsetwird sie vom Compiler nicht optimiert. - Verwenden Sie Schlüssellängen von 256 Bits für AES, 2048+ Bit für RSA (3072+ bevorzugt) und 256+ Bits für ECDSA.
- Verwenden Sie SHA-256 oder stärker für Hashing. Verwenden Sie MD5 oder SHA-1 nicht für Sicherheitszwecke.
- Überprüfen Sie immer Rückgabewerte aus kryptografischen Funktionen. Ein unbemerkt fehlgeschlagener Verschlüsselungsaufruf kann dazu führen, dass Daten im Klartext gespeichert werden.
-
Generieren Sie Zufallszahlen mit BCryptGenRandom (CNG) – nicht
rand()oder anderen nicht kryptografischen PRNGs. Übergeben SieBCRYPT_USE_SYSTEM_PREFERRED_RNG, um den vom System bevorzugten Generator zu verwenden, ohne ein Algorithmushandle verwalten zu müssen.
Weitere Informationen:
Weitere Informationen zu bewährten Verfahren finden Sie in den folgenden Themen.
| Thema | Beschreibung |
|---|---|
|
Ausführen mit speziellen Berechtigungen |
Erläutert Sicherheitsauswirkungen von Berechtigungen. |
|
Vermeiden von Pufferüberläufen |
Enthält Informationen zum Vermeiden von Pufferüberläufen. |
|
Ablaufsteuerung (Control Flow Guard, CFG) |
Beschreibt Anfälligkeiten für Speicherbeschädigungen. |
|
Erstellen einer DACL |
Zeigt, wie Sie eine Discretionary Access Control List (DACL) mithilfe der Security Descriptor Definition Language (SDDL) erstellen. |
|
Umgang mit Kennwörtern |
Erläutert die Sicherheitsauswirkungen der Verwendung von Kennwörtern. |
|
Dynamic Access Control Entwicklererweiterung |
Einführung in einige der Entwicklererweiterbarkeitspunkte für die neuen Dynamic Access Control-Lösungen. |