Этот документ содержит общие примеры использования AVF.
Изолированная компиляция
Являясь программно-безопасным анклавом, защищенная виртуальная машина обеспечивает безопасную среду для компиляции чувствительного к безопасности кода. Эта среда позволяет перенести компиляцию JAR-файлов bootclasspath
и системного сервера (инициируемую обновлением APEX) с ранней загрузки на период до перезагрузки и значительно сокращает время загрузки после обновления APEX.
Реализация находится в APEX com.android.compos
. Этот компонент является необязательным и может быть включен с помощью make-файла .
Целью безопасности является правдивая компиляция проверенных входных данных и изолированное создание выходных данных; Android как ненадежный клиент не может каким-либо образом изменить результат компиляции, кроме как вызвать его сбой (когда Android возвращается к компиляции во время загрузки).
Служба компиляции в виртуальной машине генерирует подпись только в том случае, если в течение всей компиляции не было ошибок. Android может получить открытый ключ от виртуальной машины для проверки подписи.
Ключ виртуальной машины генерируется на основе профиля DICE виртуальной машины, определенного APEX и APK, подключенными к виртуальной машине, в дополнение к другим параметрам виртуальной машины, таким как возможность отладки.
Чтобы определить, не принадлежит ли открытый ключ неожиданной виртуальной машине, Android загружает виртуальную машину, чтобы определить, правильный ли ключ. Виртуальная машина загружается при ранней загрузке после каждого обновления APEX.
При использовании проверенной загрузки защищенной виртуальной машины служба компиляции запускает только проверенный код. Таким образом, код может решить принимать только входные данные, которые удовлетворяют определенным условиям, например, принимать входной файл только в том случае, если его имя и дайджест fs-verity
определены в списке разрешений.
Любые открытые API виртуальной машины являются площадками для атаки. Предполагается, что все входные файлы и параметры получены от ненадежного клиента и должны быть проверены перед обработкой.
Целостность входных/выходных файлов проверяется виртуальной машиной, при этом файлы хранятся на Android как ненадежный файловый сервер следующим образом:
- Содержимое входного файла должно быть проверено перед использованием с использованием алгоритма
fs-verity
. Чтобы входной файл стал доступен на виртуальной машине, его корневой хэш должен быть предоставлен в контейнере (APK), который участвует в профиле DICE виртуальной машины. Благодаря доверенному корневому хешу злоумышленник не сможет подделать входные данные, не будучи обнаруженным. - Целостность выходного файла должна поддерживаться на виртуальной машине. Даже если выходной файл хранится на Android, во время генерации целостность сохраняется с использованием того же формата дерева
fs-verity
, но может динамически обновляться. Окончательный выходной файл можно идентифицировать по корневому хешу, который изолирован в виртуальной машине. Служба на виртуальной машине защищает выходные файлы с помощью подписи.