APP漏洞自动化扫描专业评测报告(中篇)

前言

上一篇中通过对阿里聚安全[1]、360App漏洞扫描[2]、腾讯金刚审计系统[3]、百度移动云测试中心[4]以及AppRisk Scanner[5] 在收费情况、样本测试后的扫描时间对比和漏洞项专业对比后,本篇将以各个厂商的扫描能力作为分析维度展开。

测试方法

使用自己编写的测试APP测试各个扫描平台的扫描能力。这些扫描能力主要分为静态检测能力和动态检测能力。静态检测能力包括检测隐藏dex、过程间分析、较复杂漏洞检测、逆向分析;动态测试主要是指测试拒绝服务漏洞的能力,拒绝服务漏洞又可以划分为:空Intent引起的拒绝服务,强制类型转换引起的拒绝服务以及序列化对象导致的拒绝服务。由于这些检测能力决定了扫描器扫描结果的精度和准度,因此我详细分析了各个扫描平台的扫描能力。

3.2.1 自动化脱壳

目前很多APP通过加壳来防止自己被反编译,而扫描器都是通过在反编译的代码中进行漏洞的扫描。如果扫描器不能自动化地脱去APP加的壳,则根本无法进行有效的漏洞扫描分析。我写了一个包含五个扫描平台都有的全局文件读写漏洞的demo,通过梆梆加固之后,重签名上传到这五个扫描平台,检测结果是:阿里聚安全和百度检测出全局文件读写漏洞,而金刚、AppRisk没有检测出该漏洞。这个demo在360中没有扫描结果,所以360的脱壳能力不得而知。

3.2.2 隐藏Dex检测能力

目前插件化已经在Android开发中越来越普遍。很多APP会将一些独立模块打包成单独的dex文件,并存储到apk的其他目录中,如asset、lib等。如果扫描器没有检测隐藏dex文件的能力,则可能会漏报一些安全风险,造成扫描结果不准确。我编写了一个asset目录包含dex文件的应用程序,分别上传到上述五个扫描器,该dex文件中包含五家扫描器都可以检测的漏洞,结果只有阿里聚安全和百度成功扫描出隐藏dex文件中包含的漏洞。因此,可以推测阿里聚安全和百度具有扫描隐藏dex文件的能力,而360、金刚、百度和AppRisk都没有检测隐藏dex文件的能力。

3.2.3 过程间分析能力

五家扫描器都可以检测全局文件读写漏洞,因此我用该漏洞测试扫描器对过程间分析的能力。

openFileOutput的第二个参数可以指定文件打开的方式,如果以全局可写的方式打开会导致安全风险。这里我构造了两个测试例子。

例一, 直接对openFileOutput的第二参数设置全局可写,因此有漏洞。

例二, 通过函数的参数传递对openFileOutput的第二参数设置全局可写,也应该有漏洞。

测试代码如下:

样本一:函数内设置危险变量Context.MODE_WORLD_WRITEABLE

样本二:函数间设置危险变量Context.MODE_WORLD_WRITEABLE

样本一和样本二可以测试扫描器对过程间分析的检测能力。检测结果如表3-6所示(“√”表示扫描结果正确,“×”表示扫描结果错误。):

表3-6 函数间相互调用检测能力

阿里聚安全  360  金刚  百度  AppRisk
过程内检测(样本一)
过程间检测(样本二) × × × ×

阿里聚安全可以检测出样本一和样本二,而360、金刚、百度和AppRisk都只能检测出样本一。

由此可以推测,360、金刚、百度和AppRisk都只能在过程内进行检测,也就是在函数内进行检测,阿里聚安全可以在过程间进行检测。

3.2.4 逆向分析能力

目前漏洞扫描规则大部分是通过定位关键函数,根据关键函数的参数确定是否会触发漏洞。这是典型的逆向分析问题,可以说逆向分析能力很大程度决定了扫描器检测漏洞的能力。这五家扫描器都有逆向分析的能力,只是逆向分析的能力有些差别。通过扫描器对全局文件读写的代码检测结果分析扫描器逆向分析的能力。

根据全局文件读写漏洞的检测规则,扫描器首先会定位openFileOutput函数,追踪该函数的第二个参数,即打开的模式。打开模式都存储在一个数组中。数组中下标为0的模式没有漏洞,而下标为1的有漏洞。如果扫描结果正确,则说明扫描器的逆向分析能力较强,可以深入到数组等较为复杂的结构中;如果扫描结果有错误,则说明扫描器的逆向分析能力较差,无法逆向追踪到复杂的数据结构中,漏报的可能性较大。

将上述测试代码上传到五家扫描平台,扫描结果如下图所示。“√”表示扫描结果正确,“×”表示扫描结果错误。

表3-7 数组下标敏感性检测结果

阿里聚安全  360  金刚  百度  AppRisk
样本一
样本二 × × × ×

通过扫描结果可以看到,阿里聚安全正确地扫描出两个样本,而360、金刚、百度和AppRisk都只扫描出样本一。因此可以说阿里聚安全的逆向扫描能力要强于其他四家,当逆向追踪的变量进入一个数组时,阿里聚安全可以继续在数组中进行逆向分析,而其他四家扫描器无法确定数组中各个位置代表的具体值。

我猜测当其他四家扫描器检测全局文件读写漏洞时,首先会定位openFileOutput函数,由于打开方式是由数组中的元素决定,所以360、金刚、百度和AppRisk无法确定该值具体是多少,因此也就无法判断是否存在全局文件读写漏洞。本着减少误报的原则,它们都认为不存在漏洞,所以很幸运,样本一不存在漏洞,它们的检测结果正确;样本二存在漏洞,它们的检测结果错误。

3.2.5检测较复杂漏洞的能力

为了测试扫描器检测是否能检测出由多个条件组合起来判断的漏洞,我选取了Intent Scheme URL漏洞进行对比[6],如果想避免Intent Scheme URL漏洞,parseUri函数得到的Intent必须要设置三个条件(addCategory(“android.intent.category.BROWSABLE”), setComponent(null), setSelector(null) 才能保证漏洞不会发生。

我构造了三个例子进行测试:

例一,三个条件都满足,因此没有漏洞的。

例二,缺少了条件setSelector(null),存在Intent Scheme URL漏洞。

例三,虽然三个条件都满足,但因为没有startActivity所以也不应该被检测出来。

构造如下测试代码:

代码中一共有三个case,其中只有case 2有问题。将上述代码打包成apk,上传到除360和百度之外的三家扫描平台。(360和百度不支持该扫描项,还需要使用另一种漏洞比较360、百度的检测差异)

AppRisk认为三个都有漏洞,通过其扫描报告可以看出,AppRisk只是判断是否有Intent.parseUri函数的调用,如果存在,则就存在Intent Scheme URL漏洞。因此,推测AppRisk的扫描规则仅仅是简单的特征函数匹配,数据流跟踪的能力几乎没有。在该例中仅仅匹配Intent.parseUri,而没有其他条件进行约束,因此误报率比较高。

金刚扫扫描出case 2和case 3,而case 3是没有问题的,所以有一个误报。金刚对该项的扫描比AppRisk要复杂一些,除了匹配parseUri函数外,还检测该Intent是否做了后续的处理,如addCategory、setComponent、setSelector等,如果没有这些函数调用,则认为存在该漏洞。但如果仅仅把Intent构造出来,而没有做任何启动其他组件的操作,如case 3,也是没有漏洞的,所以金刚没有考虑对获取Intent的使用操作,也容易引起误报。

360没有扫描这个漏洞,而其他常见的漏洞漏报也比较多。因此,对它的检测较复杂漏洞的能力不做推测。

当检测百度时,我使用WebView组件系统隐藏接口漏洞作为测试用例。

测试代码如下:

将代码打包成apk上传到百度移动云测试平台,测试百度是否仅仅测试是否有loadUrl函数调用,而不考虑是否启用了JavaScript。从测试代码中可以看出,case 1是有漏洞的,通过调用setJavaScriptEnabled(true)启用了JavaScript,随后调用loadUrl加载页面。Case 2是没有问题的,首先mWebView是一个全局的成员变量,当创建一个WebViewSafeCase的对象时会初始化该WebView,同时显式调用removeJavascriptInterface移除searchBoxJavaBridge,accessibility以及accessibilityTraversal,当外部调用其内部类的方法时,mWebView会启用JavaScript,随后调用loadUrl。如果单从removeFromOutterClassShouldNotFound来看,case 2是有漏洞的,但是实际上mWebView在调用loadUrl之前已经移除隐藏的接口了,如果扫描器没有追踪mWebView这个变量的能力,则很容易误认为case 2是有漏洞的。

百度的扫描结果显示case 1和case 2都包含WebView未移除隐藏接口漏洞,我推测百度没有追踪变量的能力,而仅仅是进行函数匹配。

3.2.6 动态检测能力

一些运行时漏洞,如拒绝服务,只有在程序运行时才有可能触发。如果扫描器没有动态检测的能力,则会漏报一些运行时漏洞。为了检测扫描器是否有动态扫描的能力,我在测试APP中包含4处拒绝服务漏洞的代码,分别是空Intent拒绝服务2个、1个强制类型转换拒绝服务和1个对象序列化拒绝服务。扫描结果如下表所示。

表3-8 动态检测能力扫描结果

阿里聚安全 360 金刚 百度 AppRisk
空Intent Fuzz 2 0 1 0 0
强制类型转换 1 0 1 0 0
对象序列化 1 0 1 0 0

从表3-8中可以看出,阿里聚安全可以扫描出所有的拒绝服务漏洞,金刚可以扫描出3处拒绝服务漏洞,漏报一处拒绝服务代码如下:

而360、百度和AppRisk没有扫描出拒绝服务漏洞。从这个例子我推断除阿里聚安全和金刚外,其他扫描平台没有动态检测能力。

综上所述,阿里聚安全的综合检测能力最高,它不仅可以检测隐藏dex,对数组下标敏感,还可以检测函数相互调用引起的漏洞。除此之外,阿里聚安全还可以追踪变量,记录变量的一系列操作,当变量作为sendMessage的参数被Handler发送出去时,阿里聚安全还可以追踪到相应的处理函数中继续追踪;当变量作为Intent携带的参数跳转到其他组件中时,阿里聚安全还可以到对应的组件中继续追踪该变量。对变量的有效跟踪可以大大提高扫描结果的可靠性,有效降低了扫描结果的误报率。

百度可以检测隐藏的dex文件,但它不能追踪变量,无法处理函数间调用引起的漏洞,对数组下标也不能准确地处理,因此我推测百度的扫描规则是基于危险API所在的函数范围内,一旦超出这个函数,百度的误报率会大大提高。

360扫描结果让人看不明白,分析中所有的应用一旦投入到360,不但扫描时间长,而且结果与其他四家差别很大,所以这里不对360的扫描能力做推测。

金刚和AppRisk的扫描能力相对较差,只能通过简单的特征函数匹配检测漏洞,虽然漏报相对较少,但是误报率比较高。

扫描能力小结

以下表3-9是此次扫描能力的结果:

表3-9 扫描能力总览

阿里聚安全  360  金刚  百度  AppRisk
自动化脱壳 未知 × ×
静态-检测隐藏Dex × × ×
静态-过程间分析 × × × ×
静态-较复杂漏洞 × × × ×
静态-逆向分析
动态-空Intent Fuzz × ×
动态-综合静态分析 × × ×
动态-复杂对象Fuzz × × ×

需要注意的是, 360一直没有测试APP的扫描结果,我只好把每个检测代码打包成APP进行测试,然后进行统计,因此关于360的测试结果可能有误差。

除了扫描能力以外,最后一个维度会以之前的4个第三方APP的测试结果作为对比。为了说明各个扫描平台实际扫描漏洞的能力,我将WiFi万能钥匙、墨迹天气、手机百度以及新浪微博上传到五家扫描平台。最后将以WiFi万能钥匙的扫描结果为例,详细分析一下各个平台的扫描结果的漏报和误报,从而评估其扫描结果的可信性。这部分内容将单独作为下篇进行连载,敬请期待。

Reference:

[1]阿里聚安全:http://jaq.alibaba.com/

[2]360APP漏洞扫描:http://dev.360.cn/mod/vulscan/

[3]腾讯金刚审计系统:http://service.security.tencent.com/kingkong

[4]百度移动云测试中心:http://mtc.baidu.com/startTest/safe

[5]AppRisk Scanner:https://apprisk.newskysecurity.com

[6] http://www.mbsd.jp/Whitepaper/IntentScheme.pdf

时间: 2024-10-29 00:19:03

APP漏洞自动化扫描专业评测报告(中篇)的相关文章

(引用)APP漏洞自动化扫描专业评测报告(中篇)

前言 上一篇中通过对阿里聚安全[1].360App漏洞扫描[2].腾讯金刚审计系统[3].百度移动云测试中心[4]以及AppRisk Scanner[5] 在收费情况.样本测试后的扫描时间对比和漏洞项专业对比后,本篇将以各个厂商的扫描能力作为分析维度展开. 测试方法 使用自己编写的测试APP测试各个扫描平台的扫描能力.这些扫描能力主要分为静态检测能力和动态检测能力.静态检测能力包括检测隐藏dex.过程间分析.较复杂漏洞检测.逆向分析:动态测试主要是指测试拒绝服务漏洞的能力,拒绝服务漏洞又可以划分

APP漏洞自动化扫描专业评测报告(下篇)

上篇.中篇回顾:通过收费情况.样本测试后的扫描时间.漏洞项对比以及扫描能力这几个方面对阿里聚安全[1].360App漏洞扫描[2].腾讯金刚审计系统[3].百度移动云测试中心[4]以及AppRisk Scanner[5]进行了对比分析.作为本系列的最后一篇,我将会以4个随机选取的APP的测试结果来进行对比. 四.扫描结果对比 选取的APP:说明一下这次选择的四个app是根据下载和安装量来选择,分别在网络工具类.天气.社交资讯类和搜索工具类选择了下载量和安装量最大的.出于对应用的隐私保护这里把最后

APP漏洞导致移动支付隐患重重,未来之路如何走?

没有一种支付是100%安全的,互联网及移动支付规模的增长,其交易的安全性需要银行.支付公司.App开发者.用户等参与各方更加重视.当下手机支付似乎变成了一种时尚,用户们"刷手机"乘地铁,"刷手机"购物,"刷手机"喝咖啡,"刷手机"看电影,甚至"刷手机"定机票--种种迹象表明手机支付已经迎来了一个高速发展期. 移动支付行业隐患重重,未来发展道路令人堪忧 但随着移动支付业务金额的疯狂涨势,移动支付背后的隐患也让

(引用)国内APP漏洞扫描收费情况调查

概述 上一次分享了应用加固的评测后,很多人想看看漏洞扫描相关的对比数据.其实在选择市面上这些移动安全类的产品时,经常为各种复杂的数据而感到疑惑,不知道怎么来评判各自的性能以及价格,从而选择出一款性价比高的安全产品.那么这一篇文章我就先来比较一下市场中现有产品的服务和收费情况. 国内app漏洞扫描平台,以及它们的收费状况,大致可以将其分成3类: 第一类:漏洞扫描收费平台 代表:百度开放云平台(9.9元一次).阿里云移动安全(专业版可包年或按次收费) 第二类:漏洞扫描免费,通过漏洞扫描推其他服务 代

国内APP漏洞扫描收费情况调查

概述 上一次分享了应用加固的评测后,很多人想看看漏洞扫描相关的对比数据.其实在选择市面上这些移动安全类的产品时,经常为各种复杂的数据而感到疑惑,不知道怎么来评判各自的性能以及价格,从而选择出一款性价比高的安全产品.那么这一篇文章我就先来比较一下市场中现有产品的服务和收费情况. 国内app漏洞扫描平台,以及它们的收费状况,大致可以将其分成3类: 第一类:漏洞扫描收费平台 代表:百度开放云平台(9.9元一次).阿里云移动安全(专业版可包年或按次收费) 第二类:漏洞扫描免费,通过漏洞扫描推其他服务 代

APP漏洞扫描器之未使用地址空间随机化

APP漏洞扫描用地址空间随机化 前言 我们在前文<APP漏洞扫描器之本地拒绝服务检测详解>了解到阿里聚安全漏洞扫描器有一项静态分析加动态模糊测试的方法来检测的功能,并详细的介绍了它在针对本地拒绝服务的检测方法. 同时,阿里聚漏洞扫描器有一个检测项叫未使用地址空间随机化技术, 该检测项会分析APP中包含的ELF文件判断它们是否使用了该项技术.如果APP中存在该项漏洞则会降低缓冲区溢出攻击的门槛. 本文主要介绍该项技术的原理和扫描器的检测方法.由于PIE的实现细节较复杂,本文只是介绍了大致的原理.

App漏洞分析,爱加密全网首推智能安全检测

2014年6月初,爱加密高调推出免费自动化App安全检测平台,这是国内首家自动化App安全检测平台,也是爱加密推出的一个重磅产品.作为国内首家免费自动化App安全检测平台,在目前整个互联网行业,包括移动互联网行业还没有这样的服务平台出现,行业前景相当乐观. 文章参考:www.ijiami.cn 只需一键,专业简单,让风险漏洞无处遁形 爱加密漏洞分析平台的推出旨在打造一个服务于移动互联网开发者的安全服务平台,同时也给整个移动互联网安全领域带来一份保障.目前移动应用开发者越来越多,他们不知道自己的应

移动支付类App漏洞隐患重重,如何进行AndroidApk加密保护 !

没有一种支付是100%安全的,互联网及移动支付规模的增长,其交易的安全性需要银行.支付公司.App开发者.用户等参与各方更加重视.当下手机支付似乎变成了一种时尚,用户们"刷手机"乘地铁,"刷手机"购物,"刷手机"喝咖啡,"刷手机"看电影,甚至"刷手机"定机 票--种种迹象表明手机支付已经迎来了一个高速发展期.但伴随着移动支付业务金额的疯狂涨势,移动支付背后的隐患也让人忧心忡忡,引起广泛关注.为保护用户支付安

(转)2016年第一期云评测报告

我们在说起云服务的时候,厂商传递给我们的信息总是非常简单:打消所有的顾虑,我们会帮你处理所有的事情. 但是云服务真的能让你省心吗? 也许可以,但是还有一个更严峻的问题:当你面对众多云服务厂商,不懂套路的你如何选择?牵涉指标太多,专业的云性能指标也不那么易懂,到底哪款适合你? 没有关系这都不再是问题,继2015年<中国公有云用户体验报告>后,听云又一重磅报告<2016第一期云评测报告>正式发布.此次报告是听云iDaaS中心利用自主研发的听云Network产品,从模拟真实用户的角度对不