5.弹出钓鱼对话框,并将用户输入的密码上传到服务器。正常的对话框是采用UIAlertView这个类,但是用这个类产生的对话框只能在自己app的view上显示。但如果采用CoreFoundation 这个framework (非private framework)中的CFUserNotificationCreate()和 CFUserNotificationReceiveResponse()方法的话,一个app就可以跳出沙盒的限制,并且在别的app界面上弹出自己的对话框。比如下图,第一个是真正的对话框,而第二个是我伪造的,为了区分,我故意把K变成了小写。通过CFUserNotificationCreate()这个API,我们可以伪造很多应用的登陆对话框,不光是App Store,还可以是YouTube,Gmail,天猫等等。因为伪造的对话框和真实对话框没有任何区别,用户中招的几率会变得非常大。这个API本来是为Mac OS X设计的,但是因为iOS和Mac OS X共用了一些基本的底层框架,但是在iOS并没有屏蔽这个API接口,也没有做任何的权限检测,最后导致了沙盒逃逸。
1. Min Zheng, Hui Xue, Yulong Zhang, Tao Wei, John C.S. Lui.
"Enpublic Apps: Security Threats Using iOS Enterprise and Developer Certificates". (Full Paper)
Proceedings of 10th ACM Symposium on Information, Computer and Communications Security (ASIACCS 2015)
2. Tielei Wang, Kangjie Lu, Long Lu, Simon Chung, and Wenke Lee.
"Jekyll on iOS: When Benign Apps Become Evil", Proceedings of Usenix Security 2013