Code Access Security (CAS), en el marco de Microsoft .NET , es la solución de Microsoft para evitar que el código que no es de confianza realice acciones privilegiadas. Cuando CLR carga un ensamblado , obtendrá evidencia para el ensamblado y lo usará para identificar el grupo de códigos al que pertenece el ensamblado. Un grupo de códigos contiene un conjunto de permisos (uno o más permisos ). El código que realiza una acción privilegiada realizará una demanda de acceso al código que hará que CLR recorra la pila de llamadas y examine el conjunto de permisos otorgado al ensamblaje de cada método.en la pila de llamadas. Los grupos de códigos y los conjuntos de permisos los determina el administrador de la máquina que define la política de seguridad .
Evidencia
La evidencia puede ser cualquier información asociada con una asamblea. Las evidencias predeterminadas que utiliza la seguridad de acceso al código .NET son:
- Directorio de la aplicación: el directorio en el que reside un ensamblado.
- Editor: firma digital del editor del montaje (requiere que el montaje esté firmado mediante Authenticode ).
- URL : la URL completa desde la que se inició el ensamblaje
- Sitio: el nombre de host de la URL / dominio remoto / VPN.
- Zona: la zona de seguridad donde reside la asamblea.
- Hash : un hash criptográfico del ensamblado, que identifica una versión específica.
- Strong Name: una combinación del nombre del ensamblado, la versión y la clave pública de la clave de firma utilizada para firmar el ensamblado. La clave de firma no es un certificado X.509 , sino un par de claves personalizado generado por la herramienta de nomenclatura segura, SN.EXE o por Visual Studio .
Un desarrollador puede usar pruebas personalizadas (las llamadas pruebas de ensamblado) pero esto requiere escribir un ensamblado de seguridad y en la versión 1.1 [se necesita aclaración ] de .NET esta función no funciona.
La evidencia basada en un hash del ensamblado se obtiene fácilmente en código. Por ejemplo, en C # , la evidencia se puede obtener mediante la siguiente cláusula de código:
esto . GetType (). Ensamblaje . Evidencia
Política
Una política es un conjunto de expresiones que usa evidencia para determinar la pertenencia a un grupo de código. Un grupo de código otorga un conjunto de permisos para los ensamblados dentro de ese grupo. Hay cuatro políticas en .NET:
- Empresa: política para una familia de máquinas que forman parte de una instalación de Active Directory .
- Máquina: política de la máquina actual.
- Usuario: política para el usuario que ha iniciado sesión.
- AppDomain: política para el dominio de la aplicación en ejecución.
Las primeras tres políticas se almacenan en archivos XML y se administran a través de .NET Configuration Tool 1.1 (mscorcfg.msc). La política final se administra mediante código para el dominio de aplicación actual.
La seguridad de acceso al código presentará la evidencia de un ensamblado para cada política y luego tomará la intersección (es decir, los permisos comunes a todos los conjuntos de permisos generados) como los permisos otorgados al ensamblado.
De forma predeterminada, las políticas Enterprise, User y AppDomain otorgan plena confianza (es decir, permiten que todos los ensamblados tengan todos los permisos) y la política Machine es más restrictiva. Dado que se toma la intersección, esto significa que el conjunto de permisos final está determinado por la política de la máquina.
Tenga en cuenta que el sistema de políticas se ha eliminado en .NET Framework 4.0. [1]
Grupo de código
Los grupos de códigos asocian una pieza de evidencia con un conjunto de permisos con nombre. El administrador usa la Herramienta de configuración de .NET para especificar un tipo particular de evidencia (por ejemplo, Sitio) y un valor particular para esa evidencia (por ejemplo, www.mysite.com) y luego identifica el conjunto de permisos que el grupo de código será otorgado.
Demandas
El código que realiza alguna acción privilegiada exigirá uno o más permisos. La demanda hace que el CLR recorra la pila de llamadas y, para cada método, el CLR se asegurará de que los permisos exigidos estén en los permisos concedidos al ensamblado del método. Si no se concede el permiso, se lanza una excepción de seguridad . Esto evita que el código descargado realice acciones privilegiadas. Por ejemplo, si se descarga un ensamblado de un sitio que no es de confianza, el ensamblado no tendrá ningún permiso de E / S de archivo y, por lo tanto, si este ensamblado intenta acceder a un archivo, lanzará una excepción que evitará la llamada.