Seguridad de acceso del código

Los actuales sistemas de equipos conectados suelen estar expuestos a código procedente de orígenes diversos y, posiblemente, desconocidos. El código puede asociarse a mensajes de correo electrónico, incluirse en documentos o descargarse de Internet. Desafortunadamente, muchos usuarios de equipos han experimentado personalmente los efectos del código móvil malintencionado, incluidos virus y gusanos, que puede dañar o destruir los datos y hacer perder tiempo y dinero.

Los mecanismos de seguridad más comunes conceden derechos a los usuarios basándose en las credenciales de inicio de sesión (normalmente, una contraseña) y limitan los recursos (a menudo, directorios y archivos) a los que puede obtener acceso el usuario. Este enfoque, sin embargo, no resuelve varios problemas: los usuarios obtienen el código de muchos orígenes, algunos de los cuales tal vez no sean confiables; el código puede contener errores o vulnerabilidades que permiten que sea explotado por código malintencionado; y el código hace cosas que el usuario no sabe que hará. Como resultado, se pueden dañar los sistemas del equipo y es posible que se produzca una fuga de datos confidenciales cuando usuarios cautos y de confianza ejecutan software malintencionado o con errores. La mayoría de los mecanismos de seguridad de los sistemas operativos requieren que cada fragmento de código sea de plena confianza para ejecutarse, con excepción quizás de los scripts de una página Web. Por consiguiente, sigue habiendo la necesidad de un mecanismo de seguridad de amplia aplicación que permita que el código procedente de un sistema informático se ejecute con protección en otro sistema, incluso cuando no hay ninguna relación de confianza entre ambos.

.NET Framework proporciona un mecanismo de seguridad denominado seguridad de acceso del código para ayudar a proteger los sistemas informáticos frente a código móvil malintencionado, permitir que el código de origen desconocido se ejecute con protección y ayudar a impedir que el código de confianza ponga en peligro la seguridad, ya sea intencionada o accidentalmente. La seguridad de acceso del código proporciona al código varios grados de confianza, dependiendo de su procedencia y de otros aspectos de su identidad. Asimismo, la seguridad de acceso a código impone los distintos niveles de confianza en el código, lo que reduce al mínimo la cantidad de código en que se ha de confiar plenamente para poder ejecutarlo. Al utilizar la seguridad de acceso del código se reduce la posibilidad de que algún código malintencionado o con errores utilice incorrectamente su código. Puede reducir la responsabilidad del usuario, ya que puede especificar el conjunto de operaciones que debe permitirse al código así como las operaciones que nunca deben permitírsele. La seguridad de acceso a código también puede ayudar a reducir al mínimo el daño causado por los puntos de seguridad vulnerables del código.

NotaNota

Se han introducido grandes cambios en la seguridad de acceso del código en .NET Framework versión 4.El cambio más notable ha sido la transparencia de seguridad, pero hay también otros cambios significativos que afectan a la seguridad de acceso del código.Para obtener información sobre estos cambios, vea Cambios de seguridad en .NET Framework 4.

La seguridad de acceso del código afecta principalmente al código de las bibliotecas y las aplicaciones de confianza parcial. Los desarrolladores de software de bibliotecas deben proteger el código del acceso no autorizado a aplicaciones de confianza parcial. Las aplicaciones de confianza parcial son aplicaciones que se cargan de orígenes externos, como Internet. Las aplicaciones que se instalan en el escritorio o en la intranet local se ejecutan con plena confianza. Las aplicaciones de plena confianza no se ven afectadas por la seguridad de acceso del código a menos que se marquen como transparente en seguridad, porque son de plena confianza. La única limitación para las aplicaciones de plena confianza es que las que se marcan con el atributo SecurityTransparentAttribute no pueden llamar a código que se marca con el atributo SecurityCriticalAttribute. 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. Si descarga una aplicación de Internet e intenta ejecutarla desde el escritorio, obtendrá una 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. Esta versión de .NET Framework no habilita la directiva CAS de forma predeterminada, por lo que esta carga puede ser peligrosa." Si tiene la certeza de que se puede confiar en la aplicación, habilítela para que se ejecute con plena confianza utilizando el elemento <loadFromRemoteSources>. Para obtener más información sobre cómo ejecutar aplicaciones en un espacio aislado, vea Cómo: Ejecutar código de confianza parcial en un recinto.

Todo el código administrado que tenga como destino Common Language Runtime se beneficia de la seguridad de acceso a código, aunque dicho código no realice ninguna llamada de seguridad de acceso a código. Para obtener más información, vea Conceptos básicos sobre la seguridad de acceso a código.

Funciones principales de la seguridad de acceso del código

La seguridad de acceso del código ayuda a limitar el acceso que el código tiene a los recursos y operaciones protegidos. En .NET Framework, la seguridad de acceso a código realiza las funciones siguientes:

  • Define permisos y conjuntos de permisos que representan el derecho de acceso a varios recursos del sistema.

  • Permite que el código exija que sus llamadores tengan permisos específicos.

  • Permite al código exigir que sus llamadores posean una firma digital, por lo que sólo los llamadores de una organización o un sitio concretos pueden llamar al código protegido.

  • 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 los llamadores deben poseer.

Recorrer la pila de llamadas

Para determinar si el código tiene autorización para el acceso a un recurso o ejecutar una operación, el sistema de seguridad del motor en tiempo de ejecución recorre la pila de llamadas y compara los permisos concedidos a cada llamador con el permiso que se exige. Si algún llamador de la pila de llamadas no tiene el permiso exigido, se producirá una excepción de seguridad y se rechazará el acceso. El recorrido de pila está diseñado para ayudar a evitar los ataques trampa, en los cuales código de menor confianza llama a código de gran confianza y lo utiliza para realizar acciones no autorizadas. La solicitud de los permisos de todos los llamadores en tiempo de ejecución afecta al rendimiento, pero es esencial para ayudar a proteger el código de estos ataques por parte de código de menor confianza. Para optimizar el rendimiento, puede hacer que el código realice menos recorridos de pila; sin embargo, debe asegurarse de que, siempre que lo haga, no exponga puntos débiles de la seguridad.

En la ilustración siguiente se muestra el recorrido de pila que tiene lugar cuando un método del Ensamblado A4 solicita a sus llamadores que tengan el permiso P.

Recorrido de pila de seguridad

Seguridad de acceso a código

Temas relacionados

Título

Descripción

Conceptos básicos sobre la seguridad de acceso a código

Describe la seguridad de acceso a código y sus usos más comunes.

Código transparente en seguridad, nivel 2

Describe el modelo de transparencia de seguridad en .NET Framework 4.

Utilizar bibliotecas de código que no es de plena confianza

Describe cómo habilitar la utilización de código no administrado en bibliotecas y cómo utilizar bibliotecas de código no administrado.

Escribir bibliotecas de clases seguras

Describe cuestiones de seguridad relacionadas con las bibliotecas de clases.

Crear permisos de acceso a código propios

Explica cómo crear permisos personalizados.

Conceptos clave de seguridad

Proporciona información general sobre los términos y conceptos clave que se utilizan en el sistema de seguridad de .NET Framework.

Seguridad basada en roles

Explica cómo incorporar la seguridad basada en funciones.

Servicios criptográficos

Explica cómo incorporar la criptografía en las aplicaciones.

Herramientas de seguridad (.NET Framework)

Describe las herramientas que se utilizan para implementar y administrar el sistema de seguridad de .NET Framework.