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
浙公网安备 33010602011771号