La seguridad de acceso al código (CAS), en el marco de trabajo Microsoft .NET , es la solución de Microsoft para evitar que el código no confiable realice acciones privilegiadas. Cuando el CLR carga un ensamblado , obtiene evidencia del mismo y la utiliza para identificar el grupo de código al que pertenece. Un grupo de código contiene un conjunto de permisos (uno o más permisos ). El código que realiza una acción privilegiada realiza una demanda de acceso al código que hace que el CLR recorra la pila de llamadas y examine el conjunto de permisos otorgado al ensamblado de cada método en la pila de llamadas. Los grupos de código y los conjuntos de permisos los determina el administrador de la máquina que define la política de seguridad . Microsoft considera que CAS está obsoleto y desaconseja su uso. [ 1 ] Tampoco está disponible en .NET Core ni en .NET.
Evidencia
La evidencia puede ser cualquier información asociada con un ensamblado. Las evidencias predeterminadas que utiliza la seguridad de acceso al código .NET son:
- Directorio de la aplicación: el directorio donde reside un ensamblado.
- Editor: la firma digital del editor del ensamblaje (requiere que el ensamblaje esté firmado mediante Authenticode ).
- URL : la URL completa desde donde se inició el ensamblaje.
- Sitio: el nombre de host de la URL/dominio remoto/VPN.
- Zona: la zona de seguridad donde se encuentra la asamblea.
- Hash : un hash criptográfico del ensamblaje, que identifica una versión específica.
- Nombre seguro: 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 personalizadas generadas por la herramienta de nombres seguros SN.EXE o por Visual Studio .
Un desarrollador puede usar evidencia personalizada (la llamada evidencia de ensamblado), pero esto requiere escribir un ensamblado de seguridad y en la versión 1.1 de .NET esta función no funciona.
La evidencia basada en un hash del ensamblado se obtiene fácilmente en el código. Por ejemplo, en C# , la evidencia se puede obtener mediante la siguiente cláusula de código:
esto.GetType ( ) . Assembly.EvidencePolítica
Una política es un conjunto de expresiones que utiliza 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 un conjunto de máquinas que forman parte de una instalación de Active Directory .
- Máquina: política para 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 tres primeras directivas se almacenan en archivos XML y se administran mediante la herramienta de configuración de .NET 1.1 (mscorcfg.msc). La última directiva 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 a 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 directivas de Empresa, Usuario y Dominio de aplicación otorgan plena confianza (es decir, permiten que todos los ensamblados tengan todos los permisos), mientras que la directiva de Máquina es más restrictiva. Dado que se toma la intersección, esto significa que el conjunto final de permisos viene determinado por la directiva de Máquina.
Tenga en cuenta que el sistema de políticas se ha eliminado en .NET Framework 4.0. [ 2 ]
Grupo de códigos
Los grupos de código asocian una prueba con un conjunto de permisos con nombre. El administrador utiliza la herramienta de configuración de .NET para especificar un tipo de prueba concreto (por ejemplo, Sitio) y un valor concreto para esa prueba (por ejemplo, www.mysite.com), y luego identifica el conjunto de permisos que se otorgará al grupo de código.
Demandas
El código que realiza alguna acción privilegiada solicitará uno o más permisos. Esta solicitud hace que el CLR recorra la pila de llamadas y, para cada método, el CLR verificará que los permisos solicitados estén incluidos en los permisos otorgados al ensamblado del método. Si el permiso no está otorgado, se genera una excepción de seguridad . Esto impide que el código descargado realice acciones privilegiadas. Por ejemplo, si un ensamblado se descarga de un sitio no confiable, no tendrá permisos de E/S de archivos y, por lo tanto, si este ensamblado intenta acceder a un archivo, generará una excepción que impedirá la llamada.
Referencias
- Comprender la seguridad de .NET
- Herramienta de política de seguridad de acceso al código (Caspol.exe)
- Infraestructura de lenguaje común
- Tecnología de seguridad de Microsoft Windows
- protocolos criptográficos