
Проблема безопасности в прошивке гипервизора некоторых старых чипсетов Qualcomm
CVE-2022-22063 — это проблема безопасности в гипервизорной прошивке некоторых старых чипсетов Qualcomm. Незащищенный аппаратный компонент (так называемый «boot remapper») может быть использован для получения полного доступа на чтение/запись к гипервизору из модифицированной операционной системы (повышение привилегий). Эксплуатация проблемы тривиальна на затронутых платформах, поскольку не требуется знание конкретной версии прошивки (например, адресов или переменных).
Примечание: Хотя Qualcomm предоставила исправления клиентам (с достаточным временем для выпуска обновлений), многие затронутые устройства уже довольно стары и могут не получить исправление от вендора. Проблема может быть использована только из модифицированной или скомпрометированной операционной системы (с использованием другой проблемы безопасности). Поддержание операционной системы в актуальном и безопасном состоянии может быть достаточным, даже если прошивка уязвима.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HПроблема также была опубликована в Бюллетене безопасности Qualcomm за декабрь 2022 года.
Проблема зависит от комбинации аппаратного и программного обеспечения на затронутой цели:
hyp на внутреннем накопителе).APCS_BOOT_START_ADDR_NSEC), которая не защищена гипервизором и поэтому доступна для менее привилегированного ядра операционной системы (например, Linux).Существует несколько других чипсетов, которые, вероятно, имеют затронутое оборудование (например, MSM8909 и MSM8953), но у них нет отдельной прошивки гипервизора, которую можно было бы скомпрометировать.
Повышение привилегий: При уже скомпрометированном ядре операционной системы (например, Linux) проблема позволяет тривиально повысить привилегии до уровня гипервизора (EL1 -> EL2 на ARM). Вся память, управляемая гипервизором, может быть прочитана или записана. Это нарушает изоляцию различных доменов безопасности или виртуальных машин, управляемых гипервизором (если они есть, в зависимости от конфигурации).
(См. также: An introduction to Access Control on Qualcomm Snapdragon Platforms)
Безопасная загрузка: Большинство устройств Qualcomm, доступных в производстве, используют безопасную загрузку для предотвращения несанкционированной модификации прошивки. Прошивка криптографически подписана и проверяется цепочкой загрузки. Проблема позволяет модифицировать или даже полностью заменить загруженную прошивку гипервизора во время выполнения из модифицированной операционной системы (либо через официально поддерживаемую «разблокировку загрузчика», либо через другой эксплойт).
(См. также: Qualcomm Secure Boot and Image Authentication Technical Overview (v1.0) и (v2.0))
Примечание: Проблема была изначально обнаружена на платформе Qualcomm Snapdragon 410 (MSM8916). Некоторые из следующих объяснений могут быть специфичны для MSM8916, например:
Однако общая концепция применима аналогично ко всем затронутым платформам.
Архитектура ARMv8-A 64-bit определяет 4 уровня привилегий (exception levels, EL). Существуют отдельные уровни, которые обычно используются для приложений, ядер операционных систем и гипервизора:
ЦП переключается между уровнями во время исключений, например, из-за входящего прерывания. Также возможно переключение между некоторыми уровнями с помощью специальных инструкций, таких как Hypervisor Call (hvc).
(См. также: AArch64 Exception model)
Гипервизор может размещать одну или несколько виртуальных машин с отдельными ядрами операционных систем. Каждой виртуальной машине может быть предоставлено собственное представление памяти с помощью трансляции второго уровня (stage 2 translation). Все обращения к памяти из виртуальной машины проходят через два этапа трансляции: первый управляется (виртуальной) операционной системой, а второй — гипервизором. Память, используемая гипервизором или другими виртуальными машинами, может быть скрыта путем ее исключения из таблиц трансляции.
(См. также: AArch64 virtualization, AArch64 memory management)
Прошивка гипервизора Qualcomm работает в EL2 и использует трансляцию второго уровня для запрета доступа к памяти гипервизора из основного ядра операционной системы, работающего в EL1 (обычно Linux). Обратите внимание, что в этой конфигурации трансляция второго уровня в основном используется для защиты памяти, без трансляции адресов. Основная операционная система получает прямой доступ к большинству аппаратных компонентов в пространстве memory-mapped input/output (MMIO), например, к контроллеру SD или подсистеме камеры. Доступ к памяти, принадлежащей гипервизору/EL2 (hyp) и монитору безопасности/EL3 (часть tz), ограничен:
Boot remapper не связан с виртуализацией: он необходим во время начальной загрузки ядра ЦП. На этой аппаратной платформе ядра ЦП всегда начинают выполнение с адреса 0x0. Boot remapper — это дополнительный аппаратный компонент, встроенный вокруг ЦП, который перенаправляет первые 64 или 128 КиБ (0x00000 - 0x20000) в настраиваемую область памяти.
По умолчанию boot remapper указывает на загрузочное ПЗУ (первый код, который выполняется при включении устройства). Позже отображение изменяется так, чтобы другие ядра ЦП сразу начинали выполнение в прошивке EL3 (часть tz), загруженной в ОЗУ:
Обратите внимание, что адрес, к которому обращается ЦП (внутри tz), доступен по двум разным физическим адресам: реальному адресу в ОЗУ (0x8650xxxx) и перенаправленному адресу через boot remapper (0x0000xxxx).
На самом деле существуют два отдельных экземпляра boot remapper: