Segurança do asp.net 2.0 e asp.net 3.5 em servidores compartilhados

O .NET v1.1 não vem configurado corretamente para servidores compartilhados, como já vimos em outro artigo. O mesmo vale para o asp.net 2.0 e também o seu framework 3.5.

Por padrão, .NET 2.0 vem instalado com “Full trust”. By default .NET 2.0 is installed with Full trust. Microsoft recomenda utilizar “Medium Trust” para servidores compartilhados.

Após instalar o .Net Framework 2.0 em seu servidor, você precisará modificar algumas configurações, assim como é feito no asp.net v1.1.

Primeiramente, abra o arquivo web.config, localizado em: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG por padrão. (Você pode utilizar o notepad para abrir e editar este arquivo).

Localize o seguinte bloco de texto:

<location allowOverride="true">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Medium" policyFile="web_mediumtrust.config" />
<trustLevel name="Low"  policyFile="web_lowtrust.config" />
<trustLevel name="Minimal" policyFile="web_minimaltrust.config" />
</securityPolicy>
<trust level="Full" originUrl="" />
</system.web>
</location>

Nós precisaremos alterar a seguinte linha:

<location allowOverride="true">

para:

<location allowOverride="false">

isto certifica que os usuários não poderão alterar estas configurações em seus próprios web.config. Agora, mudaremos também a seguinte linha:

<trust level="Full" originUrl="" />

para

<trust level="Medium" originUrl=".*" />

Então, imediatamente após esta linha, adicione o seguinte:

<identity impersonate="true" userName="" password="" />

isto irá forçar o .NET 2.0 a rodar em “Medium Trust mode”, e ser executado sobre a conta anonima do IIS.
this is now forcing .NET 2.0 to run in Medium trust mode and to execute under the IIS anonomous user. Os principais inconvenientes de setar as configurações para Medium Trust são:

  • OleDbPermission não estará disponível. Significa que você não poderá utilizar ADO.NET e OLE DB data provider para acessar banco de dados. Entretanto, você poderá usar o SQL Server provider para acessar SQL Server databases.
  • EventLogPermission não estará disponível. Quer dizer que você não terá logs do asp.net no windows event.
  • ReflectionPermission não estará disponível. Você não poderá usar “reflection”.
  • RegistryPermission não estará disponível. Você não terá acesso ao registro.
  • WebPermission é restrita. Sua aplicação poderá se comunicar somente com a faixa de endereços que você definiu no elemento.
  • FileIOPermission é restrito. Só será possível acessar arquivos dentro da sua hierarquia da aplicação virtual.

Entretanto, ainda é possível criar um policy personalizado baseado no Medium trust, e permitir aplicações menos restritivas.Nós iremos cobrir alguns exemplos num próximo artigo.

Como desabilitar o botão desligar (shutdown) do windows server

Esta dica é importante para evitar acidentes. Algumas vezes, ao mandar reiniciar um servidor dedicado, você pode clicar no lugar errado e acabar desligado o mesmo.

Desabilite o botão shutdown (desligar). Assim você não correrá mais este risco.

1) Clique Start — > Run (iniciar -> executar)
2) Digite “gpedit.msc” e clique em  “OK”
3) Vá em: Local Computer Policy -> User Configuration -> Administrative Templates -> Start Menu and TaskBar
4) Dê um duplo click em “Remove and prevent access to the shut down command” e então selecione a opção Enable.  Clique em Ok.

Você não terá mais o botão desligar disponível.

Segurança do Asp.net em servidores compartilhados

Por padrão, o asp.net 1.1 não está bem configurado para servidores compartilhados. Um usuário que está rodando uma aplicação em .net na configuração padrão terá acesso a partes sensíveis do sistema, o que representa um problema para a segurança.

Abaixo, vou descrever como forçar o ASP.NET 1.1 a executar com a conta anonima do IIS e reduzir assim os privilégios das aplicações em ASP.NET.

Para incrementar a segurança, é recomendado executar sites em asp.net em aplication pools isoladas no IIS. Assim os códigos executados em asp.net poderão afetar apenas o contexto da aplicação (ou das permissões que envolvem o usuário da aplicação.

Para incrementar a segurança, nosso primeiro passo deverá ser forçar as aplicações a serem executadas com o usuário anonimo do IIS. Para fazer isto, vamos editar o arquivo machine.config, localizado na pasta:

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG

Abra o arquivo no notepad e procure pela palavra impersonate. Ela estará no padrão abaixo:

<!–
identity Attributes:
impersonate="[true|false]" - Impersonate Windows User
userName="Windows user account to impersonate" | empty string implies impersonate the LOGON user specified by IIS
password="password of above specified account" | empty string
–>
<identity impersonate="false" userName="" password=""/>

troque a linha em negrito acima por todo este bloco de textos abaixo:

</system.web>
<location allowOverride="false">
<system.web>
<identity impersonate="true" userName="" password=""/>
</system.web>
</location>
<system.web>

O que estamos fazendo é setando a propriedade impersonate para true, e além disto colocando uma tag location, que informa que não será possível ao usuário alterar o valor do impersonate (algo que por padrão é possível no arquivo web.config).

Feito isto, os scripts asp.net irão ser executados pelo usuário anonimo marcado no IIS.

Não terminamos. A instalação padrão do asp.net permite executar os arquivos em Full trust mode. Isto quer dizer que qualquer assemblies chamado ou desenvolvido pelo usuário terá acesso irrestrito ao sistema (o que nós não queremos de jeito nenhum).

Procure no topo do arquivo machine.config pelo código abaixo:

<location allowOverride="true">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Medium" policyFile="web_mediumtrust.config" />
<trustLevel name="Low" policyFile="web_lowtrust.config" />
<trustLevel name="Minimal" policyFile="web_minimaltrust.config" />
</securityPolicy> <!– level="[Full|High|Medium|Low|Minimal]" –>
<trust level="Full" originUrl="" />
</system.web>
</location>

Como você pode ver, ASP.NET está marcado por padrão para executar em Full trust mode. Precisamos alterar isto.

Em hosting compartilhados, o ideal é alterar para o medium trust, que permite uma certa flexibidade sem comprometer a segurança do sistema.

<location allowOverride="false">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Medium" policyFile="web_mediumtrust.config" />
<trustLevel name="Low" policyFile="web_lowtrust.config" />
<trustLevel name="Minimal" policyFile="web_minimaltrust.config" />
</securityPolicy> <!– level="[Full|High|Medium|Low|Minimal]" –>
<trust level="Medium" originUrl=".*" />
</system.web>
</location>

Como desabilitar File System Object (FSO)

O FSO (FileSystem Object) é um componente que permite manipular arquivos e pastas através de scripts (asp, vbs, etc). Ele é um componente windows nativo.

O seu uso é recomendado quando se tem, no servidor, a necessidade de manipulação destes arquivos. Em servidores bem configurados, isto não deve ser nenhum problema, devido a utilização das permissões NTFS corretas.

Porém, caso não tenha necessidade de uso, você pode desabilitá-lo e conseguir, assim, melhorar a permissão de segurança.

O processo para desabilitar o FSO é extremamente simples.

1. Abra o executar (iniciar -> executar).
2. Digite

regsvr32.exe -u scrrun.dll 

Desta maneira, você estará removendo o registro da dll scrrun.dll, responsável pela execução do FSO.

Para registrar novamente, faça:

1. Abra o executar (iniciar -> executar).
2. Digite

regsvr32.exe scrrun.dll

Como desabilitar Shell Script ( Windows Host Script )

O windows Host Script, conhecido também como shell script, permite a execução de scripts na máquina que interagem como o sistema operacional Windows. São muito úteis para manutenção e automatização de tarefas, no entanto, o uso desta ferramenta por pessoas não autorizadas podem causar sérios problemas, uma vez que ele terá controle total sobre o sistema operacional.

É claro, num servidor com as devidas permissões, um usuário comum não deverá conseguir executar nenhum script que possa causar algum estrago. De qualquer maneira, é muito difícil verificar o servidor a ponto de se afirmar com certeza que não existe nenhuma brecha na segurança. O melhor a ser feito é desabilitar a execução.

Existem duas formas básicas de resolver este problema. Na primeira delas, iremos desabilitar a execução para todos os usuários da máquina. O procedimento é:
1. Abra o prompt de comando e digite:
Digite regsvr32.exe -u wshom.ocx

Desta maneira, você estará removendo o registro do wshom.ocx, responsável pela execução do shell script.

Para registrar novamente, faça:

Abra o prompt de comando e digite:
regsvr32.exe wshom.ocx

A segunda maneira, é alterar a permissão de execução do shell script diretamente no registro do windows. O procedimento é:

1. Clique em iniciar -> executar -> digite regedit <ENTER>
2. Vá para a chave [HKEY_CLASSES_ROOT\WScript.Shell] com o botão direito do mouse nesta chave, vá em permissão (permission) e altere as permissões para permitir a execução do shell script somente para os usuários e grupos que você sabe que devem realmente utilizá-lo.

Alterando a porta de conexão no Terminal Server (terminal services)

Alterando a porta de conexão no terminal server (Remote desktop)

O terminal services é o software padrão para conexão em servidores remotos (Windows). Ele utiliza a porta 3389 para receber as conexões. Como alternativa, podemos mudar esta porta, desviando a atenção de hackers.

ATENÇÃO: Este artigo contém informações sobre alterações no registro do Windows. Antes de qualquer alteração, é importante fazer um backup, e saber como proceder para restaurá-lo caso haja necessidade.

Voltando ao artigo…

Para alterar a porta de conexão padrão no Terminal Server

1. Execute regedt32 e encontre a seguinte chave:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

2. Encontre a subkey “PortNumber”. Observe que o valor padrão está “00000D3D” (hexadecimal para 3389). Modifique o valor padrão e salve.

Para se conectar do lado do cliente, no remote desktop, basta digitar o o hostname ou ip, e a nova porta de conexão.

Ex.: você alterou a porta de conexão para 3388, digite no remote desktop:

seudominio.com:3388