-
-
[转帖]神奇小子Geohot对本次越狱的逆向工程分析
-
发表于: 2014-3-15 13:21 6270
-
原文地址:3aeK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3N6W2L8$3S2G2N6q4)9J5k6h3y4G2L8g2)9J5c8X3f1%4N6%4u0A6N6r3g2#2M7q4)9J5k6h3S2@1L8h3H3`.
译文地址:bb5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3W2H3K9r3!0F1k6g2)9J5k6i4c8Y4j5Y4g2K6i4K6u0W2j5$3!0E0i4K6u0r3L8X3g2%4M7#2)9J5c8X3y4D9j5i4y4K6i4K6u0r3x3U0l9I4x3K6p5J5i4K6u0r3x3U0l9I4x3K6p5J5x3U0b7I4y4U0p5J5x3K6q4Q4x3X3g2K6K9s2c8E0L8l9`.`.
这一次可爱(气急败坏的)Geohot,也就是我们的神奇小子,发了一篇Evasi0n7的越狱解析。同时通过他的解析我们也可以推断出一些越狱内幕。神奇小子以Evasi0n软件的第一视角展示了Evasi0n是如何工作的。
Geohot用比喻写出了这次越狱的商业竞争:最开始他想用7美金和去中国旅游吃必胜客自助沙拉来和中国人做这笔越狱交易,可惜他发现中国必胜客已经没有自助沙拉了,那还玩个毛,所以才没这笔交易。还发了个中国人如何在自助沙拉堆沙拉的新闻:f3fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3E0G2N6r3q4C8N6g2)9J5k6h3y4G2L8g2)9J5c8X3S2G2N6#2)9J5k6r3y4Z5K9h3&6W2M7$3g2Q4x3X3c8A6L8X3N6W2L8Y4g2A6N6s2W2Q4x3X3c8V1k6i4y4@1M7X3!0&6k6h3c8Q4x3X3c8K6j5h3I4S2k6q4)9J5k6r3u0S2M7Y4y4Q4x3X3c8S2N6q4)9J5k6s2m8A6P5Y4A6S2i4K6u0V1K9s2g2@1i4K6u0V1z5o6x3@1z5o6x3#2x3o6M7&6i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1$3i4K6S2p5i4@1q4q4i4@1f1$3i4K6S2q4i4@1p5^5i4@1f1$3i4@1t1#2i4K6S2n7i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0m8i4@1p5@1i4@1f1$3i4K6V1^5i4K6V1K6i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1$3i4@1q4r3i4K6S2r3i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1$3i4@1q4o6i4@1p5I4i4@1f1^5i4@1t1$3i4K6S2m8i4@1f1%4i4K6S2n7i4@1t1I4i4@1f1@1i4@1u0n7i4K6V1$3i4@1f1^5i4@1t1#2i4K6W2m8i4@1f1@1i4@1t1^5i4K6R3K6i4@1f1%4i4@1u0q4i4K6S2q4i4@1f1&6i4K6R3%4i4K6V1I4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0p5i4K6R3$3c8i4k6S2k6r3g2J5M7#2!0q4y4g2)9&6b7W2!0m8x3W2!0q4z5g2)9&6z5q4)9&6c8W2!0q4z5q4)9^5x3g2!0m8b7g2!0q4y4W2)9&6z5q4)9^5c8g2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4#2)9&6y4q4!0m8z5q4!0q4y4q4!0n7z5g2!0n7x3q4!0q4y4W2)9&6y4W2!0m8c8q4!0q4y4q4!0n7b7W2!0n7y4#2!0q4y4g2)9^5c8q4)9&6y4W2!0q4y4#2!0n7b7W2)9&6z5g2!0q4y4q4!0n7b7g2)9^5y4W2!0q4y4q4!0n7z5q4!0m8c8q4!0q4y4g2)9&6b7W2!0n7c8q4!0q4y4g2)9&6b7W2!0m8x3W2!0q4z5g2)9&6z5q4)9&6c8W2!0q4c8W2!0n7b7#2)9^5z5q4!0q4y4W2)9&6c8W2)9&6x3q4!0q4y4W2)9&6c8g2)9^5x3g2!0q4c8W2!0n7b7#2)9^5z5g2!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4W2)9^5z5g2)9^5c8q4!0q4y4W2)9&6b7#2)9^5z5g2!0q4y4q4!0n7b7g2)9^5y4W2!0q4y4#2)9^5c8g2!0n7x3q4!0q4y4g2)9&6b7#2!0m8z5q4!0q4y4#2)9&6b7g2)9^5y4q4!0q4z5q4!0n7y4W2)9^5b7g2!0q4y4#2)9^5b7W2!0n7x3g2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
Geohot说他把这篇文章写出来是出于无聊,也是和大家介绍下这次越狱,并没有搅和同行干活的目的。这些东西不会帮助苹果封越狱漏洞,因为这是Evasi0n公用库里的东西,他所做的只是做了些逆向工程。Geohot表示自己不会再碰越狱了,除非出ARM128位处理器,这次开发越狱也是因为想玩玩64位。经过他的解析,中国人应该不会在越狱工具里安装后门。由于泄露,他和Evaders做的越狱80%重复,但基本漏洞和实现方式还是相同的。而且下次越狱肯定别想用了,封掉此漏洞很简单。下面是Evasi0n解析:
软件打开后会用afc通过查找文件” .evasi0n7_installed”检查越狱状态越狱状态。Afc运行在”/var/mobile/Media”,所以全路径是:"/var/mobile/Media/.evasi0n7_installed"。如果点击越狱按钮,即开启越狱之旅。
1. 获取远程包。现需要一个有代码签名的软件,通过查看” 5a0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3g2$3j5i4y4A6x3r3&6Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7s2m8D9k6g2)9J5k6r3W2H3j5g2)9J5k6r3W2F1k6X3!0Q4x3X3g2H3L8r3W2K6N6q4!0q4x3W2)9^5x3q4)9&6c8q4)9J5b7#2!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4#2)9&6c8W2!0m8y4g2!0q4z5g2)9^5x3g2)9&6x3#2!0q4z5q4)9^5c8g2!0n7y4#2!0q4y4g2)9^5c8W2)9&6y4W2!0q4z5q4!0n7y4#2!0m8c8W2!0q4y4g2!0n7c8g2)9^5y4q4!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4g2!0m8y4W2)9^5x3W2!0q4y4W2)9&6c8g2)9&6b7#2!0q4y4q4!0n7c8q4!0m8x3q4!0q4y4W2)9^5x3#2!0n7x3#2!0q4z5q4)9^5y4#2!0m8b7g2!0q4y4g2!0n7y4#2!0n7x3g2!0q4y4#2)9^5c8g2!0m8z5g2!0q4y4#2)9^5c8g2!0m8z5g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4z5q4!0n7c8W2)9&6x3q4!0q4z5q4!0m8x3g2)9^5b7#2!0q4c8W2!0n7b7#2)9&6b7b7`.`.
“curl -b"downloadKey=expires=1387947603~access=/us/r1000/098/Purple/v4/c3/4e/98/c34e989a-8522-fde0-db2d-884dd3b1302d/mzps6036043982514941651.D2.pd.ipa*~md5=dc91b9d5599eb2e135bddbec3ad5dbc2"9ddK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3p5K6z5e0k6Q4x3X3g2H3K9r3!0T1L8%4y4Q4x3X3g2S2M7s2m8D9k6g2)9J5k6h3y4G2L8g2)9J5c8Y4g2K6i4K6u0r3M7U0p5H3x3o6m8Q4x3V1j5H3z5e0S2Q4x3V1k6b7N6i4u0H3L8r3g2Q4x3V1k6$3y4q4)9J5c8X3x3K6i4K6u0r3y4r3g2Q4x3V1j5&6z5q4)9J5c8X3x3K6y4r3f1&6z5o6W2S2i4K6u0V1z5o6f1J5x3W2)9J5k6r3k6V1k6e0m8Q4x3X3c8V1j5U0u0V1i4K6u0V1z5o6R3@1k6r3b7K6j5U0p5K6x3o6u0V1i4K6u0r3L8i4A6H3M7K6j5H3x3K6j5H3y4o6x3&6z5o6t1#2x3e0b7&6y4o6p5$3y4e0q4Q4x3X3g2p5x3W2)9J5k6i4m8V1i4K6u0W2K9i4m8S2i4K6u0V1L8H3`.`. wwdc.ipa”
通过plist推断,这应该是一个WWDC大会人用的软件,最主要这软件是有代码签名的。
2. 上传越狱数据。把以下这三个文件通过afc上传到"/var/mobile/Media":"evasi0n-install/packagelist.tar","evasi0n-install/Cydia.tar","evasi0n-install/extras.tar"。留着一会越狱用。这里包含Cydia或者传说中的中国第三方商店。
3. 注入Evasi0n程序(1/2)。先不会安装程序,但是要把解压后的文件用afc上传到手机"/var/mobile/Media/Downloads/WWDC.app"。主程序”/var/mobile/Media/Downloads/WWDC.app/WWDC”没有被改权限,因为afc默认把权限改为664.
4. 注入Evasi0n程序(2/2)。现在修改一下pkg.ipa里面的Info.plist,加入一个新的可执行文件” ../../../../../../var/mobile/Media/Downloads/WWDC.app/WWDC”。至于为啥不用改别的,由于程序就是原版wwdc软件并且有签名,所以代码签名检查直接通过。上传pkg.ipa,运行ipa里的com.apple.mobile.installation_proxy(本地安装),然后再把程序图标改成Evasi0n越狱图标~ 大功告成!
现在有趣的开始了:再通过afc复制进手机两个文件,包含"#!/usr/libexec/afcd-S -d / -p 8888"的” Downloads/WWDC.app/WWDC”和"Downloads/WWDC.app/gameover.dylib"。懂了吧,这软件就是为了执行afcd用的,-S 是为了访问特殊文件,-d /让afcd在root下运行,-p 8888使其在8888端口运行。
但是afcd有沙盒限制的,肿么办捏? 注入刚才传上来的gameover.dylib。
geohot@comet:~/iphone/evasi0n2/extract$dyldinfo -export gameover.dylib
for archarmv7:
exportinformation (from trie):
[re-export]_SANDBOX_CHECK_NO_REPORT (_kCFBooleanTrue from CoreFoundation)
[re-export]_sandbox_check (_sync from libSystem)
[re-export]_sandbox_extension_consume (_sync from libSystem)
[re-export]_sandbox_extension_issue_file (_sync from libSystem)
[re-export]_sandbox_free_error (_sync from libSystem)
[re-export]_sandbox_init (_sync from libSystem)
[re-export] _sandbox_init_with_parameters (_sync from libSystem)
但是谁又签名了那个gameover.dylib呢?木有人。漏洞开始:如果S_ATTR_LOC_RELOC被设置成全可执行,当头+x被检查后+x就会被移除掉,但是在+xpages被映射前,执行代码签名
Afcd从binary里初始化沙盒,所以干掉dylib(gameover的LC_ID_DYLIB是"/usr/lib/system/libsystem_sandbox.dylib"),沙盒就不会被初始化,afcd也就想干嘛就干嘛了。
但是又怎么让dylib加载呢?就是下一步配置系统了。
5. 配置系统(1/2)。第一步先忙活些没用的,但是很可爱。从afc(还是执行在沙盒中的afc),想要访问”/tmp”就要创建个symlink。但是afc还是很聪明的不在目录外创建symlink。symlink("../../../../../tmp","Downloads/a/a/a/a/a/link") 还是在沙盒里面,是吧~rename("Downloads/a/a/a/a/a/link", "tmp") 不对,这是相对路径。穿越"/var/mobile/Media/tmp."../(Media)../(mobile)../(var)../(private)../tmp"
现在就可以访问”/tmp”了
6. 配置系统(2/2)。现在要拿出所有的缓存文件。用” com.apple.mobile.file_relay"然后请求”Caches”,会是个好大的文件从"/var/mobile/Library/Caches/com.apple.mobile.installation.plist",把"EnvironmentVariables"加入,到developer.apple.wwdc-Releaseapp。最帅的:"DYLD_INSERT_LIBRARIES -> /private/var/mobile/Media/Downloads/WWDC.app/gameover.dylib",现在afcd运行,gameover.dylib被注入。
现在要用mobilebackup来利用第二个漏洞、
现在的目的是把文件随便拷入/var,但不行,因为afc还运行在沙盒里。但是没事,可以编辑”/tmp”,像刚才展示的。对于每一个在"/var/mobile/Library/Caches/com.apple.mobile.installation.plist","/var/mobile/Library/Caches/com.apple.LaunchServices-054.csstore" 的文件,被强制重建, 和"/var/mobile/Library/Preferences/com.apple.backboardd.plist",被加入"BKNoWatchdogs"="Yes"去掉了程序启动30秒超时, 新建一个 "pkg.zip", 用afc上传到"/var/mobile/Media"。
然后,用命令去安装它,解压并创建了"/tmp/install_staging.XXXXXX/foo_extracted"。但是。。。记得刚才干了什么吗
symlink("../../..//var/mobile/Library/Caches/","tmp/install_staging.XXXXXX/foo_extracted.new")
move("tmp/install_staging.XXXXXX/foo_extracted","tmp/install_staging.XXXXXX/foo_extracted.old")
move("tmp/install_staging.XXXXXX/foo_extracted.new","tmp/install_staging.XXXXXX/foo_extracted")
<p style="line-height: nullpx; text-indent: 0em; text-align: left;">installd_extract("/var/mobile/Media/pkg.zip","tmp/install_staging.XXXXXX/foo_extracted")</p>
当解压到"tmp/install_staging.XXXXXX/foo_extracted",文件会去"/var/mobile/Library/Caches/",没有沙盒。
7. 重启。第一次重启。让com.apple.mobile.installation.plist 重新加载。
8. 要继续,请解锁设备并点Evasi0n图标。最后,当你点击图标,执行"#!/usr/libexec/afcd -S -d / -p 8888",gameover.dylib关闭了afc沙盒,但是还是mobile用户组。程序会快速做两件事,在沙盒外:symlink("../../../../../dev/rdisk0s1s1","/var/mobile/Library/Logs/AppleSupport")
利用漏洞,这个文件在每次重启时被CrashHousekeeping 执行chown mobile:mobile, 因为chowm要通过symlinks…
然后告诉"/var/mobile/Library/BackBoard/applicationState.plist"下次开机时重开evasin软件。
9. 再重启。。。"/dev/rdisk0s1s1"被chowm mobile:mobile,像刚才说到的
10. 修改rootfs。
现在afc在沙盒外运行,"/dev/rdisk0s1s1"是mobile:mobile,开始写块设备。
现在内核已经不允许重新以rw挂载rootfs。所以直接用afcd的-S选项写块设备。
被写入文件:
"/evasi0n7"-- the main binary which does the kernel exploit.
"/evasi0n7-installed"-- just a blank file
"/System/Library/LaunchDaemons/com.evad3rs.evasi0n7.untether.plist"-- touched to make launchd load this
"/System/Library/Caches/com.apple.xpcd/xpcd_cache.dylib"-- the new home of the LaunchDaemons, codesign haxx
"/System/Library/Caches/com.apple.dyld/enable-dylibs-to-override-cache"-- convinces the system to look on the filesystem before the dyld_cache
"/usr/lib/libmis.dylib"-- overrides the symbols in amfid to make the signature check return 0, withabove codesign trick
You know,[re-export] _MISValidateSignature (_CFEqual from CoreFoundation)
<p style="line-height: nullpx; text-indent: 0em; text-align: left;">"xpcd_cache.dylib" contains a plist with just twolaunchdaemons, com.apple.MobileFileIntegrity, which starts with the signaturefree libmis.dylib, and com.evad3rs.evasi0n7.untether, which is the unsigneduntether.</p>
由于DYLD_INSERT_LIBRARIES不会在amfid下好使,因为他有"__RESTRICT"字段。因此用刚才的trick,替换掉了真正的library.
11. 再重启。这回是更新刚才对块设备的更改。
12. 以root在设备上允许 /evasi0n7。现在又能看到水滴屏幕了,剩下的事就交给用户和稀泥了。
翻译的威锋技术组Jackie099有话说:由于好多术语无法翻译。不准确的地方求大家去看英文原版,清楚的多。
译文地址:bb5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3W2H3K9r3!0F1k6g2)9J5k6i4c8Y4j5Y4g2K6i4K6u0W2j5$3!0E0i4K6u0r3L8X3g2%4M7#2)9J5c8X3y4D9j5i4y4K6i4K6u0r3x3U0l9I4x3K6p5J5i4K6u0r3x3U0l9I4x3K6p5J5x3U0b7I4y4U0p5J5x3K6q4Q4x3X3g2K6K9s2c8E0L8l9`.`.
这一次可爱(气急败坏的)Geohot,也就是我们的神奇小子,发了一篇Evasi0n7的越狱解析。同时通过他的解析我们也可以推断出一些越狱内幕。神奇小子以Evasi0n软件的第一视角展示了Evasi0n是如何工作的。
Geohot用比喻写出了这次越狱的商业竞争:最开始他想用7美金和去中国旅游吃必胜客自助沙拉来和中国人做这笔越狱交易,可惜他发现中国必胜客已经没有自助沙拉了,那还玩个毛,所以才没这笔交易。还发了个中国人如何在自助沙拉堆沙拉的新闻:f3fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3E0G2N6r3q4C8N6g2)9J5k6h3y4G2L8g2)9J5c8X3S2G2N6#2)9J5k6r3y4Z5K9h3&6W2M7$3g2Q4x3X3c8A6L8X3N6W2L8Y4g2A6N6s2W2Q4x3X3c8V1k6i4y4@1M7X3!0&6k6h3c8Q4x3X3c8K6j5h3I4S2k6q4)9J5k6r3u0S2M7Y4y4Q4x3X3c8S2N6q4)9J5k6s2m8A6P5Y4A6S2i4K6u0V1K9s2g2@1i4K6u0V1z5o6x3@1z5o6x3#2x3o6M7&6i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1$3i4K6S2p5i4@1q4q4i4@1f1$3i4K6S2q4i4@1p5^5i4@1f1$3i4@1t1#2i4K6S2n7i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0m8i4@1p5@1i4@1f1$3i4K6V1^5i4K6V1K6i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1$3i4@1q4r3i4K6S2r3i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1$3i4@1q4o6i4@1p5I4i4@1f1^5i4@1t1$3i4K6S2m8i4@1f1%4i4K6S2n7i4@1t1I4i4@1f1@1i4@1u0n7i4K6V1$3i4@1f1^5i4@1t1#2i4K6W2m8i4@1f1@1i4@1t1^5i4K6R3K6i4@1f1%4i4@1u0q4i4K6S2q4i4@1f1&6i4K6R3%4i4K6V1I4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0p5i4K6R3$3c8i4k6S2k6r3g2J5M7#2!0q4y4g2)9&6b7W2!0m8x3W2!0q4z5g2)9&6z5q4)9&6c8W2!0q4z5q4)9^5x3g2!0m8b7g2!0q4y4W2)9&6z5q4)9^5c8g2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4#2)9&6y4q4!0m8z5q4!0q4y4q4!0n7z5g2!0n7x3q4!0q4y4W2)9&6y4W2!0m8c8q4!0q4y4q4!0n7b7W2!0n7y4#2!0q4y4g2)9^5c8q4)9&6y4W2!0q4y4#2!0n7b7W2)9&6z5g2!0q4y4q4!0n7b7g2)9^5y4W2!0q4y4q4!0n7z5q4!0m8c8q4!0q4y4g2)9&6b7W2!0n7c8q4!0q4y4g2)9&6b7W2!0m8x3W2!0q4z5g2)9&6z5q4)9&6c8W2!0q4c8W2!0n7b7#2)9^5z5q4!0q4y4W2)9&6c8W2)9&6x3q4!0q4y4W2)9&6c8g2)9^5x3g2!0q4c8W2!0n7b7#2)9^5z5g2!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4W2)9^5z5g2)9^5c8q4!0q4y4W2)9&6b7#2)9^5z5g2!0q4y4q4!0n7b7g2)9^5y4W2!0q4y4#2)9^5c8g2!0n7x3q4!0q4y4g2)9&6b7#2!0m8z5q4!0q4y4#2)9&6b7g2)9^5y4q4!0q4z5q4!0n7y4W2)9^5b7g2!0q4y4#2)9^5b7W2!0n7x3g2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
Geohot说他把这篇文章写出来是出于无聊,也是和大家介绍下这次越狱,并没有搅和同行干活的目的。这些东西不会帮助苹果封越狱漏洞,因为这是Evasi0n公用库里的东西,他所做的只是做了些逆向工程。Geohot表示自己不会再碰越狱了,除非出ARM128位处理器,这次开发越狱也是因为想玩玩64位。经过他的解析,中国人应该不会在越狱工具里安装后门。由于泄露,他和Evaders做的越狱80%重复,但基本漏洞和实现方式还是相同的。而且下次越狱肯定别想用了,封掉此漏洞很简单。下面是Evasi0n解析:
软件打开后会用afc通过查找文件” .evasi0n7_installed”检查越狱状态越狱状态。Afc运行在”/var/mobile/Media”,所以全路径是:"/var/mobile/Media/.evasi0n7_installed"。如果点击越狱按钮,即开启越狱之旅。
1. 获取远程包。现需要一个有代码签名的软件,通过查看” 5a0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3g2$3j5i4y4A6x3r3&6Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7s2m8D9k6g2)9J5k6r3W2H3j5g2)9J5k6r3W2F1k6X3!0Q4x3X3g2H3L8r3W2K6N6q4!0q4x3W2)9^5x3q4)9&6c8q4)9J5b7#2!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4#2)9&6c8W2!0m8y4g2!0q4z5g2)9^5x3g2)9&6x3#2!0q4z5q4)9^5c8g2!0n7y4#2!0q4y4g2)9^5c8W2)9&6y4W2!0q4z5q4!0n7y4#2!0m8c8W2!0q4y4g2!0n7c8g2)9^5y4q4!0q4x3#2)9^5x3q4)9^5x3W2!0q4y4g2!0m8y4W2)9^5x3W2!0q4y4W2)9&6c8g2)9&6b7#2!0q4y4q4!0n7c8q4!0m8x3q4!0q4y4W2)9^5x3#2!0n7x3#2!0q4z5q4)9^5y4#2!0m8b7g2!0q4y4g2!0n7y4#2!0n7x3g2!0q4y4#2)9^5c8g2!0m8z5g2!0q4y4#2)9^5c8g2!0m8z5g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4z5q4!0n7c8W2)9&6x3q4!0q4z5q4!0m8x3g2)9^5b7#2!0q4c8W2!0n7b7#2)9&6b7b7`.`.
“curl -b"downloadKey=expires=1387947603~access=/us/r1000/098/Purple/v4/c3/4e/98/c34e989a-8522-fde0-db2d-884dd3b1302d/mzps6036043982514941651.D2.pd.ipa*~md5=dc91b9d5599eb2e135bddbec3ad5dbc2"9ddK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3p5K6z5e0k6Q4x3X3g2H3K9r3!0T1L8%4y4Q4x3X3g2S2M7s2m8D9k6g2)9J5k6h3y4G2L8g2)9J5c8Y4g2K6i4K6u0r3M7U0p5H3x3o6m8Q4x3V1j5H3z5e0S2Q4x3V1k6b7N6i4u0H3L8r3g2Q4x3V1k6$3y4q4)9J5c8X3x3K6i4K6u0r3y4r3g2Q4x3V1j5&6z5q4)9J5c8X3x3K6y4r3f1&6z5o6W2S2i4K6u0V1z5o6f1J5x3W2)9J5k6r3k6V1k6e0m8Q4x3X3c8V1j5U0u0V1i4K6u0V1z5o6R3@1k6r3b7K6j5U0p5K6x3o6u0V1i4K6u0r3L8i4A6H3M7K6j5H3x3K6j5H3y4o6x3&6z5o6t1#2x3e0b7&6y4o6p5$3y4e0q4Q4x3X3g2p5x3W2)9J5k6i4m8V1i4K6u0W2K9i4m8S2i4K6u0V1L8H3`.`. wwdc.ipa”
通过plist推断,这应该是一个WWDC大会人用的软件,最主要这软件是有代码签名的。
2. 上传越狱数据。把以下这三个文件通过afc上传到"/var/mobile/Media":"evasi0n-install/packagelist.tar","evasi0n-install/Cydia.tar","evasi0n-install/extras.tar"。留着一会越狱用。这里包含Cydia或者传说中的中国第三方商店。
3. 注入Evasi0n程序(1/2)。先不会安装程序,但是要把解压后的文件用afc上传到手机"/var/mobile/Media/Downloads/WWDC.app"。主程序”/var/mobile/Media/Downloads/WWDC.app/WWDC”没有被改权限,因为afc默认把权限改为664.
4. 注入Evasi0n程序(2/2)。现在修改一下pkg.ipa里面的Info.plist,加入一个新的可执行文件” ../../../../../../var/mobile/Media/Downloads/WWDC.app/WWDC”。至于为啥不用改别的,由于程序就是原版wwdc软件并且有签名,所以代码签名检查直接通过。上传pkg.ipa,运行ipa里的com.apple.mobile.installation_proxy(本地安装),然后再把程序图标改成Evasi0n越狱图标~ 大功告成!
现在有趣的开始了:再通过afc复制进手机两个文件,包含"#!/usr/libexec/afcd-S -d / -p 8888"的” Downloads/WWDC.app/WWDC”和"Downloads/WWDC.app/gameover.dylib"。懂了吧,这软件就是为了执行afcd用的,-S 是为了访问特殊文件,-d /让afcd在root下运行,-p 8888使其在8888端口运行。
但是afcd有沙盒限制的,肿么办捏? 注入刚才传上来的gameover.dylib。
geohot@comet:~/iphone/evasi0n2/extract$dyldinfo -export gameover.dylib
for archarmv7:
exportinformation (from trie):
[re-export]_SANDBOX_CHECK_NO_REPORT (_kCFBooleanTrue from CoreFoundation)
[re-export]_sandbox_check (_sync from libSystem)
[re-export]_sandbox_extension_consume (_sync from libSystem)
[re-export]_sandbox_extension_issue_file (_sync from libSystem)
[re-export]_sandbox_free_error (_sync from libSystem)
[re-export]_sandbox_init (_sync from libSystem)
[re-export] _sandbox_init_with_parameters (_sync from libSystem)
但是谁又签名了那个gameover.dylib呢?木有人。漏洞开始:如果S_ATTR_LOC_RELOC被设置成全可执行,当头+x被检查后+x就会被移除掉,但是在+xpages被映射前,执行代码签名
Afcd从binary里初始化沙盒,所以干掉dylib(gameover的LC_ID_DYLIB是"/usr/lib/system/libsystem_sandbox.dylib"),沙盒就不会被初始化,afcd也就想干嘛就干嘛了。
但是又怎么让dylib加载呢?就是下一步配置系统了。
5. 配置系统(1/2)。第一步先忙活些没用的,但是很可爱。从afc(还是执行在沙盒中的afc),想要访问”/tmp”就要创建个symlink。但是afc还是很聪明的不在目录外创建symlink。symlink("../../../../../tmp","Downloads/a/a/a/a/a/link") 还是在沙盒里面,是吧~rename("Downloads/a/a/a/a/a/link", "tmp") 不对,这是相对路径。穿越"/var/mobile/Media/tmp."../(Media)../(mobile)../(var)../(private)../tmp"
现在就可以访问”/tmp”了
6. 配置系统(2/2)。现在要拿出所有的缓存文件。用” com.apple.mobile.file_relay"然后请求”Caches”,会是个好大的文件从"/var/mobile/Library/Caches/com.apple.mobile.installation.plist",把"EnvironmentVariables"加入,到developer.apple.wwdc-Releaseapp。最帅的:"DYLD_INSERT_LIBRARIES -> /private/var/mobile/Media/Downloads/WWDC.app/gameover.dylib",现在afcd运行,gameover.dylib被注入。
现在要用mobilebackup来利用第二个漏洞、
现在的目的是把文件随便拷入/var,但不行,因为afc还运行在沙盒里。但是没事,可以编辑”/tmp”,像刚才展示的。对于每一个在"/var/mobile/Library/Caches/com.apple.mobile.installation.plist","/var/mobile/Library/Caches/com.apple.LaunchServices-054.csstore" 的文件,被强制重建, 和"/var/mobile/Library/Preferences/com.apple.backboardd.plist",被加入"BKNoWatchdogs"="Yes"去掉了程序启动30秒超时, 新建一个 "pkg.zip", 用afc上传到"/var/mobile/Media"。
然后,用命令去安装它,解压并创建了"/tmp/install_staging.XXXXXX/foo_extracted"。但是。。。记得刚才干了什么吗
symlink("../../..//var/mobile/Library/Caches/","tmp/install_staging.XXXXXX/foo_extracted.new")
move("tmp/install_staging.XXXXXX/foo_extracted","tmp/install_staging.XXXXXX/foo_extracted.old")
move("tmp/install_staging.XXXXXX/foo_extracted.new","tmp/install_staging.XXXXXX/foo_extracted")
<p style="line-height: nullpx; text-indent: 0em; text-align: left;">installd_extract("/var/mobile/Media/pkg.zip","tmp/install_staging.XXXXXX/foo_extracted")</p>
当解压到"tmp/install_staging.XXXXXX/foo_extracted",文件会去"/var/mobile/Library/Caches/",没有沙盒。
7. 重启。第一次重启。让com.apple.mobile.installation.plist 重新加载。
8. 要继续,请解锁设备并点Evasi0n图标。最后,当你点击图标,执行"#!/usr/libexec/afcd -S -d / -p 8888",gameover.dylib关闭了afc沙盒,但是还是mobile用户组。程序会快速做两件事,在沙盒外:symlink("../../../../../dev/rdisk0s1s1","/var/mobile/Library/Logs/AppleSupport")
利用漏洞,这个文件在每次重启时被CrashHousekeeping 执行chown mobile:mobile, 因为chowm要通过symlinks…
然后告诉"/var/mobile/Library/BackBoard/applicationState.plist"下次开机时重开evasin软件。
9. 再重启。。。"/dev/rdisk0s1s1"被chowm mobile:mobile,像刚才说到的
10. 修改rootfs。
现在afc在沙盒外运行,"/dev/rdisk0s1s1"是mobile:mobile,开始写块设备。
现在内核已经不允许重新以rw挂载rootfs。所以直接用afcd的-S选项写块设备。
被写入文件:
"/evasi0n7"-- the main binary which does the kernel exploit.
"/evasi0n7-installed"-- just a blank file
"/System/Library/LaunchDaemons/com.evad3rs.evasi0n7.untether.plist"-- touched to make launchd load this
"/System/Library/Caches/com.apple.xpcd/xpcd_cache.dylib"-- the new home of the LaunchDaemons, codesign haxx
"/System/Library/Caches/com.apple.dyld/enable-dylibs-to-override-cache"-- convinces the system to look on the filesystem before the dyld_cache
"/usr/lib/libmis.dylib"-- overrides the symbols in amfid to make the signature check return 0, withabove codesign trick
You know,[re-export] _MISValidateSignature (_CFEqual from CoreFoundation)
<p style="line-height: nullpx; text-indent: 0em; text-align: left;">"xpcd_cache.dylib" contains a plist with just twolaunchdaemons, com.apple.MobileFileIntegrity, which starts with the signaturefree libmis.dylib, and com.evad3rs.evasi0n7.untether, which is the unsigneduntether.</p>
由于DYLD_INSERT_LIBRARIES不会在amfid下好使,因为他有"__RESTRICT"字段。因此用刚才的trick,替换掉了真正的library.
11. 再重启。这回是更新刚才对块设备的更改。
12. 以root在设备上允许 /evasi0n7。现在又能看到水滴屏幕了,剩下的事就交给用户和稀泥了。
翻译的威锋技术组Jackie099有话说:由于好多术语无法翻译。不准确的地方求大家去看英文原版,清楚的多。
[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
赞赏
雪币:
留言: