The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Представлен TinyKVM для виртуализации на уровне отдельных процессов

17.03.2025 12:26

Компания Varnish Software, разрабатывающая системы для построения сетей доставки и кэширования контента, представила открытый проект TinyKVM, развивающий инструментарий для изоляции выполнения отдельных процессов при помощи гипервизора KVM. Целью проекта заявлено создание самой быстрой системы sandbox-изоляции отдельных процессов, использующей аппаратную виртуализацию. Код проекта написан на языках C и С++, и распространяется под лицензией GPLv3 (для не готовых выполнять требования GPLv3 предоставляется коммерческая лицензия).

TinyKVM рассчитан на изолированный запуск любых консольных программ для Linux с производительностью, близкой к обычному выполнению. Накладные расходы на вызов каждого системного вызова составляют около 2 микросекунд. В качестве примера применения проекта упоминается дополнительная изоляция процессов в системах кэширования и обработки web-запросов. TinyKVM разработан для замены эмулятора libriscv, применяемого для изоляции обработки каждого web-запроса в платформе Varnish. Дополнительно создан вариант библиотеки libvmod, позволяющий выполнять модули к Varnish с использованием TinyKVM.

При запуске при помощи TinyKVM машинный код программ выполняется без эмулирующих прослоек на CPU и ограничивается при помощи API гипервизора KVM, что позволяет исключить накладные расходы и добиться производительности близкой к выполнению без виртуализации. Основные возможности TinyKVM:

  • Ограничение максимального времени исполнения. Программа может быть принудительно остановлена после истечения таймаута, без вызова обработчиков сигналов и потоков.
  • Ограничение потребления памяти.
  • Возможность ответвления (fork) неинициализированных экземпляров виртуальных машин от одного инициализированного экземпляра изолированной программы. Копии виртуальных машин создаются в режиме copy-on-write, что позволяет существенно экономить память, храня только один экземпляр общих данных.
  • Ответвлённые процессы могут сбрасываться в предыдущее состояние (например, ответвлённый обработчик http-запросов может без перезапуска возвращаться в исходное состояние после обработки каждого запроса). Экземпляр изолированного процесса также может быть сброшен до состояния другой виртуальной машины, а не той из которой он был ответвлён, но накладные расходы в этому случае будут выше так как потребуется изменение таблицы страниц памяти.
  • Возможность создания статических страниц памяти во время инициализации, пригодных даже для изощрённых runtime, например, как в языке Go. В этом случае изменение допускается только для страниц, находящихся в режиме copy-on-write.
  • Поддержка удалённой отладки при помощи GDB. Возможна отладка на лету с возобновлением исполнения.

Гостевое окружение TinyKVM образует урезанное ядро, защищённого от изменений, собранное с включением зашиты страниц памяти и использующее инструкции SMAP (Supervisor Mode Access Prevention) и SMEP (Supervisor Mode Execution Prevention) для дополнительной изоляции между ядром и пространством пользователя. Ядро использует большие страницы памяти (4k, hugepage) для повышения производительности. Вызываемые программами системные вызовы перехватываются эмулятором и перенаправляются в хост-окружение (задержка на обработку и трансляцию эмулируемого вызова составляет около 2 микросекунд). В самой виртуальной машине не используются какие-либо драйверы, ввод/вывод и виртуальные устройства.



  1. Главная ссылка к новости (https://info.varnish-software....)
  2. OpenNews: Выпуск HTTP-акселератора Varnish 6.0
  3. OpenNews: Компании Intel и Hyper представили проект Kata Containers
  4. OpenNews: Amazon открыл код легковесной платформы виртуализации Firecracker
  5. OpenNews: Выпуск Kata Containers 3.4 с изоляцией на основе виртуализации
  6. OpenNews: Выпуск CRIU 4.0, системы для сохранения и восстановления состояния процессов в Linux
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62898-tinykvm
Ключевые слова: tinykvm, kvm, virtual
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (66) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, X512 (?), 13:17, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +13 +/
    Не понимаю зачем это нужно когда обычные процессы со своим адресным пространством и потоками -- это по сути и есть мини виртуальные машины.
     
     
  • 2.4, Аноним (4), 13:22, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +17 +/
    Программы все еще работают слишком быстро. Надо срочно обвязать в новую прослойку.
     
  • 2.8, myster (ok), 13:55, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А мне это видится, как замена тормознутой и ужасной JVM.
    Если в вебе уже есть WebAssembly, то это для бека неплохая замена Джаве.
     
     
  • 3.25, sena (ok), 14:56, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    не понял, почему это замена Яве? это же просто ещё одна система виртуализации
     
     
  • 4.38, myster (ok), 15:25, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Обе технологии - VM заточенные под процесс.
    JVM через JNI позволяет запускать программы внутри свой VM на других языках, а не только Java-программы. Так что сходство у технологий есть.
     
     
  • 5.49, Аноним (49), 16:24, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    у коровы и яишницы тоже есть сходство
     
     
  • 6.52, myster (ok), 17:13, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    нет, ты что, у коровы и яичницы гораздо меньше сходства.
     
  • 5.67, Антон (??), 18:34, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Java через JNI запускает любой код за пределами VM.
    Код на C или C++ или ассемблере может вмешаться и в память приложений.
    И нарушить работу самой Java машины, деинсталлировать еë, и поставить Doom.
     
     
  • 6.71, Аноним (71), 19:08, 17/03/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.10, Анонизмус (?), 14:21, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нет, KVM обеспечивает лучшую изоляцию. KVM минимально вмешивается в работу нагрузки и он построен на хардварных методах виртуализации, поддерживает шифрование памяти, лучше производительность для сложных нагрузок. Namespaces и cgroups же это полностью программная виртуализация, больше накладные расходы, и отсюда же большая уязвимость. Ну и самое главное неправильно настроенные контейнеры могут стать огромной дырой в безопасности, с KVM практически не возможно ошибиться из-за большей простоты.
     
     
  • 3.26, sena (ok), 14:57, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Непонятно, зачем изолировать отдельный процесс. Можно конкретный пример из обычной жизни, но толкьо без экзотики.
     
     
  • 4.32, Incorporated (?), 15:09, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    "системы для построения сетей доставки и кэширования контента" - для этого и пилят. DRM?
     
  • 3.33, Аноним (33), 15:15, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Какие вы неграмотные вещи пишете...

    Cgroups и namespaces вообще не имеют никаких накладных расходов, это просто ещё один int в таблице процессов.

    И виртуализацией они тоже не являются ни в каком виде.

     
     
  • 4.73, Wwwww (-), 19:15, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Дополню, при трансляции виртуального адреса в физический в виртуальной машине сначала адрес транслируется через 4-ре таблицы в виртуальной машине, а затем полученный адрес транслируется снова через 4-ре таблицы, но уже на хосте. Рост накладных расходов не просто в два раза, а в разы. Конечно в CPU есть ITLB1, DTLB1 и т.п. для кеширования адреса к которому часто обращаются, но чем больше виртуалок тем бестрее кеш "выедается" и всё это всё больше и больше тормозит.
     
  • 4.76, Анон12345 (?), 19:22, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Cgroups и namespaces вообще не имеют никаких накладных расходов, это просто ещё один int в таблице процессов.

    И правда:

    > Какие вы неграмотные вещи пишете...

     
  • 3.75, anonymous (??), 19:20, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Накладые расходы как раз много меньше.
     
  • 2.11, Аноним (11), 14:23, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    там же написано. всякие ограничения, можешь заморозить\восстановить состояния. в целом нужно для запуска приложений, которым не доверяешь.
     
     
  • 3.28, sena (ok), 14:59, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > в целом нужно для запуска приложений, которым не доверяешь.

    То есть это будет конкурент для  flatpak и snap?

     
     
  • 4.34, куклкуксан (?), 15:16, 17/03/2025 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 3.83, Аноньимъ (ok), 20:33, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Они Erlang изобрели?
     
  • 2.47, Соль земли (?), 16:22, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Твои проблемы, если не понимаешь. Такого ответа ещё было. Пользуйся.
     

  • 1.5, HyC (?), 13:41, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Сперва всю изоляцию с сегментной адресацией и тремя уровнями привилегий загнали в плоское адресное пространство и два уровня привилегий, поделив это друг от друга только страничным механизмом, героически сделали этот горбыль легаси, теперь стали изобретать этот велосипед обратно.
     
     
  • 2.74, mma (?), 19:18, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Сперва всю изоляцию с сегментной адресацией и тремя уровнями привилегий

    От первого ушли вприпрыжку и без сожаления. Забавно было бы посмотреть как надо изгаляться на 16Гб с сегментной адресацией.

    А последним и так не пользовались, слишком высоки накладные расходы, хотябы на переключение контекстов.

     

  • 1.7, Аноним (-), 13:51, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > разрабатывающая системы для построения сетей доставки и кэширования контента

    Интересно, как они собираются зарабатывать с такой-то лицензией.

    > Код проекта написан на языках C и С++

    Жду новостей "выполнение кода за пределами гостевой системы из-за выхода за пределы буфера"))

     
     
  • 2.13, Онанимус (?), 14:24, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Тоже про c и c++ в самом начале новости так подумал и увидел твой коммент. Тут почти каждая первая новость про уязвимость связана с переполнением буфера.
     
  • 2.16, Аноним (16), 14:31, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Как и многогие другие комерсы - двойным лицензированием. Они собственники этого кода, поэтому так могут.
    "Licensing
    TinyKVM and VMOD-TinyKVM are released under a dual licensing model:

    Open Source License: GPL‑3.0 (see LICENSE).
    Commercial License: Available under terms controlled by Varnish Software."

     
     
  • 3.23, Аноним (-), 14:51, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну тогда это следовало бы отразить в новости)
    А то слегка вводит в заблуждение.

    ps отправил запрос на изменение новости

     
  • 2.54, Аноним (54), 17:23, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Интересно, как они собираются зарабатывать с такой-то лицензией.

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

     
  • 2.56, ананим.orig (?), 17:31, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> разрабатывающая системы для построения сетей доставки и кэширования контента
    > Интересно, как они собираются зарабатывать с такой-то лицензией.

    Зарабатывать с сетей доставки и с кода для сетей доставки - разные вещи.

    >> Код проекта написан на языках C и С++
    > Жду новостей "выполнение кода за пределами гостевой системы из-за выхода за пределы буфера"))

    А что вам ещё остаётся то?
    kvm то давно в ведре.

     

  • 1.9, Ося Бендер (?), 14:10, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему не на Раст, я спрашиваю?
     
     
  • 2.12, Анонизмус (?), 14:23, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Первый раз не 3,14Раст.
     
  • 2.15, Аноним (15), 14:27, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    потому что C/C++ можно будет скомпилировать с помощью zig
     
     
  • 3.18, Аноним (16), 14:34, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Но можно и не извращаться, а скомпилировать с помощью GCC.
     
  • 2.22, _kp (ok), 14:50, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вам безопастность или производительность и быстрый запуск?
    А безопасный вариант? Было б с чего переписать, переписальщики сами найдутся.
     
  • 2.24, Анонем (?), 14:53, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Вот на Раст
    https://www.opennet.me/opennews/art.shtml?num=62226
     
  • 2.27, Incorporated (?), 14:57, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что докер и кубернетес - на голэнге.
     
  • 2.50, Соль земли (?), 16:25, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Видимо по той же причине, почему на KVM.
     
  • 2.70, Аноним (70), 18:49, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Почему не на Раст, я спрашиваю?

    Почему не Растёт?

     

  • 1.17, Аноним (49), 14:33, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Почему не раскошелились на отдельный комп для каждого процесса?
     
  • 1.20, onanim (?), 14:37, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > TinyKVM runs static Linux ELF programs.

    не очень понятно, зачем оно нужно, если всякий мутный бинарный софт, который хотелось бы запустить в виртуалке для безопасности основной системы, поставляется в виде динамических программ, или в виде AppImage или flatpak, не очень мутный софт с доступными исходниками задолбаешься конпелять статично, а для оставшихся трёх с половиной софтин на Go, которые можно сконпелировать статично, никакая виртуалка нафиг не нужна.

     
     
  • 2.40, myster (ok), 15:40, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Тут ответ, хоть и про другую систему и технологию пишут
    https://www.qubes-os.org/faq/#why-is-os-security-important

    Идея в том, чтобы ОС не была коммунальной квартирой, а была изолированной, для программ.

    Что касается статических и динамических программ, думаю это не проблема, просто для TinyKVM нужны будут базовые образы, содержащие в себе нужные библиотеки, как в образах контейнеров.  

     
     
  • 3.51, Аноним (51), 17:10, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > чтобы ОС не была коммунальной квартирой, а была изолированной, для программ.

    кольца защиты и страничная трансляция это всегда делали. Дак что именно сабж предложил?

     
     
  • 4.55, Аноним (54), 17:27, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > что именно сабж предложил?

    Удобный и доступный интерфейс для всего этого. Это куда важнее языка реализации и использованных технологий.

     

  • 1.29, Аноним (29), 15:01, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Ура, Товарищи! То что я более 10 лет назад сформулировал как "нужно сделать" - сделали (вообще-то сделали раньше, но QEMU для юзерспейса вообще не создавался как песочница).
     
     
  • 2.37, Аноним (37), 15:25, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Сформулировал, а потом 10 лет лежал на диване в ожидании? Бока не намял?
     
     
  • 3.41, Аноним (41), 15:43, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Он не мял бока и с телевизором разговривал, а разговаривал с Ним и формулировал то, что жалкие людишки сделают через 100, 1000 и даже 1_000_000 лет. Такой вот он скромный и незаметный прыщ-труженик.
     
     
  • 4.78, Аноним (-), 20:16, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Как радостно, что есть люди, способные это понять, и в то же время как грустно, что понял именно ты и что теперь тебя придётся убрать...
     
  • 3.53, Аноним (53), 17:21, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Просто системное программирование - не мой профиль. Но ежу понятно - для сандбоксинга надо:
    1. порвать любую прямую связь программы с ОС
    2. в непрямую связь вставить агрессивный фильтр

    Пока у нас сисколлы обрабатываются ядром напрямую это невозможно. Всегда может оказаться возможность поломать ядро через манипуляцию структурами данных в сисколлах.

    Отсюда простой вывод: с появлением аппаратной виртуализации ring 2,3 изжили себя. Ограничения на инструкции? Зачем, если можно каждой программе по своему ring 0 выдать. Ограничения на доступ к памяти? Зачем, если можно каждому процессу всё полностью своё адресное пространство выдать.

     

  • 1.30, Аноним (30), 15:01, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >В самой виртуальной машине не используются какие-либо драйверы, ввод/вывод и виртуальные устройства.

    Надо понимать, что процессы внутри этой ВМ не смогут писать логи - IO отсутствует.
    Это решение для повышения безопасности? Я не ослышался?

     
     
  • 2.35, Аноним (33), 15:17, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Можно писать логи в сокет, видимо.
     
  • 2.39, Аноним (37), 15:26, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    логи не повышают безопасность. особенно когда их никто не читает
     
     
  • 3.44, Аноним (30), 16:12, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >логи не повышают безопасность

    Настоящее икспертное мнение.
    >особенно когда их никто не читает

    Почитай в википедии про SIEM

     
     
  • 4.48, Аноним (49), 16:23, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Логи сами себя на анализируют. SIEM - это уже не логи.
     

  • 1.31, Аноним (31), 15:02, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    На сишке песочница? Это же как бэкдор в firewall.
     
  • 1.36, Аноним (29), 15:21, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я почитал блог и глянул исходник.

    Это не песочница. Это просто stepping stone для TEE, смысл простой: засовывается любая обычная ELF-программа в TEE без всякого геморроя с анклавами, и их API - это всё на себя берёт TinyKVM. Просто на данном этапе TEE не реализовано.

    Фильтра IO нет никакого. Это не для безопасности хоста от вредоносных приложений делалось. Это делается для "защиты" приложений от хостера. В кавычках - потому что держится такая "защита" на честном слове. Надо будет поломать очередной силк - просто придут к Intel - и аттестация будет подделана для конкретной физической машины - той, что у хостера стоит), когда быдло будет продолжать отведывать DеRьMа и наслаждаться им.

    Для безопасности от хостера - только гомоморфная криптография.

     
  • 1.42, Аноним (42), 15:44, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Писец. Изоляция процессов в Linux настолько убога что нужно вот такое вот.
     
  • 1.43, Аноним (43), 16:11, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Проснулся робот-гомобот подтирщик-ассенизатор. Прошёлся по темам.
     
     
  • 2.46, Аноним (49), 16:21, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Подтирщик никогда не спит и готов к твоим услугам.
     
     
  • 3.60, Аноним (60), 17:59, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Почему же не подтирает? Уже поднавалили.
     

  • 1.57, Аноним (57), 17:45, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Потихоньку догоняют фряху.
     
     
  • 2.81, Аноним (81), 20:24, 17/03/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну что же ты так по больному-то, бессердечный человек!
    Plan 9 как догоняли - ты молчал (заметь: я не говорю что это плохо, что догоняли)
     

  • 1.68, YetAnotherOnanym (ok), 18:43, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Накладные расходы на вызов каждого системного вызова составляют около 2 микросекунд

    Это считается мало?

     
  • 1.69, Ivan7 (ok), 18:44, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Зачем это в реальной жизни???
     
  • 1.85, 12yoexpert (ok), 21:16, 17/03/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > для не готовых выполнять требования GPLv3 предоставляется коммерческая лицензия

    как это обычно работает, если в проект контрибьютили сторонние люди? они не имеют права на часть прибыли от продаж коммерческой лицензии?

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру