Linux内核v5.10合并ARM64的MTE

Linux
WinterIsComing (31822)发表于 2020年10月22日 15时04分 星期四
来自部门
HardenedLinux 写道 "继ARMv8.3的Pointer Authentication后最近Linux内核v5.10合并了ARMv8.5-A的一个重要特性:MTE( Memory Tagging Extension),由于ARM64并未完全使用64位的地址空间而是48位(4级页表+4KB页大小)或者52位(3级页表+64KB页大小),借助于TBI( Top Byte Ignore)忽略掉最高有效位得以让MTE使用56--59的4位作为tag,每个tag对应16-byte作为TG( Tag Granule),由新指令IRG生成“密钥”随机数存储到tag部分的4位地址,相关内存访问都会对比tag部分的“密钥”,如果失败则发起异常处理。4位地址极其有限不可能保证地址空间中没有重合,但MTE的目标是保证临近地址的至不同即可。目前Linux内核v5.10支持用户空间的程序使用MTE,内核本身的支持还需要一段时间,用户空间的程序可以通过简单的mmap(),mprotect()以及prctl()系统调用实现 。现在还没有公开发售的支持ARMv8.5-A的硬件,软件生态的完善可以为未来( 2021?)的硬件有更好的支持。在过去超过30年的内存攻防对抗的头10年攻击的一方一直占据优势,直到PaX的问世开启了操作系统的防御之路,于2003年公开的pax-future.txt中谈到了内存污染攻击的三大方法,其中"添加/执行任意代码"和"执行现有代码,但是打破了程序原本的执行顺序"已经通过PAX_PAGEEXEC/KERNEXEC/NX以及PAX_RAP相关CFI实现等mitigation解决,而data-only attacks虽然已经抑制到较小的维度但依然没有完全解决,毕竟类似KERNSEAL实现如果没有硬件加速的前提下性能的表现不被大部分用户所接受所以只能应用于非通用场景,不论如何,MTE的确是过去17年系统安全领域最重要的里程碑之一(即使实现和工程打磨还需要不少的时间),未来的QA流程以及生产环境安全方面都会大幅度提升软件质量以及安全性。"