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.