iOS 系统的安全性都是大家公认的,只要正常使用都不会出现被盗号或者被植木马这种情况出现。是不是真的这样?非越狱的 iPhone 真的 100% 安全吗?
今天下午在乌云平台(WooYun)发布的一篇漏洞报告文章指出,iOS 系统的 URL Scheme 机制存在重大安全隐患,即便是非越狱系统,也会出现账户被盗的可能。
文章作者 @蒸米spark 是来自香港中文大学的博士生,他为了证明这一漏洞,制作了用 URL Scheme 设计漏洞劫持微信/支付宝账号密码的 Demo。作者声明该漏洞是 iOS 系统漏洞,和支付宝、微信 App 无关,只是拿支付宝和微信作为演示漏洞的应用,其他应用同样可以中招,转发者请勿断章取义。
在未越狱的 iPhone6(iOS 8.2)上盗取支付宝帐号密码:
在未越狱的 iPhone6(iOS 8.2)上盗取微信支付密码:
原理:
在 iOS 上,一个应用可以将其自身“绑定”到一个自定义 URL Scheme 上,该 scheme 用于从浏览器或其他应用中启动该应用。如果是有用过《Launch Center Pro》和《Workflow》这类 App 的朋友,应该多少明白 URL Scheme 的原理。
在正常的支付流程中,某个 App(视频上是美团)首先将订单信息通过 URL Scheme 发送给支付宝(Alipay),支付宝收到订单信息,调用支付界面,用户在支付宝上完成支付后,支付宝再发送一个 URL Scheme 给美团,美团收到付款信息后,显示团购成功的界面。
在 iOS 系统中,多个应用程序注册了同一种 URLScheme 的时候,iOS 系统程序的优先级高于第三方开发程序。但是一种URLScheme 的注册应用程序都属于第三方开发,那么它们之间就没有优先级了。作者经过测试,证明系统判定优先级顺序与 Bundle ID 有关(一个 Bundle ID 对应一个应用),如果有人精心伪造 Bundle ID,iOS 就会调用 我们 App 的 URL Scheme 去接收相应的 URL Scheme 请求。
劫持过程:
演示视频中“伪装”成支付宝的“FakeAlipay”,在收到美团发来的订单信息后,生成了一个和支付宝一样的登陆界面,用户在输入帐号密码后,FakeAlipay 会把帐号密码以及订单信息发送到黑客的服务器上,黑客获得这些信息后可以在自己的 iOS 设备上完成支付,并把支付成功的 URL Scheme 信息发回给 FakeAlipay,FakeAlipay 再把支付成功的 URL Scheme 信息转发给美团。这样就完成了一次被劫持的支付。
此外文章中还演示了利用一个 App 使用 Google Chrome 的 URL Scheme 去劫持 Google.com 的过程,说明 Google Chrome 同样不安全,而且大家都知道像 Chrome、Facebook 的 URL Scheme 非常热门,很多第三方应用都能声明 Chrome、Facebook 的 URL Scheme 通过苹果审核,在这样的系统缺陷下,不管国内、国外、热门、冷门 App都难逃一劫。
作者建议:
作者在文章中表示该漏洞利用简单,修复却非常复杂,所以在 iOS 8.2 上还是未能修复。但他还是提出了几点建议让开发者参考:
1.苹果可以限制 iOS 应用不能注册别的应用的 Bundle ID 作为 URL Scheme。这样的话,使用自己的 Bundle ID 作为 URL Scheme 的接收器就会变的安全很多。
2.第三方应用可以通过①给自己发送 URL Scheme 请求来证明没有被劫持,如果没有收到自己的 URL Scheme,就可以及时给用户发送提醒;②利用 MobileCoreServices 服务中的 applicationsAvailableForHandlingURLScheme() 来查看所有注册了该 URL Schemes 的应用和处理顺序,从而检测自己、或者别人的 URL Scheme 是否被劫持。
具体原文和视频可以点击这里查看,希望借助这样的一个漏洞报告能够让大家提高警惕,同时让苹果做出回应,从系统上解决这一问题。APP 开发商也要从自身考虑引入安全机制,不能完全依赖苹果。
via:WeAnd