Во FreeBSD разрабатывается механизм изоляции, аналогичный plegde.

Было объявлено о предложении реализовать механизм изоляции приложений для FreeBSD , напоминающий системные вызовы foldde и unveil, разработанные проектом OpenBSD.

Изоляция в плегде осуществляется путем запрета доступа к системным вызовам, которые не используются приложением, и раскрытия путем выборочного открытия доступа только к определенным путям к файлам, с которыми приложение может работать. Для приложения формируется своего рода белый список системных вызовов и путей к файлам, а все остальные вызовы и пути запрещены.

Разница между `pledge` и `unveil` , разработанными для FreeBSD , сводится к предоставлению дополнительного уровня , позволяющего изолировать приложения с минимальными изменениями в их коде или без них. Следует помнить, что в OpenBSD `pledge` и `unlock` стремятся к тесной интеграции с базовой средой и реализуются путем добавления специальных аннотаций к коду каждого приложения.

Для упрощения организации защиты фильтры позволяют избежать детализации на уровне отдельных системных вызовов и манипулировать классами системных вызовов (ввод/вывод, чтение файла, запись файла, сокеты, ioctl, sysctl, запуск процессов и т.д.) . Функции ограничения доступа могут вызываться в коде приложения по мере выполнения определенных действий, например, доступ к сокетам и файлам может быть закрыт после открытия нужных файлов и установления сетевого соединения.

Автор порта folding and unfolding для FreeBSD стремится обеспечить возможность изоляции произвольных приложений. Для этого он предлагает утилиту curtain, которая позволяет применять к приложениям правила, определенные в отдельном файле. Предлагаемая конфигурация включает файл с основными настройками, определяющими классы системных вызовов и типичные пути к файлам, специфичные для определенных приложений (работа со звуком, сетью, логированием и т. д.), а также файл с правилами доступа для конкретных приложений.

Утилита занавеса может использоваться для изоляции большинства утилит, серверных процессов, графических приложений и даже целых сеансов рабочего стола, которые не были изменены. Поддерживается совместное использование занавеса с механизмами изоляции, предоставляемыми подсистемами Jail и Capsicum.

Возможна также вложенная изоляция , при которой запущенные приложения наследуют правила, установленные основным приложением, дополняя их отдельными ограничениями. Некоторые операции ядра (инструменты отладки, межпроцессное взаимодействие POSIX/SysV, PTY) дополнительно защищены барьерным механизмом, который предотвращает доступ к объектам ядра, созданным процессами, отличными от текущего или основного процесса.

Процесс может настроить собственную изоляцию, вызвав curtainctl или используя функции pledge() и unveil(), предоставляемые библиотекой libcurtain, аналогично функциям в OpenBSD. Параметр sysctl 'security.curtain.log_level' используется для отслеживания блокировок во время работы приложения.

Доступ к протоколам X11 и Wayland включается отдельно указанием опций "-X"/"-Y" и "-W" при запуске шторки, но поддержка графических приложений еще недостаточно стабилизирована и имеет ряд нерешенных вопросов ( проблемы появляются в основном при использовании X11, да и поддержка Wayland гораздо лучше). Пользователи могут добавлять дополнительные ограничения, создавая локальные файлы правил (~/.curtain.conf). Например,

Реализация включает в себя модуль ядра mac_curtain для обязательного контроля доступа (MAC), набор патчей для ядра FreeBSD с реализацией необходимых драйверов и фильтров, библиотеку libcurtain для использования plegde и раскрытых функций в приложениях, служебную шторку, настройку шоу файлы, набор тестов и патчи для некоторых программ пользовательского пространства (например, чтобы использовать $TMPDIR для унификации работы с временными файлами). По возможности автор старается минимизировать количество изменений, требующих патчинга ядра и приложений.

Наконец, если вас интересует более подробная информация, вы можете найти ее по следующей ссылке.


Добавить в качестве предпочтительного источника в Google