Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
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(); } } }
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.
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
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(); } } }
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.
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 :
- Cliquez sur le menu Démarrer .
- Cliquez avec le bouton droit sur l’invite de commandes.
- Sélectionnez Exécuter en tant qu’administrateur.
- 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
- Cliquez sur le menu Démarrer .
- Cliquez avec le bouton droit sur l’invite de commandes.
- Sélectionnez Exécuter en tant qu’administrateur.
- 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 :
- Cliquez sur le menu Démarrer .
- Cliquez avec le bouton droit sur l’invite de commandes.
- Sélectionnez Exécuter en tant qu’administrateur.
- 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 :
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).
Cliquez sur le + bouton en regard du nom de votre ordinateur dans la section Connexions .
Cliquez sur Pools d’applications.
Sélectionnez la tâche à droite intitulée Ajouter un pool d’applications.
Entrez le nom « AppPool1 », puis appuyez sur OK comme indiqué :
Répétez les étapes précédentes, mais cette fois,utilisez le nom AppPool2.
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
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
À présent, la valeur Identity doit apparaître comme indiqué ci-dessous :
Cliquez sur OK pour enregistrer vos modifications.
Répétez l’étape précédente pour AppPool2 et le nom d’utilisateur « AppPoolIdentity2 » et le mot de passe « password2 ».
Vous voyez les éléments suivants affichés dans le Gestionnaire IIS (principalement les identités pour les pools d’applications ont changé) :
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 :
Cliquez sur le menu Démarrer .
Cliquez avec le bouton droit sur l’invite de commandes.
Sélectionnez Exécuter en tant qu’administrateur.
Dans la fenêtre de commande, accédez à votre répertoire wwwroot à l’aide de la commande suivante :
cd /d %SystemDrive%\inetpub\wwwroot
Créez un répertoire nommé « un » et un répertoire « deux » à l’aide des commandes suivantes :
mkdir one
mkdir two
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 :
Cliquez sur Démarrer, tapez INetMgr.exe et appuyez sur Entrée (si vous y êtes invité, sélectionnez Continuer pour élever vos autorisations).
Cliquez sur le + bouton en regard du nom de votre ordinateur dans la section Connexions .
Cliquez avec le bouton droit sur Site dans l’arborescence sous Connexions , puis sélectionnez Ajouter un site web.
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 : 81Cela doit ressembler à ce qui suit lorsque vous avez terminé :
Cliquez sur OK pour enregistrer les modifications.
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 :
Cliquez sur le menu Démarrer.
Cliquez avec le bouton droit sur l’invite de commandes.
Sélectionnez Exécuter en tant qu’administrateur.
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
Revenez au Gestionnaire d’IIS et double-cliquez sur le site One.
Double-cliquez sur l’élément d’authentification sous le titre Nom de la fonctionnalité .
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 .
Cliquez sur l’option Utilisateur spécifique , puis sur le bouton Définir .
Entrez le nom d’utilisateur AnonymousAccount1 et le mot de passe3 , puis sélectionnez OK.
La boîte de dialogue suivante s’affiche :
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
- Revenez au Gestionnaire IIS et double-cliquez sur le site Two.
- Double-cliquez sur l’élément d’authentification sous le titre Nom de la fonctionnalité .
- 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 .
- Cliquez sur l’option Utilisateur spécifique , puis cliquez sur Définir.
- Entrez le nom d’utilisateur AnonymousAccount2 et le mot de passe4 , puis sélectionnez OK.
- 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.