MTE можно включить независимо в ядре Android и в любом процессе системы Android. Google не требует какой-либо конкретной конфигурации и стремится предоставить производителям устройств максимальную гибкость.
В этом документе описаны настройки и объем MTE, которые, по нашему мнению, обеспечивают хороший компромисс между безопасностью и затратами для пользователей Android в качестве постоянного снижения уязвимостей.
Ядро
MTE в ядре настраивается через командную строку. По умолчанию в режиме синхронизации установлено значение «ВКЛ.». Это может быть изменено в будущем по нескольким причинам:
- Было показано, что это существенно влияет на производительность и требует работы по оптимизации.
- Многие считают, что качество кода ядра недостаточно для доставки MTE в принудительном режиме (то есть в режиме паники при сбое).
Текущая рекомендация — отключить MTE ядра на производственных устройствах. Для этого добавьте kasan=off
в командную строку ядра.
Пользовательское пространство
Google предоставляет список двоичных файлов пользовательского пространства по умолчанию, которые будут защищены с помощью MTE. Список был составлен на основе входных данных Android Security и включает компоненты, которые являются привилегированными и/или обрабатывают ненадежные входные данные. Актуальный список собственных двоичных файлов, рекомендуемых для MTE, можно найти в файле memtag-common.mk в системе сборки Android. Кроме того, включено несколько системных приложений : в настоящее время Nfc, Bluetooth и SecureElement. Эти двоичные файлы и приложения по умолчанию включены в асинхронном режиме.
Текущая рекомендация — использовать целевой список по умолчанию (изменения не требуются). Кроме того, рекомендуется оценить дополнения BSP и OEM к базовой системе и включить MTE для тех из них, которые чувствительны к безопасности.
Приложения
Три перечисленных выше системных приложения на данный момент являются единственными, использующими MTE. Чтобы стороннее приложение могло включить MTE, в его AndroidManifest.xml
необходимо указать android:memtagMode
со значением, отличным от off
. Таким образом, обычные наборы тестов, такие как Geekbench или AnTuTu, не работают с MTE. Если MTE ядра также отключен (см. kasan=off
выше), то ожидается, что тесты покажут очень ограниченное влияние на производительность, если оно вообще будет иметь место.
Что касается других приложений, то в Chrome активно развивается поддержка MTE. Текущая версия Chrome в Play Маркете включает в манифест параметр memtagMode=async
. Мы также ожидаем, что ряд приложений в экосистеме Android, ориентированных на безопасность (например, банковские приложения), в конечном итоге сделают то же самое. С другой стороны, мы ожидаем, что некоторые приложения, требующие максимальной производительности процессора, например игры, предпочтут отключить MTE.
Другие режимы
В приведенных выше инструкциях везде используется только асинхронный режим MTE. В зависимости от оборудования другие режимы могут быть почти такими же быстрыми или точно такими же быстрыми. Они также обеспечивают лучшую диагностику и несколько более сильные свойства снижения уязвимостей.
Мы рекомендуем протестировать одну или две другие конфигурации, чтобы убедиться, что они достаточно хороши для ваших требований к производительности и мощности. Режимы MTE можно установить для каждого ядра ЦП в системе, записав в /sys/devices/system/cpu/cpu*/mte_tcf_preferred
. Например, запись sync
(или asymm
) приведет к тому, что любой процесс пользовательского пространства, запрашивающий режим Async, будет автоматически обновлен до Sync (или Asymm) во время работы на этом ядре. Эту настройку можно выполнить в файле .rc во время загрузки устройства.
Мы рекомендуем измерить одну или две другие конфигурации, чтобы проверить, удовлетворяют ли они вашим требованиям к производительности и мощности. Некоторые интересные конфигурации для изучения:
- Асимм на всех ядрах.
- Asymm на больших ядрах, синхронизация на других ядрах.
Чтобы убедиться, что процесс запрашивает асинхронный режим (с возможным автоматическим обновлением), убедитесь, что следующая строка содержит как PR_MTE_TCF_SYNC , так и PR_MTE_TCF_ASYNC :
debuggerd <PID> | head -30 | grep tagged_addr
К сожалению, не существует простого способа увидеть эффективный режим процесса; но любой процесс, который показывает оба значения, перечисленные выше, подвергается автоматическому обновлению.