Перейти к содержанию

Основанная на полномочиях безопасность

Статья из Авикипедии. Энциклопедии

Основанная на полномочиях безопасность (англ. capability-based security) — концепция проектирования защищённых компьютерных систем, в рамках которой доступ к ресурсам предоставляется через специальные маркеры, называемые полномочиями. Эти маркеры представляют собой неизменяемые и передаваемые токены, которые содержат ссылку на объект и набор разрешённых операций с ним. Данная модель противопоставляется традиционным подходам, таким как права доступа UNIX и списки контроля доступа (ACL), и реализует принцип минимальных привилегий, позволяя программам напрямую обмениваться полномочиями.

Основные принципы[править | править код]

Полномочия функционируют как защищённые ссылки, заменяя изменяемые идентификаторы объектов. В отличие от путей к файлам, которые лишь указывают на объект без определения прав доступа, полномочия одновременно идентифицируют ресурс и задают разрешённые действия. Факт владения полномочием служит доказательством права доступа, что теоретически устраняет необходимость в дополнительных проверках через ACL. Полномочия реализуются как структуры данных, содержащие идентификатор объекта и права доступа, а управление ими осуществляется через дескрипторы, аналогичные файловым дескрипторам в классических ОС, но распространяющиеся на все типы объектов. Операционная система защищает целостность полномочий, предотвращая их прямое изменение программами.

Программы могут передавать полномочия другим процессам, создавать их версии с ограниченными правами или уничтожать. ОС гарантирует, что эти операции выполняются безопасно, поддерживая целостность политики доступа. Важно не путать данную концепцию с POSIX-полномочиями, которые представляют собой неделегируемые системные привилегии.

Пример работы[править | править код]

Рассмотрим строку "/etc/passwd", которая идентифицирует файл, но не определяет права доступа. Пара значений "/etc/passwd" и "O_RDWR" указывает объект и возможные операции, но ещё не является полномочием. Если программа выполняет вызов: ```c int fd = open("/etc/passwd", O_RDWR); ``` то переменная fd получает индекс в таблице файловых дескрипторов процесса. Этот дескриптор и есть полномочие, подтверждающее законность доступа. Таблица дескрипторов находится в ядре ОС и недоступна для прямого изменения пользовательскими программами.

Межпроцессное взаимодействие[править | править код]

В традиционных системах программы обмениваются ссылками (например, путями к файлам), которые требуют проверки прав доступа. Это создаёт риски, такие как уязвимости из-за смешения полномочий. В системах с полномочиями сами маркеры передаются между процессами через механизмы, контролируемые ОС, что обеспечивает их целостность. Одним из современных подходов является использование ортогональной персистентности, при которой ОС самостоятельно управляет сериализацией и сохранением полномочий, освобождая программы от этой задачи. Примером ранней реализации такой системы является операционная система KeyKOS.

POSIX-полномочия и Capsicum[править | править код]

Черновик стандарта POSIX 1003.1e определяет собственные «полномочия», которые отличаются от описанной модели. Например, CAP_NET_BIND_SERVICE в Linux позволяет процессу прослушивать порты ниже 1024, но эти привилегии не привязаны к конкретным объектам и не передаются. В отличие от этого, Capsicum для Unix сочетает модель полномочий с POSIX-API, предоставляя улучшенные файловые дескрипторы, которые можно делегировать и использовать для доступа к различным объектам, включая процессы. В режиме Capsicum процессы лишены доступа к глобальным пространствам имён и работают только с унаследованными или полученными полномочиями. Данная система интегрирована в FreeBSD и портирована на другие платформы.

Реализации[править | править код]

Среди известных систем, использующих модель полномочий, выделяются:

  • Cambridge CAP — файловая система на основе полномочий
  • FreeBSD Capsicum
  • Genode OS Framework
  • Google Fuchsia
  • HarmonyOS
  • Фантом (операционная система)
  • Redox
  • Микроядра L4: OKL4, seL4, Fiasco.OC, NOVA
  • WebAssembly System Interface (WASI)

Исторические системы[править | править код]

  • Amoeba — распределённая операционная система
  • GNOSIS и её преемники KeyKOS и EROS
  • Hydra
  • Mach в Университете Карнеги — Меллон
  • IBM System/38 и AS/400
  • IAPX 432
  • Taos

Примечания[править | править код]

Литература[править | править код]

  • Levy H.M. «Capability-Based Computer Systems» — доступна электронная версия: http://www.cs.washington.edu/homes/levy/capabook/
  • E programming language — язык программирования, основанный на безопасности полномочий

Дополнительные материалы[править | править код]

  • Gong L. «Capability-based addressing» // 1989 IEEE Symposium on Security and Privacy
  • Материалы по POSIX-полномочиям в Linux

Ссылки[править | править код]

Ссылки[править | править код]