Identidades do pool de aplicativos
por Thomas Deml
Se você estiver executando seu site em seu próprio servidor ou na nuvem, a segurança deve estar no topo da lista de prioridades. Nesse caso, você ficará feliz em ouvir que o IIS tem um recurso de segurança chamado identidade do pool de aplicativos. Esse recurso foi introduzido no Service Pack 2 (SP2) do Windows Server 2008 e no Windows Vista. Uma identidade do pool de aplicativos permite executar um pool de aplicativos em uma conta exclusiva sem a necessidade de criar e gerenciar domínios ou contas locais. O nome da conta do pool de aplicativos corresponde ao nome do pool de aplicativos. A imagem abaixo mostra um processo de trabalho do IIS (W3wp.exe) em execução como a identidade DefaultAppPool.
Contas de identidade do pool de aplicativos
Os processos de trabalho no IIS 6.0 e no IIS 7 são executados como Serviço de Rede por padrão. O Serviço de Rede é uma identidade interna do Windows. Ele não requer senha e tem apenas privilégios de usuário, ou seja, tem poucos privilégios de modo geral. A execução como uma conta de poucos privilégios é uma boa prática de segurança porque, um bug de software não pode ser usado por um usuário mal-intencionado para assumir todo o sistema.
No entanto, um problema surgiu ao longo do tempo à medida que mais e mais serviços do sistema Windows começaram a ser executados como Serviço de Rede. Isso ocorre porque os serviços em execução como Serviço de Rede podem adulterar outros serviços executados sob a mesma identidade. Como os processos de trabalho do IIS executam código de terceiros por padrão (Código ASP, ASP.NET, PHP clássicos), foi necessário isolar processos de trabalho do IIS de outros serviços do sistema Windows e executar processos de trabalho do IIS em identidades exclusivas. O sistema operacional Windows fornece um recurso chamado "contas virtuais" que permite ao IIS criar uma identidade exclusiva para cada um de seus pools de aplicativos. Para obter mais informações sobre contas virtuais, consulte Guia passo a passo de contas de serviço.
Configurar identidades do pool de aplicativos do IIS
Se você estiver executando o IIS 7.5 no Windows Server 2008 R2 ou uma versão posterior do IIS, não precisará fazer nada para usar a nova identidade. Para cada pool de aplicativos criado, a propriedade de identidade do novo pool de aplicativos é definida como ApplicationPoolIdentity por padrão. O Processo Administrador do IIS (WAS) criará uma conta virtual com o nome do novo pool de aplicativos e executará os processos de trabalho do pool de aplicativos nesta conta por padrão.
Para usar essa conta virtual ao executar o IIS 7.0 no Windows Server 2008, você precisa alterar a propriedade de identidade de um pool de aplicativos criado para ApplicationPoolIdentity. Veja como:
Abra o Console de Gerenciamento do IIS (INETMGR.MSC).
Abra o nó dos pools de aplicativos abaixo do nó do computador. Selecione o pool de aplicativos que você deseja alterar para ser executado em uma identidade do pool de aplicativos gerada automaticamente.
Clique com o botão direito do mouse no pool de aplicativos e selecione Configurações Avançadas
Selecione o item Identidades da lista e clique nas reticências (o botão com os três pontos).
A caixa de diálogo a seguir é exibida:
Selecione o botão da conta interna e, em seguida, selecione o tipo de identidade ApplicationPoolIdentity na caixa de combinação.
Para fazer a mesma etapa usando a linha de comando, chame a ferramenta de linha de comando appcmd da seguinte maneira:
%windir%\system32\inetsrv\appcmd.exe set AppPool <your AppPool> -processModel.identityType:ApplicationPoolIdentity
Como proteger os recursos
Sempre que um novo pool de aplicativos é criado, o processo de gerenciamento do IIS cria um identificador de segurança (SID) que representa o nome do próprio pool de aplicativos. Por exemplo, se você criar um pool de aplicativos com o nome "MyNewAppPool", um SID com o nome "MyNewAppPool" será criado no sistema da Segurança do Windows. Daí em diante, os recursos podem ser protegidos usando essa identidade. No entanto, a identidade não é uma conta de usuário real; ela não aparecerá como um usuário no Console de Gerenciamento de Usuários do Windows.
Você pode experimentar isso selecionando um arquivo no Explorador de Arquivos e adicionando a identidade "DefaultAppPool" à ACL (Lista de Controle de Acesso) do arquivo.
Abra o Windows Explorer
Selecione um arquivo ou diretório.
Clique com o botão direito do mouse no arquivo e selecione Propriedades
Selecione a guia Segurança
Clique no botão Editar e, em seguida, em Adicionar
Clique no botão Locais e selecione seu computador.
Insira IIS AppPool\DefaultAppPool na caixa de texto Insira os nomes de objeto a serem selecionados:.
Clique no botão Verificar Nomes e, em seguida, clique em OK.
Ao fazer isso, o arquivo ou diretório selecionado agora também permitirá o acesso à identidade DefaultAppPool.
Você pode fazer isso por meio da linha de comando usando a ferramenta ICACLS. O exemplo a seguir fornece acesso completo à identidade DefaultAppPool.
ICACLS test.txt /grant "IIS AppPool\DefaultAppPool:F"
Para obter mais informações, confira ICACLS.
No Windows 7 e no Windows Server 2008 R2 e nas versões posteriores do Windows, o padrão é executar pools de aplicativos como a identidade do pool de aplicativos. Para que isso fosse possível, um novo tipo de identidade com o nome "AppPoolIdentity" foi introduzido. Se o tipo de identidade "AppPoolIdentity" estiver selecionado (o padrão no Windows 7 e no Windows Server 2008 R2 e posteriores), o IIS executará processos de trabalho como a identidade do pool de aplicativos. Com todos os outros tipos de identidade, o identificador de segurança será injetado apenas no token de acesso do processo. Se o identificador for injetado, o conteúdo ainda poderá verificado na ACL para a ApplicationPoolIdentity, mas o proprietário do token provavelmente não será exclusivo. Para obter mais informações sobre esse conceito, consulte a postagem no blog Novidade no IIS 7 – Isolamento do pool de aplicativos.
Acessar a rede
Usar a conta Serviço de Rede em um ambiente de domínio tem um grande benefício. O processo de trabalho em execução como Serviço de Rede pode acessar a rede como a conta do computador. As contas do computador são geradas quando um computador é ingressado em um domínio. Elas têm esta aparência:
<domainname>\<machinename>$,
Por exemplo:
mydomain\machine1$
O interessante disso é que recursos de rede, como compartilhamentos de arquivos ou bancos de dados do SQL Server, podem ser inseridos na ACL para permitir o acesso a essa conta de computador.
E as identidades do pool de aplicativos?
A boa notícia é que as identidades do pool de aplicativos também usam a conta do computador para acessar recursos de rede. Nenhuma alteração é necessária.
Problemas de compatibilidade com as identidades do pool de aplicativos
Documentação de diretrizes
O maior problema de compatibilidade com as identidades do pool de aplicativos provavelmente são documentos de diretrizes anteriores que recomendam explicitamente que os recursos para o Serviço de Rede sejam incluídos na ACL, ou seja, a identidade padrão do DefaultAppPool no IIS 6.0 e no IIS 7.0. Os clientes terão que alterar os scripts para ACL para "IIS AppPool\DefaultAppPool" (ou outro nome do pool de aplicativos) ao executar no IIS 7.5 ou posterior (consulte o exemplo acima para saber como fazer isso).
Perfil do Usuário
O IIS não carrega o perfil de usuário do Windows, mas determinados aplicativos ainda podem tirar proveito dele para armazenar dados temporários. O SQL Express é um exemplo de um aplicativo que faz isso. No entanto, um perfil de usuário precisa ser criado para armazenar dados temporários no diretório do perfil ou no hive do Registro. O perfil de usuário da conta Serviço de Rede foi criado pelo sistema e sempre esteve disponível. No entanto, com a mudança para identidades exclusivas do pool de aplicativos, nenhum perfil de usuário é criado pelo sistema. Somente os pools de aplicativos padrão (DefaultAppPool e .NET AppPool clássico) têm perfis de usuário em disco. Nenhum perfil de usuário será criado se o Administrador criar um novo pool de aplicativos.
No entanto, se desejar, você pode configurar pools de aplicativos do IIS para carregar o perfil de usuário definindo o atributo LoadUserProfile como "true".
Resumo
As identidades do pool de aplicativos são um novo recurso de isolamento avançado introduzido para Windows Server 2008, Windows Vista e versões posteriores do Windows. Isso tornará a execução de aplicativos IIS ainda mais segura e confiável.