13

Возможно ли, чтобы виртуальная машина, такая как VirtualBox, имела "призрак" уязвимости безопасности? Я думаю, что виртуальная машина, возможно, выполняет неупорядоченное выполнение, но, по моему мнению, невозможно посмотреть в кэш, чтобы прочитать результат.

Есть ли объяснение, как можно прочитать кэш виртуального процессора?

2 ответа2

14

Да Spectre может пересекать границы хоста / гостя, гостя / хоста и гостя / гостя, потому что это недостаток уровня ЦП, который означает, что потенциально чувствительная информация может просочиться через все, что работает на ядре ЦП.

Большинство новостных статей в Интернете говорят о том, что провайдеры облачных услуг больше всего пострадали от этого, поскольку у них есть массивные кластеры систем, которые виртуализированы и потенциально могут быть использованы для утечки конфиденциальной информации.

К настоящему времени большинство крупных провайдеров должны были быть исправлены с недостатками, насколько это возможно, но это будет проблемой, которая живет с нами в течение некоторого времени.

Безопасность.SE имеет канонический Q & A относительно этого и упоминает VM:

Я использую виртуальную машину / контейнеры, в какой степени я уязвим?

Согласно ответу Штеффена Ульриха

  • Атаки Meltdown не пересекают виртуальные машины, а лишь утечки памяти ядра локальным процессам.
  • Spectre может работать через виртуальные машины.

Кроме того, снова из Steffen, Meltdown и Spectre работают с контейнерами, так как контейнеры опираются на ядро хоста.

Виртуальные машины используют фактический процессор в вашей системе с некоторыми привилегированными инструкциями, которые могут быть перенаправлены. Он использует те же кэши и инструкции, что и хост. По сути, это просто еще один уровень физического процессора в вашей системе.

Виртуализация является быстрой только потому, что она использует физический ЦП с минимально возможным абстрагированием и использует аппаратное обеспечение ЦП для обеспечения изоляции. Такие вещи, как qemu, могут делать эмуляцию, которая была бы более безопасной, поскольку это не аппаратный процессор, но он намного медленнее и отличается от виртуализации.

Из канонического поста Security.se снова:

Spectre работает на другом уровне и не разрешает доступ к данным пространства ядра из пространства пользователя. В этой атаке злоумышленник обманывает умозрительное выполнение, чтобы ошибочно выполнить инструкции. В двух словах, предиктор вынужден прогнозировать конкретный результат ветвления (если -> true), что приводит к тому, что запрашивается доступ к памяти вне пределов, который процесс жертвы обычно не запрашивал, что приводило к некорректному умозрительному выполнению. Затем по побочному каналу извлекает значение этой памяти. Таким образом, память, принадлежащая процессу-жертве, просачивается в вредоносный процесс.

Таким образом, поскольку виртуальная машина работает на реальном оборудовании ЦП, и все, что ей нужно сделать, это запустить определенный цикл, чтобы "обучить" механизм спекулятивного выполнения. Затем он может использовать точную синхронизацию, чтобы отслеживать кеши для определенных шаблонов доступа, указывающих на процесс хоста или гостя (или другой виртуальной машины), который он хочет использовать.

Таким образом, это означает, что машина может использоваться во всех направлениях. От хоста к виртуальной машине, от виртуальной машины к хосту и от виртуальной машины к виртуальной машине.

Да, это отнюдь не легко и сложно осуществить, так как ядро ЦП виртуальной машины может меняться по желанию хоста, а хост может с радостью планировать задачи и на разных ядрах, но за длительный период времени достаточно информации может быть утечка, чтобы дать секретный ключ к какой-либо важной системе или учетной записи. При наличии достаточного количества времени и некоторого незаметного программного обеспечения все потенциально открыто.

Если вам нужна "безопасная" виртуальная машина, вы должны гарантировать, что ее ядра изолированы. Единственный реальный способ блокировать эту атаку - это заставить компьютер и виртуальные машины использовать только определенные ядра, чтобы они никогда не работали на одном и том же оборудовании, но это привело бы к эффективному увеличению стоимости, поскольку вы не смогли бы иметь столько виртуальных машин на данном хосте. Вы никогда не сможете избежать использования большего количества виртуальных машин, чем у вас доступно ядер, что я и ожидал бы сделать на серверах с низкой нагрузкой, так как многие системы простаивают в течение 90% своей жизни.

0

gem5

Если вы заинтересованы в изучении / воспроизведении уязвимостей исключительно с помощью эмуляции, без использования центрального процессора, я не думаю, что QEMU достаточно детализирован, чтобы наблюдать за ними, поскольку он не моделирует конвейер центрального процессора.

gem5, однако, используется для оценки производительности системы в исследованиях и разработках и имитирует достаточно внутренних ресурсов ЦП, чтобы вы могли наблюдать за Spectre в полностью чистой и контролируемой среде.

Классная демоверсия x86_64 с визуализацией была опубликована по адресу: http://www.lowepower.com/jason/visualizing-spectre-with-gem5.html

Недостатком gem5 является то, что он намного медленнее, чем QEMU, симуляция более детальная.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .