Introducción a la seguridad de acceso a código
La seguridad de acceso a código es un mecanismo que ayuda a limitar el acceso que el código tiene a 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 a los administradores configurar una directiva de seguridad mediante la asociación de conjuntos de permisos a grupos de código.
Permite que el código solicite los permisos que requiere para ejecutarse así como los permisos que serían útiles tener, además de especificar qué permisos nunca debe tener.
Concede permisos a cada ensamblado que se carga, basándose en los permisos solicitados por el código y en las operaciones permitidas por la directiva de seguridad.
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.
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
Un uso típico de la seguridad de acceso a código, es el caso de una aplicación que descarga un control de un sitio Web host de la intranet local directamente en el cliente de modo que el usuario pueda escribir datos. El control se construye mediante una biblioteca de clases instalada. A continuación, se presentan algunas de las formas en las que la seguridad de acceso a código puede utilizarse en este escenario:
Antes del momento de la carga, un administrador puede configurar directivas de seguridad para especificar que el código reciba una autorización especial (más permisos de los que normalmente recibiría el código de Internet local) si tiene una firma digital determinada. De manera predeterminada, el conjunto de permisos predefinido LocalIntranet se asocia a todo el código que se descargue de la intranet local.
En el momento de la carga, el motor en tiempo de ejecución no concede al control más permisos de los asociados al conjunto de permisos denominado LocalIntranet, a menos que el control tenga una firma de confianza. En ese caso, se conceden los permisos asociados al conjunto de permisos LocalIntranet y, posiblemente, algunos permisos adicionales debido a la firma de confianza.
En tiempo de ejecución, siempre que un llamador (en este caso, el control alojado) obtiene acceso a una biblioteca que expone recursos protegidos o a una biblioteca que llama a código no administrado, la biblioteca realiza una solicitud de seguridad, que hace que se compruebe si los llamadores tienen las concesiones de permisos correctas. Estas comprobaciones de seguridad ayudan a impedir que el control realice acciones no autorizadas en los equipos del cliente.