自从Armv8.5之后,开始支持内存标记扩展(MTE),通过将内存打标(tag),从而追踪常见的非法内存操作。
Arm 终端事业部软件战略总监卢旻盛表示,随着软件的复杂度越来越高,相应的漏洞也越来越多,比如微软就曾于2019年指出,内存安全占了 CVE 严重软件漏洞比例超过 70%。也正因此,通过MTE改善内存漏洞,成为了数字化和智能化体验的基础。
MTE是什么
从理念上来说,内存安全漏洞可分为空间型和时间型两种,如果指针指向超越范围称为空间型漏洞,而如果某个内存已经释放但还被使用,这就被称为时间型漏洞。
Arm实现的 MTE可简单理解为“锁”和“密钥”。如果密钥匹配,则允许访问锁内存;否则,访问可能会被记录下来或出错。具体执行过程中存在以下两种类型的标记:
地址标记——用作密钥。这将在进程中每个指针的最高位占用四位。地址标记仅适用于64位应用,因为它使用了“高位/高地址忽略”功能,这是 Arm 64 位独有的功能。
内存标记——用作锁。内存标记也由四位组成,与应用内存空间中每个对齐的 16 字节区域相连接。Arm 将这些 16 字节区域称为标记颗粒。这四位并不用于应用数据,而且是分开存储。
与合作伙伴共同推进MTE
通过这一过程,可以确保安全,稳定以及可靠的消费者体验。目前Arm已经和Google及广泛的生态伙伴合作,力求加速MTE技术的导入。
MediaTek 无线通信事业部资深总监章立表示,在MediaTek看来,芯片级安全是整个移动生态的基础,因此在2022年发布的天玑9200就已经支持MTE,可以帮助开发者有效的动态捕捉指针错误。
“我最早听到国内开发者提到 MTE 技术的时候是去年,我们当时认为 MTE应该没有太多的开发者知道,但当我们跟一个头部的游戏工作室交流的时候,他们的首席架构师就直接问我们的 SoC 能不能支持 MTE。”章立说道。
最近,MediaTek上线了天玑开发者中心,未来将利用天玑开发者中心来推广MTE应用生态。
vivo芯片规划和架构高级总监夏晓菲表示,vivo与Arm和MediaTek 合作,在X90和X80上提供MTE开发。
vivo正在构建一个从组织到技术,从整体流程到完整体系的安全保证。同时,夏晓菲也阐述了vivo对于隐私保护的三原则,既数据最小化,使用特别是分享数据时,严格对非必要的隐私数据进行过滤透明可控;设备上各应用服务的隐私数据的使用情况可查看、可管控;隐私端侧处理,隐私数据在不出设备的前提下为用户提供定制化的各类服务。
为了实现完整的安全,vivo也推出了千镜安全引擎,基于芯片层、内核层、框架层在一起的安全系统架构。
荣耀公司MagicOS DFX架构师余亮介绍了荣耀天网采用MTE的原因。
目前踩内存(指访问了不应该访问的内存地址)的问题影响非常大,轻则导致不可用或闪退,重则重启,并且定位周期长。而MTE可以在踩内存时第一时间捕获现场日志并准确定位,拥有更低的内存开销和更好的指令性能,相比ASan、HWASan 更接近用户真实的性能环境。
目前荣耀天网开放了基于 MTE/ HWAsan 踩内存检测,以及内存泄漏的检测功能,无论对于有源代码和无源代码,应用或者服务无需重新编译,安装即可支持踩内存故障的检测,同时天网也集成了内存泄露的检测,提供了泄露栈的聚合能力。
目前荣耀天网有两种接入方式,第一购买支持 MTE 的设备,联系荣耀,通过 HOTA 升级到天网版本。第二是云服务方式,企业开发者用户登录荣耀开发者网站,进入远程真机调试环境,进入后获得和真机一样的调试环境,可以进行UI 测试以及获取故障定位日志,定位日志会直接输出在 logcat 上。
快手 Android 架构师李锐则表示,快手拥有复杂的业务形态和开发体系,移动端的版本迭代也几乎维持着每周一次的迭代频率。很多问题只有在特定场景触发,难以复现。过去单靠旧的工具进行线上拦截只能解决一小部分问题,还有很多问题都是未知的,并且流程方法相对复杂和低效。
内存稳定性问题一直都是业界难题,包括线上监控难,线下复现难,编译插桩开销大,修复时间紧迫等问题。李锐表示,过去大型工程中的内存安全检测工具很难同时满足高性能、高召回率和高易用性三点。比如 Asan 依赖源码的重编译,性能开销也比较大,会显著拖慢程序的运行效率,源码入侵程度也比较高,接入成本比较高。HWASan 是 ASan 的改良版,降低了 ASan 的内存开销,但是 HWASan 的 CPU 的性能成本和接入成本其实并没有改变。Gwp-ASan 也是 Google 在HWASan上的进一步尝试和努力,它解决了一部分的问题,降低了性能开销和接入成本,但是它的检测范围又非常有限,完全依赖Gwp-ASan会导致部分问题漏检。
而Arm的 MTE可同时解决以上三大矛盾,能够大大降低 CPU开销和内存开销,无需源码重新编译就可以实现内存破坏的检测。
目前快手已经将MTE融入到日常的 CI/CD 中,并积累出一套自定义的 MTE 集成方案。
而MTE上线后,快手的内存稳定性获得显著的提升。开启 MTE 检测时,App的运行速度相较于使用 ASan 时提升了十倍以上,资源消耗也降低非常多,进程内存消耗也降低一倍以上,检出率获得了大幅提升。
李锐认为 MTE 给内存安全领域带来了革命性的改变,使用 MTE 可以大大提升开发效率和排查效率,使得内存安全问题无处可藏。但他同时表示,目前支持MTE的设备还比较少,希望未来MTE的设备扩充得更多,集成方式更加灵活并且支持栈内存和全局变量检测。这需要所有上下游产业链的通力合作,才能给用户带来更好体验。