Share via


Etapa 4 do Planejamento: Planejar a Segurança de Aplicativos PHP

de Keith Newman e Robert McMurray

Nesta fase de compilação do seu site, considere as necessidades de segurança do aplicativo ASP.NET. As seções a seguir descrevem as configurações de segurança do aplicativo disponíveis no IIS 8:

4.1. Isolar aplicativos Web

Uma das maneiras mais eficientes de melhorar a segurança do seu aplicativo Web é isolá-lo de outros aplicativos no servidor Web. Um pool de aplicativos tem o seu próprio processo de trabalho, que processa as solicitações e executa código do aplicativo. O processo de trabalho possui um identificador de segurança (SID). E cada pool de aplicativos possui uma identidade exclusiva de pool de aplicativos. Por padrão, quando você cria um aplicativo web, um novo pool de aplicativos também é criado com o mesmo nome que o aplicativo. Se você mantiver os aplicativos web em pools de aplicativos separados, você poderá isolá-los um do outro.

O isolamento do aplicativo Web implica no seguinte:

  • Isolamento de site: separe aplicativos diferentes em sites diferentes com diferentes pools de aplicativos.
  • Privilégios mínimos: execute o processo de trabalho como uma identidade pouco privilegiada (identidade de pool de aplicativos virtuais) que seja exclusiva por site.
  • Isolamento temporário: configure uma pasta temporária do ASP.NET separada por site e forneça acesso somente à identidade de processo apropriada.
  • Isolamento de conteúdo: certifique-se de definir uma ACL (lista de controle de acesso) em cada site raiz para permitir acesso somente à identidade de processo apropriada.

Dica

É uma boa ideia hospedar seu site e o conteúdo de aplicativos da web em uma unidade que não seja sua unidade do sistema (C:).

4.2. Níveis de Confiança do .NET

Um aplicativo nível de confiança determina as permissões que a política de CAS (segurança de acesso do código) ASP.NET concede. A CAS define duas categorias de confiança: confiança total e confiança parcial. Um aplicativo que tenha permissões de confiança total pode acessar todos os tipos de recursos em um servidor e executar operações privilegiadas. Os aplicativos com confiança total são afetados somente pelas configurações de segurança do sistema operacional.

Os aplicativos da web de confiança parcial são os aplicativos que não possuem confiança total e possuem um conjunto restrito de permissões de acesso ao código. Como resultado, os aplicativos de confiança parcial são limitados em sua capacidade de acessar os recursos protegidos e executar outras operações privilegiadas. Determinadas permissões são negadas aos aplicativos de confiança parcial, de modo que os recursos que exigem essas permissões não podem ser acessados diretamente. Outras permissões são concedidas de maneira restrita, de modo que os recursos que exigem tais permissões podem ser acessíveis, mas de uma maneira limitada. Por exemplo, uma permissão restrita de E/S de arquivo dá ao aplicativo a capacidade de acessar o sistema de arquivos, mas apenas em diretórios abaixo da raiz do diretório virtual do aplicativo.

Configurando um aplicativo web ou serviço web para parcialmente confiável, você pode restringir a capacidade do aplicativo de acessar recursos cruciais do sistema ou recursos que pertencem a outros aplicativos web. Concedendo apenas as permissões que o aplicativo requer e nada mais, você pode criar aplicativos web menos privilegiados e limitar possíveis danos se o aplicativo web estiver comprometido por um ataque de injeção de código.

A lista a seguir mostra as restrições associadas a cada nível de confiança:

  • Os aplicativos de confiança total possuem acesso irrestrito a todos os tipos de recursos e podem executar operações privilegiadas.
  • Os aplicativos de confiança Alta, Média, Baixa ou Mínima não são capazes de fazer chamada de código não gerenciado ou em componentes de trabalho, gravar no log de eventos, acessar filas do Enfileiramento de Mensagens ou acessar fontes de dados OLE DB.
  • Os aplicativos de alta confiança possuem acesso irrestrito ao sistema de arquivos.
  • Os aplicativos de média confiança possuem acesso restrito ao sistema de arquivos e podem acessar os arquivos somente em sua própria hierarquia de diretório de aplicativo.
  • Os aplicativos de confiança baixa ou mínima não podem acessar bancos de dados SQL Server.
  • Os aplicativos de confiança mínima não podem acessar nenhum recurso.

4.3. Autenticação do .NET

A autenticação ajuda a confirmar a identidade dos clientes que solicitam acesso aos seus sites e aplicativos. Quando a autenticação é habilitada, o IIS 8 usa as credenciais de conta fornecidas pelo usuário para determinar quais permissões o usuário obteve e quais recursos o usuário pode acessar.

Esta seção descreve os modos de autenticação que são específicos de aplicativos ASP.NET.

  1. Autenticação de Formulários do ASP.NET
  2. Autenticação da representação do ASP.NET

Autenticação de Formulários do ASP.NET

A autenticação de formulários usa redirecionamento de cliente para encaminhar os usuários não autenticados para um formulário HTML, no qual eles podem digitar suas credenciais, que geralmente são um nome de usuário e senha. Depois que as credenciais são validadas, os usuários são redirecionados para a página originalmente solicitada. A Autenticação de Formulários geralmente usa cookies para transmitir as credenciais de usuário entre o servidor e o navegador do cliente.

As seções a seguir descrevem o que você precisa saber para planejar a autenticação de formulários para o seu site:

  1. Noções básicas sobre a Autenticação de Formulários
  2. Cookies de autenticação

Noções básicas sobre a Autenticação de Formulários

A autenticação baseada em formulários do ASP.NET funciona bem para sites ou aplicativos em servidores Web públicos que recebem muitas solicitações. Esse modo de autenticação permite gerenciar o registro do cliente e a autenticação no nível do aplicativo, em vez de depender dos mecanismos de autenticação que o sistema operacional fornece.

Importante

Como a autenticação de Formulários envia o nome de usuário e a senha para o servidor Web como texto não criptografado, use a criptografia SSL (Secure Sockets Layer) para a página de logon e para todas as outras páginas no seu aplicativo, exceto a home page. Para obter informações sobre SSL, confira 4.5. Comunicação TLS/SSL.

A Autenticação de Formulários permite que os usuários efetuem logon usando as identidades de um banco de dados de associação do ASP.NET. Este método de autenticação usa o redirecionamento para uma página de logon HTML para confirmar a identidade do usuário. Você pode configurar a Autenticação de Formulários no site ou nos níveis de aplicativo.

A Autenticação de Formulários é conveniente pelos seguintes motivos:

  • Ela permite que um repositório de dados personalizado, como um banco de dados do SQL Server ou do Active Directory, seja usado para autenticação.
  • Ela se integra facilmente a uma interface de usuário da web.
  • Os clientes podem usar qualquer navegador.

Se você deseja usar as funções de associação para autorização, use a autenticação de Formulários ou um método de autenticação personalizada semelhante.

Importante

Se você selecionar a autenticação de formulários, não será possível usar qualquer um dos métodos de autenticação com base em desafio ao mesmo tempo.

Por padrão, a URL de login para a autenticação de Formulários é Login.aspx. Você pode criar uma página de logon exclusivo para clientes que visitam um site ou aplicativo. Por exemplo, talvez você deseje coletar informações específicas dos visitantes ou oferecer uma associação para páginas selecionadas no site ou em aplicativos selecionados.

O valor de tempo limite padrão para a autenticação de Formulários é 30 minutos. Considere a possibilidade de alterar o valor de tempo limite para um período mais curto para encurtar o tempo de vida da sessão e reduzir a chance de ataques de reprodução de cookie.

Cookies de autenticação

Os cookies de autenticação são usados como um token para verificar se um cliente possui acesso a algumas ou a todas as páginas de um aplicativo. Por outro lado, os cookies de personalização contêm configurações específicas do usuário que determinam a experiência do usuário em um determinado site ou aplicativo.

Importante: como os cookies de autenticação são passados entre o cliente e o servidor em conjunto com cada solicitação, sempre proteja os cookies de autenticação usando o SSL (secure Sockets Layer). Para obter informações sobre SSL, confira 4.5. Comunicação TLS/SSL.

Os cookies são uma forma mais eficiente de acompanhar os visitantes em um site dos que as cadeias de caracteres de consulta, porque eles não precisam de redirecionamento. No entanto, eles são dependentes do navegador e alguns navegadores não dão suporte ao seu uso. Além disso, o uso de autenticação baseada em cookie nem sempre é efetivo, pois alguns usuários desabilitam o suporte de cookies em seus navegadores.

Por padrão, o nome do cookie para aplicativos ASP.NET é .ASPXAUTH. No entanto, você pode usar um nome e caminho de cookie exclusivo para cada aplicativo. Fazer isso pode impedir que os usuários que são autenticadas para um aplicativo sejam autenticados para outros aplicativos em um servidor Web.

É possível escolher um dos seguintes modos de cookie para o seu site ou aplicativo:

Mode Descrição
Uso de cookies Os cookies são usados sempre, independentemente do dispositivo.
Não usar cookies Os cookies não são usados.
Detecção automática Os cookies são usados se o perfil do dispositivo der suporte a cookies. Caso contrário, nenhum cookie é usado. Para navegadores de desktop que se sabem que oferecem suporte a cookies, o ASP.NET verifica para determinar se os cookies estão habilitados. Essa configuração é o padrão.
Usar perfil de dispositivo Os cookies são usados se o perfil do dispositivo der suporte a cookies. Caso contrário, nenhum cookie é usado. O ASP.NET não verifica para determinar se os cookies estão habilitados em dispositivos que oferecem suporte a cookies. Essa configuração é o padrão para o IIS 8.

O modo de proteção de cookie define a função que um cookie de Autenticação de Formulários executa para um aplicativo específico. A tabela a seguir mostra os modos de proteção de cookie que você pode definir:

Mode Descrição
Criptografia e validação Especifica se o aplicativo usa ambos os dados e a criptografia de validação para ajudar a proteger o cookie. Essa opção usa o algoritmo de validação de dados configurados (com base na chave do computador). Se o triple-DES (3DES) estiver disponível e se a chave for suficientemente longa (48 bytes ou mais), o 3DES é usado para a criptografia. Essa configuração é o valor padrão (e recomendado).
Nenhum Especifica se a criptografia e a validação são desabilitadas para sites que usam cookies apenas para personalização e têm requisitos de segurança mais fracos. Não é recomendável que você use os cookies desta maneira; no entanto, é a maneira menos intensiva de recursos para permitir a personalização usando o .NET Framework.
Criptografia Especifica se o cookie é criptografado usando a validação Triple-DES ou DES de dados, mas não é executada no cookie. Cookies utilizados dessa forma estão sujeitos a ataques de texto não criptografado.
Validação Especifica se um esquema de validação verificará se o conteúdo de um cookie criptografado não foi alterado em trânsito.

Importante

Por motivos de segurança, considere a possibilidade de manter a Criptografia e os Cookies de validação separados uns dos outros. O roubo de cookies de criptografia seria uma maior exposição de segurança do que o roubo de cookies de validação.

Se um aplicativo contém objetos que os clientes solicitam frequentemente, melhore o desempenho do aplicativo fazendo o armazenamento em cache desses objetos. Se o usuário acessa o objeto armazenado em cache antes de a autenticação do cookie atingir o tempo limite, o IIS 8 permite que o objeto armazenado em cache permaneça em cache, e o timer é redefinido. No entanto, se o usuário não acessar o objeto armazenado em cache durante esse período, o IIS 8 removerá do cache o objeto armazenado em cache.

Considere habilitar essa configuração sob as seguintes circunstâncias:

  • Você possui uma quantidade de memória disponível limitada para o cache.
  • Você possui um grande número de objetos para o cache, pois essa configuração permite que apenas os objetos solicitados mais frequentemente permaneçam no cache.

Observação

Você especifica o número de minutos, antes que um cookie de autenticação atinja o tempo limite Tempo limite do cookie de autenticação (em minutos).

Autenticação da representação do ASP.NET

Use a Representação do ASP.NET quando você desejar executar o aplicativo ASP.NET em um contexto de segurança diferente do contexto de segurança padrão para aplicativos ASP.NET.

Se você habilitar a representação de um aplicativo ASP.NET, esse aplicativo poderá ser executado em um de dois contextos diferentes: como o usuário autenticado pelo IIS 8 ou como uma conta arbitrária que você configurou. Por exemplo, se você usar a autenticação anônima e escolher executar o aplicativo ASP.NET como o usuário autenticado, o aplicativo será executado sob uma conta que está configurada para usuários anônimos (normalmente, IUSR). Da mesma forma, se você tiver optado por executar o aplicativo em uma conta arbitrária, ele será executado em qualquer contexto de segurança configurado para essa conta.

Por padrão, a Representação do ASP.NET está desabilitada. Se você habilitar a representação, o aplicativo ASP.NET é executado sob o contexto de segurança do usuário autenticado pelo IIS 8.

4.4. Configurações de Chave do Computador

As chaves do computador ajudam a proteger os dados de cookies de autenticação de Formulários e os dados do estado de visualização de nível de página. Eles também verificam a identificação do estado de sessão fora do processo. O ASP.NET usa os seguintes tipos de chaves do computador:

  • Uma chave de validação calcula uma mensagem MAC para verificar a integridade dos dados. Essa chave é anexada ao cookie de Autenticação de Formulários ou ao estado de exibição para uma determinada página.
  • Uma chave de descriptografia é usada para criptografar e descriptografar tíquetes de autenticação de Formulários e exibir o estado.

O IIS 8 permite que você configure as definições da criptografia e validação e gere chaves do computador para uso com serviços de aplicativos ASP.NET, como estado de exibição, autenticação de formulários, associação, funções e identificação anônima.

Antes de gerar chaves do computador para o aplicativo, faça as seguintes decisões de design:

  • Decida qual método de validação usar: AES, MD5, SHA1 (padrão), TripleDES, HMACSHA256, HMACSHA384 ou HMACSHA512.
  • Decida qual método de criptografia usar: Auto (padrão), AES, TripleDES ou DES.
  • Decida se gerar a chave de validação em tempo de execução automaticamente.
  • Decida se gerar uma chave de validação exclusiva para cada aplicativo.
  • Decida se gerar a chave de descriptografia em tempo de execução automaticamente.
  • Decida se gerar uma chave de descriptografia exclusiva para cada aplicativo.

4.5. Comunicação TLS/SSL

O TLS (Transport Layer Security) e seu predecessor, o SSL (Secure Sockets Layer), são protocolos que fornecem segurança de comunicação ao seu site. Você pode usar o TLS/SSL para autenticar servidores e clientes e, em seguida, usá-lo para criptografar mensagens entre as partes autenticadas.

No processo de autenticação, um cliente TLS/SSL envia uma mensagem para um servidor TLS/SSL e o servidor responde com as informações de que o servidor precisa para se autenticar. O cliente e o servidor executam uma troca adicional de chaves da sessão e a caixa de diálogo de autenticação é encerrada. Quando a autenticação for concluída, a comunicação segura SSL pode começar entre o servidor e o cliente, usando as chaves de criptografia simétrica que são estabelecidas durante o processo de autenticação.

Para configurar TLS/SSL para seu site, faça o seguinte:

  1. Obter um certificado de servidor de uma autoridade de certificação (CA). Confira Certificados do Servidor.
  2. Adicione a associação SSL ao site. Confira Associação SSL.
  3. Defina o IIS para exigir SSL no site. Confira Exigir SSL para o seu Site.
  4. Considere o uso de certificados de cliente para o seu site. Confira Certificados do Cliente.

Certificados do servidor

Você pode obter um certificado de servidor de uma autoridade de certificação (CA). Obter um certificado de servidor de uma autoridade de certificação é uma etapa de configuração em SSL (Secure Sockets Layer) ou TLS (Transport Layer Security). Você pode obter certificados de servidor por meio de uma CA de terceiros. Uma CA de terceiros pode exigir que você forneça prova de identidade antes de um certificado ser emitido. Você também pode emitir os seus próprios certificados de servidor usando uma CA online, como os Serviços de Certificados da Microsoft.

Os certificados digitais são arquivos eletrônicos que funcionam como uma senha online para verificar a identidade de um usuário ou de um computador. Eles são usados para criar o canal criptografado de SSL que é usado para comunicações do cliente. Uma declaração digital é um certificado emitido por uma CA (autoridade de certificação) que assegura a identidade do proprietário do certificado e habilita as partes a se comunicarem de uma maneira segura usando criptografia.

Os certificados digitais fazem o seguinte:

  • Eles autenticam que os seus proprietários, pessoas, sites e até mesmo recursos de rede como roteadores, são verdadeiramente quem ou o que eles declararam ser.
  • Eles protegem do roubo ou da violação os dados que são trocados online.

Os certificados digitais são emitidos por uma CA de terceiros confiáveis ou um Microsoft Windows PKI (infraestrutura de chave pública) usando os Serviços de Certificados, ou podem ser autoassinados. Cada tipo de certificado possui vantagens e desvantagens. Cada tipo de certificado digital é à prova de adulteração e não pode ser forjado.

Os certificados podem ser emitidos para vários usos. Esses usos incluem a autenticação de usuário da web, autenticação de servidor Web, Secure/Multipurpose Internet Mail Extensions (S/MIME), Internet Protocol security (IPsec), Transport Layer Security (TLS) e assinatura de código.

Um certificado contém uma chave pública e conecta essa chave pública à identidade de uma pessoa, computador ou serviço que contém a chave privada correspondente. As chaves públicas e privadas são usadas pelo cliente e pelo servidor para criptografar os dados antes de transmiti-los. Para usuários, computadores e serviços baseados em Windows, a confiança em uma autoridade de certificação é estabelecida quando há uma cópia do certificado raiz no repositório de certificados confiáveis raiz e o certificado contém um caminho de certificação válido. Para o certificado ser válido, ele não deve ter sido revogado e o período de validade não deve ter expirado.

Associação de SSL

Você pode atribuir várias ligações a um site quando tiver o conteúdo do site que serve a finalidades diferentes ou para o qual você deve usar outro protocolo. Por exemplo, um site comercial pode ter um aplicativo que requer que os usuários façam logon a uma conta para adquirir mercadorias. A empresa hospeda o site em HTTP, mas os usuários deverão fazer logon em suas contas em uma página HTTPS. Neste exemplo, o site possui duas ligações: uma parte para HTTP e outra parte para HTTPS.

Inicialmente, não é possível adicionar associações a protocolos que não sejam HTTP e HTTPS usando o Gerenciador do IIS. Se você deseja adicionar uma associação a um protocolo diferente, como um protocolo compatível com o Windows Communication Foundation (WCF), use uma das outras ferramentas de administração. No entanto, se instalar o servidor do protocolo FTP no IIS, você poderá adicionar associações FTP usando o Gerenciador do IIS. Também pode haver outros módulos ou funcionalidades de terceiros disponíveis para download que aprimoram a interface do usuário.

Exigir o SSL para o Site

O SSL (Secure Sockets Layer) protege por criptografia informações pessoais ou confidenciais enviadas entre um cliente e um servidor. Quando o SSL estiver habilitado, os clientes remotos acessarão o seu site usando URLs iniciadas com https://.

Primeiro, configure um certificado de servidor e crie uma associação HTTPS para habilitar as configurações de SSL. Em seguida, exija a criptografia SSL (Secure Sockets Layer) em uma ou mais das seguintes situações:

  1. Quando conteúdo confidencial ou pessoal em seu servidor deve ser protegido por um canal criptografado.
  2. Quando você deseja que os usuários possam confirmar a identidade do servidor antes de eles transmitirem informações pessoais.
  3. Quando desejar usar os certificados de cliente para autenticar clientes que acessam o seu servidor.

Certificados do cliente

Quando você deseja que os clientes verifiquem sua identidade antes que eles acessem conteúdo em seu servidor Web, configure certificados de cliente. Por padrão, os certificados de cliente são ignorados.

Antes de poder configurar o certificado de cliente em seu site, configure um certificado de servidor e crie uma associação HTTPS para habilitar quaisquer configurações SSL (Secure Sockets Layer).

Se quiser que todos os clientes verifiquem a sua identidade, especifique que os certificados de cliente são necessários. Se alguns clientes podem acessar o conteúdo sem primeiro verificar sua identidade, especifique que os certificados de cliente são aceitos.