Partilhar via


Segurança de Acesso de código

Sistemas de computador altamente conectado hoje freqüentemente estão expostos a código originário diversos, fontes possivelmente desconhecidas. Código pode ser anexado a um email, contido em documentos ou baixado pela Internet. Infelizmente, muitos usuários de computador obtiveram em primeira mão os efeitos do código móvel mal-intencionado, incluindo vírus e worms, que podem danificar ou destruir dados e o tempo e dinheiro.

Mecanismos mais comuns de segurança conceder direitos a usuários com base em suas credenciais de logon (geralmente uma senha) e restringem recursos (geralmente diretórios e arquivos) que o usuário tem permissão para acessar. No entanto, essa abordagem não consegue resolver vários problemas: os usuários obtêm o código de várias fontes, alguns deles podem não ser confiáveis; código pode conter bugs ou vulnerabilidades que permitem ser explorado por códigos mal-intencionados. e o código, às vezes, faz as coisas que o usuário não sabe que ele fará. Como resultado, os sistemas de computador podem estar danificados e dados privados podem vazar quando cuidados e confiáveis usuários executarem software mal-intencionado ou preenchido com erro. A maioria dos mecanismos de segurança do sistema operacional exigem que cada pedaço de código deve ser totalmente confiável para serem executados, exceto talvez para scripts em uma página da Web. Portanto, ainda há a necessidade de um mecanismo de segurança amplamente aplicáveis que permite que o código originado de um sistema de computador para executar com proteção em outro sistema, mesmo quando não há nenhuma relação de confiança entre os sistemas.

A.NET Framework fornece um mecanismo de segurança denominado segurança de acesso a código para ajudar a proteger os sistemas de computador de código móvel mal-intencionado, para permitir que o código de origens desconhecidas para executar com proteção e para ajudar a impedir que o código confiável intencionalmente ou acidentalmente comprometer a segurança. Segurança de acesso ao código permite que o código confiável em graus variáveis, dependendo de onde o código é gerado e outros aspectos da identidade do código. Code access security também impõe os vários níveis de confiança no código, o que minimiza a quantidade de código deve ser totalmente confiável para serem executados. Usando a segurança de acesso de código pode reduzir a probabilidade de que seu código será usados incorretamente por código mal-intencionado ou preenchido com erro. Ele pode reduzir sua responsabilidade, porque você pode especificar o conjunto de operações que seu código deve ter permissão para executar. Segurança de acesso de código também pode ajudar a minimizar os danos que podem resultar de vulnerabilidades de segurança no seu código.

Observação

As principais alterações foram feitas code access security in a .NET Framework versão 4.A alteração mais notável foi transparência da segurança, mas também existem outras alterações significativas que afetam a segurança de acesso ao código.Para obter informações sobre essas alterações, consulte Alterações de segurança na.NET Framework 4.

Code access security afeta principalmente os aplicativos parcialmente confiáveis e código da biblioteca. Os desenvolvedores de biblioteca devem proteger seu código contra acesso não autorizado de aplicativos parcialmente confiáveis. Aplicativos parcialmente confiáveis são aplicativos que são carregados a partir de fontes externas, como a Internet. Os aplicativos são instalados na sua área de trabalho ou da intranet local é executado em confiança total. Aplicativos de confiança total não são afetados pela segurança de acesso de código, a menos que eles são marcados como security transparent, porque eles são totalmente confiáveis. A única limitação para aplicativos de confiança total é que os aplicativos são marcados com o SecurityTransparentAttribute atributo não é possível chamar o código que é marcado com o SecurityCriticalAttribute atributo. Aplicativos parcialmente confiáveis devem ser executados em um modo seguro (por exemplo, no Internet Explorer) para que possa ser aplicada a code access security. Se você baixa um aplicativo da Internet e tente executá-lo da área de trabalho, você receberá uma NotSupportedException com a mensagem: "Foi feita uma tentativa de carregar um assembly de um local de rede que causaria o assembly esteja no modo seguro em versões anteriores do.NET Framework. Esta versão do.NET Framework não habilite a diretiva de CAS por padrão, para que esta carga pode ser perigosa." Se tiver certeza de que o aplicativo seja confiável, poderá ativá-lo ser executado em confiança total, usando o <loadFromRemoteSources> elemento. Para obter informações sobre como executar um aplicativo em um modo seguro, consulte Como: Executar o código parcialmente confiável em um modo seguro.

Tudo gerenciado código voltado para o common language runtime recebe os benefícios de segurança de acesso do código, mesmo que o código não fazer uma segurança de acesso de código única chamada. Para obter mais informações, consulte Noções Básicas sobre Segurança de Accesso a Código.

Principais funções de segurança de acesso de código

Code access security ajuda a limitar o acesso que código tem a recursos protegidos e operações. No.NET Framework, code access security realiza as seguintes funções:

  • Define permissões e conjuntos de permissão que representam o direito de acessar vários recursos do sistema.

  • Permite que o código por demanda que chamadores tenham permissões específicas.

  • Permite que o código seus chamadores possuem uma assinatura digital, permitindo que somente os chamadores de uma determinada organização ou o site chamar o código protegido de demanda.

  • Impõe restrições no código em tempo de execução, comparando as permissões concedidas de cada chamador na pilha de chamadas para as permissões que os chamadores devem ter.

Movimentar a pilha de chamada

Para determinar se o código está autorizado a acessar um recurso ou executar uma operação, o sistema de segurança do runtime percorre a pilha de chamadas, comparando as permissões concedidas de cada chamador na permissão exigidas. Se qualquer chamador na pilha de chamadas não tiver a permissão exigida, uma exceção de segurança e acesso é recusado. A stack walk é projetada para ajudar a impedir ataques chamariz, em que menos confiável código chama o código altamente confiável e o usa para realizar ações não autorizadas. Permissões de todos os chamadores de exigentes em tempo de execução afeta o desempenho, mas é essencial para ajudar a proteger o código contra ataques chamariz pelo código menos confiável. Para otimizar o desempenho, você pode ter seu código executar menos stack walks; No entanto, você deve ter certeza de não expõem uma fraqueza de segurança sempre que você fizer isso.

A ilustração a seguir mostra a stack walk que resulta quando um método no Assembly A4 exige que os chamadores têm a permissão p.

Movimentação de pilha de segurança

Segurança de acesso a código

Tópicos relacionados

Título

Descrição

Noções Básicas sobre Segurança de Accesso a Código

Descreve segurança de acesso a código e seus usos mais comuns.

Código transparente para a segurança de nível 2

Descreve o modelo de transparência da segurança na .NET Framework 4.

Usando bibliotecas de código parcialmente confiáveis

Descreve como ativar bibliotecas para uso com código não gerenciado e como usar bibliotecas de código não gerenciado.

Criação de bibliotecas de classe seguro

Descreve as considerações de segurança para bibliotecas de classe.

Criando suas próprias permissões de acesso ao código

Descreve como criar permissões personalizadas.

Conceitos chaves sobre segurança

Fornece uma visão geral sobre muitos dos principais termos e conceitos usados na.Sistema de segurança do NET Framework.

Segurança baseada em função

Descreve como incorporar a segurança baseada em funções.

Serviços de criptografia

Descreve como incorporar a criptografia em seus aplicativos.

Ferramentas de segurança (.NET Framework)

Descreve as ferramentas usadas para implementar e administrar o.Sistema de segurança do NET Framework.