Identités du pool d’applications
par Thomas Deml
Que vous exécutiez votre site sur votre propre serveur ou dans le cloud, la sécurité doit être votre priorité absolue. Si c’est le cas, vous serez heureux d’apprendre que IIS dispose d’une fonctionnalité de sécurité appelée l’identité d pool d’applications. Cette fonctionnalité a été introduite dans Service Pack 2 (SP2) de Windows Server 2008 et Windows Vista. Une identité du pool d’applications vous permet d’exécuter un pool d’applications sous un compte unique sans avoir à créer et à gérer des domaines ou des comptes locaux. Le nom du compte de pool d’applications correspond au nom du pool d’applications. L’image ci-dessous montre un processus de travail IIS (W3wp.exe) s’exécutant en tant qu’identité DefaultAppPool.
Comptes d’identité du pool d’applications
Les processus de travail dans IIS 6.0 et IIS 7 s’exécutent en tant que service réseau par défaut. Le service réseau est une identité Windows intégrée. Il ne nécessite pas de mot de passe et dispose uniquement de privilèges utilisateur ; c’est-à-dire qu’il est relativement peu privilégié. L’exécution en tant que compte à faible privilège est une bonne pratique de sécurité, car un bogue logiciel ne peut pas être utilisé par un utilisateur malveillant pour prendre le contrôle de l’ensemble du système.
Cependant, un problème est apparu au fil du temps, lorsque de plus en plus de services du système Windows ont commencé à s’exécuter en tant que service réseau. Cela est dû au fait que les services s’exécutant en tant que service réseau peuvent falsifier d’autres services qui s’exécutent sous la même identité. Étant donné que les processus de travail IIS exécutent du code tiers par défaut (ASP classique, ASP.NET, code PHP), il était temps 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 une identité unique pour chacun de ses pools d’applications. Pour plus d’informations sur les comptes virtuels, consultez Guide pas à pas des comptes de service.
Configuration des identités du pool d’applications IIS
Si vous exécutez IIS 7.5 sur Windows Server 2008 R2 ou une version ultérieure d’IIS, vous n’avez rien à faire pour utiliser la nouvelle identité. Pour chaque pool d’applications que vous créez, la propriété d’identité du nouveau pool d’applications est définie sur ApplicationPoolIdentity par défaut. Le processus d’administration IIS (WAS) crée un compte virtuel avec le nom du nouveau pool d’applications et exécute les processus de travail du pool d’applications sous ce compte par défaut.
Pour utiliser ce compte virtuel lors de l’exécution d’IIS 7.0 sur Windows Server 2008, vous devez définir la propriété d’identité d’un pool d’applications que vous créez sur ApplicationPoolIdentity. Voici comment :
Ouvrez la console de gestion IIS (INETMGR.MSC).
Ouvrez le nœud Pools d’applications sous le nœud de l’ordinateur. Sélectionnez le pool d’applications que vous souhaitez modifier pour qu’il s’exécute sous une identité de pool d’applications générée automatiquement.
Cliquez avec le bouton droit sur le pool d’applications et sélectionnez Paramètres avancés
Sélectionnez l’élément de liste Identité et cliquez sur les points de suspension (le bouton avec les trois points).
La boîte de dialogue suivante s’affiche :
Sélectionnez le bouton Compte intégré, puis sélectionnez le type d’identité ApplicationPoolIdentity dans la zone de liste modifiable.
Pour effectuer la même étape à l’aide de la ligne de commande, vous pouvez appeler l’outil en ligne de commande appcmd comme suit :
%windir%\system32\inetsrv\appcmd.exe set AppPool <your AppPool> -processModel.identityType:ApplicationPoolIdentity
Sécurisation des ressources
Chaque fois qu’un pool d’applications est créé, le processus de gestion IIS crée un identificateur de sécurité (SID) qui représente le nom du pool d’applications lui-même. Par exemple, si vous créez un pool d’applications portant le nom « MyNewAppPool », un identificateur de sécurité portant le nom « MyNewAppPool » est créé dans le système de sécurité Windows. À partir de ce stade, les ressources peuvent être sécurisées à l’aide de cette identité. Toutefois, 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.
Vous pouvez essayer cela en sélectionnant un fichier dans l’Explorateur Windows et en ajoutant l’identité « DefaultAppPool » à la liste de contrôle d’accès (ACL) du fichier.
Ouvrir l'Explorateur Windows
Sélectionnez un fichier ou un répertoire.
Cliquez avec le bouton droit sur le fichier et sélectionnez Propriétés
Sélectionnez l’onglet Sécurité.
Cliquez sur le bouton Modifier, puis sur le bouton Ajouter
Cliquez sur le bouton Emplacements et veillez à sélectionner votre ordinateur.
Entrez IIS AppPool\DefaultAppPool dans la zone de texte Entrez les noms d’objets à sélectionner :.
Cliquez sur le bouton Vérifier les noms, puis cliquez sur OK.
En procédant ainsi, le fichier ou le répertoire que vous avez sélectionné autorise désormais également l’accès à l’identité DefaultAppPool.
Vous pouvez le faire via la ligne de commande à l’aide de l’outil ICACLS. L’exemple suivant donne un accès complet à l’identité DefaultAppPool.
ICACLS test.txt /grant "IIS AppPool\DefaultAppPool:F"
Pour plus d’informations, consultez ICACLS.
Sur Windows 7 et Windows Server 2008 R2, et les versions ultérieures de Windows, la valeur par défaut consiste à exécuter des pools d’applications en tant qu’identité de pool d’applications. Pour ce faire, un nouveau type d’identité portant le nom « AppPoolIdentity » a été créé. Si le type d’identité « AppPoolIdentity » est sélectionné (la valeur par défaut sur Windows 7 et Windows Server 2008 R2, et les versions ultérieures), 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 ApplicationPoolIdentity, mais le propriétaire du jeton n’est probablement pas unique. Pour plus d’informations sur ce concept, consultez le billet de blog Nouveautés de IIS 7 : isolement du pool d’applications.
Accès au réseau
L’utilisation du compte de service réseau dans un environnement de domaine offre un grand avantage. Le processus de travail s’exécutant en tant que service réseau accède 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. Ils ressemblent à ceci :
<domainname>\<machinename>$,
Par exemple :
mydomain\machine1$
L'avantage est que les ressources du réseau telles que les partages de fichiers ou les bases de données SQL Server peuvent être gérées par liste de contrôle d'accès pour autoriser l’accès à ce compte d’ordinateur.
Qu’en est-il des identités de pool d’applications ?
La bonne nouvelle, c’est que 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 du pool d’applications
Documentation d’aide
Le plus gros problème de compatibilité avec les identités du pool d’applications est probablement liés aux documents d’aide antérieurs qui vous recommandent explicitement d’utiliser une liste de contrôle d'accès pour les ressources pour le service réseau, c’est-à-dire l’identité par défaut de DefaultAppPool dans IIS 6.0 et IIS 7.0. Les clients devront modifier leurs scripts pour utiliser une liste de contrôle d'accès pour « IIS AppPool\DefaultAppPool » (ou un autre nom de pool d’applications) lors de l’exécution sur IIS 7.5 ou version ultérieure (voir l’exemple ci-dessus pour savoir comment procéder).
Profil utilisateur
IIS ne charge pas le profil utilisateur Windows, mais certaines applications peuvent en tirer parti pour stocker des données temporaires. SQL Express est un exemple d’application qui effectue cette opération. Toutefois, un 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 de service réseau a été créé par le système et a toujours été disponible. Toutefois, avec le passage aux identités du pool d’applications uniques, aucun profil utilisateur n’est créé par le système. 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.
Toutefois, si vous le souhaitez, vous pouvez configurer des pools d’applications IIS pour charger le profil utilisateur en définissant l’attribut LoadUserProfile sur « true ».
Résumé
Les identités du pool d’applications sont une nouvelle fonctionnalité d’isolement puissante introduite pour Windows Server 2008, Windows Vista et les versions ultérieures de Windows. Cela rendra l’exécution d’applications IIS encore plus sécurisées et fiables.