Новости IT, хостинга
  Android, Apple, Facebook, Google, Linux, Microsoft, Samsung, Twitter, Интернет, Россия, браузеры, обновление ПО, онлайн-сервисы, операционные системы, планшеты, рынок ИТ, сделки, смартфоны, социальные сети, уязвимости  
  новостей: 10337
  комментариев: 2760

Уязвимость в механизме виртуализации Intel VT-d позволяет выйти за пределы изолированного окружения


Йоанна Рутковска (Joanna Rutkowska), автор руткита Blue Pill, операционной системы Qubes OS и руководитель Invisible Things Lab, опубликовала документ, в котором представила сразу три способа обхода защиты механизма виртуализации Intel VT-d (IOMMU), используемого в Xen и других гипервизорах для проброса реальных устройств на шине PCI в виртуальный домен. Все три метода основаны на возможности отсылки прерывания формата MSI с произвольным вектором прерывания из непривилегированного домена, имеющего доступ к адресному пространству устройства.

В первом случае используется генерация подложного SIPI-прерывания (Start-up Inter Processor Interrupt), которое в нормальной ситуации применяется в BIOS для активации всех ядер/процессоров системы. Легальные SIPI-прерывания могут быть инициированы только самим процессором, но как выяснилось в ходе исследования, за них легко выдать обычное MSI-прерывание путем простого изменения значения поля "Delivery Mode". Получив SIPI-прерывание ядро начинает выполнение подготовительного (start-up) кода, адрес которого вычисляется с использованием номера вектора прерывания, что можно использовать для внедрения shell-кода. Однако, при переходе в режим виртуализации (VT-x), процессор блокирует (но запоминает) все INIT-прерывания, которые должны быть обработаны перед отсылкой SIPI-прерывания, поэтому shell-код может отработать только тогда, когда процессор выйдет из режима виртуализации, то есть на этапе выключения машины.

Второй метод - генерация MSI-прерывания с номером вектора 0x80 или 0x82, которые будут интерпретированы как системные вызовы или вызовы функций Xen, выполненные активным в данный момент доменом. Однако, единственный способ успешно выполнить атаку, это поймать момент, когда регистры процессора будут содержать нужные аргументы и номер системного вызова.

Третий метод заключается в генерировании прерывания с номером 17 (#AC), которое попадет к обработчику ошибок процессора. В результате значения стека будут интерпретированы неправильно и управление вернется к инструкции, расположенной по адресу RFLAGS:CS, а не CS:RIP, как того ожидает обработчик.

В конце документ содержит описание работы и фрагменты кода эксплойта, который использует второй метод и позволяет выйти за пределы непривилегированного Xen-домена. Получив предварительную версию документа разработчики Xen реализовали функциональность, которая запрещает обработку прерываний с номерами 0x80 и 0x82, если они были вызваны устройствами, а также блокирует доставку прерывания #AC. Однако первый метод до сих остается осуществимым, так что единственная серьезная защита против всех видов атак заключается в использовании механизма Interrupt Remapping (который блокирует незаконные прерывания от устройств), доступного пока только в процессорах серии Intel Sandy Bridge, выпущенных в начале текущего года.

Интересно, что Xen уже имел механизм ограничений на доступ к памяти устройств, проброшенных в виртуальные домены, который запрещал произвольное изменение вектора прерывания драйвером устройства. Но, как оказалось, его легко обойти с помощью механизма "Scatter Gather", поддерживаемого многими устройствами и позволяющего разбить одну DMA-транзакцию на несколько более мелких, с разными адресами назначения. Одним из таких адресов может быть область памяти, отведенная для записи MSI-прерываний.


Источник: opennet.ru

  16 мая 2011 583
Версия для печати

← предыдущая новость следующая новость →

Мой комментарий
Ваше имя*:
Email:
Комментарий*:
Зарегистрироваться автоматически: Вы будете зарегистрированы на сайте автоматически при добавлении комментария. Обязательно заполните поле Email для этого.
Сумма чисел 7 и 20*:            


Хостеры (2430)
HostDB (35)
Софт (2640)
Железо (993)
Интернет (1435)
Статистика и аналитика (3324)




Отправить сообщение администратору

Сумма чисел 30 и 0*:


Яндекс цитирования
сообщить о неточности