Android MTE(Memory Tagging Extension)

 

什么是MTE?

Arm MTE( Memory Tagging Extension ) 是用于调试和减少内存错误的众多工具之一。是ARM v8.5-A新增的一项缓解内存安全的机制.

内存安全 bug 是指以原生编程语言处理内存时遇到的错误,是常见的代码问题。这类问题会导致安全漏洞和稳定性问题。

Armv9 引入了 Arm Memory Tagging Extension (MTE),一种可让您捕获原生代码中的释放后使用和缓冲区溢出 bug 的硬件扩展。

 

 

检查支持情况

从 Android 13 开始,部分设备支持 MTE。如需检查设备是否在运行时启用了 MTE,请运行以下命令

adb shell grep mte /proc/cpuinfo

如果结果为 Features : […] mte,则表示设备在运行时启用了 MTE。

有些设备默认不启用 MTE,但允许开发者在启用 MTE 的情况下重新启动。这是一种不建议用于常规用途的实验性配置,因为它可能会降低设备性能或稳定性,但对于应用开发很有用。如需访问此模式,请在“设置”应用中依次前往开发者选项 >“Memory Tagging Extension”。如果系统未列出此选项,则表示您的设备不支持以这种方式启用 MTE。

 

MTE报错

MTE的报错如下所示,引起的crash信息中会有“SEGV_MTESERR”字样

 

 

MTE支持条件

ARM解释: v8.5及以上

Qcom平台解释:ARM v9(MSM8450)以上

Android解释:Android对MTE的支持将在2021年/2022年初发布带有MTE的芯片时完成。截至于2023年底,最新的旗舰设备(Pixel、OPPO)开发者选项中已具备MTE功能。

 

 

MTE的开关

内核层CONFIG_ARM64_MTE=y时开启,此Kconfig由平台根据环境自行控制,无需工程师手动开关。依赖情况如下

1687config ARM64_MTE
 
1688 bool "Memory Tagging Extension support"
 
1689 default y
 
1690 depends on ARM64_AS_HAS_MTE && ARM64_TAGGED_ADDR_ABI
 
1691 depends on AS_HAS_ARMV8_5
 
1692 # Required for tag checking in the uaccess routines
 
1693 depends on ARM64_PAN
 
1694 depends on AS_HAS_LSE_ATOMICS
 
1695 select ARCH_USES_HIGH_VMA_FLAGS
 
1696 help

 

 

MTE检测目标

 

MTE认为内存安全违规主要分2种:空间安全、时间安全。

空间安全

对象在真实边界之外被访问,例如溢出、越界等。可被利用来改变函数指针、保存寄存器等目标地址。

时间安全

在对象引用的内存释放、过期后使用。例如UAF等,攻击者可以放置一个新的恶意对象来代替预期目标。

 

 

 

如何检查binary/so有没有打开MTE

$ readelf out/target/product/mahakala/system/bin/surfaceflinger  -n 

Displaying notes found in: .note.android.ident
  Owner                Data size     Description
  Android              0x00000004    NT_VERSION (version)
   description data: 22 00 00 00 

Displaying notes found in: .note.gnu.build-id
  Owner                Data size     Description
  GNU                  0x00000010    NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: dc4190c81c3ce7c14083d94bcdbf45e9

Displaying notes found in: .note.android.memtag
  Owner                Data size     Description
  Android              0x00000004    Unknown note type: (0x00000004)
   description data: 06 00 00 00 

 

 

 

 

 

参考链接

 

  • https://blog.csdn.net/hnjzfwy/article/details/134479582
  • https://developer.android.google.cn/ndk/guides/memory-debug?hl=zh-cn
  • https://source.android.google.cn/docs/security/test/memory-safety/mte-configuration?hl=zh-tw
  • https://blog.csdn.net/sinat_34606064/article/details/135906371
posted @ 2024-07-02 18:55  青山牧云人  阅读(904)  评论(0)    收藏  举报