Articulo de referencia

Modelo de capacidad de objeto

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 sobre un objeto det...

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 sobre un objeto determinado . Se puede obtener 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 que se va a realizar.

El modelo de seguridad se basa en la imposibilidad de falsificar referencias.

  • Los objetos solo pueden interactuar enviando mensajes a través de referencias.
  • Se puede obtener una referencia mediante:
  1. Condiciones iniciales: En el estado inicial del mundo computacional que se describe, el objeto A puede tener ya una referencia al objeto B.
  2. Paternidad: Si A crea a B, en ese momento A obtiene la única referencia al recién creado B.
  3. Dotación: Si A crea a B, B nace con ese subconjunto de referencias de A con las que A eligió dotarlo.
  4. 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 su 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 la ocultación de información , la programación modular (modularidad) y la separación de responsabilidades , se corresponden con objetivos de seguridad como el principio de mínimo privilegio y la separación de privilegios en la programación basada en capacidades. [ 1 ] [ 2 ]

El modelo de capacidad de objetos 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 orientados a objetos (por ejemplo, JavaScript ( crítica ), Java y C# ) proporcionan formas de acceder a los recursos de maneras distintas a las reglas anteriores, incluyendo las siguientes:

  • Asignación directa a las variables de instancia de un objeto en Java y C#.
  • Inspección directa mediante programación reflexiva (reflexión) de los metadatos de un objeto en Java y C#.
  • La capacidad generalizada de importar módulos primitivos, por ejemplo, java.io.File, que permiten efectos externos.

Este uso de autoridad indiscutible viola las condiciones del modelo de capacidad de objeto. Caja y Joe-E son variantes de JavaScript y Java, respectivamente, que imponen restricciones para eliminar estas vulnerabilidades.

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 la identidad no soportaba bien los cambios dinámicos de permisos, en comparación con el modelo de capacidad de objeto. Comparó el modelo de capacidad de objeto con darle a un aparcacoches la llave de un coche, sin otorgarle el derecho de propiedad del mismo. [ 4 ]

Las propiedades estructurales de los sistemas de capacidades de objetos favorecen la modularidad en el diseño del código y garantizan una encapsulación fiable 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 objetos . Algunas de ellas, en concreto las propiedades de flujo de información, pueden analizarse a nivel de referencias y conectividad de objetos, independientemente del conocimiento o análisis del código que determina el comportamiento de los objetos. En consecuencia, estas propiedades de seguridad pueden establecerse y mantenerse incluso ante la presencia de nuevos objetos que contengan código desconocido y potencialmente 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 solo si el objeto A tiene una referencia a B.
2) Un objeto A puede obtener una referencia a C solo si el objeto A recibe un mensaje que contiene una referencia a C.

Como consecuencia de estas dos reglas, un objeto solo puede obtener una referencia a otro objeto a través de una cadena de referencias preexistente. En resumen, «Solo la conectividad genera conectividad».

sistema de capacidad de objetos
Un sistema computacional que implementa los principios descritos en este artículo.
objeto
Un objeto posee un estado y un comportamiento locales. En este sentido, un objeto es a la vez sujeto y objeto en el sentido utilizado 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 objeto y otorga permiso para enviar mensajes a dicho objeto.
mensaje
¿Qué se envía en una referencia? Dependiendo del 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. Al recibir el mensaje, el receptor tendrá acceso a todas las referencias incluidas en él.
atenuación
Un patrón de diseño común en sistemas de capacidades de objetos: dada una referencia de un objeto, se crea 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 en los mensajes que recibe y reenvía los que están permitidos. La atenuación profunda se refiere al caso en el que la misma atenuación se aplica transitivamente a cualquier objeto obtenido a través del objeto atenuado original, normalmente mediante el uso de una membrana .

Implementaciones

Casi todos los sistemas históricos que se han descrito como sistemas de capacidades pueden modelarse como sistemas de objetos-capacidades. Sin embargo, algunos usos del término capacidad son inconsistentes con el modelo, como las capacidades POSIX .

KeyKOS , EROS , Integrity (sistema operativo) , 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

  • Ley 1 (1981) [ 5 ] [ 6 ]
  • Edén (1985)
  • Esmeralda (1987)
  • Plan confiable (1992)
  • W7 (1995)
  • Joule (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)
  • Hack (2021-presente)
  • Rholang (2018-presente)

Véase también

Referencias

  1. 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 (Informe). Baltimore, Maryland . Recuperado el 28 de julio de 2013 .
  2. Miller, Mark S. ; Yee, Ka-Ping; Shapiro, Jonathan S. (2003). Mitos sobre las capacidades desmentidos (PDF) (Informe). Informe técnico SRL2003-02. Laboratorio de Investigación de Sistemas, Universidad Johns Hopkins.
  3. Citando: JB Dennis, EC Van Horn. “Programming Semantics for Multiprogrammed Computations.” Communications of the ACM, 9(3):143–155, marzo de 1966.
  4. 1 2 Lutsch, Felix (26 de agosto de 2019). "Preguntas y respuestas agóricas con Dean Tribble" . Coro uno .
  5. Lieberman, Henry (junio de 1981). Un avance del acto 1 (memorando de IA del MIT 625) (Informe). MIT.
  6. Lieberman, Henry (junio de 1981). Pensar en muchas cosas a la vez sin confundirse: paralelismo en el acto 1 (memorando de IA del MIT 626) (Informe). MIT.