Безопасность

Чтобы предотвратить запуск произвольных полезных нагрузок внутри pVM, Android Virtualization Framework (AVF) использует многоуровневый подход к безопасности, в котором каждый уровень добавляет дополнительные меры. Ниже приведен список уровней безопасности AVF:

  • Android гарантирует, что создавать или проверять pVM смогут только приложения с разрешениями pVM.

  • Загрузчик – загрузчик гарантирует, что загрузка разрешена только образам pVM, подписанным Google или поставщиками устройств, и соблюдает процедуру Android Verified Boot . Эта архитектура подразумевает, что приложения, работающие с pVM, не могут объединять свои собственные ядра.

  • pVM обеспечивает глубокую защиту, например, с помощью SELinux , для полезных нагрузок, запущенных в pVM. Глубокая защита запрещает отображение данных как исполняемых ( neverallow execmem ) и гарантирует, что W^X выполняется для всех типов файлов.

Модель безопасности

Конфиденциальность, целостность и доступность (триада ЦРУ) составляют модель, призванную определять политику информационной безопасности:

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

Конфиденциальность и целостность

Конфиденциальность вытекает из свойств изоляции памяти, обеспечиваемых гипервизором pKVM. pKVM отслеживает владение памятью отдельных страниц физической памяти и любые запросы от владельцев на страницы для совместного использования. pKVM гарантирует, что только уполномоченные pVM (хост и гости) имеют заданную страницу, отображенную в своих таблицах страниц этапа 2, которые контролируются гипервизором. Эта архитектура утверждает, что содержимое памяти, принадлежащей pVM, остается конфиденциальным, если владелец явно не поделится им с другой pVM.

Ограничения по поддержанию конфиденциальности также распространяются на любые сущности в системе, которые выполняют доступ к памяти от имени pVM, а именно, на устройства с поддержкой DMA и службы, работающие на более привилегированных уровнях . Поставщики систем на кристалле (SoC) должны удовлетворять новому набору требований, прежде чем они смогут поддерживать pKVM. В противном случае конфиденциальность не может быть обеспечена.

Целостность распространяется на данные в памяти и вычисления. pVM не могут:

  • Изменять память друг друга без согласия.
  • Влияют на состояние ЦП друг друга.

Эти требования обеспечиваются гипервизором. Однако проблемы, связанные с целостностью данных, также возникают при виртуальном хранении данных, когда необходимо применять другие решения, такие как dm-verity или AuthFS.

Эти принципы ничем не отличаются от изоляции процессов, предлагаемой Linux, где доступ к страницам памяти контролируется таблицами страниц этапа 1 и контекстными переключениями ядра между процессами. Однако часть EL2 pKVM, которая обеспечивает эти свойства, имеет на три порядка меньшую поверхность атаки по сравнению со всем ядром Linux (примерно 10 тысяч против 20 миллионов строк кода) и, следовательно, обеспечивает более надежную гарантию для случаев использования, которые слишком чувствительны, чтобы полагаться на изоляцию процессов.

Учитывая его размер, pKVM поддается формальной проверке. Мы активно поддерживаем академические исследования, направленные на формальное доказательство этих свойств на фактическом двоичном файле pKVM.

Оставшаяся часть этой страницы посвящена гарантиям конфиденциальности и целостности, которые предоставляет каждый компонент pKVM.

Гипервизор

pKVM — это гипервизор на основе KVM, который изолирует pVM и Android в взаимно недоверяемые среды выполнения. Эти свойства сохраняются в случае компрометации любой pVM, включая хост. Альтернативные гипервизоры, соответствующие AVF, должны предоставлять аналогичные свойства.

  • PVM не может получить доступ к странице, принадлежащей другой сущности, такой как pVM или гипервизор, если только владелец страницы явно не предоставил ей общий доступ. Это правило включает хост-pVM и применяется как к доступу CPU, так и к DMA.

  • Прежде чем страница, используемая pVM, будет возвращена хосту, например, при уничтожении pVM, она стирается.

  • Память всех pVM и прошивка pVM из одной загрузки устройства стираются перед запуском загрузчика ОС при последующей загрузке устройства.

  • При подключении аппаратного отладчика, например SJTAG, pVM не может получить доступ к ранее созданным ключам.

  • Прошивка pVM не загрузится, если не сможет проверить исходный образ.

  • Прошивка pVM не загрузится, если целостность instance.img нарушена.

  • Цепочка сертификатов DICE и идентификаторы составных устройств (CDI), предоставленные экземпляру pVM, могут быть получены только этим конкретным экземпляром.

Гостевая ОС

Microdroid — пример ОС, работающей в pVM. Microdroid состоит из загрузчика на основе U-boot, GKI и подмножества пользовательского пространства Android, а также пусковой установки полезной нагрузки. Эти свойства сохраняются в случае компрометации в любой pVM, включая хост. Альтернативные ОС, работающие в pVM, должны предоставлять аналогичные свойства.

  • Microdroid не загрузится, если boot.img , super.img , vbmeta.img или vbmeta\_system.img не могут быть проверены.

  • Microdroid не загрузится, если проверка APK не пройдена.

  • Тот же экземпляр Microdroid не загрузится, даже если APK был обновлен.

  • Microdroid не загрузится, если какой-либо из APEX не пройдет проверку.

  • Microdroid не загрузится (или загрузится с чистым начальным состоянием), если instance.img изменен за пределами гостевой pVM.

  • Microdroid подтверждает цепочку загрузки.

  • Любое (неподписанное) изменение образов дисков, совместно используемых с гостевой pVM, приводит к ошибке ввода-вывода на стороне pVM.

  • Цепочка сертификатов DICE и CDI, предоставленные экземпляру pVM, могут быть получены только этим конкретным экземпляром.

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

андроид

Это свойства, поддерживаемые Android как хостом, но не сохраняющиеся в случае компрометации хоста:

  • Гостевая PVM не может напрямую взаимодействовать (например, устанавливать соединение vsock ) с другими гостевыми PVM.

  • Только VirtualizationService в хостовой pVM может создать канал связи с pVM.

  • Только приложения, подписанные ключом платформы, могут запрашивать разрешение на создание, владение или взаимодействие с pVM.

  • Идентификатор, называемый идентификатором контекста (CID), используемый при настройке соединений vsock между хостом и pVM, не используется повторно, когда хост pVM работает. Например, вы не можете заменить работающую pVM другой.

Доступность

В контексте pVM доступность означает, что хост выделяет гостям достаточно ресурсов, чтобы они могли выполнять задачи, для которых они предназначены.

В обязанности хоста входит планирование виртуальных ЦП pVM. KVM, в отличие от обычных гипервизоров Type-1 (таких как Xen), принимает явное решение о проектировании, чтобы делегировать планирование рабочей нагрузки ядру хоста. Учитывая размер и сложность современных планировщиков, это решение о проектировании значительно уменьшает размер доверенной вычислительной базы (TCB) и позволяет хосту принимать более обоснованные решения о планировании для оптимизации производительности. Однако вредоносный хост может решить никогда не планировать гостя.

Аналогично, pKVM также делегирует обработку физических прерываний ядру хоста, чтобы уменьшить сложность гипервизора и оставить хосту ответственность за планирование. Прилагаются усилия для того, чтобы пересылка гостевых прерываний приводила только к отказу в обслуживании (слишком мало, слишком много или неправильно маршрутизированные прерывания).

Наконец, процесс монитора виртуальной машины (VMM) хоста отвечает за выделение памяти и предоставление виртуальных устройств, таких как сетевая карта. Вредоносный VMM может утаивать ресурсы от гостя.

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

Безопасная загрузка

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

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

Каждый этап передает детерминированно закодированный объект CBOR на следующий этап. Этот объект содержит секреты и цепочку сертификатов DICE, которая содержит накопленную информацию о состоянии, например, была ли последняя стадия загружена безопасно.

Разблокированные устройства

Когда устройство разблокируется с помощью fastboot oem unlock , пользовательские данные стираются. Этот процесс защищает пользовательские данные от несанкционированного доступа. Данные, которые являются частными для pVM, также становятся недействительными, когда происходит разблокировка устройства.

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

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