Уязвимость в механизме виртуализации Intel VT-d позволяет выйти за пределы изолированного окружения
В первом случае используется генерация подложного 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-прерываний.
Источник: http://www.opennet.ru/opennews/art.shtml?num=30556
|
0 | Tweet | Нравится |
|