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

Чтобы предотвратить запуск произвольных полезных нагрузок внутри 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 (хостовые и гостевые) будут отображать заданную страницу в своих таблицах страниц второго этапа, управляемых гипервизором. Такая архитектура гарантирует, что содержимое памяти, принадлежащей pVM, остаётся конфиденциальным, если только владелец явно не предоставит к нему доступ другой pVM.

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

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

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

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

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

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

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

Гипервизор

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

  • PVM не может получить доступ к странице, принадлежащей другой сущности, например, PVM или гипервизору, если владелец страницы явно не предоставил ей доступ. Это правило распространяется на PVM-хосты и применяется как к доступу через ЦП, так и к доступу через 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.

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