Чтобы предотвратить запуск произвольных полезных данных внутри pVM, Android Virtualization Framework (AVF) использует многоуровневый подход к безопасности, при котором каждый уровень добавляет дополнительные меры контроля. Ниже приведен список уровней безопасности AVF:
Android гарантирует, что только приложениям с разрешениями PVM разрешено создавать или проверять pVM.
Загрузчик. Загрузчик гарантирует, что загружаться могут только образы pVM, подписанные Google или поставщиками устройств, и соблюдает процедуру проверенной загрузки Android . Эта архитектура подразумевает, что приложения, использующие pVM, не могут объединять свои собственные ядра.
pVM обеспечивает глубокую защиту, например, с помощью SELinux , для полезных данных, выполняемых в pVM. Глубокоэшелонированная защита запрещает сопоставление данных как исполняемых файлов (
neverallow execmem
) и гарантирует, что W^X сохраняется для всех типов файлов.
Модель безопасности
Конфиденциальность, целостность и доступность (триада CIA) составляют модель, предназначенную для управления политикой информационной безопасности:
- Конфиденциальность – это набор правил, ограничивающих доступ к информации.
- Целостность – это гарантия того, что информация достоверна и точна.
- Доступность – гарантия надежного доступа к информации уполномоченных лиц.
Конфиденциальность и целостность
Конфиденциальность обеспечивается свойствами изоляции памяти, обеспечиваемыми гипервизором 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 хоста и применяется как к процессору, так и к доступу по 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, в отличие от обычных гипервизоров типа 1 (таких как Xen), принимает явное проектное решение делегировать планирование рабочей нагрузки ядру хоста. Учитывая размер и сложность современных планировщиков, это проектное решение значительно уменьшает размер доверенной вычислительной базы (TCB) и позволяет хосту принимать более обоснованные решения по планированию для оптимизации производительности. Однако злонамеренный хост может никогда не планировать гостя.
Аналогичным образом, pKVM также делегирует обработку физических прерываний ядру хоста, чтобы уменьшить сложность гипервизора и оставить хосту ответственность за планирование. Прилагаются усилия для обеспечения того, чтобы пересылка гостевых прерываний приводила только к отказу в обслуживании (слишком малое, слишком большое или неправильно маршрутизированное прерывание).
Наконец, процесс монитора виртуальной машины (VMM) хоста отвечает за выделение памяти и предоставление виртуальных устройств, таких как сетевая карта. Вредоносный VMM может удерживать ресурсы гостя.
Хотя pKVM не обеспечивает доступность для гостей, конструкция защищает доступность хоста от злонамеренных гостей, поскольку хост всегда может вытеснить или завершить работу гостя и вернуть его ресурсы.
Безопасная загрузка
Данные привязаны к экземплярам PVM, а безопасная загрузка гарантирует, что доступ к данным экземпляра можно контролировать. Первая загрузка экземпляра подготавливает его путем случайной генерации секретной соли для pVM и извлечения деталей, таких как открытые ключи проверки и хэши, из загруженных образов. Эта информация используется для проверки последующих загрузок экземпляра pVM и обеспечения раскрытия секретов экземпляра только для образов, прошедших проверку. Этот процесс происходит на каждом этапе загрузки внутри pVM: прошивки pVM, pVM ABL, Microdroid и т. д.
DICE предоставляет каждому этапу загрузки пару ключей аттестации, открытая часть которых сертифицирована в сертификате DICE для этого этапа. Эта пара ключей может меняться между загрузками, поэтому также получается секретный секрет , который стабилен для экземпляра виртуальной машины при перезагрузке и, как таковой, подходит для защиты постоянного состояния. Секрет печати очень ценен для виртуальной машины, поэтому его не следует использовать напрямую. Вместо этого ключи опечатывания должны быть получены из секрета опечатывания, а секрет опечатывания должен быть уничтожен как можно раньше.
Каждый этап передает детерминированно закодированный объект CBOR на следующий этап. Этот объект содержит секреты и цепочку сертификатов DICE, которая содержит накопленную информацию о состоянии, например, безопасно ли загружен последний этап.
Разблокированные устройства
Когда устройство разблокируется с помощью fastboot oem unlock
, пользовательские данные стираются. Этот процесс защищает данные пользователя от несанкционированного доступа. Данные, которые являются личными для pVM, также становятся недействительными при разблокировке устройства.
После разблокировки владелец устройства может перепрошить разделы, которые обычно защищены проверенной загрузкой, включая разделы, содержащие реализацию pKVM. Таким образом, pKVM на разблокированном устройстве не сможет поддерживать модель безопасности.
Удаленные стороны могут наблюдать это потенциально небезопасное состояние, проверяя проверенное состояние загрузки устройства в сертификате аттестации ключа.