Segurança de acesso do códigoCode Access Security

Cuidado

Segurança de Acesso do Código e Código Parcialmente ConfiávelCode Access Security and Partially Trusted Code

O .NET Framework fornece um mecanismo para a imposição de níveis variáveis de confiança em códigos diferentes em execução no mesmo aplicativo chamado CAS (Segurança de Acesso do Código).The .NET Framework provides a mechanism for the enforcement of varying levels of trust on different code running in the same application called Code Access Security (CAS). O CAS no .NET Framework não deve ser usado como um mecanismo de imposição de limites de segurança com base na origem do código ou em outros aspectos da identidade.Code Access Security in .NET Framework should not be used as a mechanism for enforcing security boundaries based on code origination or other identity aspects. Estamos atualizando nossas diretrizes para refletir que o CAS e o Código Transparente de Segurança não terão suporte como um limite de segurança com código parcialmente confiável, especialmente o código de origem desconhecida.We are updating our guidance to reflect that Code Access Security and Security-Transparent Code will not be supported as a security boundary with partially trusted code, especially code of unknown origin. Não aconselhamos carregar e executar códigos de origens desconhecidas sem a adoção de medidas de segurança alternativas no local.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Essa política é aplicável à todas as versões do .NET Framework, mas não é aplicável ao .NET Framework incluído no Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Sistemas de computador altamente conectado de hoje com frequência são expostos para codificar provenientes de várias, fontes desconhecidas possivelmente.Today's highly connected computer systems are frequently exposed to code originating from various, possibly unknown sources. Código pode ser anexado ao email, contido em documentos ou baixado pela Internet.Code can be attached to email, contained in documents, or downloaded over the Internet. Infelizmente, muitos usuários de computador tem ficado em primeira mão os efeitos de código móvel mal-intencionado, incluindo vírus e worms, que podem danificar ou destruir dados e tempo e dinheiro.Unfortunately, many computer users have experienced firsthand the effects of malicious mobile code, including viruses and worms, which can damage or destroy data and cost time and money.

Mecanismos de segurança mais comuns conceder direitos a usuários com base em suas credenciais de logon (geralmente uma senha) e restringem os recursos (geralmente diretórios e arquivos) que o usuário tem permissão para acessar.Most common security mechanisms give rights to users based on their logon credentials (usually a password) and restrict resources (often directories and files) that the user is allowed to access. No entanto, essa abordagem não consegue resolver vários problemas: os usuários a obter código de várias fontes, alguns dos quais podem não ser confiáveis; código pode conter bugs ou vulnerabilidades que habilitá-lo para ser explorado por códigos mal-intencionados. e o código faz, às vezes, coisas que o usuário não sabe que isso será feito.However, this approach fails to address several issues: users obtain code from many sources, some of which might be unreliable; code can contain bugs or vulnerabilities that enable it to be exploited by malicious code; and code sometimes does things that the user does not know it will do. Como resultado, os sistemas de computador podem estar danificados e dados privados podem vazar quando usuários cuidados e confiáveis executam software mal-intencionado ou preenchidas com erro.As a result, computer systems can be damaged and private data can be leaked when cautious and trustworthy users run malicious or error-filled software. A maioria dos mecanismos de segurança do sistema operacional requerem que cada pedaço de código deve ser totalmente confiável para executar, exceto talvez para scripts em uma página da Web.Most operating system security mechanisms require that every piece of code must be completely trusted in order to run, except perhaps for scripts on a Web page. Portanto, ainda há a necessidade de um mecanismo de segurança amplamente aplicável que permite que o código do sistema de um computador para executar com proteção em outro sistema, mesmo quando não há nenhuma relação de confiança entre os sistemas de origem.Therefore, there is still a need for a widely applicable security mechanism that allows code originating from one computer system to execute with protection on another system, even when there is no trust relationship between the systems.

O .NET Framework fornece um mecanismo de segurança chamado segurança de acesso do 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 seja executado com a proteção e para ajudar a evitar código confiável de intencionalmente ou não comprometer a segurança.The .NET Framework provides a security mechanism called code access security to help protect computer systems from malicious mobile code, to allow code from unknown origins to run with protection, and to help prevent trusted code from intentionally or accidentally compromising security. Segurança de acesso ao código permite que o código se torne confiável em vários graus, dependendo de onde se origina o código e outros aspectos da identidade do código.Code access security enables code to be trusted to varying degrees depending on where the code originates and on other aspects of the code's identity. Segurança de acesso do código também impõe os vários níveis de confiança no código, o que minimiza a quantidade de código que deve ser totalmente confiável para executar.Code access security also enforces the varying levels of trust on code, which minimizes the amount of code that must be fully trusted in order to run. Usando a segurança de acesso de código pode reduzir a probabilidade de que seu código será mal utilizadas por código mal-intencionado ou preenchidas com erro.Using code access security can reduce the likelihood that your code will be misused by malicious or error-filled code. Isso pode reduzir sua responsabilidade, porque você pode especificar o conjunto de operações que seu código deve ter permissão para executar.It can reduce your liability, because you can specify the set of operations your code should be allowed to perform. Segurança de acesso do código também pode ajudar a minimizar os danos que podem resultar de vulnerabilidades de segurança em seu código.Code access security can also help minimize the damage that can result from security vulnerabilities in your code.

Observação

Foram feitas alterações importantes à segurança de acesso do código no .NET Framework 4.NET Framework 4.Major changes have been made to code access security in the .NET Framework 4.NET Framework 4. A alteração mais notável foi transparência de segurança, mas também há outras alterações significativas que afetam a segurança de acesso do código.The most notable change has been security transparency, but there are also other significant changes that affect code access security. Para obter informações sobre essas alterações, consulte alterações de segurança.For information about these changes, see Security Changes.

Segurança de acesso do código afeta principalmente aplicativos parcialmente confiáveis e código da biblioteca.Code access security primarily affects library code and partially trusted applications. Os desenvolvedores de biblioteca devem proteger seu código de acesso não autorizado de aplicativos parcialmente confiáveis.Library developers must protect their code from unauthorized access from partially trusted applications. Aplicativos parcialmente confiáveis são aplicativos que são carregados de origens externas, como a Internet.Partially trusted applications are applications that are loaded from external sources such as the Internet. Aplicativos que estão instalados em sua área de trabalho ou da intranet local é executado em confiança total.Applications that are installed on your desktop or on the local intranet run in full trust. Aplicativos de confiança total não são afetados pela segurança de acesso do código, a menos que eles serão marcados como transparência de segurança, porque eles são totalmente confiáveis.Full-trust applications are not affected by code access security unless they are marked as security-transparent, because they are fully trusted. A única limitação para aplicativos de confiança total é que os aplicativos que são marcados com o SecurityTransparentAttribute atributo não é possível chamar o código que está marcado com o SecurityCriticalAttribute atributo.The only limitation for full-trust applications is that applications that are marked with the SecurityTransparentAttribute attribute cannot call code that is marked with the SecurityCriticalAttribute attribute. Aplicativos parcialmente confiáveis devem ser executados em uma área restrita (por exemplo, no Internet Explorer) para que a segurança de acesso do código pode ser aplicada.Partially trusted applications must be run in a sandbox (for example, in Internet Explorer) so that code access security can be applied. Se você baixa um aplicativo da Internet e tente executá-lo da área de trabalho, você obterá um NotSupportedException com a mensagem: "foi feita uma tentativa de carregar um assembly de um local de rede que faria com o assembly ficasse em versões anteriores do .NET Framework.If you download an application from the Internet and try to run it from your desktop, you will get a NotSupportedException with the message: "An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. Nesta versão do .NET Framework não habilitar a política de CAS por padrão, portanto esse carregamento pode ser perigoso."This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous." Se você tiver certeza de que o aplicativo pode ser confiável, você poderá habilitá-lo ser executado em confiança total usando o <loadFromRemoteSources > elemento.If you are sure that the application can be trusted, you can enable it to be run as full trust by using the <loadFromRemoteSources> element. Para obter informações sobre como executar um aplicativo em uma área restrita, consulte como: executar código parcialmente confiável em uma área restrita.For information about running an application in a sandbox, see How to: Run Partially Trusted Code in a Sandbox.

Todos os gerenciados de código que tem como alvo o common language runtime recebe os benefícios de segurança de acesso do código, mesmo se esse código não fazer um segurança de acesso ao código única chamada.All managed code that targets the common language runtime receives the benefits of code access security, even if that code does not make a single code access security call. Para obter mais informações, consulte Noções Básicas da Segurança de Acesso do Código.For more information, see Code Access Security Basics.

Principais funções de segurança de acesso ao códigoKey Functions of Code Access Security

Segurança de acesso ao código ajuda a limitar o acesso ao código tem a recursos protegidos e operações.Code access security helps limit the access that code has to protected resources and operations. No .NET Framework, a segurança de acesso ao código executa as seguintes funções:In the .NET Framework, code access security performs the following functions:

  • Define as permissões e os conjuntos de permissões que representam o direito de acesso a vários recursos do sistema.Defines permissions and permission sets that represent the right to access various system resources.

  • Permite que o código que os chamadores têm permissões específicas de demanda.Enables code to demand that its callers have specific permissions.

  • Permite que o código que os chamadores tenha uma assinatura digital, permitindo que somente os chamadores de uma determinada organização ou um site chamar o código protegido de demanda.Enables code to demand that its callers possess a digital signature, thus allowing only callers from a particular organization or site to call the protected code.

  • Impõe restrições no código em tempo de execução, comparando as permissões concedidas de todos os chamadores na pilha de chamadas para as permissões que os chamadores devem ter.Enforces restrictions on code at run time by comparing the granted permissions of every caller on the call stack to the permissions that callers must have.

Percorrer a pilha de chamadasWalking the Call Stack

Para determinar se o código está autorizado a acessar um recurso ou executar uma operação, o sistema de segurança do tempo de execução orienta a pilha de chamadas, comparando as permissões concedidas de cada chamador as permissões exigidas.To determine whether code is authorized to access a resource or perform an operation, the runtime's security system walks the call stack, comparing the granted permissions of each caller to the permission being demanded. Se qualquer chamador na pilha de chamadas não tem a permissão exigida, será gerada uma exceção de segurança e acesso foi recusado.If any caller in the call stack does not have the demanded permission, a security exception is thrown and access is refused. A movimentação da pilha foi projetada para ajudar a evitar ataques de atração, no qual menos confiável código chama o código altamente confiável e o utiliza para executar ações não autorizadas.The stack walk is designed to help prevent luring attacks, in which less-trusted code calls highly trusted code and uses it to perform unauthorized actions. Exigem permissões de todos os chamadores em tempo de execução afeta o desempenho, mas é essencial para ajudar a proteger o código de ataques de atração pelo código menos confiável.Demanding permissions of all callers at run time affects performance, but it is essential to help protect code from luring attacks by less-trusted code. Para otimizar o desempenho, você pode ter seu código executar menos movimentações de pilha; No entanto, você deve ter certeza de que não expõem uma vulnerabilidade de segurança sempre que você fizer isso.To optimize performance, you can have your code perform fewer stack walks; however, you must be sure that you do not expose a security weakness whenever you do this.

A ilustração a seguir mostra a movimentação da pilha que ocorre quando um método no Assembly A4 exige que os chamadores tem permissão P.The following illustration shows the stack walk that results when a method in Assembly A4 demands that its callers have permission P.

Segurança de acesso ao códigoCode access security
Movimentação de pilha de segurançaSecurity stack walk

TítuloTitle DescriçãoDescription
Noções Básicas da Segurança de Acesso do CódigoCode Access Security Basics Descreve a segurança de acesso do código e seus usos mais comuns.Describes code access security and its most common uses.
Código transparente de segurança, nível 2Security-Transparent Code, Level 2 Descreve o modelo de transparência de segurança no .NET Framework 4.NET Framework 4.Describes the security transparency model in the .NET Framework 4.NET Framework 4.
Usando bibliotecas de código parcialmente confiávelUsing Libraries from Partially Trusted Code Descreve como habilitar bibliotecas para uso com código não gerenciado e como usar bibliotecas de código não gerenciado.Describes how to enable libraries for use with unmanaged code and how to use libraries from unmanaged code.
Principais conceitos de segurançaKey Security Concepts Fornece uma visão geral dos muitos dos principais termos e conceitos usados no sistema de segurança do .NET Framework.Provides an overview of many of the key terms and concepts used in the .NET Framework security system.
Segurança baseada em FunçãoRole-Based Security Descreve como incorporar a segurança baseada em funções.Describes how to incorporate security based on roles.
Serviços criptográficosCryptographic Services Descreve como incorporar a criptografia em seus aplicativos.Describes how to incorporate cryptography into your applications.