Protegendo configuração ASP.NET
Configuração do ASP.NET fornece a funcionalidade para configurar um servidor inteiro, um aplicativo ASP.NET ou páginas individuais em subdiretórios do aplicativo.You can configure features, such as authentication modes, page caching, compiler options, custom errors, debug and trace options, and much more.Este tópico descreve como otimizar a segurança dos recursos de configuração por práticas recomendadas ao configurar aplicativos ASP.NET local ou remoto.Para obter mais informações sobre como proteger outros recursos do ASP.NET, consulte as informações listadas na seção Consulte também.
Enquanto as seguintes práticas recomendadas de codificação e configuração podem melhorar a segurança do seu aplicativo, também é importante que você mantenha continuamente atualizado o servidor de aplicativos com as atualizações de segurança mais recentes do Microsoft Windows e Serviços de Informações da Internet (IIS), assim como quaisquer atualizações de segurança para o Servidor Microsoft SQL ou outras associações de fontes de dados.
Para obter informações detalhadas sobre as práticas recomendadas para escrever código seguro e proteção de aplicativos, consulte o livro "Writing Secure Code" de Michael Howard e David LeBlanc e orientação fornecida porPadrões e práticas da Microsoft.
Observação importante: |
---|
O sistema de configuração do ASP.NET configura somente recursos e capacidades do ASP.NET.Use os recursos de configuração do IIS para configurar recursos não ASP.NET.Para obter mais informações sobre a configuração do IIS, consulte Trabalhando com a Metabase do (IIS 6.0) and Referência de propriedades de Metabase do IIS. |
Segurança do Arquivo de Configuração
A tabela a seguir lista as listas de controle de acesso (ACLs) que são definidas por padrão no arquivo Machine.config e o arquivo web.config de raiz, ambos localizados no diretório \CONFIG %SystemRoot%\Microsoft.NET\Framework\versão.Essas ACLs também são definidos no diretório em si, mas eles incluem permissões de modificação para o grupo Usuários Avançados.O diretório é somente leitura.
Conta do Windows |
Permissões |
---|---|
Administradores |
Controle Total |
Conta do computador do ASP.NET (<servidor>\ASPNET) |
Read and Execute |
IIS_WPG (<servidor>\IIS_WPG) |
Read and Execute |
LOCAL SERVICE |
Read and Execute |
NETWORK SERVICE |
Read and Execute |
Usuários Avançados (<servidor>\Usuários Avançados) |
Modify |
SYSTEM |
Controle Total |
Usuários (<servidor>\Usuários) |
Read and Execute |
A tabela a seguir lista as ACLs que devem ser definidas nos arquivos Web.config e em quaisquer arquivos listados nos atributos configSource.
Conta do Windows |
Permissões |
---|---|
Administradores |
Controle Total |
IIS_WPG (<servidor>\IIS_WPG) |
Read and Execute |
INTERACTIVE |
Read |
Conta de convidado da Internet (<servidor>\IUSR_<servidor>) |
Read |
NETWORK |
Read |
NETWORK SERVICE |
Read |
SYSTEM |
Controle Total |
Usuários (<servidor>\Usuários) |
Read and Execute |
Especial |
O sistema de configuração do ASP.NET honra as ACLs que são definidas em arquivos de configuração, independentemente de como as definições de configuração são editadas.Para obter mais informações, consulte Editando Arquivos de Configuração ASP.NET.
Protegendo Valores de Configuração
Ao armazenar informações sigilosas em um arquivo de configuração para um aplicativo, você deve criptografar os valores confidenciais usando uma configuração protegida.Informações que são especialmente confidenciais incluem as chaves de criptografia armazenadas no elemento de configuração machineKey e nas sequências de conexão a uma fonte de dados armazenadas no elemento de configuração connectionStrings.Para obter mais informações, consulte Criptografando informações de configuração usando configuração protegida.
Protegendo recipientes de configurações de chave de criptografia
Um aspecto crítico de usar uma chave de criptografia é a proteção do arquivo, também chamado recipiente, no qual a chave é armazenada.Uma coisa importante para ter em mente é o nível de proteção associado com o recipiente.Observe que o recipiente é armazenado em um arquivo regular de sistema operacional e o acesso à chave de criptografia é regulamentada pelas ACLs no arquivo.As ACLs podem ser herdadas da pasta onde o arquivo é criado.Recipientes de chave com o escopo da máquina local (useMachineContainer"TRUE") são armazenados em uma pasta oculta no %ALLUSERSPROFILE%\Dados de Aplicativo\Microsoft\Crypto\RSA\MachineKeys.
Por padrão, o usuário que criou o contêiner de chave terá acesso completo para a chave.Outros usuários (incluindo os grupo Administradores) podem ou não podem ter acesso para o recipiente, dependendo das ACLs definidas no recipiente.Other users can receive access to the container by using the –pa switch of the ASP.NET IIS Registration Tool (Ferramenta de registro ASP.NET IIS (Aspnet_regiis.exe)).Os usuários tentando criptografar ou descriptografar com a chave especificada devem ter as permissões necessárias para acessar o contêiner de chave.
Em alguns casos, um usuário que não tenha privilégios administrativos mesmo assim pode criar um chave de criptografia.Isso pode acontecer se um aplicativo solicita uma configuração de criptografia quando uma chave não existe.Observe que o recipiente irá ser criado se ele não existir, e uma operação de criptografia é executada.
Nesse caso, o .NET Framework cria a chave necessário e o recipiente relacionada com as ACLs do usuário atual.O problema potencial aqui é que um usuário com privilégios administrativos pode ter o acesso negado para o contêiner de cave de criptografia.Administradores podem obter novamente acesso à chave colocando a propriedade do arquivo físico na pasta mencionado acima.As diretrizes sugeridas chamam por um usuário com privilégios administrativos para criar as chaves necessárias antes que elas sejam usadas e assim evitar de criá-las no momento da criptografia.
Proteção de configuração em um ambiente de hospedagem compartilhada
Em um ambiente de hospedagem compartilhado, usuários mal-intencionados podem potencialmente modificar definições de configuração através de modificação direta dos arquivos de configuração, modificação por meio de APIs de configuração e outras ferramentas de administração e configuração.Você pode evitar modificação para sua configuração de aplicativo pelo bloqueio de seções de configuração.Você faz isso adicionando elementos location para o arquivo Machine.config ou qualquer arquivo de configuração que está localizado mais acima na hierarquia do que a arquivo de configuração que você deseja restringir.O elemento location é usado para impedir que arquivos de configuração filho de alterem suas configurações.Para obter mais informações, consulte Como: bloquear ASP.NET configuração Settings e Como: Configurar diretórios específicos usando as definições de local.
Configuração remota
A configuração remota é desativada por padrão.Quando ativado, o usuário é autenticado no nível do DCOM e somente os administradores locais estão autorizados a ler ou gravar dados de configuração.Para obter mais informações, consulte Editando Arquivos de Configuração remotos do ASP.NET.
Provedores de configuração personalizado
Independentemente do token de segurança do usuário atual, código de manipulador de seção personalizado é executado usando as credenciais da conta de processo do hospedagem .Para cenários Web, este é a conta <servidor>\ASPNET no Windows 2000 e Windows XP, a conta de SERVIÇO DE REDE no Windows Server 2003 ou um conta de usuário explicitamente configurado.Para cenários de cliente, esta é a identidade do processo em execução no momento.
O sistema de configuração define permissões antes de chamar um manipulador da seção de configuração personalizada, e a chamada não é confiável de qualquer forma pelo .NET Framework.A chamada será executado com a permissão de confiança do aplicativo.O sistema de configuração do ASP.NET confia no diretório %systemroot%\Microsoft.NET\Framework\versão\CONFIG, mas ele não confia em diretórios que estão localizados mais abaixo na hierarquia.
Um manipulador da seção de configuração personalizada deve definir atributos de demanda de código de acesso de segurança (CAS) para obter permissões.Para obter mais informações, consulte Segurança do Acesso ao código ASP.NET ou Noções Básicas sobre Segurança de Accesso a Código.
Mantendo um trava de arquivo em um arquivo de configuração
Somente várias tentativas de salvar um arquivo de configuração ou abrir um manipulador de arquivo pode bloquear um arquivo de configuração.Um usuário mal-intencionado pode tentar bloquear o arquivo Machine.config ou o arquivo web.config de raiz, mas confiança total é necessária para fazer isso, e está desativada no ASP.NET por padrão.
Usando a configuração API para ler arquivos arbitrários
As classes da configuração API não podem ler quaisquer diretórios que não fazem parte do domínio de aplicativo, ou quaisquer arquivos que não têm uma extensão de nome de arquivo .config.
Configurações da meta base do IIS se aplicam a solicitações do ASP.NET
Quando o IIS recebe uma solicitação para um aplicativo ASP.NET, as configurações da meta base do IIS são aplicadas ao aplicativo ASP.NET, independentemente das definições de configuração do aplicativo.Essa restrição pode resultar em aplicativos ASP.NET que estão inacessíveis aos usuários ou tem configurações de segurança menos restritivas.
Por exemplo, se as configurações de segurança na meta base do IIS são definidas para permitir acesso ao site somente aos usuários autenticados enquanto configurações de segurança no arquivo web.config são definidas para permitir acesso anônimo ao site, os usuários anônimos poderiam ter acesso ao site negados.Para corrigir isso, você poderia configurar o aplicativo da Web no Gerenciador do IIS para permitir o acesso de usuários anônimos.
Para obter mais informações sobre como proteger os recursos do IIS, consulte Segurança no IIS 6.0.
Mensagens de Erro e Eventos
As seções a seguir abordam como você pode atenuar possíveis riscos de segurança que são expostos por mensagens de erro inesperado e eventos.
Exceções
Para evitar que informações confidenciais sejam expostas a fontes indesejadas, configure seu aplicativo para não exibir mensagens de erro detalhadas ou para exibir mensagens de erro detalhadas somente quando o cliente é o próprio servidor Web.Para obter mais informações, consulte customErrors elemento (esquema configurações ASP.NET).
Log de Eventos
Se o servidor está executando o Windows Server 2003, você pode melhorar a segurança do seu aplicativo protegendo o log de eventos e configurando parâmetros sobre o tamanho, retenção, e assim por diante do log de eventos para impedir uma ataque indireto de negação de serviço contra ele.Para obter mais informações sobre como configurar logs de eventos, procure "Visualizar Eventos" na Ajuda e Suporte do Windows.
Monitoração saudável
Tentativas de logon bem-sucedidas e com falha são registradas usando o recurso monitoração de integridade do ASP.NET .Na configuração padrão, isso significa que tentativas de login falhas registrarão o nome de usuário e informações de diagnóstico no evento log Application.Certifique-se de que o acesso ao log de eventos é restrito a ajudar a manter essas informações particulares.
Consulte também
Conceitos
Visão Geral do Monitoramento da Integridade do ASP.NET
Bloqueando Definições de Configuração
Editando Arquivos de Configuração remotos do ASP.NET
Outros recursos
Protegendo sites da Web ASP.NET
Criptografando informações de configuração usando configuração protegida
Criptografando informações de configuração usando configuração protegida