Конфигурация МТЕ

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

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