返回列表 发新帖

iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码| →『网 ...

684.1k 9
kjeittccdf 发表于 2015-3-28 01:41:10|湖北 | 查看全部 阅读模式
摘自:蒸米@乌云知识库$ `( l6 K+ e0 @  B+ j9 ?8 f% m. O

6 U' H& D6 d& D) U0x00 前言" D) J7 N9 B" R8 o/ C/ ?4 A
微博:weibo.com/zhengmin1989
# t3 l4 u+ Z' O$ L2 G9 c' U% p) l7 m8 J

    8 J  _- f5 N+ h) ]
  • 该漏洞是 iOS 系统漏洞,和支付宝,微信 app 无关。本文只是拿支付宝和微 信作为演示漏洞的应用,其他应用同样可以中招,转发者请勿断章取义。
    8 G7 I; a! H4 Z. A
  • 此漏洞是另一 个漏洞,和“在非越狱的 iPhone 6 (iOS 8.1.3) 上进行钓鱼攻击 (盗取 App Store 密码)”上利 用的漏洞无关,本人不会干用一个漏洞写两个文章灌水的事情。
    5 b) P( ^' z; W3 K$ q0 I( N+ F+ o0 A
该漏洞最早是由我在 FireEye 的同事 hui, Song jin 和 lenx 发现的,因为该漏洞利用简单,修 复却非常复杂,所以在 iOS 8.2 上还是未能修复。虽然 iOS 尚未修复,但 app 本身还是可以 有防护的方法,本人在文章最后会提出一些应急的解决方案以供开发人员参考。. X) J- ~8 }$ b5 D3 u

( Q7 }5 K% ?9 S1 [- B& N3 z, b: f0x01 DEMO
, }! v% s) n) i! C3 j; T首先来看 demo: 在未越狱的 iPhone6(iOS 8.2)上盗取支付宝帐号密码。 Youtube(需翻墙): 腾讯视频$ m: V, I& [% X3 \

3 _* n& g9 ?; ]3 w; _
/ ^- r7 c1 I& p; Y: ^$ h1 L: g在未越狱的 iPhone6(iOS 8.2)上盗取微信支付密码。 Youtube(需翻墙) 腾讯视频) y* v9 A9 y. m9 W, S

, }2 r$ Z" f0 e  H2 l) M6 h8 _1 U2 l3 k/ Q/ ]" L
0x02 DEMO 细节分析(支付宝)8 ?6 N8 B! ^+ y! |/ E* e1 c
在 iOS 上,一个应用可以将其自身”绑定”到一个自定义 URL Scheme 上,该 scheme 用于 从浏览器或其他应用中启动该应用。这个设计非常类似于 android 上的 broadcast 和 broadcast receiver,但远远没有 android 上的复杂。美团利用支付宝付款的整个过程如图一所示:美团 首先将订单信息通过 URL Scheme 发送给 Alipay,Alipay 收到订单信息,调用支付界面,用户 在 Alipay 上完成支付后,Alipay 再发送一个 URL Scheme 给美团,美团收到付款信息后,显 示团购成功的界面。9 [; r- u+ m, S$ Z- }" o

iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码| →『网 ...

iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码| →『网 ...
6 A, e  K; {$ F& z: Y/ b
图一、正常支付流程( L. m( T- q% d; u% B! e
但因为 URL scheme 这个机制太简单了,完全没有考虑有多个 app 声明同一个 URL Scheme 的情况,也没有权限管理之类的方案。在 iOS 官方说明中:“在多个应用程序注册了同一种 URLScheme 的时候,iOS 系统程序的优先级高于第三方开发程序。但是如果一种URLScheme 的注册应用程序都是第三方开发的,那么这些程序的优先级关系是不确定的。”实际上,经 过我们的测试,这个顺序是和 Bundle ID 有关的,如果精心构造 Bundle ID,iOS 总是会调用 我们 app 的 URL Scheme 去接收相应的 URL Scheme 请求。那么问题来了,如果我们精心构 造一个 app 并声明“alipay”这个 URL Scheme 会怎么样呢?9 y) \; N+ k7 C6 F
结果就如 demo 中所演示的那样,后安装的 FakeAlipay 应用劫持了美团与支付宝之间的支付 流程,并且可以在用户毫无意识情况下获取用户的帐号,支付密码,以及帮用户完成支付。 整个过程如图二所示:FakeAlipay 在收到美团发来的订单信息后,构造了一个和支付宝一样 的登陆界面,用户在输入了帐号密码后,FakeAlipay 会把帐号密码以及订单信息发送到黑客 的服务器上,黑客在获得了这些信息后,可以在自己的 iOS 设备上完成支付,并把支付成功 的 URL Scheme 信息发回给 FakeAlipay,FakeAlipay 再把支付成功的 URL Scheme 信息转发给 美团。因为时间原因,demo 做得比较粗糙,没有做转发信息给美团这一部分的演示,但绝 对是可行的。) T6 M& h/ |% w9 h9 S" X3 Y8 I3 Y* a

iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码| →『网 ...

iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码| →『网 ...
& _( m8 m1 c. I! r6 l, s! \7 h
图二、劫持后的支付流程8 d/ \, V9 g; Z9 m' T
这种攻击可以成功的原因除了 iOS 本身的漏洞外,支付宝也有一定的责任。那就是发给支付 宝的订单信息并不是绑定当前设备的。因为这个原因,黑客可以在其他的 iOS 设备上完成支 付。 同样是因为不绑定当前设备的问题,黑客甚至可以先在自己的设备上生成好订单,然 后在用户打开支付宝支付的时候把订单替换掉,让用户给黑客的订单买单。$ O- c/ c8 c+ R" N( f9 [
0x03 DEMO 细节分析(微信)- b  J# S8 @8 [
基本上和支付宝一样,不过支付时只需要提供 6 位支付密码,如 果想要得到微信帐号密码的话,还需要构造一个假的登陆界面。当然了,你可能会说有短信 验证,但是如果整个登录界面都是伪造的话,用户也会乖乖的帮你输入短信验证码的。并且, 在 iOS 8.1 之前,iOS 的短信也存在监控漏洞,具体请参考我们 ASIACCS 的论文。; l$ t* l) X5 L& H. o2 ^
好吧,讲到这里肯定又有人说:你的漏洞是挺严重的,但还是得往我机器上装 app 啊。我从 来不用什么 pp 助手,同步推之类的,也不装什么企业应用,平时只在 AppStore 上下载,因 为有苹果的审核,所以我肯定不会中招的。呵呵,苹果的审核真的信得过么?请看第二个 demo: Google Chrome URL Scheme 劫持0 f. f: m0 z$ G5 j; ]
Youtube(需翻墙) 腾讯视频- c. a/ g+ L7 V3 M4 y
" G. w; n7 }% l" E$ _  x
( A7 e8 P7 J* K6 u; _2 n

iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码| →『网 ...

iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码| →『网 ...

6 m, _; w2 ?9 E% k/ S" {5 i; k图三、Google Chrome URL Scheme 劫持
* R. E) p+ Y$ o; u3 X2 zGoogle 公司不比阿里差吧?Google Chrome 可以算是 Google 在 iOS 上最重要的应用之一了吧? 可惜的是,在该 demo 中 Google 公司的 Chrome 应用已经非常不幸的被 App Store 下载的 app 劫持掉了。如图三所示:演示用的 app 会利用 Google Chrome 的 URL Scheme 去打开 Google.com 这个网站。在机器上只安装 Chrome 的情况下,app 会跳转到 Chrome 打开 Google.com。但是当我们在 App Store 下载完一个叫 BASCOM Browser 的 app 之后,app 却会 跳转到 BASCOM Browser 打开 Google.com。经过统计,App Store 上有大量的应用声明了 Chrome 以及 FaceBook 的 URL scheme,并且他们的开发者并不属于 Google 和 Facebook。这 说明 Apple 根本就没有保护那些热门应用的 URL Scheme 的想法,上传的 App 无论声明什么样的 URL Scheme,苹果都会通过审核的。所以说,不光 Chrome,Facebook 有危险,支付宝, 微信啥的也逃不过这一劫。6 |" w+ i: F' W& c4 s
0x04 解决方案
, `* G* m% d5 l/ _# w# A" O1. 针对 iOS 系统。
( {6 N1 Q) T2 Z( [, j因为 Bundle ID 在 App Store 上是唯一的(类似 Android 上的 package name)苹果可以限制 iOS 应用不能注册别的应用的 Bundle ID 作为 URL Scheme。这 样的话,使用自己的 Bundle ID 作为 URL Scheme 的接收器就会变的安全很多。1 h- h6 D& L, }# M& \) W% R
2. 针对第三方应用; }0 D( v. g# X7 Q+ Y) F1 f& ?+ R/ O: E
既然苹果不发布补丁保护第三方应用。第三方应用就没有办法了么? 不是的,这里至少有两种方法可以检测自己应用的 URL Scheme 是否被 Hijack:# h5 c6 b7 U% `8 f
(1)、应用本 身可以发送一条 URL Scheme 请求给自己,如果自己可以接收到的话,说明 URL Scheme 没 有被劫持,如果不能收到的话,就说明被劫持了,这时候可以提醒用户卸载有冲突的 app。7 b- ?& m- J9 B
代码如下:1 a) A. S7 l2 `% {5 C" R! h
[pre][[UIApplication sharedApplication] openURL:[NSURL URLWithString:@“alipay://test“]];[/pre](2)、利用 MobileCoreServices 服务中的 applicationsAvailableForHandlingURLScheme()方法可以 所有注册了该 URL Schemes 的应用和处理顺序,随后应用就可以检测自己,或者别人的 URL Scheme 是否被劫持了。代码如下:
, f, k6 \5 ~( A2 p  S: |0 ][pre]Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");NSObject* workspace =[LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)]; NSLog(@"openURL: %@",[workspace performSelector:@selector(applicationsAvailableForHandli ngURLScheme:)withObject:@"alipay"]);[/pre]在任意 app 下运行这个函数,可以返回 URL 处理的顺序,比如运行结果是:2 T+ @1 g+ G; m# T  v) B( n
[pre]2015-03-18 15:34:37.695 GetAllApp[13719:1796928] openURL: ("<LSApplicationProxy: 0x156610010> com.mzheng.GetAllApp", "<LSApplicationProxy: 0x1566101f0> com.mzheng.Alipay", "<LSApplicationProxy: 0x15660fc30> com.alipay.iphoneclient")[/pre]说明有三个 app 都声名了 alipay 这个 URL shceme,并且会处理这个请求的是 "com.mzheng.GetAllApp",而不是支付宝。0 V$ c7 [9 G8 z+ L) ^' ?
0x05 文章更新
. H& H3 L# T! O  Q5 K7 {  s1 k) x刚说完支付宝,微信逃不过这一劫,我们已经在 App Store 上发现了 劫持了支付宝的真实案例。
, L/ o. d0 G/ n' N6 C4 F2 j5 k; [来看 demo: 战旗 TV 劫持支付宝 URL Scheme Youku:
; X6 {* O0 T; H) ?! l( @2 y: \/ D1 K2 ^- R* V7 l/ G
& f) c8 _$ D. Z( F9 V
当用户想要使用支付宝支付的时候,却跳转到了战旗 TV。这里想问一下战旗 TV,你到底想 要干些什么呢?:-)
& e1 g: `6 |* y: ~# iPS:各大公司是不是要开始推送 iOS 手机安全助手了?
# C9 J. D& q7 u( w2015/03/23文章更新:战旗tv已经得到反馈,正在紧急修复bug。: W6 J. d. p" C) r( P0 i) Z* `
0x06 参考文献:5 X; o& v6 m4 |& _  D) S% O
1.iOS Masque Attack: LINK
& e' l* E' s; f  Y9 K3 m&#65532; 2.Min Zheng, Hui Xue, Yulong Zhang, Tao Wei, John C.S. Lui "Enpublic Apps: Security Threats Using iOS Enterprise and Developer Certificates", ACM Symposium on Information, Computer and Communications Security (ASIACCS&#39;15), Singapore, April 2015
" p9 O& A6 J; ~+ O7 s3.在非越狱的 iPhone 6 (iOS 8.1.3) 上进行钓鱼攻击 (盗取 App Store 密码): LINK

回复|共 9 个

佚名 发表于 2015-6-9 15:19:09
只是本着“看贴(虽然看不懂)回贴,利人利己的中华民族优秀传统美德”,顺便赚点积分。
佚名 发表于 2015-6-9 15:43:11
我也不知道了~~你把我问蒙了 呵呵
佚名 发表于 2015-6-9 15:26:29
我的我的 忘记了 呵呵
佚名 发表于 2015-6-9 15:16:33
唉!猪!你怎么了?
佚名 发表于 2015-6-9 15:19:39
笨点也好~~~~
Acropozelan 发表于 2015-7-29 21:45:52|丹麦 | 查看全部
我不是来为楼主呐喊加油的,也不是对楼主进行围堵攻击的。
bqtklouu 发表于 2015-7-29 21:35:57|美国 | 查看全部
怎么这么跟别人不一样类~
tohme 发表于 2015-7-29 21:19:15|美国 | 查看全部
相比他连说拜拜的 想法都没了 哈哈
wwzcdenleclv 发表于 2015-7-29 21:28:25|美国 | 查看全部
今天没事来逛逛

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 得知互动-专注Ai与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表