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 Tali Smith
Introduction
La recommandation d’isolation des sites Web dans un environnement d’hébergement partagé est conforme à toutes les recommandations générales en matière d’isolation de sécurité pour Internet Information Services 7 (IIS 7) et versions ultérieures. Voici quelques recommandations spécifiques.
- Utilisez un pool d’applications par site Web.
- Utilisez un compte d’utilisateur dédié comme identité pour le pool d’applications.
- Configurez l’identité de l’utilisateur anonyme pour utiliser l’identité du pool d’applications.
- Vérifiez que l’emprunt d’identité FastCGI est activé dans le fichier Php.ini.
Une vue architecturale des pools d’applications apparaît dans la figure qui suit.
Figure 1 : Pools d’applications
Créer des pools d’applications
Vous pouvez créer des pools d’applications à partir de l’interface utilisateur ou de la ligne de commande.
- Dans le Gestionnaire des services IIS, accédez au volet Connexions.
- Choisissez l’option Pools d’applications, puis ajoutez un pool d’applications pour ouvrir la boîte de dialogue Ajouter un pool d’applications.
- Entrez un nom unique pour le pool d’applications.
- Choisissez la version, le cas échéant, de Microsoft® .NET Framework pour le pool d’applications à utiliser, puis choisissez votre mode pipeline.
Une fois qu’un pool est créé, vous pouvez modifier ses paramètres chaque fois que nécessaire.
- Dans le volet Connexions, choisissez Pools d’applications.
- Dans le volet Travail, choisissez le pool d’applications à configurer.
- Dans le volet Actions, choisissez Paramètres de base. Notez que, à l’exception du titre de la boîte de dialogue, la boîte de dialogue Paramètres de base et les boîtes de dialogue Ajouter un pool d’applications sont identiques.
Vous pouvez également utiliser la ligne de commande. Utiliser :
appcmd add apppool /name:string
Notez que la chaîne correspond au nom du pool d’applications.
La boîte de dialogue Modifier le pool d’applications vous permet de configurer la façon dont IIS 7 et versions ultérieures gèrent le recyclage des processus de travail pour le pool d’applications.
Figure 2 : Modifier le pool d’applications
Identités du pool d’applications
Les identités de pool d’applications sont une nouvelle fonctionnalité de sécurité qui vous permet d’exécuter des pools d’applications sous un compte unique sans avoir à créer et gérer des comptes de domaine ou locaux. Le nom du compte de pool d’applications correspond au nom du pool d’applications. La figure suivante montre un processus de travail IIS (w3wp.exe) s’exécutant en tant qu’identité DefaultAppPool.
Figure 3 : Comptes d’identité de pool d’applications
Comptes d’identité de pool d’applications
Les processus de travail dans IIS 6, et dans IIS 7 et versions ultérieures, s’exécutent en tant que NETWORKSERVICE par défaut. NETWORKSERVICE est une identité Windows® intégrée. NETWORKSERVICE ne nécessite pas de mot de passe et dispose uniquement de privilèges utilisateur (relativement faibles). L’exécution en tant que compte à faible privilège est une bonne pratique de sécurité, car cela empêche les utilisateurs malveillants d’utiliser des bogues logiciels pour prendre le contrôle du système.
Toutefois, au fil du temps, de plus en plus de services système Windows ont été exécutés en tant que NETWORKSERVICE, et ces services peuvent falsifier d’autres services s’exécutant sous la même identité. Étant donné que les processus de travail IIS exécutent du code tiers par défaut (PHP, ASP classique et Microsoft® ASP.NET), il est devenu nécessaire d’isoler les processus de travail IIS d’autres services système Windows et d’exécuter des processus de travail IIS sous des identités uniques. Le système d’exploitation Windows fournit une fonctionnalité appelée comptes virtuels qui permet à IIS de créer des identités uniques pour chacun de ses pools d’applications.
Chaque fois qu’un nouveau pool d’applications est créé, le processus de gestion IIS crée un identificateur de sécurité (SID) représentant le nom du pool d’applications lui-même. Par exemple, si vous créez un pool d’applications portant le nom « MyNewAppPool », un SID portant le nom « MyNewAppPool » est créé dans le système de sécurité Windows. Les ressources peuvent être sécurisées à l’aide de cette identité. Notez que l’identité n’est pas un compte d’utilisateur réel ; il ne s’affiche pas en tant qu’utilisateur dans la console de gestion des utilisateurs Windows.
Essayez de sélectionner un fichier dans l’Explorateur® Windows et d’ajouter l’identité « DefaultAppPool » à sa liste de contrôle d’accès (ACL) :
- Démarrez l’Explorateur Windows.
- Sélectionnez un fichierou un répertoire.
- Cliquez avec le bouton droit sur le nom dufichier, puis cliquez sur Propriétés.
- Cliquez sur l’onglet Security .
- Cliquez sur Modifier, puis sur Ajouter.
- Cliquez sur Emplacements, puis sélectionnez votre ordinateur.
- Dans la zone de texte Entrer les noms d’objets pour sélectionner, tapez iis apppool\defaultapppool.
- Cliquez sur Vérifier les noms, puis sur OK.
Le fichier ou le répertoire que vous avez sélectionné autorise désormais l’accès aux identités DefaultAppPool.
Figure 4 : Sélectionner des utilisateurs ou des groupes
Vous pouvez également utiliser la ligne de commande avec l’outil Icacls.exe. Les éléments suivants donnent un accès complet à l’identité DefaultAppPool :
ICACLS test.txt /grant "IIS AppPool\DefaultAppPool":F
Sur les systèmes d’exploitation Windows® 7 et Windows Server® 2008 R2, la valeur par défaut consiste à exécuter des pools d’applications en tant qu’identificateur de sécurité (en tant qu’identité de pool d’applications). Un nouveau type d’identité portant le nom « AppPoolIdentity » est disponible. Si le type d’identité « AppPoolIdentity » est sélectionné (il s’agit de la valeur par défaut sur Windows 7 et Windows Server 2008 R2), IIS exécute les processus de travail en tant qu’identité du pool d’applications. Avec tous les autres types d’identité, l’identificateur de sécurité est injecté uniquement dans le jeton d’accès du processus. Si l’identificateur est injecté, le contenu peut toujours être géré par liste de contrôle d’accès pour l’identité AppPool, mais le propriétaire du jeton n’est probablement pas unique. Consultez la section Isoler les pools d’applications qui suivent.
Accès au réseau
L’utilisation du compte NETWORKSERVICE dans un environnement de domaine offre un grand avantage. Le processus de travail s’exécutant en tant que NETWORKSERVICE peut accéder au réseau en tant que compte d’ordinateur. Les comptes d’ordinateur sont générés lorsqu’un ordinateur est joint à un domaine :
<domainname>\<machinename>$,
Par exemple :
mydomain\machine1$
Les ressources réseau telles que les partages de fichiers ou les bases de données Microsoft® SQL Server® peuvent être gérés par liste de contrôle d’accès pour autoriser l’accès pour ce compte d’ordinateur. Les identités du pool d’applications utilisent également le compte d’ordinateur pour accéder aux ressources réseau. Aucune modification n’est nécessaire.
Problèmes de compatibilité avec les identités de pool d’applications
Un défi avec les identités de pool d’applications est que les documents d’aide recommandent explicitement aux ressources ACL pour NETWORKSERVICE (l’identité par défaut de DefaultAppPool dans IIS 6.0 et 7.0). Les utilisateurs doivent modifier leurs scripts en ACL pour « IIS AppPool\DefaultAppPool » lors de l’exécution sur IIS 7.5 et versions ultérieures.
IIS ne charge pas le profil utilisateur Windows, mais certaines applications (telles que Microsoft® SQL Server® 2008 Express) peuvent l’utiliser de toute façon (par exemple, pour stocker des données temporaires). Le profil utilisateur doit être créé pour stocker des données temporaires dans le répertoire de profil ou dans la ruche du Registre. Le profil utilisateur du compte NETWORKSERVICE a été créé par le système et a toujours été disponible. Toutefois, un profil utilisateur n’est pas créé par le système lors du basculement vers des identités de pool d’applications uniques. Seuls les pools d’applications standard (DefaultAppPool et Classic .NET AppPool) ont des profils utilisateur sur le disque. Aucun profil utilisateur n’est créé si l’administrateur crée un pool d’applications.
Notez que les pools d’applications IIS peuvent être configurés pour charger le profil utilisateur en définissant le paramètre « LoadUserProfile » sur « true ».
Isoler les pools d’applications
La séparation des applications en plusieurs pools d’applications peut non seulement améliorer les performances, mais également améliorer la fiabilité du serveur et du site. Toutefois, dans les versions précédentes d’IIS, il a parfois été difficile d’isoler les pools d’applications web les uns des autres. Si plusieurs pools d’applications sont configurés pour s’exécuter avec la même identité, le code exécuté à l’intérieur d’un pool d’applications peut utiliser des objets de système de fichiers (FSO) pour accéder aux ressources appartenant à une autre.
Dans IIS 7, chaque pool d’applications a un fichier de configuration généré lors du démarrage du pool d’applications. Ces fichiers sont stockés par défaut dans le dossier %systemdrive%\inetpub\temp\AppPools
.
Chaque pool d’applications a également un identificateur de sécurité (SID) ajouté au processus de w3wp.exe approprié. Le fichier de configuration du pool d’applications est le contrôle d’accès répertorié (ACLed) pour autoriser uniquement l’accès à ce SID.
Vous pouvez utiliser l’outil Icacls.exe pour identifier le SID appliqué au fichier de configuration du pool d’applications donné avec :
icacls.exe %systemdrive%\inetpub\temp\appPools\appPool.config /save output.txt
Un utilisateur peut utiliser le SID du pool d’applications pour ACL son contenu et sécuriser son site web. Cela est utile pour les hôtes web qui doivent accepter du contenu provenant de différentes sources externes.
- Configurez chaque site web (ou application web) pour qu’il s’exécute dans son propre pool d’applications web.
- Configurez l’authentification anonyme pour utiliser l’identité du pool d’applications, plutôt que le compte IUSR (Industry Usability Reporting) en modifiant les propriétés d’authentification anonyme.
- Supprimez les autorisations NTFS pour le groupe IUSRS et le compte IUSR des fichiers et dossiers du site Web.
- Utilisez l’outil Icacls.exe pour donner au SID du pool d’applications « read » (et éventuellement « execute » et « write ») l’accès aux fichiers et dossiers du site Web. Vous pouvez utiliser IIS APPPOOL\ApplicationPoolName comme utilisateur pour accorder des autorisations de lecture.
Après avoir configuré les autorisations NTFS, seul le SID qui a été injecté dans un processus de w3wp.exe particulier sera en mesure de lire le contenu du site Web. Tout le code exécuté dans d’autres processus w3wp.exe (même s’il s’exécute avec la même identité) ne pourra pas accéder au contenu de ce site web.
Remarque
Cet article est basé sur des documents provenant des identités de pool d’applications écrites par l’équipe IIS et publiées le 27 mai 2009.