La seguridad basada en capacidades es un concepto en el diseño de sistemas informáticos seguros , uno de los modelos de seguridad existentes . Una capacidad (conocida en algunos sistemas como clave ) es un token de autoridad comunicable e infalsificable. Se refiere a un valor que hace referencia a un objeto junto con un conjunto asociado de derechos de acceso . Un programa de usuario en un sistema operativo basado en capacidades debe usar una capacidad para acceder a un objeto. La seguridad basada en capacidades se refiere al principio de diseñar programas de usuario de manera que compartan directamente capacidades entre sí según el principio del mínimo privilegio , y a la infraestructura del sistema operativo necesaria para que dichas transacciones sean eficientes y seguras. La seguridad basada en capacidades se contrapone a un enfoque que utiliza permisos y listas de control de acceso tradicionales de UNIX .
Si bien la mayoría de los sistemas operativos implementan una funcionalidad similar a las capacidades, generalmente no ofrecen el soporte suficiente para que el intercambio de capacidades entre entidades que posiblemente no confían entre sí sea el principal medio para otorgar y distribuir derechos de acceso en todo el sistema. Un sistema basado en capacidades, en cambio, está diseñado con ese objetivo en mente.
Introducción
Las capacidades logran su objetivo de mejorar la seguridad del sistema al reemplazar las referencias falsificables . Una referencia falsificable (por ejemplo, una ruta de acceso ) identifica un objeto, pero no especifica los derechos de acceso apropiados para dicho objeto y el programa de usuario que la posee. En consecuencia, cualquier intento de acceder al objeto referenciado debe ser validado por el sistema operativo, basándose en la autoridad ambiental del programa solicitante, generalmente mediante una lista de control de acceso (ACL). En cambio, en un sistema con capacidades, el mero hecho de que un programa de usuario posea dicha capacidad le otorga el derecho a usar el objeto referenciado de acuerdo con los derechos especificados por ella. En teoría, un sistema con capacidades elimina la necesidad de cualquier lista de control de acceso o mecanismo similar, al otorgar a todas las entidades únicamente las capacidades que realmente necesitan.
Una capacidad se implementa típicamente como una estructura de datos privilegiada que consta de una sección que especifica los derechos de acceso y una sección que identifica de forma única el objeto al que se va a acceder. El usuario no accede a la estructura de datos ni al objeto directamente, sino a través de un identificador . En la práctica, se utiliza de forma muy similar a un descriptor de archivo en un sistema operativo tradicional (un identificador tradicional), pero para acceder a todos los objetos del sistema. Las capacidades suelen ser almacenadas por el sistema operativo en una lista, con algún mecanismo para evitar que el programa modifique directamente el contenido de la capacidad (para falsificar derechos de acceso o cambiar el objeto al que apunta). Algunos sistemas también se han basado en el direccionamiento basado en capacidades (compatibilidad de hardware para capacidades), como Plessey System 250 .
Los programas que poseen ciertas capacidades pueden realizar funciones sobre ellas, como transferirlas a otros programas, convertirlas a una versión con menos privilegios o eliminarlas. El sistema operativo debe garantizar que solo se puedan realizar operaciones específicas sobre las capacidades del sistema, a fin de mantener la integridad de la política de seguridad.
Las capacidades descritas en este artículo no deben confundirse con las " Capacidades " de la Interfaz de Sistema Operativo Portátil ( POSIX ) 1e/2c . Estas últimas son privilegios de grano grueso que no se pueden transferir entre procesos.
Ejemplos
Una capacidad se define como una referencia a un objeto protegido que, al ser poseída por un proceso de usuario, le otorga la capacidad (de ahí su nombre) de interactuar con dicho objeto de ciertas maneras. Estas maneras pueden incluir leer datos asociados a un objeto, modificarlo, ejecutar los datos del objeto como un proceso y otros derechos de acceso imaginables. Lógicamente, la capacidad consiste en una referencia que identifica de forma única un objeto específico y un conjunto de uno o más de estos derechos.
Supongamos que, en el espacio de memoria de un proceso de usuario, existe la siguiente cadena:
/etc/passwd
Aunque esto identifica un objeto único en el sistema, no especifica derechos de acceso y, por lo tanto, no es una capacidad. Supongamos que en su lugar existe el siguiente par de valores:
/etc/passwd O_RDWR
Este par identifica un objeto junto con un conjunto de derechos de acceso. Sin embargo, este par aún no constituye una capacidad, ya que el hecho de que el proceso de usuario posea estos valores no indica si dicho acceso sería legítimo.
Supongamos ahora que el programa de usuario ejecuta correctamente la siguiente instrucción:
int fd = open ( "/etc/passwd" , O_RDWR );La variable fdahora contiene el índice de un descriptor de archivo en la tabla de descriptores de archivo del proceso. Este descriptor de archivo es una capacidad. Su existencia en la tabla de descriptores de archivo del proceso es suficiente para demostrar que el proceso tiene acceso legítimo al objeto. Una característica clave de esta configuración es que la tabla de descriptores de archivo reside en la memoria del núcleo y no puede ser manipulada directamente por el programa de usuario.
Compartir entre procesos
En los sistemas operativos tradicionales, los programas suelen comunicarse entre sí y con el almacenamiento mediante referencias como las de los dos primeros ejemplos. Los nombres de ruta se suelen pasar como parámetros de línea de comandos, se envían a través de sockets y se almacenan en el disco. Estas referencias no son capacidades y deben validarse antes de poder utilizarse. En estos sistemas, una pregunta fundamental es: "¿Bajo qué autoridad se debe evaluar una referencia determinada?". Esto se convierte en un problema crítico, especialmente para los procesos que deben actuar en nombre de dos entidades con autoridad diferente. Se vuelven susceptibles a un error de programación conocido como el problema del agente confundido , que con mucha frecuencia genera una vulnerabilidad de seguridad .
En un sistema basado en capacidades, las capacidades mismas se transmiten entre los procesos y el almacenamiento mediante un mecanismo conocido por el sistema operativo para mantener la integridad de dichas capacidades.
Un enfoque novedoso para resolver este problema implica el uso de un sistema operativo persistente ortogonal . En un sistema de este tipo, no es necesario descartar entidades ni invalidar sus capacidades, lo que evita la necesidad de un mecanismo similar a una lista de control de acceso (ACL) para restaurarlas posteriormente. El sistema operativo mantiene la integridad y la seguridad de las capacidades almacenadas, tanto volátiles como no volátiles, en todo momento; en parte, al realizar todas las tareas de serialización por sí mismo, en lugar de requerir que los programas de usuario lo hagan, como ocurre en la mayoría de los sistemas operativos. Dado que los programas de usuario quedan exentos de esta responsabilidad, no es necesario confiar en que reproduzcan únicamente capacidades válidas ni que validen las solicitudes de acceso mediante un mecanismo de control de acceso . Un ejemplo de implementación es la máquina Flex de principios de la década de 1980.
Capacidades POSIX
El borrador 1003.1e de la Interfaz de Sistema Operativo Portátil (POSIX) especifica un concepto de permisos denominado "capacidades". Sin embargo, las capacidades POSIX difieren de las capacidades descritas en este artículo. Una capacidad POSIX no está asociada a ningún objeto; un proceso con la capacidad CAP_NET_BIND_SERVICE puede escuchar en cualquier puerto TCP inferior a 1024. Este sistema se encuentra en Linux. [ 1 ]
En contraste, Capsicum Unix hibrida un verdadero modelo de sistema de capacidades con un diseño Unix y una API POSIX. Las capacidades de Capsicum son una forma refinada de descriptor de archivo, un derecho delegable entre procesos y tipos de objetos adicionales más allá de los POSIX clásicos, como los procesos, que pueden referenciarse mediante capacidades. En el modo de capacidades de Capsicum, los procesos no pueden utilizar espacios de nombres globales (como el espacio de nombres del sistema de archivos) para buscar objetos, y en su lugar deben heredarlos o recibirlos por delegación. Este sistema se encuentra de forma nativa en FreeBSD, pero existen parches disponibles para otros sistemas. [ 2 ]
Implementaciones
Entre los sistemas comerciales y de investigación más destacados que emplean seguridad basada en capacidades se incluyen los siguientes:
- Tahoe-LAFS , un sistema de archivos de código abierto basado en capacidades.
- FreeBSD Capsicum [ 3 ] [ 4 ]
- Genode [ 5 ]
- Fucsia [ 6 ]
- HarmonyOS ( OpenHarmony ) [ 7 ] [ 8 ] [ 9 ]
- Sistema operativo fantasma [ 10 ]
- Sistemas de oxidación redox
- Familia de microkernels L4 :
- OKL4 de Open Kernel Labs
- seL4 de NICTA
- Fiasco.OC y NOVA de la TU Dresden
- Interfaz del sistema WebAssembly (WASI)
Interrumpido
- Sistema operativo distribuido Amoeba
- GNOSSIS , un sistema operativo desarrollado en Tymshare.
- KeyKOS , sucesor de GNOSIS
- EROS, el sistema operativo extremadamente fiable , sucesor de KeyKOS.
- KeyKOS , sucesor de GNOSIS
- Computadora Cambridge CAP
- Hydra (sistema operativo) , parte del proyecto C.mmp en la Universidad Carnegie Mellon.
- IBM System/38 y AS/400
- Intel iAPX 432
- Sistema Plessey 250
- Doblar
Véase también
Referencias
- ↑ – Manual del programador de Linux – Descripción general, convenciones y miscelánea
- ↑ – Manual de interfaces del kernel de FreeBSD
- ↑ "Pimiento(4)" .
- ↑ Capsicum: capacidades prácticas para UNIX . Consultado el 9 de julio de 2024.
- ↑ "Genode OS: un soplo de aire fresco en la seguridad de sistemas operativos y software" . Rudd-O.com . Consultado el 21 de diciembre de 2023 .
- ↑ "El sistema operativo Fuchsia de Google funciona en prácticamente cualquier cosa" . Engadget . 14 de agosto de 2016. Consultado el 21 de diciembre de 2023 .
- ↑ Děcký, Martin. "Sistemas operativos basados en microkernel y en capacidades" (PDF) . D3S . Consultado el 23 de diciembre de 2023 .
- ↑ "docs/en/application-dev/security/accesstoken-overview.md en master · openharmony/docs" . GitHub . Consultado el 4 de mayo de 2024 .
- ↑ DARKNAVY (11 de junio de 2024). "Informe AVSS: Evaluación preliminar de la capacidad adversaria de seguridad del sistema de iOS, Android y HarmonyOS - Kernel" . DARKNAVY . Consultado el 4 de julio de 2024 .
- ↑ Dziuba, Ted. "Un ruso lleva a Phantom a la inmortalidad en OS" . The Register . Consultado el 31 de diciembre de 2023 .
- Levy, Henry M., * Sistemas informáticos basados en capacidades , Digital Equipment Corporation 1984. ISBN 0-932376-22-3La versión electrónica está disponible aquí .
- El proyecto EROS
- E , un lenguaje de programación basado en la seguridad de capacidades ( ERights.org )
- Mark S. Miller, Ka-Ping Yee, Jonathan Shapiro. Desmontando mitos sobre las capacidades , Informe técnico SRL2003-02, Laboratorio de Investigación de Sistemas, Universidad Johns Hopkins. Disponible en línea.
- El ordenador Cambridge CAP , Levy, 1988
Lecturas adicionales
- Direccionamiento basado en capacidades : Theodore A. Linden (diciembre de 1976). "Estructuras de sistemas operativos para respaldar la seguridad y el software confiable". ACM Computing Surveys . 8 (4): 409– 445. doi : 10.1145/356678.356682 . hdl : 2027/mdp.39015086560037 . ISSN 0360-0300 . S2CID 16720589 .
- Li Gong , Un sistema de capacidades seguro basado en la identidad , sp, pág. 56, Simposio IEEE de 1989 sobre seguridad y privacidad, 1989
- Direccionamiento basado en capacidades
- Una implementación de hardware de direccionamiento basado en capacidades
- Implementación de capacidades en el PDP-11/45
- Soporte de IBM System/38 para direccionamiento basado en capacidades
- EROS: un sistema de capacidades rápidas
Capacidades POSIX en Linux:
- Capacidades y archivos POSIX
- Capacidades de archivos POSIX: Distribuyendo el poder de root
- Hacer que Root no tenga privilegios
- Problemas de seguridad y nuevos riesgos vinculados a las capacidades de archivos POSIX
- Página del manual de Linux para "capabilities(7)"
- Trabajar con capacidades de Linux
Enlaces externos
- "¿Qué es una capacidad?"
- Reseñas de 'Mitos sobre la capacidad desmontados'
- Teoría de la capacidad por Sound Bytes
- Modelos de seguridad informática
- Control de acceso
- Sistemas de capacidad