Google стремится продвигать расовую справедливость для черных сообществ. Смотри как.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Проверка загрузки

Проверенная загрузка требует криптографической проверки всего исполняемого кода и данных, которые являются частью загружаемой версии Android, перед ее использованием. Это включает ядро ​​(загруженное из boot раздела), дерево устройств (загруженное из раздела dtbo ), system раздел, раздел vendor и так далее.

Небольшие разделы, такие как boot и dtbo , которые читаются только один раз, обычно проверяются путем загрузки всего содержимого в память и последующего вычисления его хэша. Это вычисленное хеш-значение затем сравнивается с ожидаемым хеш-значением . Если значение не совпадает, Android не загружается. Для получения дополнительной информации см. Boot Flow .

Большие разделы, которые не помещаются в память (например, файловые системы), могут использовать хеш-дерево, где проверка представляет собой непрерывный процесс, происходящий при загрузке данных в память. В этом случае корневой хеш-код дерева хешей вычисляется во время выполнения и сравнивается с ожидаемым корневым хеш-значением . Android включает драйвер dm-verity для проверки больших разделов. Если в какой-то момент вычисленный корневой хэш не соответствует ожидаемому корневому хэш-значению , данные не используются, и Android переходит в состояние ошибки. Для получения дополнительной информации см. Повреждение dm-verity .

Ожидаемые хэши обычно хранятся либо в конце, либо в начале каждого проверенного раздела, в выделенном разделе или в обоих. Важно отметить, что эти хеши подписаны (прямо или косвенно) корнем доверия. В качестве примера, реализация AVB поддерживает оба подхода, подробнее см. Android Verified Boot .

Защита от отката

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

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

Для получения дополнительной информации о том, как AVB обрабатывает защиту от отката, см. AVB README .

Обработка ошибок проверки

Проверка может завершиться неудачей либо во время загрузки (например, если вычисленный хэш в boot разделе не соответствует ожидаемому хэшу), либо во время выполнения (например, если dm-verity обнаружит ошибку проверки в system разделе). Если во время загрузки происходит сбой проверки, устройство не может загрузиться, и конечному пользователю необходимо выполнить шаги для восстановления устройства.

Если проверка не выполняется во время выполнения, процесс немного усложняется. Если устройство использует dm-verity, его следует настроить в режиме restart . В режиме restart , если обнаружена ошибка проверки, устройство немедленно перезапускается с определенным флагом, установленным для указания причины. Загрузчик должен заметить этот флаг и переключить dm-verity в режим ошибки ввода-вывода ( eio ) и оставаться в этом режиме до тех пор, пока не будет установлено новое обновление.

При загрузке в режиме eio на устройстве отображается экран ошибок, информирующий пользователя о том, что обнаружено повреждение, и устройство может работать неправильно. Экран показывает, пока пользователь не отклонит его. В режиме eio dm-verity не перезапустит устройство, если возникнет ошибка проверки, вместо этого будет возвращена ошибка EIO, и приложение должно устранить эту ошибку.

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