VMScape and why Xen dodged it
Новая атака VMScape от ETH Zürich использует уязвимости предсказателя переходов в процессорах AMD Zen 4 и Zen 5 для утечки данных между виртуальными машинами в облачных средах. Она успешно работает против гипервизоров KVM и VMware, позволяя вредоносной гостевой VM атаковать компоненты пользовательского пространства, такие как QEMU, и извлекать конфиденциальную информацию. Это очередное проявление проблем с изоляцией в современных CPU, оптимизированных для производительности.
Xen оказался неуязвим благодаря своей микроядерной архитектуре, где гипервизор минимален, а все дополнительные сервисы, включая эмуляцию устройств, вынесены в отдельную виртуальную машину Dom0. Это решение, принятое два десятилетия назад, сократило поверхность атаки и предотвратило воздействие VMScape на критически важные компоненты. Таким образом, архитектурный выбор Xen обеспечил встроенную защиту без необходимости экстренных исправлений, в отличие от KVM и VMware.
Комментарии (22)
- Архитектура Xen на микроядре с изолированным Dom0 ограничивает утечку данных при атаке vmscape только процессами внутри самого Dom0, что снижает риски.
- В отличие от KVM, где эмуляция оборудования происходит в пользовательском пространстве хоста, в Xen управление и эмуляция выделены в отдельный Dom0, что обеспечивает дополнительный уровень изоляции.
- Атака vmscape позволяет утечку данных между виртуальными машинами, но не затрагивает напрямую гипервизор Xen, так как он работает на более привилегированном уровне.
- Обсуждаются потенциальные преимущества микроядерных архитектур (например, seL4) для дальнейшего ограничения последствий побега из VM.
- Отмечается, что сама уязвимость остается на аппаратном уровне, и контейнеризация (LXC, SmartOS zones) не обязательно защищает от подобных атак.
Hypervisor 101 in Rust
Введение в гипервизоры на Rust
1. Введение
- Предварительные требования
- Цели курса
- Мотивация
- Как достигаются цели
- Что вы изучите
- Дизайн фаззера
- Дизайн гипервизора
- Что этот курс НЕ охватывает
- Демо: фаззер на основе гипервизора
- Зачем использовать гипервизор для фаззинга
- Приложения UEFI
- Язык Rust
- Классификация гипервизоров
- Гипервизор vs хост, ВМ vs гость
- Типы гипервизоров
2. Настройка и цикл работы гипервизора
- Включение: активация аппаратной виртуализации
- Настройка: создание структуры контекста гостя
- Переключение: запуск в гостевом режиме
- Возврат: переход обратно в режим хоста
- Обработка: эмуляция событий
- Цели и упражнения главы
- Тестирование с Bochs
- Подготовка к упражнениям
- E#1: Включение VMX/SVM
- E#2: Настройка VMCS/VMCB
- E#3: Конфигурация гостевого состояния
- Причины VM-выходов
- Альтернативный дизайн гипервизора
3. Виртуализация памяти
- Терминология
- Традиционная страничная организация x64
- Вложенная страничная организация
- Связь с гипервизором
- Ошибки страниц во вложенной организации
- Структурные элементы вложенной организации
- Сравнение традиционного и вложенного подходов
- Цели и упражнения главы
- E#4: Включение вложенной организации
- E#5: Построение структур и трансляция адресов
- E#6: Реализация copy-on-write и быстрого восстановления памяти
- Продвинутые темы
4. Интроспекция ВМ для фаззинга
- Проблема 1: Ненужное выполнение кода
Комментарии (13)
- Пользователи высоко оценивают качество и полезность материалов по созданию гипервизора и операционной системы, связывая их с предыдущей работой автора.
- Высказывается критика в адрес формата материалов (Markdown/HTML) и пожелание иметь возможность скачивания в PDF для архивации.
- Отмечается, что материал представляет собой конспект/слайды курса и может быть сложен для понимания без предварительных знаний или посещения занятий.
- Возникает дискуссия о практической ценности таких материалов для самообразования без наличия глубоких базовых знаний.
- Упоминается растущий интерес к теме создания гипервизоров, о чём свидетельствует частое появление подобных руководств.
- Предлагаются технические решения для создания PDF-версии (например, печать в PDF через браузер).
- В комментариях присутствует лёгкое обсуждение терминологии (значение слова "hypervisor") и личный опыт работы в данной области.
Hypervisor in 1k Lines
Гипервизор за 1000 строк
Практическое руководство по созданию минимального RISC-V гипервизора, способного загружать Linux. Продолжение книги «ОС за 1000 строк», но теперь на Rust и с нуля (type-1, bare-metal). Используем только важное: сторонние крейты экономят код.
Репозиторий: github.com/nuta/hypervisor-in-1000-lines
Лицензии: текст — CC BY 4.0, код — MIT.
Содержание:
0. Введение
- Старт
- Загрузка
- Hello World
- Менеджер памяти
- Режим гостя
- Страницы гостя
- Привет из гостя
- Сборка ядра Linux
- Запуск Linux
- SBI
- MMIO
- Прерывания
- Заключение
Комментарии (12)
- Демо-гипервизор на 1000 строк — интересная техническая игрушка, но без паравиртуальных драйверов и прочей инфраструктуры непригоден для реального использования.
- Чтобы запустить RISC-V гипервизор на x86, нужен QEMU, потому что это эмуляция другой архитектуры.
- Желающим увидеть «тот же объём, но на C» скидывают 500-строчный SimpleVisor и репозиторий kvmsample.
- В дискуссию вмешалась философия: «OS» можно уложить и в 5 строк EFI-кода, если не требовать от неё ничего, кроме «Hello, world».
Writing a Hypervisor in 1k Lines
Я написал учебник по созданию гипервизора с нуля за 1 000 строк кода: 1000hv.seiya.me. Это тип-1 гипервизор для 64-битного RISC-V с расширением H в QEMU. Подойдёт тем, кто уже прошёл OS in 1 000 Lines.
Код на стабильном Rust — без nightly. Сообщество Rust наконец-то добавило всё необходимое, включая inline-assembly.
Идея книги: гипервизор — это «обработчик событий»:
const vcpu = new VirtualCPU(memory);
while (true) {
try { vcpu.resume(); }
catch (e) { handle(e); } // MMIO, прерывания…
}
Он запускает гостевую ОС, перехватывает выходы из VM и возвращается. Это позволяет строить не только классические ОС, но и безопасные среды вроде gVisor или Hyperlight.
Книга уже доступна онлайн. Приятного кодинга!
Комментарии (9)
- RISC-V можно полностью виртуализировать методом «ловушка-и-эмуляция» без аппаратного расширения, но обход таблиц страниц будет медленным.
- @drob518 уточнил: обход таблиц страниц выполняется программно, а не аппаратно.
- @nerpderp82 спросил, можно ли использовать RVV для обхода таблиц страниц.
- @anchovy_ попросил литературу по гипервизорам; @dmitrygr дал ссылки на академическую теорию и практику VMware.
- @TZubiri посоветовал учиться по документации производителей и исходному коду, а не по университетским книгам.