web-dev-qa-db-fra.com

Comment réparer SSL 2.0 et BEAST sur IIS

Comme vous pouvez le voir sur ce post TeamMentor.net vulnérable à BEAST et SSL 2.0, maintenant quoi? l'application que je développe actuellement a été signalée pour SSL 2.0 et BEAST par SSL Labs.

J'utilise IIS 7.0 avec les derniers correctifs, et je n'arrive pas à trouver les réponses à ces questions:

  • Quel est l'impact du risque de cette vulnérabilité sur un site comme http://teammentor.net ?
  • Quels sont les scénarios d'exploitation?
  • Y a-t-il une atténuation (ou non) par l'utilisation de IIS 7.0?
  • Comment résoudre ce problème dans IIS 7.0?
  • Peut-on faire quelque chose au niveau de la couche application?

Pour référence, voici quelques autres questions sur security.stackexchange.com sur ce sujet:

31
Dinis Cruz

Dans IIS 7 (et 7.5), il y a deux choses à faire:

  1. Accédez à: Démarrer> 'gpedit.msc'> Configuration ordinateur> Modèles d'administration> Réseau> Paramètres de configuration SSL> Ordre de la suite de chiffrement SSL (dans le volet droit, double-cliquez pour l'ouvrir). Là, copiez et collez ce qui suit (les entrées sont séparées par une seule virgule, assurez-vous qu'il n'y a pas de retour à la ligne):

    TLS_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_RC4_128_MD5, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH _AES_128_CBC_SHA_P256

  2. Exécutez les commandes PowerShell suivantes en tant qu'administrateur (copiez-collez dans le Bloc-notes, enregistrez-le sous le nom "fix-beast-in-iis.ps1" et exécutez-le avec des privilèges élevés):

    #make TSL 1.2 protocol reg keys
    md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2"
    md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server"
    md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client"
    
    # Enable TLS 1.2 for client and server SCHANNEL communications
    new-itemproperty -path     "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "Enabled" -value 1 -PropertyType "DWord"
    new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord"
    new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "Enabled" -value 1 -PropertyType "DWord"
    new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord"
    
    # Make and Enable TLS 1.1 for client and server SCHANNEL communications
    md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1"
    md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server"
    md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" 
    new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -name "Enabled" -value 1 -PropertyType "DWord"
    new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" -name "DisabledByDefault" -value 0 -PropertyType "DWord"
    new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" -name "Enabled" -value 1 -PropertyType "DWord"
    new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" -name "DisabledByDefault" -value 0 -PropertyType "DWord"
    
    # Disable SSL 2.0 (PCI Compliance)
    md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server"
    new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" -name Enabled -value 0 -PropertyType "DWord"
    

Une fois que vous avez exécuté le script, vous pouvez exécuter "regedit" et vous assurer que les clés du script ont bien été créées correctement. Redémarrez ensuite pour que la modification prenne effet.

AVERTISSEMENT: Remarquez que je n'ai pas désactivé SSL 3.0 - la raison en est que, que cela vous plaise ou non, il y a encore des gens qui utilisent Windows XP with IE 6/7. Sans SSL 3.0 activé, il n'y aurait pas de protocole pour ces personnes. Bien que vous ne puissiez toujours pas obtenir une parfaite sur une analyse Qualys SSL Labs, la majorité des trous devraient être Si vous souhaitez une conformité PCI absolue, vous pouvez copier les lignes de la section Désactiver SSL 2.0 du script Powershell, les coller à la fin du script et les modifier comme suit:

# Disable SSL 3.0 (PCI Compliance)
md "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server"
new-itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server" -name Enabled -value 0 -PropertyType "DWord"

Ensuite, lorsque vous exécutez le script, vous désactivez SSL 2.0, SSL 3.0 et activez TLS 1.1 et 1.2.

28
Josh

Je viens de publier une mise à jour de IIS Crypto qui est un outil gratuit qui définit les clés de registre schannel et place RC4 en haut de l'ordre de la suite de chiffrement SSL en un seul clic. Cela atténue l'attaque BEAST sur Windows Server 2008 et 2012.

19
Jeff

En ce qui concerne les risques réels , cela semble difficile à dire. Bien que des outils comme SSL Labs signalent cela comme une priorité élevée, je ne suis au courant d'aucune attaque réelle exploitant cela dans la nature, et d'après ma compréhension (très limitée) du fonctionnement de l'attaque, c'est assez compliqué à exécuter et il y a beaucoup de pré -les conditions pour en faire une véritable menace. Vous êtes déjà lié à de nombreuses ressources, donc inutile de répéter ce qui est déjà couvert.

Quant à la configuration de IIS 7 pour utiliser RC4, peut-être ce pdf peut aider?

2
Yoav Aner

désactiver tout "RC4" avec IIS Crypto autorisé à passer le test de conformité PCI sur Server 2008/IIS 7.0

1

Le fichier de registre suivant désactivera SSLv2 et SSLv3 sur la plupart des implémentations Windows.

Créez un fichier .reg avec les détails suivants et exécutez.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
"Enabled"=dword:00000000

La façon la plus simple de vérifier consiste à utiliser à nouveau les laboratoires SSL ou à tester à l'aide d'OpenSSL. Cela ne vaut rien que certaines versions d'OpenSSL ne prennent pas en charge SSL version 2.

OpenSSL 0.9.8t le prend en charge et est la version que j'utilise pour les tests.

openssl s_client -connect subdomain.domain.tld: 44 -ssl2

Ceci est ma commande go to pour vérifier les chiffrements de blocs de chaîne à l'aide d'openssl. L'idée est que nous ne devrions pas avoir de connexion avec aucun d'entre eux.

openssl s_client -connect subdomain.domain.tld: 44 -tls1 -cipher SRP-DSS-AES-256-CBC-SHA: SRP-RSA-AES-256-CBC-SHA: SRP-AES- 256-CBC-SHA: PSK-AES256-CBC-SHA: SRP-DSS-AES-128-CBC-SHA: RP-RSA-AES-128-CBC-SHA: SRP-AES-128-CBC-SHA: IDEA- CBC-SHA: PSK-AES128-CBC-SHA: SRP-DSS-3DES-EDE-CBC-SHA: SRP-RSA-3DES-EDE-CBC-SHA: SRP-3DES-EDE-CBC-SHA: PSK-3DES- EDE-CBC-SHA: EDH-RSA-DES-CBC-SHA: EDH-DSS-DES-CBC-SHA: DH-RSA-DES-CBC-SHA: DH-DSS-DES-CBC-SHA: DES-CBC- SHA

0
david_k