最近我阅读了一些参考资料, 学习了Apple近几年的软硬件协同的漏洞防护技术, 特此总结如下, 希望是正确的:
RoRgn: 若干MMIO寄存器, 存储了一个物理地址范围, 该范围内的物理地址不可被写入。
KTRR: 处理器核里面的若干控制寄存器, 存储了一个物理地址范围, 在开启MMU的情况下, EL1 (内核态)仅能执行该范围内的代码, 即使其他页在页表中有执行权限。一般这个范围是RoRgn的范围的子集。
APRR: 页表项中的权限位不再被看成是权限位, 而是一个索引号。处理器核中引入若干控制寄存器, 指定每个索引对应的真实的页权限是什么, 同时还有寄存器可以消去每个索引的特定权限。似乎有点类似于Intel MPK技术。
PPL: 将页表等敏感数据放置在特定内存页(PPL数据), 同时, 将访问页表等敏感数据的内核代码独立出来, 放在特定内存页(PPL代码)。利用APRR机制, 通过在进出PPL代码时修改权限, 仅允许内核在进入PPL代码后且在退出PPL代码前, 访问这些PPL数据, 或者执行PPL代码。为了使得内核其他部分能够调用这些PPL代码, 该机制设置了蹦床, 这是PPL代码的唯一入口点。
ARM PA: 略。
此外, 据了解, 这些方案都能够被绕过, 我需要进一步学习。
参考资料:
- https://siguza.github.io/KTRR/
- https://siguza.github.io/APRR/
- https://xerub.github.io/ios/kpp/2017/04/13/tick-tock.html
- http://newosxbook.com/articles/CasaDePPL.html
- https://i.blackhat.com/USA-19/Thursday/us-19-Krstic-Behind-The-Scenes-Of-IOS-And-Mas-Security.pdf
- https://github.com/ssd-secure-disclosure/typhooncon2019/blob/master/Siguza%20-%20Mitigations.pdf
- https://googleprojectzero.blogspot.com/2019/02/examining-pointer-authentication-on.html
- https://googleprojectzero.blogspot.com/2020/07/the-core-of-apple-is-ppl-breaking-xnu.html
发表评论