在Pixel 8上启用ARM内存标记扩展(MTE)技术指南

本文详细介绍了如何在Pixel 8设备上启用ARM内存标记扩展(MTE)功能,包括用户空间和内核空间的配置步骤。MTE是一种硬件支持的安全特性,能有效防御线性缓冲区溢出和释放后使用漏洞,提升系统安全性。

启用Pixel 8的MTE功能

Pixel 8硬件(Tensor G3)支持ARM内存标记扩展(MTE),软件支持在Android用户空间和Linux内核中均可用。此功能是对线性缓冲区溢出和多种释放后使用缺陷的强大防御。我非常高兴看到这一硬件功能终于在现实世界中可用。

在用户空间中启用MTE

在Android UI中已经预设了启用选项:设置 / 系统 / 开发者选项 / 内存标记扩展 / 启用MTE直到您关闭它。一旦启用,它将通过添加“memtag”选项来内部更改名为“arm64.memtag.bootctl”的Android“系统属性”。

在内核中启用MTE

在内核中启用MTE稍微复杂一些,但一点也不困难。这需要手动设置上述“arm64.memtag.bootctl”属性以包含“memtag-kernel”:

  1. 将手机连接到可以运行adb工具的系统
  2. 如果尚未安装,请安装adb。例如在Debian/Ubuntu上:sudo apt install adb
  3. 在手机的“开发者选项”菜单中打开“USB调试”,并在首次运行adb时接受弹出的调试会话确认
  4. 验证当前设置:adb shell getprop | grep memtag.bootctl
    • [arm64.memtag.bootctl]: [memtag]
  5. 启用内核MTE:adb shell setprop arm64.memtag.bootctl memtag,memtag-kernel
  6. 检查结果:adb shell getprop | grep memtag.bootctl
    • [arm64.memtag.bootctl]: [memtag,memtag-kernel]
  7. 重启手机

验证内核MTE是否启用

要检查内核MTE是否启用(通过内核地址清理器的硬件标记模式实现),您可以在重启后检查内核命令行:

1
2
3
4
5
6
7
8
$ mkdir foo && cd foo
$ adb bugreport
...
$ mkdir unpacked && cd unpacked
$ unzip ../bugreport*.zip
...
$ grep kasan= bugreport*.txt
...: Command line: ... kasan=off ... kasan=on ...

后面的“kasan=on”会覆盖前面的“kasan=off”。

享受吧!

© 2023, Kees Cook。本作品采用知识共享署名-相同方式共享4.0国际许可协议进行许可。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计