Modelo de seguridad informática
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. Puede obtenerse mediante la siguiente combinación:
- Una referencia infalsificable (en el sentido de referencias a objetos 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 sólo pueden interactuar enviando mensajes a las referencias.
- Se puede obtener una referencia mediante:
- Condiciones iniciales: En el estado inicial del mundo computacional que se está describiendo, 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 recién creado B.
- Dotación: Si A crea a B, B nace con ese subconjunto de referencias de A con el que A decidió 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 conservar esa referencia para uso posterior.
En el modelo de capacidad del 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 u ocultación de información , la modularidad y la separación de preocupaciones , corresponden a objetivos de seguridad como el mínimo privilegio 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 formas distintas a las que se establecen con 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 habilitan efectos externos.
Este uso de autoridad innegable viola las condiciones del modelo de capacidad de los objetos. 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 afirmó que en los contratos inteligentes , el control de acceso basado en identidad no soportaba bien los cambios dinámicos de permisos, en comparación con el modelo de capacidad de objeto. Él comparó el modelo ocap con el hecho de entregarle a un valet la llave de su auto, sin entregarle el derecho de 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 garantizan 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 de respuesta a objetos. Algunas de ellas (en particular, las propiedades de flujo de información) pueden analizarse a nivel de referencias y conectividad de objetos, independientemente de cualquier conocimiento o análisis del código que determina el comportamiento de los objetos. En consecuencia, estas propiedades de seguridad pueden establecerse y mantenerse en presencia de nuevos objetos que contengan código desconocido y posiblemente malicioso.
Estas propiedades estructurales se derivan de las dos reglas que rigen el acceso a los objetos existentes:
- 1) Un objeto A puede enviar un mensaje a B sólo si el objeto A contiene una referencia a B.
- 2) Un objeto A puede obtener una referencia a C sólo si el 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 sólo a través de una cadena de referencias preexistente. En resumen, "sólo la conectividad genera conectividad".
Glosario de términos relacionados
- sistema de capacidad de objetos
- Un sistema computacional que implementa los principios descritos en este artículo.
- objeto
- Un objeto tiene un estado y un comportamiento locales. En este sentido, un objeto es a la vez un sujeto y un objeto en el sentido que se utiliza en la literatura sobre control de acceso.
- referencia
- Un canal de comunicaciones infalsificable (puntero protegido, dirección opaca) que designa de forma inequívoca un único objeto y proporciona permiso para enviar mensajes a ese objeto.
- mensaje
- Lo que se envía en una referencia. Según el sistema, los mensajes pueden ser o no objetos de primera clase.
- pedido
- Operación en la que se envía un mensaje a una referencia. Cuando se recibe el mensaje, el receptor tendrá acceso a cualquier referencia incluida 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, crear otra referencia para un objeto proxy con ciertas restricciones de seguridad, como permitir solo acceso de solo lectura o permitir la revocación. El objeto proxy realiza verificaciones de seguridad en los mensajes que recibe y transmite todos 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, generalmente mediante el uso de una "membrana".
Implementaciones
Casi todos los sistemas históricos que se han descrito como "sistemas de capacidad" se pueden modelar como sistemas de capacidad de objetos. (Sin embargo, cabe señalar que algunos usos del término "capacidad" no son coherentes con el modelo, como las "capacidades" de POSIX).
KeyKOS , EROS , Integrity (sistema operativo) , [ dudoso – discutir ] CapROS, Coyotos, seL4 , OKL4 y Fiasco.OC son sistemas operativos seguros que implementan el modelo de capacidad de objeto.
Lenguajes que implementan capacidades de objetos
- Acto 1 (1981) [5] [6]
- Edén (1985),
- Esmeralda (1987),
- Esquema confiable (1992),
- W7 (1995),
- Julio (1996),
- Original-E (1997),
- Oz-E (2005),
- Joe-E (2005),
- CaPerl (2006),
- Emily (2006)
- Caja (2007–2021)
- Monte (2008-presente)
- Pony (2014-presente) [4]
- Wyvern (2012-presente)
- Neolengua (2007-presente)
- Hacklang (2021-presente)
- Rholang (2018-presente)
Véase 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). "Capability Myths Demolished" (PDF) . Informe técnico SRL2003-02. Laboratorio de investigación de sistemas, Universidad Johns Hopkins.
- ^ [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.
- ^ ab Lutsch, Felix (26 de agosto de 2019). "Preguntas y respuestas agóricas con Dean Tribble". Coro Uno .
- ^ Henry Lieberman (junio de 1981). "Un avance del acto 1". Memorándum de la IA del MIT 625.
- ^ Henry Lieberman (junio de 1981). "Pensar en muchas cosas a la vez sin confundirse: paralelismo en el acto 1". Memorándum 626 del MIT AI.