Основанная на полномочиях безопасность
Основанная на полномочиях безопасность (англ. 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
Ссылки[править | править код]
Ссылки[править | править код]
- ERights.org
- A Secure Identity-Based Capability System
- Capability-based addressing
- A hardware implementation of capability-based addressing
- An implementation of capabilities on the PDP-11/45
- IBM System/38 support for capability-based addressing
- EROS: a fast capability system
- POSIX Capabilities & Files
- POSIX file capabilities: Parceling the power of root
- Making Root Unprivileged
- Security issues and new risks linked to POSIX file capabilities
- Linux manual page for "capabilities(7)"
- Working with Linux capabilities
- "What is a Capability?"
- Reviews of 'Capability Myths Demolished'
- Capability Theory by Sound Bytes
- https://www.freebsd.org/cgi/man.cgi?capsicum(4)
- https://www.cl.cam.ac.uk/research/security/capsicum/papers/2010usenix-security-capsicum-website.pdf
- https://rudd-o.com/linux-and-free-software/genode-os-a-breath-of-fresh-air-in-operating-system-and-software-security
- https://www.engadget.com/2016-08-13-google-fuchsia-operating-system.html
- https://d3s.mff.cuni.cz/files/teaching/nswi161/martin-decky-microkernels-capabilities.pdf
- https://github.com/openharmony/docs/blob/master/en/application-dev/security/accesstoken-overview.md
- https://www.darknavy.org/blog/avss_report_kernel/
- https://www.theregister.com/2009/02/03/phantom_russian_os/
- https://habr.com/ru/articles/440760/?ysclid=mhtal04f13948143694
- https://www.pvsm.ru/bezopasnost/12297
- https://codewithoutrules.com/2018/09/21/users-considered-harmful/
- https://www.cloudflare.com/ru-ru/learning/security/threats/cross-site-request-forgery/
- https://cyberleninka.ru/article/n/arealnye-tipy-dannyh-v-instrumentalnom-podhode-k-programmirovaniyu?ysclid=mhteeu87xl747143858
- https://xakep.ru/2004/02/12/21212/
- https://web.archive.org/web/20031029002231/http://www.eros-os.org/
- https://www.cs.washington.edu/homes/levy/capabook/Chapter5.pdf