您现在的位置是:首页 > 文章详情

远程执行 Android 设备上的代码 【已翻译100%】(1/2)

日期:2017-06-01点击:324

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

等下, 什么?

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

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

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

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

背景知识

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

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

还没修复?

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

image

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

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

技术点

为了修复成功,调用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代码,而这些代码运行在可执行任意代码的环境中。

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

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

真实世界中的漏洞利用

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

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

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

测试app的漏洞

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

image

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; } 
原文链接:https://yq.aliyun.com/articles/117663
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章