远程执行 Android 设备上的代码 已翻译 100%

oschina 投递于 2014/08/09 21:11 (共 16 段, 翻译完成于 08-21)
阅读 5920
收藏 73
6
加载中

"你走进一个咖啡店坐下来。等咖啡的时候,你拿出你的智能手机开始玩一款你前些天下载的游戏。接着,你继续工作并且在电梯里收邮件。在你不知情下,有攻击者获取了公司网络的地址并且不断地感染你所有同事的智能手机。

等下, 什么?

我们在Bromium实验室博客上不会谈论Android太多。但是不时地我们喜欢修修补补。近来,我的同事Thomas Coudray 和我探索了下Android远程代码执行的易损性,想弄明白易损性在现实应用中是多大的问题。

Sophietyl
Sophietyl
翻译于 2014/08/10 22:22
3

尽管权限提升技术在Android上很普遍(并形成了“root”设备的惯例),但远程代码执行是一种罕见且危险得多的漏洞。它允许攻击者不经授权就在用户设备上执行特定代码。这个Bug特别另人关注,因为,即使在它被修复后过了18个月,在安装了所有补丁的最新型的Android设备上仍可被利用。我们想看看,如果这是真的,利用此漏洞需要付出多少努力。我们发现上述场景完全可能发生。

DavidWTF
DavidWTF
翻译于 2014/08/10 20:24
1

我们用了两种不同的方法研究此Bug。首先,我们尝试在类似公共WIFI的环境中利用它,也就是你可能在咖啡店中遇到到环境。我们启动了一些Android设备和廉价的网络设备,开始攻击。第二步是估计普通用户有多大的可能遇到这种最坏的情形。为此,我们使用了统计分析技术,看看有多少有漏洞的App和设备。

在开始细节之前,先了解一下此Bug的背景知识:

DavidWTF
DavidWTF
翻译于 2014/08/10 20:39
1

背景知识

它始于2012年的Javascript在addJavascriptInterface API中的远程代码执行Bug,CVE-2012-6636(详情见此处此处)。此Bug允许Javascript代码获得访问系统的更大权限,这并非开发者的本意。至此,如此糟糕。MWR的研究人员在几个月后的研究结果显示有大量App使用了广告供应商的框架程序,而这些框架程序通常受此Bug影响而且还在运行时下载Javascript代码。

这些因素结合起来意味着,大量的App采用不安全的方式从互联网下载Javascript代码,因此恶意攻击者劫持下载并发动远程代码执行的攻击并不难。

DavidWTF
DavidWTF
翻译于 2014/08/10 20:55
1

还没修复?

Android 4.2修复了这个潜在的javascript漏洞。不幸的是,由于向后兼容的原因,修复只意味着在特定的场景中关闭了漏洞。现实中的Android版本碎片化和Android上的广告商业模式意味着这些场景并不常见。我们检查了Google Play上的100,000个APK文件,发现大约有12%即使运行在最新的Android设备上仍然有漏洞风险。

Breakdown of APKs using addJavascriptInterface()

APK分析结果:一半没有漏洞风险,因为它们的目标SDK版本大于或等于17;剩下的31%没有使用存在漏洞的API;7%由于APK混淆或分析出错而没有分析。

另外,不管此漏洞是否被修复,超过50%的Android设备仍旧使用着低于4.2的版本。对于这些设备,没有修复程序,它们依旧存在漏洞风险。

DavidWTF
DavidWTF
翻译于 2014/08/10 21:15
1

技术点

为了修复成功,调用addJavascriptInterface的程序必须编译为API 17及以上,也就是说你的目标Android版本必须是4.2及以后的。为了兼容更多的设备,App和框架程序经常用尽可能低的API版本编译。重点就是即使运行在打了补丁程序的Android 4.2, 4.3或4.4的设备上,App仍存在漏洞攻击风险。

广告商业模式在Android中很流行:也就是App免费,开发者通过向用户展示广告而获得收入。在Android中,有超过50个不同的广告框架程序,这使得开发者很容易实现广告功能,事实上他们经常在App中使用不只一个广告框架程序。有的App发现使用了20个之多(见此处的图4)。这些框架程序大都有这种行为——当app第一次运行时,它们通过HTTP下载javascript库。这也就是说App通常不安全地下载了未验证的javascript代码,而这些代码运行在可执行任意代码的环境中。

DavidWTF
DavidWTF
翻译于 2014/08/10 21:34
1

代码的执行意味着对设备的无限制访问

迄今为止,这个漏洞仅仅允许一个攻击者在一个安卓应用环境中去执行代码。这很糟糕,但是仍然被安卓权限系统限制在单独的应用中去访问数据。然而,一旦一个攻击者有了一个在系统中的立足点,这就类似于他们可能获得额外的特权。以futex漏洞为例(CVE-2014-3153),它影响当前使用的每个Linux内核版本,包括安卓系统以及最近第一次被成功root的Galaxy S5。尽管他们不是等价的,但我们还是应该养成“远程代码执行”与“root权限”在严重等级上等价的习惯,因为迟早,一个下定决心的黑客将可能从一个地方蹦到另一个地方,获取设备的完全控制权。

溪边九节
溪边九节
翻译于 2014/08/15 14:34
1

真实世界中的漏洞利用


我们谈了如何利用漏洞和漏洞为什么如此严重。现在我们撇开分析,验证一下漏洞到底有多容易被利用。

五月中旬,我们从Play Store随机下载了102,189个免费的app,并通过统计分析发现其中的12.8%存在潜在的漏洞风险,正如上图所示。这些APK同时使用了过低的目标API版本和addJavascriptInterface API。这些APK调用addJavascriptInterface时的漏洞实上可以通过中间人攻击的方式利用,当从互联网不安全地下载的javascript脚本时可以发起中间人攻击。

我们会测试通过中间人攻击劫持非安全的javascript下载,并注入一些javascript脚本来探查addJavascriptInterface漏洞。

DavidWTF
DavidWTF
翻译于 2014/08/16 17:43
1

测试app的漏洞

我们设置了一个充当透明web代理中间人的wifi无线接入点(AP)。它被设置为对任何接入此AP的设备在通过HTTP请求任何脚本时都注入恶意代码。AP设置了密码,以防有人误用,但本方法可以用到公开访问的AP。即使当AP不受控制时,DNS毒化或ARP缓存欺骗等技术也可以用来实现中间人代理。或者可以安装一个模仿成合法AP的假AP。也就是说,有各种方法实现中间人代理,使用wifi的任何人都将通过我们的代理访问网络。

Man in the middle setup

DavidWTF
DavidWTF
翻译于 2014/08/16 18:00
1

javascript的动态性意味着我们不需要检测特定的应用程序或广告框架程序以作为目标。当运行时,恶意代码扫描整个javascript命名空间中的对象,查找不正确地使用了addJavascriptInterface API的对象,然后对每个进行漏洞测试。如果没有找到漏洞,它就静悄悄地退出,不影响app的运行。如果成功了,它将运行一个shell命令启动计算器app(这是漏洞揭露中的一个传统,表明你完成了代码运行——如何你可以启动计算器,你就证明了可以执行任何代码)。

注入的 javascript片断

function findVulnerableObject() {
   for (var prop in window) {
       try {
           // If getClass() doesn’t throw, the object is vulnerable
           window[prop].getClass();
           return window[prop];
       }
       catch(err) { }
   }
   return null;
}
DavidWTF
DavidWTF
翻译于 2014/08/16 18:13
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(13)

0
0c0c0f
老树开新花,截图,录音,视频。。
DavidWTF
DavidWTF

引用来自“筱龙缘”的评论

“我们设置了一个充当透明web代理中间人的wifi无线接入点(AP)。它被设置为对任何接入此AP的设备在通过HTTP请求任何脚本时都注入恶意代码。AP设置了密码,以防有人误用,但本方法可以用到公开访问的AP。即使当AP不受控制时,DNS毒化或ARP缓存欺骗等技术也可以用来实现中间人代理。或者可以安装一个模仿成合法AP的假AP。也就是说,有各种方法实现中间人代理,使用wifi的任何人都将通过我们的代理访问网络。”
如何实现?
AP这个很容易实现,现在很多无线网卡,都支持AP模式,你可以用笔记本的无线网卡做AP,然后就是软件的事情了,所以经过你笔记本的数据包都能拦截的。DNS毒化,应该是指想办法让访问者的DNS地址设置成你的ip,当DNS请求时,实际上是发到你的计算机上,你可以对特定的域名转向其它的ip(而不是正确的ip),这样再访问时,你可以返回恶意程序了。或者,攻击掉一个DNS域名服务器,让它声明某个域名的ip指向,然后访问这个域名的数据,就转到这个ip的计算机上了。ARP应该是指在同一个局域网中,发ARP包声明你的物理地址是网关的物理地址,这样在链路层,数据就转到你的计算机上了。大意如此,具体如何实现,不用细说了吧。
crossmix
crossmix
osoul
osoul
唉,软件都有漏洞,用功能机最安全
杨昊亚
杨昊亚
是不是通过中间人代理可以把攻击代码嵌入到请求中发送到服务器上,然后在服务器上开展攻击或者通过服务器向其它设备的响应开展攻击?
云梦飞
云梦飞
好奇 想知道 具体怎么实现 呵呵呵
Glitter
Glitter
哟哟,这个…………
codeLance
codeLance
好危险。是否把有广告的APP的网络权限关掉就可以防止这种漏洞了呢?包括WiFi和数据流量网络模式。因为有些游戏经常会弹出广告,所以我把他们的网络权限关闭了,这样也不会再有广告弹出来了。
筱龙缘
筱龙缘
“我们设置了一个充当透明web代理中间人的wifi无线接入点(AP)。它被设置为对任何接入此AP的设备在通过HTTP请求任何脚本时都注入恶意代码。AP设置了密码,以防有人误用,但本方法可以用到公开访问的AP。即使当AP不受控制时,DNS毒化或ARP缓存欺骗等技术也可以用来实现中间人代理。或者可以安装一个模仿成合法AP的假AP。也就是说,有各种方法实现中间人代理,使用wifi的任何人都将通过我们的代理访问网络。”
如何实现?
牧哥
牧哥
谢谢楼主你的辛苦!
返回顶部
顶部