欢迎光临GGAMen游戏资讯




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

2024-11-23 208

注意:本文是针对 iOS 8.1.3,iOS 9 已经修复。2014 年 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 接口,也没有做任何的权限检测,最后导致了沙盒逃逸。

▲ 真正的对话框

▲ 伪造的对话框

结语

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


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

2019-03-29 23:30:00

标签:   游戏头条 资讯头条 ggamen科技资讯 ggamen科技 ggamen科技资讯头条 科技资讯头条 ggamen游戏财经 新闻网 科技新闻网 科技新闻 ggamen 科技新闻 科技新闻网 新闻网 科技资讯头条 ggamen科技资讯头条 ggamen科技 ggamen科技资讯 资讯头条 游戏头条 ggamen游戏新闻网 科技新闻 科技新闻网 新闻网 ggamen游戏财经 科技资讯头条 ggamen科技资讯头条 ggamen科技资讯 资讯头条 游戏头条
0