Microsoft открыл Hyperlight, гипервизор для изоляции отдельных функций в приложениях

Компания Microsoft представила проект Hyperlight, развивающий гипервизор, предназначенный для встраивания в приложения с целью изолированного выполнения кода, не заслуживающего доверия или требующего особой защиты. Гипервизор оформлен в виде разделяемой библиотеки, обеспечивающей выполнение отдельных функций в легковесных виртуальных машинах (micro-VM) и организующей обмен данными с этими функциями. Код проекта написан на языке Rust и распространяется под лицензией Apache 2.0.

По сравнению с запуском традиционных виртуальных машин Hyperlight позволяет добиться низких задержек и минимальных накладных расходов. В Hyperlight задержки при создании виртуальных машин составляют 1-2 миллисекунды, что позволяет применять изоляцию на уровне запуска функций. Для сравнения запуск обычной виртуальной машины осуществляется не менее чем за 120 миллисекунд, а запуск изолированного sandbox-окружения для выполнения WebAssembly-кода при помощи Wasmtime runtime занимает 0.03 миллисекунды.

Для изоляции на платформе Linux поддерживается использование гипервизоров KVM и mshv (Microsoft Hypervisor в Azure Linux), а на платформе Windows - WHP (Windows Hypervisor Platform) и WSL2 (Windows Subsystem for Linux 2) c KVM. Платформа macOS пока не поддерживается. Отдельное ядро и операционная система в виртуальной машине не используются. Начинка для виртуальной машины формируется в форме самодостаточной загружаемой программы, включающей код запускаемой функции в обвязке из runtime и специализированного минимального ядра. В виртуальной машине используется единый линейный фрагмент памяти и назначается виртуальный CPU, без маппинга устройств и без разделения на процессы.

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

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

В будущем Microsoft планирует передать проект некоммерческой организации Cloud Native Computing Foundation (CNCF) для совместного развития на нейтральной площадке, не зависящей от отдельных производителей. Организация CNCF работает под крылом Linux Foundation и курирует разработку таких проектов, как Kubernetes, etcd, Cilium, Containerd, cri-o, Flux, Helm, Istio и gRPC.