Описание
Паттерн Defer to Kernel
предполагает использование преимущества контроля разрешений на уровне ядра ОС.
Целью этого паттерна является четкое отделение функциональности, требующей повышенных привилегий, от функциональности, не требующей повышенных привилегий, с помощью механизмов, доступных на уровне ядра ОС. Использование механизмов ядра позволяет не реализовывать новых средств для арбитража решений безопасности на уровне пользователя.
Альтернативные названия
Policy Enforcement Point (PEP)
, Protected System
, Enclave
.
Контекст
Паттерн Defer to Kernel
применим, если система имеет следующие характеристики:
Проблема
В условиях разделения функциональности по разным процессам с разным уровнем привилегий необходимо проверять привилегии при выполнении запроса от одного процесса к другому. Выполнять такие проверки и выдавать разрешения должен доверенный код, минимально подверженный атакам. Доверенность прикладного кода почти всегда под вопросом как в силу его объема, так и в силу его направленности на реализацию функциональных требований.
Решение
Отделить привилегированную функциональность и данные от непривилегированных на уровне процессов и отдать ядру ОС контроль межпроцессных взаимодействий (IPC) с проверкой прав доступа при запросе функциональности или данных, требующих повышенных привилегий, а также с проверкой общего состояния системы и состояний отдельных процессов в момент запроса.
Структура
Работа
Процесс-1
хочет запросить привилегированную функциональность или данные у Процесса-2
, используя IPC.Процесса-1
.Рекомендации по реализации
Для того чтобы конкретная реализация паттерна работала безопасно и надежно, необходимо следующее:
Необходимо обеспечить полную и гарантированную изоляцию процессов.
Абсолютно все IPC-взаимодействия должны контролироваться ядром.
Необходимо обеспечить доверенность ядра, его собственную защиту от компрометации.
Требуется определенный уровень гарантий безопасности и надежности в отношении ядра.
Необходимо, чтобы разрешения о доступе вычислялись на уровне ОС, а не были реализованы в прикладном коде.
Для этого, в частности, необходимо предоставить инструменты для описания политик доступа, чтобы политики безопасности были отделены от бизнес-логики.
Особенности реализации в KasperskyOS
Ядро KasperskyOS гарантирует изоляцию процессов и представляет собой Policy Enforcement Point (PEP).
Связанные паттерны
Паттерн Defer to Kernel
является частным случаем паттернов Distrustful Decomposition и Policy Decision Point. Паттерн Policy Decision Point
определяет абстрактный процесс, перехватывающий все запросы к ресурсам и проверяющий их на соответствие заданной политике безопасности. Специфика паттерна Defer to Kernel
в том, что эту проверку выполняет ядро ОС – это более надежное и портируемое решение, сокращающее время разработки и тестирования.
Следствия
Перенос ответственности за применение политики доступа на ядро ОС приводит к отделению политики безопасности от бизнес-логики (которая может быть очень сложна), что упрощает разработку и повышает портируемость за счет использования функций ядра ОС.
Кроме этого, появляется возможность доказать безопасность решения в целом, доказав правильность работы ядра. Сложность доказуемости правильной работы кода нелинейно растет с увеличением его размера. Паттерн Defer to Kernel
минимизирует объем доверенного кода – при условии, что ядро ОС невелико.
Примеры реализации
Пример реализации паттерна Defer to Kernel
: Пример Defer to Kernel.
Источники
Паттерн Defer to Kernel
подробно рассмотрен в следующих работах: