您正在使用IE低版浏览器,为了您的雷峰网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
此为临时链接,仅用于文章预览,将在时失效
专栏 正文
发私信给小芹菜
发送

9

在非越狱的iPhone 6上,黑客如何盗取你的App Store密码?

本文作者:小芹菜 2015-09-20 16:30
导语:最近Xcode事件让更多人看到了iOS系统也并非牢不可破,苹果的安全神话已经被打破。

【编者按】最近Xcode事件让更多人看到了iOS系统也并非牢不可破,苹果的安全神话已经被打破。本文来自乌云知识库,是2月份时候乌云出的分析文。尽管苹果在iOS 9中已经修复了这些漏洞,但并不影响这篇文章对 iOS 8.1.3 的钓鱼分析。雷锋网希望本文能让读者有所借鉴,正确看待苹果系统背后潜在的威胁。

在非越狱的iPhone 6上,黑客如何盗取你的App Store密码?

注意:本文是针对 iOS 8.1.3,iOS9已经修复。

前言

我们去年3、4月份在iOS还是7.0的时候就发现了一个能在非越狱的iOS设备上进行钓鱼的攻击方法 (可以盗取Apple id的密码,、gmail的密码等),很早就报给了Apple 公司,而到现在Apple也没有修复(事实上在iOS9中已经修复)。为了紧跟Project Zero的潮流(90天的漏洞披露策略),现在打算公开demo和细节: 



首先我来解读一下这个demo。在非越狱的iPhone 6 (iOS 8.1.3) 上盗取App Store密码:


   

在这个demo中,App Store是货真价实的系统App,但是弹出来的登录框不是App Store的,而是另一个在后台运行的app伪造的。

我们知道在沙盒策略中,一个App运行在自己的沙盒空间中,理论上说是无法影响其他App的,如果能够产生影响就是一个很严重的问题。

除了沙盒逃逸外,要让这个demo成功还需要具备以下几点要求:

安装钓鱼app到目标设备。


后台无限运行并开机启动。


检测目标app(比如App Store)的运行状态。


得到Apple ID的用户名以便实施钓鱼攻击。


弹出钓鱼对话框,并将用户输入的密码上传到服务器。


如何钓鱼,

1. 安装钓鱼App到目标设备


钓鱼App会使用一些特殊的API函数(后面会讲到,因为这些API不属于PrivateFrameworks,所以不确定是否是Private API),所以我们需要考虑如果App Store拒绝接受这种App的情况。

如果App Store拒绝接受的话,一般有两个方案:

  • 采用特殊手段绕过检测:最简单的方法是采用混淆和动态加载,这个是360当年最爱用的方法,后来被Apple发现了,所有App被迫下架了1-2年。复杂的方法请参考Usenix Security的paper:Jekyll on iOS: When Benign Apps Become Evil。这种方法是先上传一个有溢出漏洞的App到App Store,然后采用远程ROP Attack的方法触发漏洞然后调用Private API。

  • 使用企业证书或者开发者证书签名App。这样的话就不通过App Store,而是通过USB等方法直接安装App到手机上。也就是PP助手,同步推使用的手法。想要做到这点很简单,一个国外的开源库libimobiledevice 就可以满足你的需求。


2.后台无线运行并开机启动


这个有好几种方案,我这里简单介绍两种:

  • 如果是采用企业证书或者开发者证书传播的话,只需要在UIBackgroundModes的plist里添加:Continuous,unboundedTaskCompletion和VOIP的属性即可。前两个算是private API,如果上传到App Store是不会通过审核的。

  • 如果想要上传到App Store,就需要伪装成一个VOIP类型的App,这样的话可以做到开机启动。随后可以采用后台播放无声音乐的方法做到后台运行.播放工具可以采用AVAudioPlayer 这个对象,然后声明一个AudioSessionProperty_OverrideCategoryMixWithOthers的属性。因为是MixWithothers,在面板上不会有任何显示,用户并不会发现有音乐在播放,并且其他播放器在放音乐的时候也没有任何影响。



3.检测目标App(比如App Store)的运行状态

这个也有好多方法,简单介绍两个:

  • UIDevice Category For Processes 。通过这种方法,可以获取到当前运行的程序。Demo中就是每隔5秒钟检测一次当前运行的程序是否有App Store,如果有,弹出钓鱼对话框。

  • 获取所有安装的App的信息。使用LSApplicationWorkspace这个对象可以获取到所有已经安装的App的信息。


4.得到Apple ID的用户名以便实施钓鱼攻击。


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接口,也没有做任何的权限检测,最后导致了沙盒逃逸。


在非越狱的iPhone 6上,黑客如何盗取你的App Store密码?

(真正的对话框)

在非越狱的iPhone 6上,黑客如何盗取你的App Store密码?

(伪造的对话框)

结语

人们往往认为iOS比Android安全,所以在使用苹果手机的时候格外大胆,但事实并非如此。通过几个漏洞的combo,黑客们可以很容易的骗取你的帐号密码。更恐怖的是,本文所展示iOS漏洞也只是冰山一角。关于更多关于iOS远程控制,监控等漏洞的利用等,可以关注乌云知识库

雷峰网原创文章,未经授权禁止转载。详情见转载须知

在非越狱的iPhone 6上,黑客如何盗取你的App Store密码?

分享:
相关文章

编辑

雷锋网编辑,AI慕课学院负责人。关注智能驾驶与金融科技,欢迎来撩:www.mooc.ai。
当月热门文章
最新文章
请填写申请人资料
姓名
电话
邮箱
微信号
作品链接
个人简介
为了您的账户安全,请验证邮箱
您的邮箱还未验证,完成可获20积分哟!
请验证您的邮箱
立即验证
完善账号信息
您的账号已经绑定,现在您可以设置密码以方便用邮箱登录
立即设置 以后再说