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

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

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

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

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

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

Конфиденциальность, целостность и доступность (триада CIA) – это модель, которая помогает разрабатывать правила информационной безопасности:

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

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

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

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

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

  • изменять воспоминания друг друга без согласия;
  • влиять на состояние ЦП друг друга;

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

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

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

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

Гипервизор

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

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

  • Перед тем как страница, используемая защищенной виртуальной машиной, будет возвращена хосту (например, при удалении защищенной виртуальной машины), она очищается.

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

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

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

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

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

Гостевая ОС

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

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

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

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

  • Если хотя бы один из них не пройдет проверку, Microdroid не запустится.

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

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

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

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

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

Android

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

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

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

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

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

Доступность

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

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

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

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

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

Secure Boot

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

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

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

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

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

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

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