基于 A11 iPhone 的 KTRR 绕过的 iOS 内核调试器; 可与 LLDB 和 IDA Pro 兼容。
KTRW 是一个适用于搭载 A11 SoC 的设备(如 iPhone 8)的 iOS 内核调试器。它展示了如何使用这些设备上的调试寄存器绕过 KTRR,将内核映射为可写,并加载一个实现 GDB 代理的内核扩展,从而通过标准 Lightning 到 USB 线缆实现全功能的内核调试,使用 LLDB 或 IDA Pro。随着 checkra1n 脱锁和 pongoOS 预引导环境的发布,现在可以将 KTRW 直接加载为内核扩展到 iOS 内核缓存中,因此原有的 KTRR 绕过不再被使用。
绕过 KTRR
KTRR 在 A10 中被引入,用于锁定关键内核数据(包括所有可执行代码),以防止其被修改,即使是具有内核内存读/写能力的攻击者也无法修改。然而,在 A11 SoC 中,ARMv8 外部调试寄存器和一个名为 DBGWRAP 的专有寄存器仍然被启用。这使得可以在这些设备上颠覆重置向量的执行,跳过 MMU 的 KTRR 初始化,并设置一个自定义页表基地址,将内核映射为可写。一旦 KTRR 被禁用,就可以动态加载内核代码,即加载内核扩展。
请注意,即使内核被映射为可写,但 AMCC RoRgn 所覆盖的物理页面仍然受到内存控制器的保护,因此对这些物理页面的写入将被丢弃。绕过 MMU 上的 KTRR 并不能破坏 AMCC 上的 KTRR,因此要将内核映射为可写的唯一方法是将 AMCC RoRgn 中的内核数据复制到新的可写物理页面。但由于 AMCC 仍然保护原始物理页面,并且由于重置向量从 AMCC RoRgn 内的物理地址执行,因此无法持续修改重置向量,以在重置时自动禁用 KTRR,除非具有更强大的功能(例如
暂无开放 Issues,或尚未同步最近议题。