![]() |
Компании Mozilla, Fastly, Intel и Red Hat объединили свои усилия в развитии технологий, способствующих превращению WebAssembly в универсальную платформу для безопасного выполнения кода в любых инфраструктурах, операционных системах и устройствах. Для совместной разработки runtime и компиляторов, позволяющих применять WebAssembly не только в web-браузерах, образовано сообщество Bytecode Alliance.
Для создания поставляемых в формате WebAssembly переносимых программ, которые можно выполнять вне браузера, предлагается использовать API WASI (WebAssembly System Interface), предоставляющий программные интерфейсы для прямого взаимодействия с операционной системой (POSIX API для работы с файлами, сокетами и т.п.). Отличительной особенностью модели выполнения приложений, использующих WASI, является запуск в sandbox-окружении для изоляции от основной системы и применение механизма безопасности на основе управления возможностями - для действий с каждым из ресурсов (файлы, каталоги, сокеты, системные вызовы и т.п.) приложению должны быть даны соответствующие полномочия (предоставляется только доступ к заявленной функциональности). Одной из целей созданного альянса является решение проблемы распространения современных модульных приложений, имеющих большое число зависимостей. В подобных приложениях каждая зависимость может быть потенциальным источником уязвимостей или атак. Получение контроля за зависимостью позволяет получить контроль и за всеми связанными с ней приложениями. Доверие к приложению автоматически подразумевает наличие доверия и ко всем зависимостям, но зависимости зачастую разрабатываются и сопровождаются посторонними командами, деятельность которых невозможно проконтролировать. Участники Bytecode Alliance намерены подготовить целостное решение для безопасного выполнения WebAssembly-приложений, изначально не заслуживающих доверия. Для защиты предлагается использовать концепцию нанопроцессов, в которых каждый модуль зависимости выделяется в отдельно изолированный WebAssembly-модуль, полномочия которого задаются в привязке только к этому модулю (например, библиотека для обработки строк не сможет открыть сетевой сокет или файл). В отличие от разделения на процессы, WebAssembly-обработчики являются легковесными и почти не требуют дополнительных ресурсов - взаимодействие между обработчиками не сильно медленнее вызова обычных функций. Разделение может производиться не только на уровне отдельных модулей, но и на уровне групп модулей, которым, например, необходима работа с общими областями памяти Запрашиваемые полномочия смогут определяться как на уровне самих зависимостей, так и делегироваться зависимостям по цепочке родительскими модулями (ресурсы в WASI ассоциируются со специальным типом файловых дескрипторов - capability). Например, модулю может быть делегирована возможность обращения к определённому каталогу и системным вызовам, и в случае компрометации инфраструктуры разработки модуля или выявления уязвимости, при атаке доступ будет ограничен лишь этими ресурсами. Декларирование ресурсов создателями модулей может стать индикатором подозрительной активности, например, когда модуль для обработки текста запрашивает полномочие на открытие сетевого соединения. Изначально заданные полномочия проверяются и в случае их изменения загрузка зависимости отвергается до обновления локальной сигнатуры модуля. Для совместной разработки под крыло Bytecode Alliance переведено несколько связанных с WebAssembly проектов, ранее обособленно развиваемых компаниями-учредителями альянса:
|
| Время: 19:53 |