首页
社区
课程
招聘
[原创]android webview 漏洞背后的节操
发表于: 2013-9-6 16:17 30986

[原创]android webview 漏洞背后的节操

2013-9-6 16:17
30986

口水文,如果技术男看着不爽的话 直接忽视啊 :)

android webview 漏洞背后的节操

by superhei 2013/09/06

[注:本文提到的都是我个人的观点,该行为也是私人行为,与任何组织、公司无关。另:水军请自重!]

一、前言
        这两天,一个2+年前的android webview的nday就像一面“照妖镜”一样,直接暴露了很多个人和公司的节操...

二、流程

有白帽子在8月29日开始提交各种android平台上的“远程命令执行”漏洞,隐隐感觉到这是一种通用漏洞类型,通过联系并请教得到这类漏洞的技术细节。该漏洞
是android中webview组件里的addJavascriptInterface引起的。主要目的是为了实现java与js的交互操作。不过一个通过getClass()的方法直接调用java. lang. Runtime接口执行系统命令,让android的这个设计节操碎一地!

这个问题最早是可以追溯到2011年的一篇paper《Attacks on WebView in the Android System》http://www.cis.syr.edu/~wedu/Research/paper/webview_acsac2011.pdf 这篇文章指出了addJavascriptInterface的方式在功能上带来的一些风险,比如你的app里实现了一个读写文件的类,然后使用addJavascriptInterface借口允许js调用,那么就可能导致攻击者直接调用这个class实现读写文件的操作。这种方式是最原始的风险,并没有直接指出getClass()方法的利用。

直到2012年12月21日老外一篇blog出现 《Abusing WebView JavaScript Bridges》http://50.56.33.56/blog/?p=314 可能由于这么个性话的ip访问blog形式(域名都没有)所以关注的可能不多,比如我这样的经常到处翻东西的人也没注意到这个。也有可能很多人看到了这个页面,知道技术细节后考虑到危害或者利益自己偷偷雪藏了!不知道有没有集团偷偷使用这个漏洞。 :)

对于这个漏洞android官方其实给出个“修补方案”的:http://blog.chengyunfeng.com/?p=483 这个是一个奇葩的修补方案,直接忽视了android碎片化的问题,很多app开发厂商或者个人为了兼容低版本的android是不可能直接使用这个方案的。另外一方面很多的产品过渡考虑的是用户体验问题,很多没必要使用的webview的非要使用,有的地方根本不需要java与js交互的,非要交互。美其名曰:一切为了用户体验!

wooyun平台有个积极的效应,让一类一类的问题得到充分的暴露,于是就有了《WebView中接口隐患与手机挂马利用》http://drops.wooyun.org/papers/548
由于本文里详细的演示,“一石激起千层浪” 各种官方加班修补,各种android开发叫苦连篇,还有就是各种“妖气”开始横生...

而靠谱的修补方案却很少有人给出!

三、“妖气”来了

“妖气”一来真是乌云密布...

"万能妖":

首先某数字旗下CDN产品微信发布消息称:“xx能拦截此类恶意代码,保护用户不受侵害”,然后就是xx工厂旗下CDN厂商,发布多条微博、微信开始热炒该漏洞:“红色预警:安卓webview远程执行漏洞 移动应用速速接入xx保护,从云端保护您的用户不受此漏洞影响”  ... 当时我看这些的消息就非常纳闷,难道tmd你们都是整的万能药?CDN你说你防入侵还说得过去,杂这个andriod的漏洞也能防,真tn的高科技~~~ 后来有人说这个是产品营销。营销也要靠谱点,过渡忽悠、多多泡沫是会害死人的~~~

奇怪的是各个移动安全厂商都没有啥动静,可能都去修补自己产品漏洞去了吧!:) 顺便提一下这个漏洞在线检测的问题,通过遍历dom的方法是可以找到这些交互接口class的,这个也是通用exp的方法。腾讯TSRC也是通过这个来实现在线检测的,他们推出的时候可能并没有考虑到这个“双刃剑”问题,当然也没有过多的不妥,因为有很多人已经意识到这个方法了。 这个代码后来直接被xx工厂旗下CDN厂商copy后并自以为的推出了一个2维码的检测! 看上去这个方式是很拉风的,是TSRC之前没有意识到的,是我们对产品的微创新... 而这个是个实足的“泡沫“、”博眼球”的玩意。 你扫瞄这个2维码打开这个URL提示的只是这个app本身有没有被这个漏洞影响,而不能说明其他app是不是受这个漏洞的影响,不是所有支持URL访问的都有2维码扫瞄,另外还有一个坑的地方就是来自中间人的攻击... 如果你扫一次2维码就说明你手机安全了,那恭喜你,你已经被“妖气”迷惑了!

“狐妖”:

一直以科普、质疑而闻名的xx调查员,每次出现都给人以“专业”、“有理有据”的感觉,这个是“狐妖”最擅长的魅术。在这个“照妖镜”下直接照出了原型:

===============引用===================
如果JS引擎允许调用Java类(基于JSInvokeClass),应限于可信浏览,否则存在安全隐患。这不是秘密,不是安卓平台漏洞,而是已知的应用策略问题,其被恶意利用的场景要求高,等级应为[低]。媒体鼓吹安全软件牛B时在场,夸大安全问题影响时也从不缺席,吃了原告吃被告。乌云吆喝“紧急!”实乃哗众取宠。
====================================

这个是不是“哗众取宠”,懂点安全常识的人就知道。虽然我认为这个漏洞要实现完美的利用,还需要一些其他东西配合下.

“猪妖”

“猪妖”是很强大的,很容易攻击他人,星爷的《西游降魔》就充分说明了这点。再强大的妖怪也敌不过“照妖镜”,化身为某数字公司的“猪妖”直接现行了...

再一次说明了“猪妖”的强大,此漏洞大体在1月份在该公司的产品里进行一些修补策略。于是基于他的“易攻击”性,怎么可能放弃这个机会呢?于是大势攻击竞争对手产品存在漏洞。“成也'猪妖'、败也'猪妖'”,他们忽视了另外一句名言“猪一样的队友”! 一个“str2.contains”就把自己给坑了~~~

还有一群跟着起哄的“小妖”化身为“**粉”~~~

四、漏洞修补方案

其实在老外的blog文里提到了几个修补方案:

* Use addJavascriptInterface only if the application loads trusted content into the WebView component (Internet || IPC == sketch).
* Develop a custom JavaScript bridge using the shouldOverrideUrlLoading function.  An application could check the newly loaded URL for a custom URI scheme and respond accordingly, but be careful about what functionality you expose via this custom URI scheme, and use input validation and output encoding to prevent the standard injection attacks.
* Reconsider why a bridge between JavaScript and Java is a necessity for this Android application and remove the bridge if feasible.

第1个方案是设置信任域,这个问题其实是不太靠谱的,在我之前在kcon里演讲《去年跨过的浏览器》里有很多信任域带来的安全问题
第2个方案是使用 shouldOverrideUrlLoading 的方式,据说这个方案还是比较靠谱的,只是可能代价比较大。
第3个方案就是教育那些开发商,没有必要用webview的时候就不要用,不要java与js交互就不要用。

其实我个人认为是android官方可以出个金融所有版本的靠谱的解决方案,不过就android风格及安全意识来说基本是不可能的。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 5
支持
分享
最新回复 (39)
雪    币: 5340
活跃值: (598)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
2
围观黑哥第一篇精华
2013-9-6 16:28
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
同围观。看了一排字才意识到是superhei
2013-9-6 16:33
0
雪    币: 822
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
4
专程来顶黑锅
2013-9-6 16:42
0
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
黑哥的精华帖一定得顶!
2013-9-6 16:43
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
哇,原来是黑哥啊!!!
2013-9-6 16:48
0
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
7
我是来认识黑哥的
2013-9-6 17:03
0
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
板凳占位!!
2013-9-6 17:26
0
雪    币: 2307
活跃值: (1013)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
9
黑哥威武
2013-9-6 17:28
0
雪    币: 118
活跃值: (106)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
黑哥出品,必属精品!
2013-9-6 17:34
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
顶 超级黑
2013-9-6 17:38
0
雪    币: 194
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
都没一个简单的修复办法。android应该学 win或ios 弄个补丁系统了。
2013-9-6 17:53
0
雪    币: 367
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
黑哥到处都发了啊。V5 87
2013-9-6 18:07
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
14
强烈表示占位围观
2013-9-6 18:07
0
雪    币: 406
活跃值: (164)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
15
黑哥的帖子不顶不行啊。
2013-9-6 19:13
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
16
支持黑哥啊~
2013-9-6 19:15
0
雪    币: 2882
活跃值: (1272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yjd
17
有名的
superhei
也来这里发帖,顶
2013-9-6 19:46
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
不明真相的我路过旁边,
2013-9-6 19:49
0
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
混个脸熟,来顶黑客
2013-9-6 21:03
0
雪    币: 310
活跃值: (159)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
20
开始在kanxue发文了。支持下
2013-9-6 22:02
0
雪    币: 198
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
呵呵,superhei!看到回复,突然意识到是黑哥的作品,支持!
2013-9-6 23:06
0
雪    币: 6
活跃值: (1141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
superhei也来看雪了啊,web安全板块有希望了
2013-9-6 23:26
0
雪    币: 1626
活跃值: (148)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
23
“你认识黑哥吗?”
  “谁啊?没听说过。”
  “哦,你可以回去了。”
  ——阿里巴巴信息安全部面试题

  这道题当然是杜撰的。但我还在阿里时,曾经有段时间,确实想过用类似的题目来考核面试者,看他是否对行业内保持着最基本的关注。正如我们在校招时,曾经出的最成功的一道笔试题 ——“0day是什么?”。这道题威力巨大,内行外行一题见分晓,勿须再问其他。

  黑哥,就有着这样的威力。

  黑哥真正的id是superhei,熟悉他的人喜欢叫他黑哥,也有无聊者直译为“超级黑”、“素破黑”。

  在黑客的圈子里,有无数叫小黑或者黑哥的,但在资深黑客的眼中,只有一个黑哥,就是superhei。

  黑哥真名周景平,目前是国内知名安全公司——知道创宇——的安全专家,这是去年(2012年)的事情了。在此之前,黑哥是湖南益阳一个小医院里的泌尿外科医生,每天的工作就是帮人切小JJ(割包皮)。

  如果说切小JJ是黑哥的主业,而研究安全是黑哥的业余爱好的话,那么他对医疗行业的贡献,与他在安全行业里的成就比起来,就如同萤火与皓月一般。

  如果说,最早是一名叫“分析家”的黑客,开创了中国安全行业的Web安全领域,那么,黑哥就是中兴这个领域的人。黑哥不仅自身对Web安全领域的研究做出了杰出的贡献,同时他还利用自身的影响力,带动了一批年轻人一起做出了一些意义不凡的成绩。而后者可能比黑哥本身的技术成果更有意义。

  我一直认为中国从来不缺乏天才,中国缺少的是让天才们发挥出最大潜能的土壤。在安全行业的某些领域里,中国的水平是世界领先的,因为有像黑哥这样的人。可惜他们的成果往往不为世界所知,最大的一个原因就是英语的交流能力,限制了他们成果的传播。幸运的是,中国的天才们在阅读英语上没有太多障碍,这也是托了应试教育的福。

  在SQL注入刚出来的时候,黑哥就已经对此技术做了深入的研究。他可以说是当时最了解这种攻击技术的人,曾被其他的小黑客称为“数据库专家”。

  在安全技术的研究上,黑哥也极具创新性,他也是第一个提出了CSRF Worm概念的人,后来这项技术由安全组织80sec实现。而国外至今没看到过类似技术。

  最令我印象深刻的,是在2008年,黑哥成立的80vul组织,发起了一个名为“PHP Codz Hacking”的活动,该活动是效仿德国的著名安全专家Stefan Esser发起的“The Month of PHP bugs”活动,为PHP内核找漏洞。最终该活动共计找出了10个严重的PHP漏洞。

  这个活动最大的意义在于,80vul最终把这些问题,和发现问题的技巧,总结成了一篇paper——《高级PHP应用程序漏洞审核技术》,在googlecode上的代号是pasc2cat。

  这篇paper在国内PHP应用安全领域上具有重要的地位。如果要把历史上所有PHP安全相关的paper排个序的话,这篇paper无疑是那颗最璀璨的明珠,没有之一 ——秒杀所有学院派的论文。我在写《白帽子讲Web安全》一书时,从此paper中也借鉴良多。

  黑哥对技术领域的贡献还远不止这些。对于目前最热门的XSS盲打技术,最早可追溯到2007年黑哥写过的一篇文章《dz升级检测功能的黑盒测试》。在5年前,黑哥就极具前瞻性的产生了这个想法。

  在2011年,黑哥受邀来淘宝给安全团队做一次培训。随着他来的还有他精心整理的一个PPT——《Web2.0下的渗透测试》,这个PPT后来成为了集Web2.0安全之大成者,是研究Web2.0安全最为详实和权威的一份资料。

  但黑哥也有不愉快的时候。一直专注于Web安全研究的他,在Web安全并不受重视的那段岁月,在黑客圈子里,也被归为非主流的一类人。

  在2006年的时候,黑哥将他的研究成果《2次漏洞的利用》投稿给了xcon,后者是中国最权威的黑客大会,但被主办方无情的拒绝了。这可能与主办方评委们的技术背景有关,他们大多是研究OS安全与网络安全的,而缺少一个真正的web安全专家。因此他们把最好的web安全专家拒之门外,也不算什么奇怪的事情。

  xcon主办方在2008年第二次拒绝了黑哥的投稿,这次投稿的内容是《高级PHP应用程序漏洞审核技术》,这颗PHP应用安全研究领域中最璀璨的明珠。由于这次的拒绝,这篇paper在黑哥的电脑里被雪藏了两年,直到2010年才正式在幻影的webzine中公开 —- 也许这就让中国的PHP应用安全领域的发展迟滞了两年。

  黑哥一直对一句话耿耿于怀,这句话记载于《网络渗透测试技术》 —- 这本书是《白帽子讲Web安全》问世以前中国最权威的安全著作 :) ——它是这么说的:

  “许多搞系统底层安全的高手对CGI安全总是不屑一顾,认为那些只是scriptkid做的事情。按caoz的说法这是技术与技巧的区别,技术是需要很长时间积累的,要看懂底层研究成果需要很多其他知识和时间,而技巧更多属于一点就通的技术,比如CGI的渗透技术。笔者觉得技巧其实是技术的子集,作为一个渗透测试者需要了解各方面的技术,但切不可沉迷于奇技淫巧。”

  也许是“奇技淫巧”四个字刺痛了黑哥的心,这是对黑哥研究领域的全盘否定。从这段话,也不难看出xcon组委会为什么会两次拒绝黑哥了,他们是一伙的。

  “技巧也要点一下你才会通啊,不点你可能永远也通不了”。黑哥如是说。

  黑哥是性情中人,对于他看了不爽的事情,就会直言以对。

  他曾经给我推荐过一个小伙子,但由于种种原因,最终未能录用。他第二天就打电话来把我劈头盖脸的骂了一顿,我自然是成了那个有眼无珠的小人。黑哥提携过很多这样的新人,这是他对这个行业做出的比本身研究成果更重要的贡献。

  不光是对我敢于直言,面对腾讯这样的巨头,黑哥同样无所畏惧。

  在2013年2月 ,腾讯的安全团队公布了2012年提交漏洞给腾讯的组织与个人。黑哥以一人之力,在没有用任何扫描器的情况下,完败所有提交漏洞的安全公司,获得了“漏洞之王”的称号,并以2144分的绝对实力,遥遥领先于第二名的446分。

  但之前有过一个小插曲,腾讯把黑哥的分算错了,以黑哥的脾气,当时就在博客上劈头盖脸的把腾讯骂了一顿。不久,腾讯负责此事的lake2就老老实实的跑来道歉,并且在黑哥的督促下改进了漏洞提交平台的规则。

  但黑哥着实没有什么商业头脑,他脑子里永远都只有技术、技术、技术。简单说,他是一个没有什么商业判断力的人,可能他自己对此并不在乎,就像他并不在乎自己的薪水一样。

  我和黑哥最早相识是在2002年,之后不久我就邀请他加入幻影,成为一位核心成员。

  后来我加入阿里后,曾经三番五次的想请黑哥出山,但他就是不愿意离开那个偏僻城市的小医院,甘愿领着每个月两三千的薪水,原因只是因为他的父亲认为这个饭碗比较稳定。

  鉴于他在安全行业的地位,曾经有过很多谣传,有人说黑哥开着宝马,可实际上他有时候连上网都是在医院蹭。

  在2011年底的时候,黑哥在微博上发了条求职信息,只有三句话:

  “
  准备辞职转行,
  寻找一个看的上我的boss或者创业伙伴,
  只是目前有个要求就是可以在家里工作,待遇要求不高。
  ”

  这三句玩笑般的话,最终让他找到了现在的工作。事后我问他为什么终于想通还是出山了,他回答说,中国的医疗环境太差了,做医生看不到出路在哪里。

  也许,安全才是他应该在的地方。没有他,这个行业,会少很多精彩。

  在黑客的世界里,总有一些人是会为理想而活,黑哥就是这样的人。

  ——后记——

  这篇文章是我的一个尝试,我希望展示给大家看一些真正的中国黑客故事。

  我会尽可能的把我身边这些朋友的资料收集起来,但本身这个过程也不会那么容易。

  黑哥一直很害羞的不肯提供一张高清的照片,所以,我只能从其他渠道,搞到了这张偷拍的照片了。

  虽然现在就写这些人的故事可能为时过早,因为他们仍然在不断的为这个行业做着贡献,眼下可能还不是他们事业的巅峰。

  但我想,如果我不写,也许没人会写。如果我现在不写,也许以后也不会写了。
2013-9-7 10:28
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
24
感谢neite科普!
“哦,你可以回去了。” 这面试我过不了

感谢“超级黑”的文章
2013-9-7 11:01
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
看了版主的围观才知道是超级黑,嘿嘿,围观学习
2013-9-7 18:26
0
游客
登录 | 注册 方可回帖
返回
//