Compartir a través de


Consideraciones de seguridad del ensamblado

Al compilar un ensamblado, puede especificar un conjunto de permisos que el ensamblado requiere para ejecutarse. Si se conceden o no determinados permisos a un ensamblado se basan en evidencia.

Hay dos formas distintas de usar la evidencia:

  • La evidencia de entrada se combina con la evidencia recopilada por el cargador para crear un conjunto final de evidencias usadas para la resolución de directivas. Los métodos que usan esta semántica incluyen Assembly.Load, Assembly.LoadFrom y Activator.CreateInstance.

  • La evidencia de entrada se usa sin modificar como conjunto final de evidencia utilizada para la resolución de directivas. Los métodos que usan esta semántica incluyen Assembly.Load(byte[]) y AppDomain.DefineDynamicAssembly().

    La directiva de seguridad establecida en el equipo donde se ejecutará el ensamblado puede conceder permisos opcionales. Si desea que el código controle todas las posibles excepciones de seguridad, puede realizar una de las siguientes acciones:

  • Inserte una solicitud de permiso para todos los permisos que debe tener el código y controle por adelantado el error de tiempo de carga que se produce si no se conceden los permisos.

  • No use una solicitud de permiso para obtener los permisos que puede necesitar el código, pero esté preparado para controlar las excepciones de seguridad si no se conceden permisos.

    Nota:

    La seguridad es un área compleja y tiene muchas opciones entre las que elegir. Para obtener más información, consulte Conceptos clave de seguridad.

En tiempo de carga, la evidencia del ensamblado se usa como entrada para la directiva de seguridad. La directiva de seguridad se establece mediante la empresa y el administrador del equipo, así como por la configuración de directiva de usuario, y determina el conjunto de permisos que se conceden a todo el código administrado cuando se ejecuta. La directiva de seguridad se puede establecer para el publicador del ensamblado (si tiene una firma generada por una herramienta de firma), para el sitio web y la zona (que era un concepto de Internet Explorer) del que se descargó el ensamblado o para el nombre seguro del ensamblado. Por ejemplo, el administrador de un equipo puede establecer una directiva de seguridad que permita que todo el código descargado de un sitio web y firmado por una empresa de software determinada acceda a una base de datos en un equipo, pero no concede acceso para escribir en el disco del equipo.

Ensamblados con nombre seguro y herramientas de firma

Advertencia

No confíe en nombres seguros para la seguridad. Solo proporcionan una identidad única.

Puede firmar un ensamblado de dos maneras diferentes pero complementarias: con un nombre seguro o mediante SignTool.exe (Herramienta de firma). La firma de un ensamblado con un nombre seguro agrega cifrado de clave pública al archivo que contiene el manifiesto del ensamblado. La firma de nombres seguros ayuda a comprobar la unicidad del nombre, evitar la suplantación de nombres y proporcionar a los autores de llamadas alguna identidad cuando se resuelve una referencia.

No hay ningún nivel de confianza asociado a un nombre seguro, lo que hace que SignTool.exe (Herramienta de firma) sea importante. Las dos herramientas de firma requieren que un publicador demuestre su identidad en una entidad de terceros y obtenga un certificado. A continuación, este certificado se inserta en el archivo y un administrador puede usarlo para decidir si confiar en la autenticidad del código.

Puede asignar un nombre seguro y una firma digital creada mediante SignTool.exe (Herramienta de firma) a un ensamblado, o puede usar solo. Las dos herramientas de firma solo pueden firmar un archivo a la vez; para un ensamblado de varios archivos, firma el archivo que contiene el manifiesto del ensamblado. Un nombre seguro se almacena en el archivo que contiene el manifiesto del ensamblado, pero una firma creada con SignTool.exe (Herramienta de firma) se almacena en una ranura reservada en el archivo ejecutable portátil (PE) que contiene el manifiesto de ensamblado. La firma de un ensamblado mediante SignTool.exe (Herramienta de firma) se puede usar (con o sin un nombre seguro) cuando ya tiene una jerarquía de confianza que se basa en firmas generadas SignTool.exe (Herramienta de firma), o cuando la directiva usa solo la parte de clave y no comprueba una cadena de confianza.

Nota:

Cuando se usa un nombre seguro y una firma de herramienta de firma en un ensamblado, primero se debe asignar el nombre seguro.

Common Language Runtime también realiza una comprobación hash; el manifiesto de ensamblado contiene una lista de todos los archivos que componen el ensamblado, incluido un hash de cada archivo tal como existía cuando se creó el manifiesto. A medida que se carga cada archivo, su contenido se aplica un hash y se compara con el valor hash almacenado en el manifiesto. Si los dos hash no coinciden, el ensamblado no se puede cargar.

La nomenclatura segura y la firma mediante SignTool.exe (Sign Tool) garantizan la integridad a través de firmas digitales y certificados. Todas las tecnologías mencionadas, es decir, la comprobación de hash, la nomenclatura segura y la firma mediante SignTool.exe (Herramienta de firma) funcionan conjuntamente para asegurarse de que el ensamblado no se ha modificado de ninguna manera.

Consulte también