Безопасность на основе возможностей
Безопасность на основе возможностей — это концепция проектирования безопасных вычислительных систем, одна из существующих моделей безопасности . Способность ) — (известная в некоторых системах как ключ это передаваемый, не поддающийся подделке знак власти. Оно относится к значению, которое ссылается на вместе объект с соответствующим набором прав доступа . Пользовательская должна программа в операционной системе, основанной на возможностях, использовать возможность доступа к объекту. Безопасность, основанная на возможностях, относится к принципу разработки пользовательских программ таким образом, чтобы они напрямую делились возможностями друг с другом в соответствии с принципом наименьших привилегий , а также к инфраструктуре операционной системы, необходимой для обеспечения эффективности и безопасности таких транзакций. Безопасность, основанную на возможностях, следует противопоставлять подходу, использующему традиционные разрешения UNIX и списки управления доступом .
Хотя большинство операционных систем реализуют средство, напоминающее возможности, они обычно не обеспечивают достаточной поддержки, чтобы позволить обмен возможностями между, возможно, взаимно не доверяющими объектами, стать основным средством предоставления и распределения прав доступа по всей системе. Напротив, система, основанная на возможностях, разрабатывается с учетом этой цели.
Введение [ править ]
Возможности достигают своей цели повышения безопасности системы за счет использования вместо поддельных ссылок . Поддельная ссылка (например, имя пути ) идентифицирует объект, но не определяет, какие права доступа подходят для этого объекта и пользовательской программы, которая содержит эту ссылку. Следовательно, любая попытка доступа к указанному объекту должна быть подтверждена операционной системой на основе внешних полномочий запрашивающей программы, обычно посредством использования списка управления доступом (ACL). Вместо этого в системе с возможностями сам факт того, что пользовательская программа обладает такой возможностью, дает ей право использовать объект, на который ссылаются, в соответствии с правами, указанными этой возможностью. Теоретически система с возможностями устраняет необходимость в каком-либо списке контроля доступа или аналогичном механизме, предоставляя всем объектам все и только те возможности, которые им действительно нужны.
Возможность обычно реализуется как привилегированная структура данных , состоящая из раздела, определяющего права доступа, и раздела, однозначно идентифицирующего объект, к которому осуществляется доступ. Пользователь не получает доступ к структуре данных или объекту напрямую, а через дескриптор . На практике он используется во многом подобно файловому дескриптору в традиционной операционной системе (традиционный дескриптор), но для доступа к каждому объекту в системе. Возможности обычно хранятся в операционной системе в виде списка с некоторым механизмом, предотвращающим прямое изменение программой содержимого возможности (с целью подделки прав доступа или изменения объекта, на который она указывает). Некоторые системы также основаны на адресации на основе возможностей (аппаратная поддержка возможностей), например Plessey System 250 .
Программы, обладающие такими возможностями, могут выполнять с ними такие функции, как передача их другим программам, преобразование в менее привилегированную версию или удаление. Операционная система должна гарантировать, что с возможностями системы могут выполняться только определенные операции, чтобы поддерживать целостность политики безопасности.
Возможности, обсуждаемые в этой статье, не следует путать с » интерфейса переносимой операционной системы ( POSIX ) 1e/2c « Возможностями . Последние представляют собой общие привилегии, которые нельзя передавать между процессами.
Примеры [ править ]
Возможность определяется как ссылка на защищенный объект , которая, благодаря ее обладанию пользовательским процессом, предоставляет этому процессу возможность (отсюда и название) взаимодействовать с объектом определенными способами. Эти способы могут включать в себя чтение данных, связанных с объектом, изменение объекта, выполнение данных в объекте как процесса и другие возможные права доступа. Эта возможность логически состоит из ссылки, которая однозначно идентифицирует конкретный объект, и набора одного или нескольких из этих прав.
Предположим, что в пространстве памяти пользовательского процесса существует следующая строка:
/etc/passwd
Хотя это идентифицирует уникальный объект в системе, оно не определяет права доступа и, следовательно, не является возможностью. Предположим, что вместо этого имеется следующая пара значений:
/etc/passwd O_RDWR
Эта пара идентифицирует объект вместе с набором прав доступа. Однако эта пара по-прежнему не является возможностью, поскольку обладание пользовательским процессом этими значениями ничего не говорит о том, будет ли этот доступ на самом деле законным.
Теперь предположим, что пользовательская программа успешно выполняет следующий оператор:
int fd = open("/etc/passwd", O_RDWR);
Переменная fd
теперь содержит индекс дескриптора файла в таблице дескрипторов файлов процесса. Этот файловый дескриптор является возможностью. Его существования в таблице файловых дескрипторов процесса достаточно, чтобы показать, что процесс действительно имеет законный доступ к объекту. Ключевой особенностью такого расположения является то, что таблица дескрипторов файлов находится в памяти ядра и не может быть использована программой пользователя напрямую.
Совместное использование между процессами [ править ]
В традиционных операционных системах программы часто взаимодействуют друг с другом и с хранилищем, используя ссылки, подобные тем, что приведены в первых двух примерах. Имена путей часто передаются как параметры командной строки, отправляются через сокеты и сохраняются на диске. Эти ссылки не являются возможностями и должны быть проверены, прежде чем их можно будет использовать. В этих системах центральный вопрос заключается в том, «по чьему авторитету должна оцениваться данная ссылка?» Это становится критической проблемой, особенно для процессов, которые должны действовать от имени двух разных субъектов, наделенных полномочиями. Они становятся подвержены программной ошибке, известной как проблема запутанного заместителя , которая очень часто приводит к дыре в безопасности .
В системе, основанной на возможностях, сами возможности передаются между процессами и хранилищем с использованием механизма, известного операционной системе, для поддержания целостности этих возможностей.
Один новый подход к решению этой проблемы предполагает использование ортогонально постоянной операционной системы. В такой системе нет необходимости отбрасывать объекты и признавать их возможности недействительными, и, следовательно, требуется механизм, подобный ACL, для восстановления этих возможностей в более позднее время. Операционная система постоянно поддерживает целостность и безопасность возможностей, содержащихся во всех хранилищах, как энергозависимых, так и энергонезависимых; отчасти за счет выполнения всех задач сериализации самостоятельно, вместо того, чтобы требовать этого от пользовательских программ, как это происходит в большинстве операционных систем. Поскольку пользовательские программы освобождены от этой ответственности, нет необходимости доверять им воспроизведение только допустимых возможностей или проверку запросов на доступ с использованием механизма контроля доступа . Примером реализации является машина Flex начала 1980-х годов.
Возможности POSIX [ править ]
Проект интерфейса портативной операционной системы (POSIX) 1003.1e определяет концепцию разрешений, называемую «возможностями». Однако возможности POSIX отличаются от возможностей, описанных в этой статье. Возможность POSIX не связана ни с каким объектом; процесс, имеющий возможность CAP_NET_BIND_SERVICE, может прослушивать любой TCP-порт ниже 1024. Эта система находится в Linux. [1]
Напротив, Capsicum Unix сочетает в себе настоящую модель системы возможностей с дизайном Unix и POSIX API. Возможности Capsicum — это усовершенствованная форма файлового дескриптора, делегируемое право между процессами и дополнительные типы объектов, выходящие за рамки классического POSIX, такие как процессы, на которые можно ссылаться через возможности. В режиме возможностей Capsicum процессы не могут использовать глобальные пространства имен (например, пространство имен файловой системы) для поиска объектов и вместо этого должны наследовать или делегировать их. Эта система изначально присутствует во FreeBSD, но доступны исправления для других систем. [2]
Реализации [ править ]
Известные исследовательские и коммерческие системы, использующие безопасность на основе возможностей, включают следующее:
- Tahoe-LAFS — файловая система с открытым исходным кодом, основанная на возможностях.
- GNOSIS — операционная система, разработанная в Tymshare.
- KeyKOS , преемник GNOSIS
- EROS, чрезвычайно надежная операционная система , преемница KeyKOS
- CapROS — проект по дальнейшему развитию кодовой базы EROS для коммерческого использования.
- EROS, чрезвычайно надежная операционная система , преемница KeyKOS
- KeyKOS , преемник GNOSIS
- Компьютер Cambridge CAP
- Hydra (операционная система) , часть проекта C.mmp в Университете Карнеги-Меллон.
- StarOS, часть проекта CM* Университета Карнеги-Меллон.
- IBM System/38 и AS/400
- Intel iAPX 432
- Система Плесси 250
- Гибкий
- Семейство микроядер L4 :
- OKL4 от Open Kernel Labs
- seL4 от NICTA
- Fiasco.OC и NOVA из Технического университета Дрездена
- Amoeba Распределенная операционная система
- FreeBSD стручковый перец [3] [4]
- Генод [5]
- Гугл Фуксия [6]
- HarmonyOS ( HarmonyOS NEXT ), полученная из OpenHarmony на индивидуальном уровне с функциями, основанными на возможностях, через менеджер токенов доступа. [7] [8]
- Фантомная ОС [9]
- WebAssembly (WASI) Системный интерфейс
Ссылки [ править ]
- ^ Linux программиста Руководство – Обзор, условные обозначения и прочее –
- ^ FreeBSD по интерфейсам ядра Руководство –
- ^ «Капсикум (4)» .
- ^ https://www.cl.cam.ac.uk/research/security/capsicum/papers/2010usenix-security-capsicum-website.pdf [ только URL-адрес PDF ]
- ^ «Genode OS: глоток свежего воздуха в безопасности операционных систем и программного обеспечения» . Радд-О.com . Проверено 21 декабря 2023 г.
- ^ «Операционная система Google Fuchsia работает практически на чем угодно» . Engadget . 14 августа 2016 г. Проверено 21 декабря 2023 г.
- ^ Децкий, Мартин. «Операционные системы на основе микроядра и возможностей» (PDF) . Д3С . Проверено 23 декабря 2023 г.
- ^ «docs/en/application-dev/security/accesstoken-overview.md в мастере · openharmony/docs» . Гитхаб . Проверено 4 мая 2024 г.
- ^ Дзюба, Тед. «Русский едет на Фантоме к бессмертию ОС» . Регистр . Проверено 31 декабря 2023 г.
- Леви, Генри М., * Компьютерные системы, основанные на возможностях , Digital Equipment Corporation, 1984. ISBN 0-932376-22-3 . Электронная версия доступна здесь .
- Проект ЭРОС
- E , язык программирования, основанный на обеспечении безопасности ( ERights.org ).
- Марк С. Миллер, Ка-Пинг Йи, Джонатан Шапиро. Разрушение мифов о возможностях , Технический отчет SRL2003-02, Лаборатория системных исследований, Университет Джонса Хопкинса. Доступно онлайн.
- Компьютер Cambridge CAP , Леви, 1988 г.
Дальнейшее чтение [ править ]
- Адресация на основе возможностей : Теодор А. Линден (декабрь 1976 г.). «Структуры операционной системы для поддержки безопасности и надежного программного обеспечения». Обзоры вычислительной техники ACM . 8 (4): 409–445. дои : 10.1145/356678.356682 . hdl : 2027/mdp.39015086560037 . ISSN 0360-0300 . S2CID 16720589 .
- Ли Гонг , Безопасная система возможностей на основе идентификации , sp, с. 56, 1989 г. Симпозиум IEEE по безопасности и конфиденциальности, 1989 г.
- Адресация на основе возможностей
- Аппаратная реализация адресации на основе возможностей.
- Реализация возможностей на PDP-11/45
- Поддержка IBM System/38 для адресации на основе возможностей
- EROS: система быстрых возможностей
«Возможности» POSIX в Linux:
- Возможности и файлы POSIX
- Возможности файлов POSIX: использование возможностей root
- Как сделать root непривилегированным
- Проблемы безопасности и новые риски, связанные с возможностями файлов POSIX.
- Страница руководства Linux для «capabilities(7)»
- Работа с возможностями Linux