Konfiguracja MTE

MTE można włączyć niezależnie w jądrze Androida i w dowolnym procesie w systemie Android. Google nie narzuca żadnej konkretnej konfiguracji i ma na celu zapewnienie maksymalnej elastyczności producentom urządzeń.

W tym dokumencie opisano ustawienia i zakres MTE, które naszym zdaniem stanowią dobry kompromis między bezpieczeństwem a kosztami dla użytkowników Androida, jako zawsze włączone łagodzenie luk w zabezpieczeniach.

Jądro

MTE w jądrze konfiguruje się za pomocą wiersza poleceń. Wartość domyślna to WŁ. w trybie synchronizacji. Może to ulec zmianie w przyszłości z kilku powodów:

  • Wykazano, że znacząco wpływa na wydajność i optymalizację potrzeb pracy.
  • Jakość kodu jądra jest powszechnie uważana za niewystarczającą do dostarczenia MTE w trybie wymuszania (tj. paniki w przypadku awarii).

Obecne zalecenie polega na wyłączeniu MTE jądra na urządzeniach produkcyjnych. Aby to zrobić, dodaj kasan=off do wiersza poleceń jądra.

Przestrzeń użytkownika

Google udostępnia domyślną listę plików binarnych przestrzeni użytkownika, które mają być chronione za pomocą MTE. Lista została utworzona na podstawie danych wejściowych z Android Security i zawiera komponenty, które są uprzywilejowane i/lub obsługują niezaufane dane wejściowe. Aktualną listę natywnych plików binarnych zalecanych z MTE można znaleźć w pliku memtag-common.mk w systemie kompilacji Androida. Dodatkowo uwzględniono także kilka aplikacji systemowych : obecnie NFC, Bluetooth i SecureElement. Te pliki binarne i aplikacje są domyślnie włączone w trybie asynchronicznym.

Aktualnym zaleceniem jest użycie domyślnej listy docelowej (nie są wymagane żadne zmiany). Dodatkowo zaleca się ocenę dodatków BSP i OEM do systemu podstawowego i włączenie MTE w tych, które są wrażliwe na bezpieczeństwo.

Aplikacje

Trzy wymienione powyżej aplikacje systemowe są obecnie jedynymi, które korzystają z MTE. Aby aplikacja innej firmy mogła włączyć MTE, w pliku AndroidManifest.xml musiałby zostać określony android:memtagMode z wartością inną niż off . Dlatego popularne zestawy testów porównawczych, takie jak Geekbench lub AnTuTu, nie działają z MTE. Jeśli MTE jądra jest również wyłączone (patrz kasan=off powyżej), oczekuje się, że testy porównawcze wykażą bardzo ograniczony wpływ na wydajność, jeśli w ogóle jakikolwiek.

Jeśli chodzi o pozostałe aplikacje, w przeglądarce Chrome aktywnie rozwijana jest obsługa MTE. Bieżąca wersja przeglądarki Chrome w Sklepie Play zawiera w manifeście ustawienie memtagMode=async . Oczekujemy również, że wiele aplikacji w ekosystemie Androida dbających o bezpieczeństwo (na przykład aplikacje bankowe) ostatecznie zrobi to samo. Z drugiej strony spodziewamy się, że niektóre aplikacje wymagające maksymalnej wydajności procesora, takie jak gry, zdecydują się na wyłączenie MTE.

Inne tryby

Powyższe instrukcje wszędzie używają tylko asynchronicznego trybu MTE. W zależności od sprzętu inne tryby mogą być prawie lub dokładnie tak samo szybkie. Zapewniają także lepszą diagnostykę i nieco silniejsze właściwości łagodzenia podatności.

Zalecamy przetestowanie jednej lub dwóch innych konfiguracji, aby sprawdzić, czy są one wystarczająco dobre dla Twoich wymagań dotyczących wydajności/zasilania. Tryby MTE można ustawić dla każdego rdzenia procesora w systemie, zapisując do /sys/devices/system/cpu/cpu*/mte_tcf_preferred . Na przykład napisanie sync (lub asymm ) spowodowałoby, że każdy proces w przestrzeni użytkownika, który zażądał trybu asynchronicznego, zostałby automatycznie uaktualniony w trybie cichym do Sync (lub Asymm) podczas działania na tym rdzeniu. Tę konfigurację można przeprowadzić w pliku .rc podczas uruchamiania urządzenia.

Zalecamy zmierzenie jednej lub dwóch innych konfiguracji, aby sprawdzić, czy spełniają one wymagania dotyczące wydajności i mocy. Kilka ciekawych konfiguracji do odkrycia:

  • Asymetria na wszystkich rdzeniach.
  • Asymetria na dużych rdzeniach, synchronizacja na innych rdzeniach.

Aby sprawdzić, czy proces żąda trybu asynchronicznego (z możliwością automatycznej aktualizacji), sprawdź, czy następujący wiersz zawiera zarówno PR_MTE_TCF_SYNC , jak i PR_MTE_TCF_ASYNC :

  debuggerd  | head -30 | grep tagged_addr

Niestety, nie ma łatwego sposobu sprawdzenia efektywnego trybu procesu; ale każdy proces, który pokazuje obie wartości wymienione powyżej, podlega zachowaniu automatycznej aktualizacji.