Безопасность

Ключевой момент системы безопасности «Сивелькирии» состоит в том, что каждый модуль имеет лишь те разрешения, которые нужны ему для выполнения его работы. При этом само понятие разрешения оказывается более гранулированным, чем в других операционных системах: речь идёт о выполнении конкретных операций над конкретными типами данных. Это существенно ограничивает возможности вредоносных программ.

Например, модуль, отвечающий за сортировку и фильтрацию списка диалогов в мессенджере, очевидно, имеет доступ к информации о времени получения последнего сообщения в каждом из диалогов и о разбиении авторов сообщений на группы в списке контактов. В то же время, даже имея ссылку на объект диалога, модуль не сможет извлечь из него произвольную информацию (такую как история сообщений), поскольку для его задачи это не требуется. Модуль, осуществляющий отрисовку миниатюры диалога (с отображаемым на ней началом последнего сообщения) в списке, имеет доступ к последнему сообщению, но не к предпоследнему. Даже располагая этой информацией, он не сможет распорядиться ею по своему разумению, поскольку прав, необходимых для сохранения сообщения в файл или передачи по сети, у него нет (притом что мессенджер как целое, безусловно, имеет доступ и к файловой системе, и к сети). Обратиться к модулю, который мог бы сделать это для него, он тоже не сможет, поскольку это не требуется для выполнения его функции. Таким образом, возможных мест для внедрения вредоносного ПО становится существенно меньше, чем в классической схеме.

Это ограничение может выглядеть излишне строгим. Например, может показаться, что, если изначально для фильтра списка сообщений не был предусмотрен доступ к информации о канале, по которому было получено сообщение, то ввести такую фильтрацию позже будет нельзя. Это, однако, не так; напротив, максимальное ограничение простых типов побуждает разработчиков вводить более сложные типы на их основе: вместо абстрактного интерфейса «Фильтр сообщений» придётся использовать более конкретный «Фильтр сообщений по каналу связи», который реализует первый просто по определению и которому нужные разрешения, разумеется, даны. Такое уточнение приведёт к тому, что через более конкретный интерфейс с этим типом объекта можно будет эффективно работать из других контекстов. К примеру, при просмотре списка доступных подключений к сервисам обмена сообщениями абстрактная кнопка «Выбрать фильтр сообщений» будет выглядеть нелепо, тогда как контекстная команда «Показать все сообщения из этого источника», использующая данный тип объекта, придётся весьма к месту.

Права на создание исполняемых модулей есть всего у нескольких типов модулей: у тех, которые отвечают за развёртывание программ, полученных из репозиториев, и у компиляторов, которым требуется обеспечить возможность отладки собранных ими программ. Модификация однажды установленных компонентов не допускается (просто потому что те не являются файлами), хотя их замена возможна. Вся история создания и замены исполняемых модулей записывается.

Для каждого модуля, выполняемого на компьютере под управлением ОС «Сивелькирия», вычисляется хэш-сумма, позволяющая однозначно идентифицировать его, и данные передаются в центральный репозиторий. Если оказывается, что некоторый модуль начинает распространяться в обход официальных каналов (репозиториев), и число установок превышает необходимое для отладки (скажем, от десяти машин), модуль блокируется по хэшу независимо от способа, которым он попадал на компьютеры, а информация о его происхождении собирается (с согласия пользователей). Разумеется, существует механизм, позволяющий производить UAT-тестирование на большой аудитории (с распространением собранных модулей через репозитории).

В этом смысле сетевое взаимодействие между экземплярами «Сивелькирии» менее безопасно, поскольку для компьютера, к объектам которого производится обращение, не существует способа проверить, что на вызывающей стороне были пройдены все необходимые проверки прав модулей. Здесь, однако, срабатывают те же барьеры, что и в традиционных операционных системах: ограничения аккаунта пользователя, ограничения подключения с конкретной машины и так далее. Более того, «Сивелькирия» позволяет вводить ограничения на конкретные подключения по типам доступных данных и типам операций с ними, а поскольку «Критерий ограничения подключения» является лишь ещё одним интерфейсом операционной системы, такая настройка может быть максимально гибкой. Например, установка модулей при подключении с другого компьютера, скорее всего, будет заблокирована по умолчанию.

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

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

Случаи, когда уязвимость проявляется вне контекста конкретного модуля (а, например, только при взаимодействии двух определённых модулей), могут отслеживаться по тем же принципам.

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