Android может использовать dm-verity
для защиты разделов, не относящихся к данным, от манипуляций ( ссылка , ссылка ).
Цель - предотвратить нападение (с физическим доступом к устройству) от вставки вредоносного кода, например, в низкоуровневые службы Android, хранящиеся в разделе /system
или /recovery
.
Для разделов, отмеченных флагом verity
в fstab
, во время сборки вычисляется дерево раздела * dm-verity ha sh. Дерево ha sh подписано ключом RSA и добавлено в раздел как метаданные. Часть ключа RSA publi c добавляется в раздел boot
.
Во время загрузки ядро проверяет целостность подписанного дерева ha sh в метаданных раздела, используя ключ RSA publi c, хранящийся в разделе boot
. Затем он может вычислить дерево ha sh раздела и сравнить его с деревом ha sh из метаданных. В случае несоответствия ядро отказывается загружаться.
Поэтому, если злоумышленник манипулирует разделом, дерево ha sh, вычисленное во время загрузки, не будет соответствовать дереву ha sh из раздела. мета-данные. Если злоумышленник также манипулирует деревом ha sh из метаданных раздела, проверка подписи с помощью ключа RSA publi c завершится неудачей.
Конечно, тогда вам потребуется дополнительный механизм для обеспечения целостности раздела boot
. Это можно сделать с помощью механизмов, подобных Secure-Boot, когда раздел boot
снова подписывается другим ключом (RSA), а публичная часть c этого ключа встроена на более низком уровне (определяемый поставщиком c) , Такая цепочка механизмов проверки называется цепочкой доверия. В идеале, вы бы хотели, чтобы цепочка доверия распространялась до уровня аппаратного обеспечения, а в чипе записывался ключ от какого-либо поставщика.