Microsoft представила открытый проект гипервизора Hyperlight. Решение предназначено для встраивания в приложения с целью изолированного выполнения кода, не заслуживающего доверия или требующего особой защиты. Исходный код проекта написан на языке Rust и опубликован на GitHub под лицензией Apache 2.0.
Гипервизор оформлен в виде разделяемой библиотеки, обеспечивающей выполнение отдельных функций в легковесных виртуальных машинах (micro-VM) и организующей обмен данными с этими функциями.
По информации OpenNET, по сравнению с запуском традиционных виртуальных машин, 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.
Источник: habr.com