Segurança de acesso ao código - Code Access Security

O Code Access Security (CAS), na estrutura Microsoft .NET , é a solução da Microsoft para evitar que códigos não confiáveis ​​executem ações privilegiadas. Quando o CLR carrega um assembly, ele obterá evidências do assembly e usará isso para identificar o grupo de código ao qual o assembly pertence. Um grupo de códigos contém um conjunto de permissões (uma ou mais permissões ). O código que executa uma ação privilegiada executará uma demanda de acesso ao código que fará com que o CLR percorra a pilha de chamadas e examine o conjunto de permissões concedido ao assembly de cada método na pilha de chamadas. Os grupos de códigos e conjuntos de permissões são determinados pelo administrador da máquina que define a política de segurança .

Provas

A evidência pode ser qualquer informação associada a uma montagem. As evidências padrão usadas pela segurança de acesso ao código .NET são:

  • Diretório do aplicativo: o diretório no qual reside um assembly.
  • Editor: a assinatura digital do editor do assembly (requer que o assembly seja assinado via Authenticode ).
  • URL : o URL completo de onde o assembly foi lançado
  • Site: o nome do host do URL / Domínio Remoto / VPN.
  • Zona: a zona de segurança onde reside o conjunto
  • Hash : um hash criptográfico do assembly, que identifica uma versão específica.
  • Nome forte: uma combinação do nome do assembly, versão e chave pública da chave de assinatura usada para assinar o assembly. A chave de assinatura não é um certificado X.509 , mas um par de chaves personalizado gerado pela ferramenta de nomenclatura forte, SN.EXE ou pelo Visual Studio .

Um desenvolvedor pode usar evidências personalizadas (as chamadas evidências de montagem), mas isso requer a gravação de uma montagem de segurança e na versão 1.1 do .NET esse recurso não funciona.

A evidência baseada em um hash do assembly é facilmente obtida no código. Por exemplo, em C # , a evidência pode ser obtida pela seguinte cláusula de código:

this.GetType().Assembly.Evidence

Política

Uma política é um conjunto de expressões que usa evidências para determinar uma associação de grupo de código. Um grupo de códigos fornece um conjunto de permissões para os assemblies desse grupo. Existem quatro políticas em .NET:

  • Empresa: política para uma família de máquinas que fazem parte de uma instalação do Active Directory .
  • Máquina: política para a máquina atual.
  • Usuário: política para o usuário conectado.
  • AppDomain: política para o domínio do aplicativo em execução.

As três primeiras políticas são armazenadas em arquivos XML e administradas por meio da Ferramenta de Configuração do .NET 1.1 (mscorcfg.msc). A política final é administrada por meio de código para o domínio de aplicativo atual.

A segurança de acesso ao código apresentará uma evidência do assembly para cada política e, em seguida, tomará a interseção (ou seja, as permissões comuns a todos os conjuntos de permissões gerados) como as permissões concedidas ao assembly.

Por padrão, as políticas Enterprise, User e AppDomain fornecem confiança total (ou seja, permitem que todos os assemblies tenham todas as permissões) e a política Machine é mais restritiva. Como a interseção é feita, isso significa que o conjunto de permissões final é determinado pela política da Máquina.

Observe que o sistema de políticas foi eliminado no .NET Framework 4.0.

Grupo de código

Os grupos de códigos associam uma parte da evidência a um conjunto de permissões nomeado. O administrador usa a Ferramenta de Configuração .NET para especificar um tipo particular de evidência (por exemplo, Site) e um valor específico para essa evidência (por exemplo, www.mysite.com) e, em seguida, identifica o conjunto de permissões que o grupo de código será garantido.

Demandas

O código que executa alguma ação privilegiada exigirá uma ou mais permissões. A demanda faz com que o CLR percorra a pilha de chamadas e, para cada método, o CLR garantirá que as permissões exigidas estejam nas permissões concedidas ao assembly do método. Se a permissão não for concedida, uma exceção de segurança será lançada. Isso evita que o código baixado execute ações privilegiadas. Por exemplo, se um assembly for baixado de um site não confiável, o assembly não terá nenhuma permissão de IO de arquivo e, portanto, se esse assembly tentar acessar um arquivo, lançará uma exceção impedindo a chamada.

Referências