Seguridad de acceso del códigoCode Access Security

Precaución

Seguridad de acceso del código y código de confianza parcialCode Access Security and Partially Trusted Code

.NET Framework proporciona seguridad de acceso del código (CAS), que es un mecanismo para el cumplimiento de los distintos niveles de confianza en diferentes códigos que se ejecutan en la misma aplicación.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). La seguridad de acceso de código de .NET Framework no debería usarse como mecanismo para reforzar los límites de seguridad basados en el origen del código u otros aspectos de identidad.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 actualizando las guías para reflejar que la seguridad de acceso de código y el código transparente de seguridad no se podrán usar como límites de seguridad con código de confianza parcial, especialmente en código con orígenes desconocidos.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. Le aconsejamos que no cargue ni ejecute código de orígenes desconocidos sin contar con medidas de seguridad alternativas.We advise against loading and executing code of unknown origins without putting alternative security measures in place.

Esta directiva se aplica a todas las versiones de .NET Framework, pero no se aplica a la versión de .NET Framework incluida en Silverlight.This policy applies to all versions of .NET Framework, but does not apply to the .NET Framework included in Silverlight.

Los equipos conectados de hoy en día suelen estar expuestos a código procedente de varios orígenes, posiblemente desconocidos.Today's highly connected computer systems are frequently exposed to code originating from various, possibly unknown sources. Código puede adjunta al correo electrónico, incluirse en documentos o descargarse a través de Internet.Code can be attached to email, contained in documents, or downloaded over the Internet. Por desgracia, muchos usuarios de equipos han experimentado personalmente las consecuencias del código móvil malintencionado, como virus y gusanos, que pueden dañar o destruir datos y costar tiempo y dinero.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.

Los mecanismos de seguridad más comunes conceden derechos a los usuarios según sus credenciales de inicio de sesión (normalmente, una contraseña) y limitan los recursos (a menudo, directorios y archivos) a los que puede acceder el usuario.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. Sin embargo, este enfoque no soluciona algunos problemas: los usuarios obtienen el código de muchos orígenes, algunos de los cuales pueden ser confiables. Además, el código puede contener errores o vulnerabilidades que permitan que lo explote el código malintencionado y el usuario, a veces, no sabe cómo actuará el código.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. En consecuencia, los equipos pueden resultar dañados y se pueden perder datos privados si un usuario precavido y de confianza ejecuta software malintencionado o que contenga errores.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. La mayoría de los mecanismos de seguridad de los sistemas operativos requiere que cada fragmento de código sea de plena confianza para ejecutarse, con la excepción, quizás, de los scripts de una página 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. Por lo tanto, sigue siendo necesario un mecanismo de seguridad de amplia aplicación que permita que el código que se origina en un equipo se ejecute con protección en otro sistema, aunque no haya ninguna relación de confianza entre los sistemas.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.

.NET Framework proporciona un mecanismo de seguridad denominado “seguridad de acceso del código” para contribuir a proteger los sistemas informáticos del código móvil malintencionado, permitir que el código de origen desconocido se ejecute con protección y evitar que el código de confianza ponga en riesgo la seguridad, ya sea de manera intencionada o accidental.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. La seguridad de acceso del código proporciona al código varios grados de confianza, dependiendo de su procedencia y de otros aspectos de la identidad del 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. La seguridad de acceso del código también exige al código los distintos niveles de confianza, lo que reduce la cantidad de código que debe ser de plena confianza para ejecutarse.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. Al utilizar la seguridad de acceso del código, se puede reducir la probabilidad de que un código malintencionado o con errores use el código de la forma que no debe.Using code access security can reduce the likelihood that your code will be misused by malicious or error-filled code. Puede reducir su responsabilidad, ya que usted puede especificar el conjunto de operaciones que debe poder realizar el código.It can reduce your liability, because you can specify the set of operations your code should be allowed to perform. La seguridad de acceso del código también puede contribuir a minimizar el daño que puede derivarse de las vulnerabilidades de seguridad en el código.Code access security can also help minimize the damage that can result from security vulnerabilities in your code.

Nota

Se realizaron cambios importantes en la seguridad de acceso del código en .NET Framework 4.NET Framework 4.Major changes have been made to code access security in the .NET Framework 4.NET Framework 4. El cambio más notable fue transparencia en seguridad, pero también hay otros cambios importantes que afectan a la seguridad de acceso del código.The most notable change has been security transparency, but there are also other significant changes that affect code access security. Para obtener información sobre estos cambios, consulte cambios de seguridad.For information about these changes, see Security Changes.

La seguridad de acceso del código afecta, principalmente, al código de las bibliotecas y a las aplicaciones de confianza parcial.Code access security primarily affects library code and partially trusted applications. Los desarrolladores de bibliotecas deben proteger sus códigos del acceso no autorizado desde las aplicaciones de confianza parcial.Library developers must protect their code from unauthorized access from partially trusted applications. Las aplicaciones de confianza parcial son aplicaciones que se cargan desde orígenes externos, como Internet.Partially trusted applications are applications that are loaded from external sources such as the Internet. Las aplicaciones que se instalan en el escritorio o en la intranet local se ejecutan con plena confianza.Applications that are installed on your desktop or on the local intranet run in full trust. Aplicaciones de plena confianza no se ven afectadas por la seguridad de acceso del código, a menos que estén marcadas como transparente en seguridad, ya sean de plena confianza.Full-trust applications are not affected by code access security unless they are marked as security-transparent, because they are fully trusted. La única limitación de las aplicaciones de plena confianza es que las aplicaciones marcadas con el atributo SecurityTransparentAttribute no pueden llamar al código marcado con el atributo SecurityCriticalAttribute.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. Las aplicaciones de confianza parcial se deben ejecutar en un espacio aislado (por ejemplo, en Internet Explorer) para que se pueda aplicar la seguridad de acceso del código.Partially trusted applications must be run in a sandbox (for example, in Internet Explorer) so that code access security can be applied. Si descarga una aplicación de Internet y trata de ejecutarla desde el escritorio, obtendrá un NotSupportedException con el mensaje: “Se intentó cargar un ensamblado desde una ubicación de red, por lo que el ensamblado habría sido incluido en un espacio aislado de versiones anteriores de .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. Esta versión de .NET Framework no habilita la directiva CAS de forma predeterminada, por lo que esta carga puede ser peligrosa”.This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous." Si estás seguro de que se puede confiar en la aplicación, puede habilitarlo para ejecutarse como de plena confianza mediante el uso de la <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 obtener información acerca de cómo ejecutar una aplicación en un espacio aislado, consulte Cómo: ejecutar código de confianza parcial en un espacio aislado.For information about running an application in a sandbox, see How to: Run Partially Trusted Code in a Sandbox.

Todo el código administrado que tiene como destino el Common Language Runtime se beneficia de la seguridad de acceso del código, aunque ese código no haga ni una sola llamada de seguridad de acceso del código.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 obtener más información, vea Code Access Security Basics (Aspectos básicos de seguridad de acceso del código).For more information, see Code Access Security Basics.

Funciones clave de la seguridad de acceso del códigoKey Functions of Code Access Security

La seguridad de acceso del código contribuye a limitar el acceso que tiene el código a operaciones y recursos protegidos.Code access security helps limit the access that code has to protected resources and operations. En .NET Framework, la seguridad de acceso del código realiza las funciones siguientes:In the .NET Framework, code access security performs the following functions:

  • Define permisos y conjuntos de permisos que representan el derecho de acceso a varios recursos del sistema.Defines permissions and permission sets that represent the right to access various system resources.

  • Permite que el código exija que sus llamadores tengan permisos específicos.Enables code to demand that its callers have specific permissions.

  • Permite que el código exija que sus llamadores posean una firma digital, por lo que solo los llamadores de una organización o un sitio concretos pueden llamar al código protegido.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.

  • Impone restricciones en el código en tiempo de ejecución mediante la comparación de los permisos concedidos a cada llamador en la pila de llamadas con los permisos que deben poseer.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.

Recorrido de la pila de llamadasWalking the Call Stack

Para averiguar si el código tiene autorización para acceder a un recurso o para ejecutar una operación, el sistema de seguridad en tiempo de ejecución recorre la pila de llamadas y compara los permisos concedidos a cada llamador con el permiso que se pide.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. Si algún llamador de la pila de llamadas no tiene el permiso solicitado, se iniciará una excepción de seguridad y se rechazará el acceso.If any caller in the call stack does not have the demanded permission, a security exception is thrown and access is refused. El recorrido de la pila está diseñado para evitar los ataques por señuelo, en los que el código de menor confianza llama a código de confianza alta y lo utiliza para realizar acciones no 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. La solicitud de permisos a todos los llamadores en tiempo de ejecución afecta al rendimiento, pero es esencial para proteger el código de los ataques por señuelo del código de menor confianza.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 optimizar el rendimiento, puede hacer que el código realice menos recorridos de la pila. Sin embargo, debe tener la seguridad de que no está exponiendo un punto débil de la seguridad cada vez que lo hace.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.

La siguiente ilustración muestra el recorrido de la pila que se produce cuando un método del ensamblado A4 solicita que sus llamadores tengan el permiso P.The following illustration shows the stack walk that results when a method in Assembly A4 demands that its callers have permission P.

Seguridad de acceso del códigoCode access security
Recorrido de la pila de seguridadSecurity stack walk

TítuloTitle DescripciónDescription
Code Access Security Basics (Conceptos básicos sobre la seguridad de acceso del código)Code Access Security Basics Describe la seguridad de acceso del código y sus usos más comunes.Describes code access security and its most common uses.
Código transparente en seguridad, nivel 2Security-Transparent Code, Level 2 Describe el modelo de transparencia de seguridad de .NET Framework 4.NET Framework 4.Describes the security transparency model in the .NET Framework 4.NET Framework 4.
Utilizar bibliotecas de código que no es de plena confianzaUsing Libraries from Partially Trusted Code Describe cómo habilitar bibliotecas para usarlas con código no administrado y cómo usar las bibliotecas desde el código no administrado.Describes how to enable libraries for use with unmanaged code and how to use libraries from unmanaged code.
Conceptos clave de seguridadKey Security Concepts Proporciona información general sobre muchos de los términos y conceptos clave que se usan en el sistema de seguridad de .NET Framework.Provides an overview of many of the key terms and concepts used in the .NET Framework security system.
Seguridad basada en rolesRole-Based Security Describe cómo incorporar la seguridad basada en roles.Describes how to incorporate security based on roles.
Cryptographic ServicesCryptographic Services Describe cómo incorporar la criptografía en las aplicaciones.Describes how to incorporate cryptography into your applications.