El modelo de capacidad de objeto es un modelo de seguridad informática . Una capacidad describe un derecho transferible para realizar una (o más) operaciones en un objeto determinado. Se puede obtener mediante la siguiente combinación:
- Una referencia infalsificable (en el sentido de referencias de objeto o punteros protegidos) que se puede enviar en mensajes.
- Un mensaje que especifica la operación a realizar.
El modelo de seguridad se basa en no poder falsificar referencias.
- Los objetos solo pueden interactuar enviando mensajes sobre referencias.
- Se puede obtener una referencia mediante:
- Condiciones iniciales: en el estado inicial del mundo computacional que se describe, el objeto A puede tener ya una referencia al objeto B.
- Paternidad: Si A crea B, en ese momento A obtiene la única referencia al B recién creado.
- Dotación: si A crea B, B nace con ese subconjunto de referencias de A con las que A eligió dotarlo.
- Introducción: Si A tiene referencias tanto a B como a C, A puede enviar a B un mensaje que contenga una referencia a C. B puede retener esa referencia para uso posterior.
En el modelo de capacidad de objeto, todos los cálculos se realizan siguiendo las reglas anteriores.
Las ventajas que motivan la programación orientada a objetos , como la encapsulación o el ocultamiento de información , la modularidad y la separación de preocupaciones , corresponden a objetivos de seguridad como el privilegio mínimo y la separación de privilegios en la programación basada en capacidades. [1] [2]
El modelo de capacidad de objeto fue propuesto por primera vez por Jack Dennis y Earl C. Van Horn en 1966. [3]
Lagunas en los lenguajes de programación orientados a objetos
Algunos lenguajes de programación basados en objetos (por ejemplo , JavaScript , Java y C # ) proporcionan formas de acceder a los recursos de otras formas distintas a las reglas anteriores, incluidas las siguientes:
- Asignación directa a las variables de instancia de un objeto en Java y C #.
- Inspección reflexiva directa de los metadatos de un objeto en Java y C #.
- La capacidad generalizada de importar módulos primitivos, por ejemplo, java.io.File que habilita efectos externos.
Tal uso de autoridad innegable viola las condiciones del modelo objeto-capacidad. Caja y Joe-E son variantes de JavaScript y Java, respectivamente, que imponen restricciones para eliminar estas lagunas.
Ventajas de las capacidades de los objetos
El científico informático E. Dean Tribble declaró que en los contratos inteligentes , el control de acceso basado en la identidad no era compatible con los permisos que cambiaban dinámicamente de manera adecuada, en comparación con el modelo de capacidad de objetos. Analizó el modelo de Ocap con darle a un valet la llave del auto, sin ceder el derecho a la propiedad del auto. [4]
Las propiedades estructurales de los sistemas de capacidad de objetos favorecen la modularidad en el diseño del código y aseguran una encapsulación confiable en la implementación del código.
Estas propiedades estructurales facilitan el análisis de algunas propiedades de seguridad de un programa o sistema operativo con capacidad para objetos. Algunas de ellas, en particular, las propiedades del flujo de información, se pueden analizar a nivel de referencias de objetos y conectividad, independientemente de cualquier conocimiento o análisis del código que determina el comportamiento de los objetos. Como consecuencia, estas propiedades de seguridad se pueden establecer y mantener en presencia de nuevos objetos que contienen código desconocido y posiblemente malicioso.
Estas propiedades estructurales se derivan de las dos reglas que gobiernan el acceso a los objetos existentes:
- 1) Un objeto A puede enviar un mensaje a B sólo si objeto A contiene una referencia a B .
- 2) Un objeto A puede obtener una referencia a C sólo si objeto A recibe un mensaje que contiene una referencia a C .
Como consecuencia de estas dos reglas, un objeto puede obtener una referencia a otro objeto solo a través de una cadena de referencias preexistente. En resumen, "Solo la conectividad engendra conectividad".
- sistema de capacidad de objeto
- Un sistema computacional que implementa los principios descritos en este artículo.
- objeto
- Un objeto tiene comportamiento y estado local. Un objeto en este sentido es tanto un sujeto como un objeto en el sentido utilizado en la literatura de control de acceso.
- referencia
- Un canal de comunicaciones infalsificable (puntero protegido, dirección opaca) que designa inequívocamente un solo objeto y proporciona permiso para enviar mensajes a ese objeto.
- mensaje
- Lo que se envía sobre una referencia. Dependiendo del sistema, los mensajes pueden ser o no objetos de primera clase.
- pedido
- Una operación en la que se envía un mensaje sobre una referencia. Cuando se recibe el mensaje, el receptor tendrá acceso a las referencias incluidas en el mensaje.
- atenuación
- Un patrón de diseño común en los sistemas de capacidad de objetos: dada una referencia de un objeto, cree otra referencia para un objeto proxy con ciertas restricciones de seguridad, como permitir solo el acceso de solo lectura o permitir la revocación. El objeto proxy realiza comprobaciones de seguridad sobre los mensajes que recibe y transmite los que están permitidos. La atenuación profunda se refiere al caso en el que la misma atenuación se aplica de manera transitiva a cualquier objeto obtenido a través del objeto atenuado original, típicamente mediante el uso de una "membrana".
Implementaciones
Casi todos los sistemas históricos que se han descrito como "sistemas de capacidad" pueden modelarse como sistemas de capacidad de objeto. (Tenga en cuenta, sin embargo, que algunos usos del término "capacidad" no son consistentes con el modelo, como las "capacidades" POSIX).
KeyKOS , EROS , Integrity (sistema operativo) , [ dudoso ] CapROS , Coyotos , seL4 , OKL4 y Fiasco.OC son sistemas operativos seguros que implementan el modelo de capacidad de objetos.
Idiomas que implementan capacidades de objetos
Ver también
Referencias
- ^ Miller, Mark Samuel (mayo de 2006). "Composición robusta: hacia un enfoque unificado para el control de acceso y el control de concurrencia" . erights.org . Baltimore, Maryland . Consultado el 28 de julio de 2013 .
- ^ Mark S. Miller; Ka-Ping Yee; Jonathan S. Shapiro (2003). "Mitos de capacidad demolidos" (PDF) . Informe técnico SRL2003-02. Laboratorio de Investigación de Sistemas, Universidad Johns Hopkins. Cite journal requiere
|journal=
( ayuda ) - ^ [1] citando: JB Dennis, EC Van Horn. "Semántica de programación para cálculos multiprogramados". Communications of the ACM, 9 (3): 143-155, marzo de 1966.
- ^ a b Lutsch, Felix (26 de agosto de 2019). "Preguntas y respuestas de Agoric con Dean Tribble" . Coro Uno .
- ^ Henry Lieberman (junio de 1981). "Una vista previa del acto 1". Nota 625 de AI del MIT. Cite journal requiere
|journal=
( ayuda ) - ^ Henry Lieberman (junio de 1981). "Pensar en muchas cosas a la vez sin confundirse: paralelismo en el acto 1". Nota 626 del MIT AI. Cite journal requiere
|journal=
( ayuda )