Partager via


Utilisation du chiffrement pour protéger les mots de passe

par Saad Ladki

Présentation

Ce document fournit une vue d’ensemble des étapes requises pour définir à la fois le pool d’applications et l’isolation des processus de travail pour les serveurs IIS 7.0 et versions ultérieures. L’isolation du pool d’applications implique la protection des données auxquelles le processus de système local IIS (WAS) a besoin d'accéder. Un exemple de ces données est le mot de passe du pool d’applications. L’isolation des processus de travail, d’autre part, implique la protection des données auxquelles l’identité du pool d’applications doit accéder. Un exemple de ces données est le mot de passe de compte d’utilisateur anonyme.

Conditions préalables

Pour simplifier ce processus, deux exemples de code sont fournis :

  • Créez un fournisseur de chiffrement RSA dans machine.config.
  • Définissez le nom du fournisseur par défaut dans machine.config.

La dernière section des prérequis vous guide dans la configuration de quatre comptes d’utilisateur qui seront utilisés dans les rubriques ultérieures.

Création d’une application de fournisseur de chiffrement RSA

  1. Ouvrez le Bloc-notes Windows et créez un fichier dans un répertoire de votre choix nommé createProvider.cs qui contient le code C# suivant :

    using System;
    using Microsoft.Web.Administration;
    using System.Configuration;
    
    namespace testingEncryption
    {   
        public class createProvider   
        {
            public static void Main(string[] args)
            {
                String keyContainerName = args[0];
                String description = args[1];
                String providerName = args[2];
                System.Configuration.Configuration machineConfig =
                System.Configuration.ConfigurationManager.OpenMachineConfiguration();
                System.Configuration.ProviderSettings settings =
                    new System.Configuration.ProviderSettings(providerName,
                    "System.Configuration.RsaProtectedConfigurationProvider,
                    System.Configuration,
                    Version=2.0.0.0, Culture=neutral,
                    PublicKeyToken=b03f5f7f11d50a3a");
                settings.Parameters["description"] = description;
                settings.Parameters["keyContainerName"] = keyContainerName;
                settings.Parameters["cspProviderName"] = String.Empty;
                settings.Parameters["useMachineContainer"] = "true";
                settings.Parameters["useOAEP"] = "false";
                settings.Parameters["name"] = providerName;
                ProtectedConfigurationSection pcSection =
                    (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection ("configProtectedData");
                pcSection.Providers.Add(settings);
                machineConfig.Save();
            }
        }
    }
    
  2. Ensuite, lancez une invite de commandes avec élévation de privilèges :

    • Cliquez sur le menu Démarrer .
    • Cliquez avec le bouton droit sur l’invite de commandes.
    • Sélectionnez Exécuter en tant qu’administrateur.
  3. Dans la fenêtre d’invite de commandes, accédez à l’emplacement où vous avez enregistré le fichier createProvider.cs et exécutez la commande suivante pour compiler votre code :
    %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll createProvider.cs

Cette étape est maintenant terminée.

Création d’une application pour modifier le fournisseur par défaut

  1. Ouvrez le Bloc-notes Windows et créez un fichier dans un répertoire de votre choix nommé setProvider.cs qui contient le code C# suivant :

    using System;
    using Microsoft.Web.Administration;
    using System.Configuration;
    namespace testingEncryption 
    {
        public class setProvider
        {
            public static void Main(string[] args)
            {
                String provider = args[0];  // example: DataProtectionConfigurationProvider
                System.Configuration.Configuration machineConfig =
                    System.Configuration.ConfigurationManager.OpenMachineConfiguration();
                ProtectedConfigurationSection pcSection =
                    (System.Configuration.ProtectedConfigurationSection)machineConfig.GetSection("configProtectedData");
                string oldEncryptionProviderName = pcSection.DefaultProvider;
                Console.WriteLine("The default provider is currently: " + oldEncryptionProviderName);
                Console.WriteLine("Changing the default provider to: " + provider);
                pcSection.DefaultProvider = provider;
                machineConfig.Save();
            }
        }
    }
    
  2. Ensuite, lancez une invite de commandes avec élévation de privilèges :

    • Cliquez sur le menu Démarrer .
    • Cliquez avec le bouton droit sur l’invite de commandes.
    • Sélectionnez Exécuter en tant qu’administrateur.
  3. Dans l’invite de commandes, accédez à l’emplacement où vous avez enregistré le fichier setProvider.cs et exécutez la commande suivante pour compiler votre code :
    %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\csc.exe /reference:%SystemRoot%\System32\inetsrv\Microsoft.Web.Administration.dll setProvider.cs

Cette étape est maintenant terminée.

Création de comptes d’utilisateur

Dans cette étape, nous créons quatre nouveaux comptes d’utilisateur qui seront utilisés dans ce document.

Pour commencer, ouvrez une fenêtre d’interpréteur de commandes s’exécutant sous des droits d’administration en procédant comme suit :

  1. Cliquez sur le menu Démarrer .
  2. Cliquez avec le bouton droit sur l’invite de commandes.
  3. Sélectionnez Exécuter en tant qu’administrateur.
  4. Dans la fenêtre de commande, exécutez les commandes suivantes :
net user /add AppPoolIdentity1 password1
   net user /add AppPoolIdentity2 password2
   net user /add AnonymousAccount1 password3
   net user /add AnonymousAccount2 password

Cette étape est maintenant terminée.

Isolation du pool d’applications

IIS a un processus appelé WAS qui s’exécute dans le contexte de LOCALSYSTEM et est le seul processus qui a besoin d’accéder aux mots de passe du pool d’applications. Dans cette tâche, nous :

  • Créez une clé RSA (iisWasKey) à laquelle seuls LOCALSYSTEM et Administrateurs ont accès. Cette clé sera utilisée pour chiffrer les mots de passe de chaque pool d’applications.
  • Créez deux pools d’applications.
  • Configurez chacun de ces pools d’applications pour qu’ils s’exécutent sous différentes identités et chiffrent leurs mots de passe à l’aide de iisWasKey.
  • Limitez les autorisations du système de fichiers NTFS sur les fichiers clés afin que seuls SYSTEM et Administrateurs aient accès.

Créer une clé RSA

  1. Cliquez sur le menu Démarrer .
  2. Cliquez avec le bouton droit sur l’invite de commandes.
  3. Sélectionnez Exécuter en tant qu’administrateur.
  4. Dans la fenêtre de commande, accédez à l’emplacement où vous avez enregistré votre createProvider.exe et exécutez la commande suivante :
createProvider.exe iisWasKey RsaKeyForWAS Rsa_WAS

Vérifiez que ces modifications se sont produites correctement. Ouvrez votre %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\config\machine.config bloc-notes Windows et vérifiez que les lignes de la section sont présentes pour le nouveau fournisseur :

<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
    <providers>
        <add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="NetFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false"/>

        <add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy=""/>

        <add name="Rsa_WAS" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="RsaKeyForWAS" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
    </providers>
</configProtectedData>

Chiffrer les mots de passe du pool d’applications

Par défaut, chaque fois qu’une propriété est chiffrée, IIS utilise le defaultProvider pour le chiffrement défini dans machine.config. La valeur par défaut est RsaProtectedConfigurationProvider.

Dans cette étape, nous utilisons l’application setProvider.exe créée précédemment pour remplacer le fournisseur par iisWasKey, puis le Gestionnaire IIS pour modifier les mots de passe :

  1. Cliquez sur le menu Démarrer .
  2. Cliquez avec le bouton droit sur l’invite de commandes.
  3. Sélectionnez Exécuter en tant qu’administrateur.
  4. Dans la fenêtre de commande, accédez à l’emplacement où vous avez enregistré votre setProvider.exe et exécutez la commande suivante :
setProvider.exe Rsa_WAS

Le fournisseur par défaut Rsa_WAS a été modifié.

Créer des pools d’applications

Dans cette étape, nous créons deux pools d’applications que nous isolons les uns des autres. Pour ce faire, lancez le Gestionnaire IIS :

  1. Cliquez sur Démarrer, puis tapez «INetMgr.exe», puis appuyez sur Entrée (si vous y êtes invité, sélectionnez Continuer pour élever vos autorisations).

  2. Cliquez sur le + bouton en regard du nom de votre ordinateur dans la section Connexions .

  3. Cliquez sur Pools d’applications.

  4. Sélectionnez la tâche à droite intitulée Ajouter un pool d’applications.

  5. Entrez le nom « AppPool1 », puis appuyez sur OK comme indiqué :

    Capture d’écran de la boîte de dialogue Ajouter un pool d’applications avec un focus sur l’option O K.

  6. Répétez les étapes précédentes, mais cette fois,utilisez le nom AppPool2.

  7. Vous voyez maintenant l’écran suivant dans IIS :
    Capture d’écran de l’écran Pools d’applications montrant la liste des pools d’applications sur le serveur.

  8. Notez comment l’identité pour AppPool1 et AppPool2 est NetworkService. Nous allons modifier ce paramètre pour être les comptes que nous avons créés précédemment en cliquant avec le bouton droit sur AppPool1 , puis en sélectionnant Paramètres avancés

  9. Sous le titre Modèle de processus :

    • Cliquez sur le bouton à droite de l’identité.

    • Dans la fenêtre Identité du pool d’applications, sélectionnez le bouton radio « Compte personnalisé », puis cliquez sur le bouton « Définir... ».

    • Entrez le nom d’utilisateur et le mot de passe suivants dans la boîte de dialogue Définir les informations d’identification .

      nom d’utilisateur : AppPoolIdentity1
      mot de passe : mot de passe1

      Capture d’écran de la boîte de dialogue Définir les informations d’identification, montrant les champs Nom d’utilisateur, Mot de passe et Confirmer le mot de passe.

  10. À présent, la valeur Identity doit apparaître comme indiqué ci-dessous :

    Capture d’écran de la boîte de dialogue Paramètres avancés avec la valeur Identité mise en surbrillance dans la section Modèle de processus.

  11. Cliquez sur OK pour enregistrer vos modifications.

  12. Répétez l’étape précédente pour AppPool2 et le nom d’utilisateur « AppPoolIdentity2 » et le mot de passe « password2 ».

  13. Vous voyez les éléments suivants affichés dans le Gestionnaire IIS (principalement les identités pour les pools d’applications ont changé) :

    Capture d’écran des pools d’applications montrant les identités modifiées pour les pools d’applications.

  14. Vérifiez les modifications à l’aide du Bloc-notes Windows et ouvrez le %SystemRoot%\System32\Inetsrv\applicationHost.config fichier. Accédez à la section applicationPools et vous voyez que nous avons chiffré les mots de passe du pool d’applications à l’aide de la clé Rsa_WAS comme prévu :

    password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAAUkBfhWFbUHIt/qtlo+P7CiZC10r9H0DGBvAl
                 U2mhiOxMoHXX6Dz0S8TQjKx2YTKvuE8y+SBUWrEs3JYzXKOkY45Q9z6E/3BFvru5oR9uzbjInASKF/83N
                 N1tIEsoorQWmUOjnL4XM9RNzpqkY6TgyC3CyPUGN9fR7li5+AUupHHfgVPMzcLHfCsoq+ri+X6IbEnJdu
                  cUEAYBn1P9F/Zxk=:enc]" />
                  password="[enc:Rsa_WAS:jAAAAAECAAADZgAAAKQAAEbQEa/sAmyLbryAR0hD3voip2+0RfzM44sXPekp
                  I2H7HYLzta55NfLcG8vSPHhasahKVgO4wcIcT03CLSn+5koWvAaIRdeClhXWK/X8ZQPFooOpyhOqT0TEP5v
                  jB+DXAKgq0RC6ufHFtrHMy0U69ew7/49YXEcrkF+o8OJZ1K+EkgA3J2ikHKxW0pFBU0tFvLCjt2/UXypfNI
                  0hYPe2syk=:enc]" />
    

Verrouillage des fournisseurs de chiffrement

Par défaut, le IIS_IUSRS reçoit un accès en lecture aux clés lorsqu’elles sont créées. Toutefois, vous pouvez utiliser l’outil ASPNET_REGIIS pour supprimer cet accès. Pour ce faire, exécutez les commandes suivantes à partir de l’invite de commandes avec élévation de privilèges :

cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr iisWasKey IIS_IUSRS

Cela a supprimé IIS_IUSRS (groupe d’identités de pool d’applications) de pouvoir lire l’iisWasKey destiné uniquement aux administrateurs et à l’accès LOCALSYSTEM.

Isolation des processus de travail

Cette rubrique explique comment configurer l’isolation des processus de travail en créant deux nouveaux sites qui font partie de différents pools d’applications et qui ont des identités d’authentification anonymes différentes. Nous créons ensuite un nouveau fournisseur RSA pour chaque pool d’applications pour chiffrer les mots de passe anonymes.

Créer des sites

Dans cette section, nous créons deux nouveaux sites et ajoutons chaque site à un pool d’applications que nous avons créé précédemment. Pour commencer, ouvrez un interpréteur de commandes exécuté sous des droits d’administration en procédant comme suit :

  1. Cliquez sur le menu Démarrer .

  2. Cliquez avec le bouton droit sur l’invite de commandes.

  3. Sélectionnez Exécuter en tant qu’administrateur.

  4. Dans la fenêtre de commande, accédez à votre répertoire wwwroot à l’aide de la commande suivante :

    cd /d %SystemDrive%\inetpub\wwwroot
    
  5. Créez un répertoire nommé « un » et un répertoire « deux » à l’aide des commandes suivantes :

    mkdir one
    
    mkdir two
    
  6. Créez un fichier de baseDefault.htm dans les répertoires « un » et « deux » qui contiennent le code HTML suivant :

    <html><body>Hello from site X</body></html>
    

    Remarque

    Remplacez « X » par « un » ou « deux » en fonction de l’emplacement du répertoire du fichier.

Utilisez maintenant le gestionnaire IIS pour créer deux sites :

  1. Cliquez sur Démarrer, tapez INetMgr.exe et appuyez sur Entrée (si vous y êtes invité, sélectionnez Continuer pour élever vos autorisations).

  2. Cliquez sur le + bouton en regard du nom de votre ordinateur dans la section Connexions .

  3. Cliquez avec le bouton droit sur Site dans l’arborescence sous Connexions , puis sélectionnez Ajouter un site web.

  4. Utilisez les informations suivantes pour créer votre site :

    Nom du site web : un
    Pool d’applications : AppPool1
    Chemin d’accès physique : {emplacement de votre répertoire inetpub}\wwwroot\one
    Port : 81

    Cela doit ressembler à ce qui suit lorsque vous avez terminé :

    Capture d’écran de la boîte de dialogue Ajouter un site web avec le champ Nom du site renseigné par l’entrée One.

  5. Cliquez sur OK pour enregistrer les modifications.

  6. Répétez les deux étapes précédentes, mais cette fois, utilisez les informations suivantes pour le deuxième site :

    Nom du site web : deux
    Pool d’applications : AppPool2
    Chemin d’accès physique : {emplacement de votre répertoire inetpub}\wwwroot\two
    Port : 82

Vous avez maintenant créé deux nouveaux sites nommés One et Two, et les avez ajoutés aux pools d’applications AppPool1 et AppPool2 .

Les URL permettant de tester vos sites sont les suivantes :

  • http://localhost:81 pour site One
  • http://localhost:82 pour le site Two

Créer des fournisseurs pour chaque pool d’applications

Dans cette section, nous créons un nouveau fournisseur RSA pour chacun des pools d’applications :

  1. Cliquez sur le menu Démarrer.

  2. Cliquez avec le bouton droit sur l’invite de commandes.

  3. Sélectionnez Exécuter en tant qu’administrateur.

  4. Dans la fenêtre de commande, accédez à l’emplacement où vous avez enregistré votre createProvider.exe et exécutez la commande suivante :

    createProvider.exe App1Key RsaKeyForAppPool1 Rsa_app1
    createProvider.exe App2Key RsaKeyForAppPool2 Rsa_app2
    

Définir le compte anonyme pour site One

Dans votre fenêtre d’invite de commandes avec élévation de privilèges, exécutez la commande suivante :

setProvider.exe Rsa_app1
  1. Revenez au Gestionnaire d’IIS et double-cliquez sur le site One.

  2. Double-cliquez sur l’élément d’authentification sous le titre Nom de la fonctionnalité .

  3. Sélectionnez Authentification anonyme , puis cliquez sur Modifier sous le titre Tâches sur le côté droit, ce qui affiche la boîte de dialogue Modifier les informations d’identification d’authentification anonyme .

  4. Cliquez sur l’option Utilisateur spécifique , puis sur le bouton Définir .

  5. Entrez le nom d’utilisateur AnonymousAccount1 et le mot de passe3 , puis sélectionnez OK.

  6. La boîte de dialogue suivante s’affiche :

    Capture d’écran de la boîte de dialogue Modifier les informations d’identification d’authentification anonyme.

  7. Appuyez sur OK pour enregistrer vos modifications.

Définir le compte anonyme pour le site 2

Dans votre fenêtre d’invite de commandes avec élévation de privilèges, exécutez la commande suivante :

setProvider.exe Rsa_app2
  1. Revenez au Gestionnaire IIS et double-cliquez sur le site Two.
  2. Double-cliquez sur l’élément d’authentification sous le titre Nom de la fonctionnalité .
  3. Sélectionnez Authentification anonyme , puis cliquez sur Modifier sous le titre Tâches sur le côté droit, ce qui affiche la boîte de dialogue Modifierles informations d’identification anonymes .
  4. Cliquez sur l’option Utilisateur spécifique , puis cliquez sur Définir.
  5. Entrez le nom d’utilisateur AnonymousAccount2 et le mot de passe4 , puis sélectionnez OK.
  6. Cliquez sur OK pour enregistrer vos modifications.

Réinitialiser le fournisseur de chiffrement par défaut

  • Revenez à votre fenêtre d’invite de commandes avec élévation de privilèges et exécutez la commande suivante :
setProvider.exe RsaProtectedConfigurationProvider

Remarque

Cette modification garantit que toutes les propriétés futures chiffrées utilisent le fournisseur de chiffrement par défaut.

Vérifier les modifications

Vérifiez que ce que nous voulions faire est arrivé. À l’aide du Bloc-notes Windows, ouvrez le %SystemRoot%\System32\Inetsrv\applicationHost.config fichier :

  • Notez que le mot de passe pour AppPool1 et AppPool2 est toujours protégé par la clé Rsa_Was .

  • Notez que le mot de passe pour AnonymousAccount1 est également protégé par la clé Rsa_app1 :

    password="[enc:Rsa_app1:jAAAAAECAAADZgAAAKQAAKoz4LV7HyPQuyNzXh8gspB0rPG7j3Ijvn3d+jY3/f
        gma8ZxA7AHLUxjis9b0+Qu8XkLvsGn/A+F+m1O68gY1LkWzAcSW9ks81FuiBVhpZx73FzEo6aOz2QqBduJ7Xhu
        x923KMBqmwkIVJ0mVAdzwFIm6LWymwRXxNxDE4eosKsw6QP6Rd6duC8gckaLxrTndclErQYgGdMt3W6ofxzRMlc=:enc]" />
    
  • Enfin, notez que le mot de passe AnonymousAccount2 est également protégé par la clé Rsa_app2 :

    password="[enc:Rsa_app2:jAAAAAECAAADZgAAAKQAAKmHMhCTICEUhGncSGCxQc6ll/QGXo0asEIzOf3rIjl
     sBDGRYhlDQWlf2QbFcIsBGYt8dHo9hzAQN/f03BPSlaFynevpSx4xJOg2/B8ATgPmCg4vgxpY5huZbGxongs55c
       Rr20WFXsxzlUuw1xoUZI8c1+7gQPOtF0Rwh1g8NBmb5ML/R3jAIFcMtVhaj0OOIfAP7JCjdInwztBqK0XO7FM=:enc]" />
    

Verrouillage des fournisseurs de chiffrement

Sécurisez les autorisations de fichier pour nos clés, comme nous l’avons fait précédemment, ci-dessus. Exécutez les commandes suivantes à partir de l’invite de commandes avec élévation de privilèges :

cd /d %systemroot%
cd Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pr App1Key IIS_IUSRS
aspnet_regiis.exe -pa App1Key   AppPoolIdentity1
aspnet_regiis.exe -pr App2Key IIS_IUSRS
aspnet_regiis.exe -pa App2Key   AppPoolIdentity2

Ces commandes ont supprimé la possibilité de IIS_IUSRS de lire les clés et d’ajouter uniquement l’identité du pool d’applications qui a besoin d’une autorisation d’accès aux clés.

Test de vos sites

Testez maintenant vos sites :

  • http://localhost:81
  • http://localhost:82

Tout devrait continuer à fonctionner comme avant.

Résumé

En résumé, nous avons effectué les tâches suivantes pour sécuriser les paramètres du pool d’applications :

  • Création de deux pools d’applications
  • Création de deux comptes d’utilisateur locaux et configuration de ces comptes en tant qu’identités de pool d’applications
  • Nous avons créé une clé de chiffrement d’administration et l’avons utilisée pour protéger tous les mots de passe des identités de pool d’applications
  • Nous avons utilisé ASPNET_REGIIS pour empêcher IIS_IUSRS (le groupe d’identités du pool d’applications) d'accéder à la clé.

Ces tâches garantissent efficacement que seuls les comptes Administrateurs et SYSTEM peuvent lire les mots de passe des pools d’applications. Par conséquent, si les applications au sein d’un pool d’applications ont essayé de récupérer les mots de passe de leur pool d’applications (ou de tout) pool d’applications, la tentative échouerait.

Pour isoler les paramètres du processus de travail, nous effectuerons les étapes suivantes :

  • Création d’un compte d’identité anonyme
  • Nous avons créé un nouveau fournisseur pour le pool d’applications
  • Nous avons chiffré le mot de passe d’authentification anonyme avec la clé du pool d’applications
  • Nous avons supprimé l’accès au fournisseur d’authentification anonyme pour IIS_IUSRS et accordé l’accès uniquement à l’identité du pool d’applications

Cela garantit efficacement que seule l'identité du pool d'applications peut déchiffrer le mot de passe anonyme qui lui appartient et personne d'autre.