我们去年3,4月份在iOS还是7.0的时候就发現了一个能在非越狱的ios设备上进行钓鱼的攻击方法 (可以盗取Apple id的盗密码软件, gmail的盗密码软件等)很早就报给了apple (Follow-up id: ),到现在apple也没有修复为了紧跟Project Zero嘚潮流(90天的漏洞披露策略),现在打算公开demo和细节:
在这个demo中App Store是货真价实的系统app,但是弹出来的登录框不是App
Store的而是另一个在后台运荇的app伪造的。我们知道在沙盒策略中一个app运行在自己的沙盒空间中,理论上说是无法影响其他app的如果能够产生影响就是一个很严重的問题。除了沙盒逃逸外要让这个demo成功还需要具备以下几点要求:1、安装钓鱼app到目标设备。2、后台无限运行并开机启动3、检测目标app(比洳App Store)的运行状态。4、得到Apple
ID的用户名以便实施钓鱼攻击5、弹出钓鱼对话框,并将用户输入的盗密码软件上传到服务器
1、 安装钓鱼app到目标設备。
钓鱼app会使用一些特殊的API函数(后面会讲到因为这些API不属于PrivateFrameworks,所以不确定是否是private API)所以我们需要考虑如果App Store拒绝接受这种app的情况。洳果App
Store拒绝接受的话一般有两个方案:1、采用特殊手段绕过检测:最简单的方法是采用混淆和动态加载,这个是360当年最爱用的方法后来被Apple发现了,所有app被迫下架了12年。复杂的方法请参考Usenix Security的paper:Jekyll on iOS: When Benign Apps Become Evil这种方法是先上传一个有溢出漏洞的App到App
Store,然后采用远程ROP Attack的方法触发漏洞然后调鼡private API2、使用企业证书或者开发者证书签名app。这样的话就不通过App Store而是通过USB等方法直接安装App到手机上。也就是PP助手同步推使用的手法。想偠做到这点很简单一个国外的开源库libimobiledevice(
2.后台无线运行并开机启动。
这个有好几种方案我这里简单介绍两种:1、如果是采用企业证书戓者开发者证书传播的话,只需要在UIBackgroundModes的plist里添加:ContinuousunboundedTaskCompletion和VOIP的属性即可。前两个算是private API如果上传到App Store是不会通过审核的。2、如果想要上传到App
Store就需偠伪装成一个VOIP类型的App,这样的话可以做到开机启动随后可以采用后台播放无声音乐的方法做到后台运行,播放工具可以采用AVAudioPlayer
这个对象嘫后声明一个AudioSessionProperty_OverrideCategoryMixWithOthers的属性。因为是MixWithothers在面板上不会有任何显示,用户并不会发现有音乐在播放并且其他播放器在放音乐的时候也没有任何影響。
Store如果有,弹出钓鱼对话框2、获取所有安装的app的信息。使用LSApplicationWorkspace这个对象可以获取到所有已经安装的App的信息
4.得到Apple ID的用户名以便实施釣鱼攻击。这个细节请参考CVE-
CFUserNotificationReceiveResponse()方法的话,一个app就可以跳出沙盒的限制并且在别的app界面上弹出自己的对话框。比如下图第一个是真正的對话框,而第二个是我伪造的为了区分,我故意把K变成了小写通过CFUserNotificationCreate()这个API,我们可以伪造很多应用的登陆对话框不光是App
Store,还可以是YouTubeGmail,天猫等等因为伪造的对话框和真实对话框没有任何区别,用户中招的几率会变得非常大这个API本来是为Mac OS X设计的,但是因为iOS和Mac OS X共用了一些基本的底层框架但是在iOS并没有屏蔽这个API接口,也没有做任何的权限检测最后导致了沙盒逃逸。
总结:人们往往认为iOS比android的安全所以茬使用苹果手机的时候格外大胆,但事实并非如此通过几个漏洞的combo,黑客们可以很容易的骗取你的帐号盗密码软件更恐怖的是,本文所展示iOS漏洞也只是冰山一角在我们ASIACCS 15论文中,我们还介绍了iOS远程控制监控等漏洞的利用,有兴趣的同学可以继续学习
}