Жуан Мартинс (Joao Martins) из компании Oracle предложил (https://lkml.org/lkml/2019/2/20/876) для обсуждения разработчиками ядра Linux набор патчей, добавляющий в гипервизор KVM возможности запуска немодицированных гостевых систем Xen в режиме HVM c использованием всех уже имеющиеся бэкендов (https://wiki.xenproject.org/wiki/BackendDriver) (драйверы на стороне хост-окружения (Dom0), применяемые для обеспечения работы гостевой ОС) и фронтэндов (https://wiki.xenproject.org/wiki/FrontendDriver) (драйверы на стороне гостевой ОС (DomU) для взаимодействия с бэкенд-драйверами хост-окружения, например драйверы сетевой, графической и дисковых подсистем).В KVM поддержка гостевых систем Xen может оказаться полезной для переноса существующих образов гостевых систем из инфраструктур на базе Xen или для создания полигонов для тестирования и разработки гостевых систем для Xen, а также для использования имеющихся паравиртуальных драйверов (PV) Xen. На стороне гипервизора реализация напоминает подход, применённый (http://www.linux-kvm.org/images/6/6a/HyperV-KVM.pdf) в KVM для запуска вложенных виртуальных машин HyperV. На стороне бэкенда предлагается использовать штатные драйверы Xen.
В отличие от развивавшегося около 10 лет назад модуля xenner (https://www.linux-kvm.org/images/5/50/KvmForum2008%24kd...), обеспечивающего эмуляцию Xen Dom0 через KVM, в предложенном наборе патчей обеспечена возможность применения существующих паравиртуальных драйверов Xen (вместо полной эмуляции оборудования, для ввода/вывода, обработки прерываний и взаимодействия с оборудованием на стороне гостевой системы применяются специальные драйверы, работающие через бэкенд-драйверы хост-системы). Более того, кроме бэкнд и фронтэнд драйверов Xen для управления можно использовать штатный инструментарий Xen, так как в предложенных для KVM патчах воплощён необходимый для их работы UABI. Например, можно запускать немодифицированные версии xenstored, xenstore-list и xenstore-read.
Патчи разбиты на две основные части:
- Код для поддержки Xen HVM ABI, позволяющий загружать гостевые системы в режиме HVM без применения на стороне гостевой системы паравиртуализированных драйверов.
- Код для поддержки паравиртуальных (PV) драйверов, обеспечивающий перенаправление гипервызовов, эмулируя поведение PV бэкендов Xen, и реализующий специфичные для Xen механизмы для работы с разделяемой памятью и каналами для уведомления о наступлении различных событий.
Дополнительно можно отметить выявление (https://www.openwall.com/lists/oss-security/2019/02/18/2) трёх уязвимостей в KVM, которые были исправлены в обновлениях ядра Linux 4.20.8, 4.19.21, 4.14.99 и 4.9.156:
- CVE-2019-7222 (https://bugs.chromium.org/p/project-zero/issues/detail?id=1759) - утечка памяти, позволяющая в гостевой системе, запущенной с использованием вложенной виртуализации, получить доступ к отрывкам памяти ядра хост-системы. Проблема вызвана отсутствием очистки памяти перед использованием в структуре kvm_inject_page_fault;
- CVE-2019-7221 (https://bugs.chromium.org/p/project-zero/issues/detail?id=1760) - возможность обращения к уже освобождённой области памяти (use-after-free) в коде эмуляции таймера vmx. Уязвимость может быть эксплуатирована из гостевой системы, запущенной с использованием вложенной виртуализации, и потенциально может привести к выполнению своего кода на стороне хост-системы;
- CVE-2019-6974 (https://bugs.chromium.org/p/project-zero/issues/detail?id=1765) - установка файлового дескриптора устройства до создания ссылки на него может применяться для создания условий use-after-free и повышения своих привилегий в системе. Проблему можно эксплуатировать на стороне хоста, при наличии у пользователя доступа к /dev/kvm.
URL: https://lkml.org/lkml/2019/2/20/876
Новость: https://www.opennet.ru/opennews/art.shtml?num=50190