MTE 구성

MTE는 Android 커널에서 그리고 Android 시스템의 모든 프로세스에서 독립적으로 사용 설정할 수 있습니다. Google에서는 특정 구성을 요구하지 않으며 기기 제조업체에 최대한의 유연성을 제공하고자 합니다.

이 문서에서는 상시 사용 설정 취약점 완화로 Android 사용자에게 보안과 비용 간의 적절한 절충점을 제공하는 MTE 설정과 범위를 설명합니다.

커널

커널의 MTE는 명령줄을 통해 구성됩니다. 기본값은 Sync 모드에서 ON입니다. 이는 다음과 같은 이유로 향후 변경될 수 있습니다.

  • 이 설정이 성능에 큰 영향을 미치는 것으로 나타났으며 최적화 작업이 필요합니다.
  • 커널 코드 품질이 시행(즉, panic-on-failure) 모드에서 MTE를 제공하기에 충분하지 않은 것으로 널리 인식됩니다.

현재는 프로덕션 기기에서 커널 MTE를 사용 중지하는 것이 좋습니다. 이렇게 하려면 커널 명령줄에 kasan=off를 추가하세요.

사용자 공간

Google에서는 MTE로 보호할 사용자 공간 바이너리의 기본 목록을 제공합니다. 이 목록은 Android 보안의 입력으로 구성되었으며 권한이 있는 구성요소나 신뢰할 수 없는 입력을 처리하는 구성요소를 포함합니다. MTE에서 권장되는 네이티브 바이너리의 최신 목록은 Android 빌드 시스템의 memtag-common.mk 파일에서 확인할 수 있습니다. 또한 현재 NFC, 블루투스, SecureElement 등 여러 시스템 애플리케이션도 포함되어 있습니다. 이러한 바이너리와 애플리케이션은 기본적으로 Async 모드에서 사용 설정됩니다.

현재 권장사항은 기본 타겟 목록을 사용하는 것입니다(변경이 필요하지 않음). 또한 핵심 시스템에 대한 BSP 및 OEM 추가사항을 평가하고 보안에 민감한 항목에서 MTE를 사용 설정하는 것이 좋습니다.

애플리케이션

위에 나열된 시스템 애플리케이션 세 개가 현재 MTE를 사용하는 유일한 애플리케이션입니다. 서드 파티 애플리케이션이 MTE를 사용 설정하려면 AndroidManifest.xml에서 off가 아닌 값으로 android:memtagMode를 지정해야 합니다. 따라서 Geekbench나 AnTuTu와 같은 일반적인 벤치마크 도구 모음은 MTE와 함께 실행되지 않습니다. 커널 MTE도 사용 중지되면(위 kasan=off 참고) 벤치마크의 성능에는 매우 제한된 영향(있는 경우)을 미칠 것으로 예상됩니다.

다른 앱의 경우 Chrome에서 MTE 지원을 활발히 개발하고 있습니다. 현재 Play 스토어 버전의 Chrome에는 매니페스트에 memtagMode=async 설정이 포함되어 있습니다. Android 생태계에서 보안에 민감한 여러 앱(예: 뱅킹 앱)도 결국 동일하게 작동할 것으로 예상됩니다. 반면 게임과 같이 최고의 CPU 성능을 요구하는 일부 앱은 MTE를 계속 사용 중지할 것으로 예상됩니다.

기타 모드

위의 안내에서는 어디서나 비동기 MTE 모드만 사용합니다. 하드웨어에 따라 기타 모드도 속도가 거의 비슷하거나 동일할 수 있습니다. 더 나은 진단과 더 강력한 취약점 완화 속성도 제공합니다.

한두 개의 다른 구성을 테스트하여 성능 및 전력 요구사항에 부합하는지 확인하는 것이 좋습니다. MTE 모드는 /sys/devices/system/cpu/cpu*/mte_tcf_preferred에 작성하여 시스템의 각 CPU 코어에 설정할 수 있습니다. 예를 들어 sync(또는 asymm)를 작성하면 Async 모드를 요청한 사용자 공간 프로세스가 해당 코어에서 실행되는 동안 Sync(또는 Asymm) 모드로 자동 업그레이드됩니다. 이 설정은 기기 부팅 시간에 .rc 파일에서 실행할 수 있습니다.

한두 개의 다른 구성을 측정하여 성능 및 전력 요구사항을 충족하는지 확인하는 것이 좋습니다. 살펴볼 흥미로운 구성 몇 가지는 다음과 같습니다.

  • 모든 코어의 Asymm
  • 대형 코어의 Asymm, 다른 코어의 Sync

프로세스가 Async 모드(자동 업그레이드 가능)를 요청하는지 확인하려면 다음 줄에 PR_MTE_TCF_SYNCPR_MTE_TCF_ASYNC가 모두 포함되어 있는지 확인하세요.

  debuggerd  | head -30 | grep tagged_addr

안타깝게도 프로세스에 효과적인 모드를 쉽게 확인하는 방법은 없습니다. 하지만 위에 나열된 두 값을 모두 표시하는 프로세스에는 자동 업그레이드 동작이 적용됩니다.