Tag: 内核

寻找iOS内核符号

上周,谷歌零号项目的伊恩·比尔(Ian Beer)在Twitter上宣布,他将发布一些东西,以帮助任何希望引导iOS 11内核安全性研究的人,通过task_for_pid_0或tfp0提供对内核内存的读/写访问。 尽管围绕此公告感到非常兴奋的是有可能进行新的越狱,但我想以此为契机再次花时间在移动安全上。 我过去的大部分经验都是在应用程序级别测试中进行的,但我想深入了解操作系统本身的精髓。 乔纳森·莱文(Jonathan Levin)承诺提供了一个工具包,“对于那些在处理过程中最终获得对kernel_task端口(aka tfp0)的发送权,但又不知道下一步要做什么的人”,这似乎很棒潜水的机会。 贝尔先生的漏洞公告和PoC代码已于昨天发布,非常漂亮。 极好的文档(包括ASCII艺术堆栈示例!),干净,并且相对容易阅读和推理。 我已经准备好开始测试,但是很快遇到了麻烦。 贝尔先生很客气,可以为几种设备添加内核符号,但是我没有打算使用它。 幸运的是,作为该文档的一部分,他提供了有关如何查找符号的详细提示,因此我已准备好应对挑战。 这篇文章的其余部分将逐步介绍我寻找符号的过程,希望它可能对您增加对设备的支持也很有用。 除了未删除的符号外,我没有找到任何其他有关执行此操作的文档,因此我想为其他人员(和我自己)记录此过程。 视乔纳森·莱文(Jonathan Levin)的工具包中的内容而定,这可能不是必需的,但我认为这是一个有趣的学习练习。 查找符号的第一步是获取目标iOS版本的kernelcache 。 我跳到https://ipsw.me/并为我的iPad Mini 2以及已经在symbols.c定义了符号的设备之一下载了11.1.2固件。 拥有已经定义好的固件对确认我用来查找每个符号的过程是否正确非常有帮助,因为我们已经知道该设备应该使用的正确符号。 解压缩.ipsw文件后,我抓住了Levin先生的工具Joker。 在使用了一些选项之后,我将其指向带有-j和-m选项的kernelcache文件,以转储所有可用的符号。 输出包含我需要的以下符号的地址: KSYMBOL_OSARRAY_GET_META_CLASS KSYMBOL_IOUSERCLIENT_GET_META_CLASS KSYMBOL_IOUSERCLIENT_GET_TARGET_AND_TRAP_FOR_INDEX KSYMBOL_CSBLOB_GET_CD_HASH KSYMBOL_KALLOC_EXTERNAL KSYMBOL_KFREE KSYMBOL_OSSERIALIZER_SERIALIZE KSYMBOL_KPRINTF KSYMBOL_UUID_COPY 9点下来,10点走。 其余部分必须已被剥离(或首先没有像JOP小工具那样标记),因此是时候在IDA Pro中加载kernelcache文件了。 您当然可以为此使用其他反汇编程序,例如Binary Ninja,Hopper或radare2。 在此之前,我们需要解码kernelcache文件。 我从Joshua Wright找到了本指南来准备文件。 *在十六进制编辑器中打开kernelcache并查找0xFFCFFAEDFE,注意偏移量(435) * wget -q http://nah6.com/%7Eitsme/cvs-xdadevtools/iphone/tools/lzssdec.cpp* g ++ -o lzssdec lzssdec.cpp * ./lzssdec […]