Android APP检测之自动化检测实战
Android APP本文作者:ice@DMZLab
最近一直在研究的检测,写了一个系列的文章——手工检测,自动化检测,常见漏洞分析。今天给大家带来的是自动化检测。本篇没有深入的讲解每一个漏洞的详情,仅作测试结果对比和自己的体验心得。
0×01 五大在线检测平台
腾讯的金刚审计系统 http://service.security.tencent.com/kingkong
360的捉虫猎手 http://appscan.360.cn/
阿里巴巴的聚安全 http://jaq.alibaba.com/gc/appsec/index.htm
百度的移动云测试中心 http://mtc.baidu.com/
梆梆加固测试平台( http://dev.bangcle.com/apps/index)
效果对比
这里选用墨迹天气app的测试结果
百度移动测试中心
漏洞名称 | 风险级别 | 说明 | 修复建议 | 详情 |
---|---|---|---|---|
组件暴露——Activity | 中危 | 当应用程序的组件被导出后,导出的组件可以被第三方app任意调用,从而导致敏感信息泄露,而且恶意攻击者也可以通过精心构造数据来达到攻击目标应用的的目的。 | 如果组件不需要与其他应用共享数据或进行交互,则在AndroidManifest.xml文件中设置该组件为 exported = “false”,反之,则需要对导出的组件进行权限控制并且严格校验传入的参数。 | com.moji.mjweather.activity.main.MainActivity com.moji.mjweather.CSplashScreen com.moji.mjweather.activity.share.ManualShareActivity com.moji.mjweather.activity.skinshop.SkinSelectorActivity com.kepler.jd.login.AuthSuccessActivity com.moji.mjweather.activity.liveview.MessageDetailActivity com.moji.mjweather.activity.liveview.OwnerMessageCenterActivity com.moji.mjweather.activity.account.SnsLoginActivity com.moji.mjweather.activity.liveview.HomePageActivity com.moji.mjweather.activity.voiceclock.AlarmAlertActivity com.moji.mjweather.activity.voiceclock.AlarmAlertFullScreenActivity com.moji.mjweather.activity.share.SharePlatformDialog com.tencent.tauth.AuthActivity com.moji.mjweather.activity.liveview.LauncherCameraActivity com.moji.mjweather.activity.bindapp.InstallAppActivity com.moji.mjweather.activity.settings.WidgetConfigureActivity com.igexin.sdk.GActivity com.moji.mjweather.wxapi.WXPayEntryActivity com.moji.mjweather.wxapi.WXEntryActivity com.moji.mjweather.activity.forum.TopicActivity com.moji.mjweather.x5webview.BrowserActivity 共:21个。 |
组件暴露——Service | 中危 | 当应用程序的组件被导出后,导出的组件可以被第三方app任意调用,从而导致敏感信息泄露,而且恶意攻击者也可以通过精心构造数据来达到攻击目标应用的的目的。 | 如果组件不需要与其他应用共享数据或进行交互,则在AndroidManifest.xml文件中设置该组件为 exported = “false”,反之,则需要对导出的组件进行权限控制并且严格校验传入的参数。 | com.moji.mjweather.service.ScreenService com.igexin.sdk.PushService com.igexin.sdk.PushServiceUser com.moji.mjweather.authaccount.AuthenticationService com.moji.mjweather.authaccount.SyncService 共:5个。 |
组件暴露——BroadcastReceiver | 中危 | 当应用程序的组件被导出后,导出的组件可以被第三方app任意调用,从而导致敏感信息泄露,而且恶意攻击者也可以通过精心构造数据来达到攻击目标应用的的目的。 | 如果组件不需要与其他应用共享数据或进行交互,则在AndroidManifest.xml文件中设置该组件为 exported = “false”,反之,则需要对导出的组件进行权限控制并且严格校验传入的参数。 | com.moji.mjweather.receiver.PackageReceiver com.moji.mjweather.receiver.MojiReceiver com.moji.mjweather.CMojiWidget4x1 com.moji.mjweather.CMojiWidget4x2 com.moji.mjweather.CMojiWidget5x1 com.moji.mjweather.CMojiWidget5x2 com.igexin.sdk.PushReceiver com.igexin.download.DownloadReceiver com.baidu.bottom.service.BottomReceiver com.zk.drivermonitor.reciever.SystemStartReceiver 共:10个。 |
应用数据任意备份风险 | 中危 | 当AndroidManifest.xml配置文件中没有有设置allowBackup标志(默认为true)或将allowBackup标志设置为true时,应用程序的数据可以被任意备份和恢复,恶意攻击者可以通过adb工具备份复制应用程序的数据。 | 在AndroidManifest.xml文件中设置application的属性 android:allowBackup=”false” | |
权限滥用风险 | 中危 | 自定义权限的保护级别过低,导致任意应用程序都可以使用此权限,无法起到保护作用。 | 如非必要,自定义权限的保护级别至少要设置为:signature。 |
漏洞名称 | 风险级别 | 说明 | 修复建议 | 详情 |
---|---|---|---|---|
WebView组件系统隐藏接口未移除漏洞 | 高危 | 使用Android WebView组件时,没有移除其中内置的searchBoxJavaBridge_,accessibility和accessibilityTraversal等导出接口, 可能导致远程代码任意执行 | 使用Android WebView组件时,通过调用removeJavascriptInterface方法移除searchBoxJavaBridge_, accessibility和accessibilityTraversal等导出接口,防止被恶意利用 | 源文件: 类:com.baidu.mobad.feeds.remote.BaiduActivity 方法:a 行数:-1 |
WebView组件系统隐藏接口未移除漏洞 | 高危 | 使用Android WebView组件时,没有移除其中内置的searchBoxJavaBridge_,accessibility和accessibilityTraversal等导出接口, 可能导致远程代码任意执行 | 使用Android WebView组件时,通过调用removeJavascriptInterface方法移除searchBoxJavaBridge_, accessibility和accessibilityTraversal等导出接口,防止被恶意利用 | 源文件: 类:com.qq.e.comm.plugin.j.a 方法:onAfterCreate 行数:-1 |
Dex文件动态加载风险 | 中危 | Android提供的DexClassLoader动态加载方法,并没有对DEX文件和路径进行安全校验,可能导致加载文件或者优化文件被恶意替换 | 使用DexClassLoader方法动态加载DEX文件时,对DEX文件进行安全校验,并保证加载路径和优化路径的安全 | 源文件: 类:com.baidu.mobad.feeds.remote.AdManager 方法:getPatchClassLoader 行数:-1 |
SSL证书验证不当漏洞 | 中危 | 应用忽略证书校验错误或信任任意证书,会导致中间人攻击,造成隐私泄露 | 禁止使用ALLOW_ALL_HOSTNAME_VERIFIER;禁止使用X509TrustManager.checkServerTrusted方法来忽略证书验证错误;在使用HostnameVerifier时verify合理处理,禁止直接返回true | 源文件: 类:com.qq.e.comm.plugin.k.d$a$1 方法:verify 行数:-1 |
WebView密码明文保存漏洞 | 低危 | 在默认情况下,如果用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db文件中,存在密码被泄露的风险 | 使用WebView.getSettings().setSavePassword(false)来禁止保存密码 | 源文件: 类:com.qq.e.comm.plugin.m.f 方法:a 行数:-1 |
WebView密码明文保存漏洞 | 低危 | 在默认情况下,如果用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db文件中,存在密码被泄露的风险 | 使用WebView.getSettings().setSavePassword(false)来禁止保存密码 | 源文件: 类:com.qq.e.comm.plugin.m.f 方法:b 行数:-1 |
WebView密码明文保存漏洞 | 低危 | 在默认情况下,如果用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db文件中,存在密码被泄露的风险 | 使用WebView.getSettings().setSavePassword(false)来禁止保存密码 | 源文件: 类:com.qq.e.comm.plugin.j.a 方法:onAfterCreate 行数:-1 |
WebView密码明文保存漏洞 | 低危 | 在默认情况下,如果用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db文件中,存在密码被泄露的风险 | 使用WebView.getSettings().setSavePassword(false)来禁止保存密码 | 源文件: 类:com.baidu.mobad.feeds.remote.BaiduActivity 方法:a 行数:-1 |
WebView密码明文保存漏洞 | 低危 | 在默认情况下,如果用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db文件中,存在密码被泄露的风险 | 使用WebView.getSettings().setSavePassword(false)来禁止保存密码 | 源文件: 类:com.baidu.mobad.feeds.remote.BaiduActivity$1 方法:shouldOverrideUrlLoading 行数:-1 |
WebView密码明文保存漏洞 | 低危 | 在默认情况下,如果用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db文件中,存在密码被泄露的风险 | 使用WebView.getSettings().setSavePassword(false)来禁止保存密码 | 源文件: 类:com.baidu.mobad.feeds.remote.DownloaderTask 方法:a 行数:-1 |
PendingIntent包含隐式Intent风险 | 低危 | PendingIntent以其发送方应用的权限使用该PendingIntent包含的Intent,如果该Intent为隐式的,可能造成隐私泄露和权限泄露 | 使用PendingIntent时,建议使用显示Intent | 源文件: 类:com.baidu.mobad.feeds.remote.download.e 方法:run 行数:-1 |
PendingIntent包含隐式Intent风险 | 低危 | PendingIntent以其发送方应用的权限使用该PendingIntent包含的Intent,如果该Intent为隐式的,可能造成隐私泄露和权限泄露 | 使用PendingIntent时,建议使用显示Intent | 源文件: 类:com.qq.e.comm.plugin.a.b.c 方法:d 行数:-1 |
PendingIntent包含隐式Intent风险 | 低危 | PendingIntent以其发送方应用的权限使用该PendingIntent包含的Intent,如果该Intent为隐式的,可能造成隐私泄露和权限泄露 | 使用PendingIntent时,建议使用显示Intent | 源文件: 类:com.qq.e.comm.plugin.a.i 方法:b 行数:-1 |
WebView密码明文保存漏洞 | 低危 | 在默认情况下,如果用户选择保存在WebView中输入的用户名和密码,则会被明文保存到应用数据目录的databases/webview.db文件中,存在密码被泄露的风险 | 使用WebView.getSettings().setSavePassword(false)来禁止保存密码 | 源文件: 类:com.qq.e.comm.plugin.m.c 方法:d 行数:-1 |
日志泄露隐私风险 | 低危 | 调试输出接口未关闭可能导致敏感信息泄露 | 关闭调试接口,禁止输出敏感信息 | 源文件: 类:com.baidu.mobads.location.BDLocManager 方法:a 行数:-1 |
日志泄露隐私风险 | 低危 | 调试输出接口未关闭可能导致敏感信息泄露 | 关闭调试接口,禁止输出敏感信息 | 源文件: 类:com.qq.e.comm.plugin.g.a 方法:a 行数:-1 |
日志泄露隐私风险 | 低危 | 调试输出接口未关闭可能导致敏感信息泄露 | 关闭调试接口,禁止输出敏感信息 | 源文件:src/com/qihoo/util/StubApplication.java 类:com.qihoo.util.StubApplication 方法:initCrashReport 行数:93 |
梆梆加固测试结果 :
内网测试信息残留漏洞 | |
---|---|
评估项 | 内网测试信息残留漏洞 |
漏洞描述 | 检测程序代码内部是否包含残留测试信息,例如内网url地址等。 |
漏洞影响 | 低 |
评估方案 | 通过检测是否包含内网URl地址,判断是否发布包中是否包含测试数据。残留的测试数据,例如URL地址,测试账号,密码,可能会被盗取并恶意利用在正式服务器上进行攻击,例如账号重试,攻击安全薄弱的测试服务器以获取服务器安全漏洞或者逻辑漏洞。 |
评估结果 | 安全 |
漏洞分析 | 该App应用中未包含测试数据信息。 |
漏洞详情 | N/A |
解决方案 | N/A |
下载任意apk漏洞 | |
---|---|
评估项 | 下载任意apk漏洞 |
漏洞描述 | 检测应用中是否存在下载任意apk的漏洞。 |
漏洞影响 | 中 |
评估方案 | 具有下载apk功能的组件存在导出漏洞,并且未对组件调用者进行校验。攻击者可利用导出组件的手段下载攻击者指定的任意apk文件,并且在下载过程中伪装apk文件的下载信息,例如图标、描述等,导致用户被诱导下载安装恶意应用。 |
评估结果 | 安全 |
漏洞分析 | 该App应用中不存在可被导出的具有下载apk功能的组件。 |
漏洞详情 | N/A |
解决方案 | N/A |
HTTPS未校验服务器证书漏洞 | |
---|---|
评估项 | HTTPS未校验服务器证书漏洞 |
漏洞描述 | 检测App程序在使用HTTPS协议传输数据时是否对服务器证书进行完整校验。 |
漏洞影响 | 中 |
评估方案 | 使用HTTPS协议时,客户端必须对服务器证书进行完整校验,以验证服务器是真实合法的目标服务器。如果没有校验,客户端可能与仿冒的服务 器建立通信链接,即“中间人攻击”。仿冒的中间人可以冒充服务器与银行客户端进行交互,同时冒充银行客户端与银行服务器进行交互,在充当中间人转发信息的 时候,窃取手机号,账号,密码等敏感信息。 |
评估结果 | 存在漏洞 |
漏洞分析 | 该App应用在使用HTTPS进行数据传输时未校验服务器证书或者未校验主机名。 |
漏洞详情 | ["com.moji.mjweather.util.log.InstalledAppTrackerSDK.a:(ILjava/lang/String;Lorg/apache/http/client/methods/HttpPost;)Ljava/lang/String;"] |
解决方案 | 在使用https时对服务器证书进行校验,并且使用STRICT_HOSTNAME_VERIFIER严格校验主机名。 |
Webview远程代码执行漏洞 | |
---|---|
评估项 | Webview远程代码执行漏洞 |
漏洞描述 | 检测app应用的webview组件中是否存在远程代码执行漏洞。 |
漏洞影响 | 高 |
评估方案 | Webview是Android用于浏览网页的组件,其包含的接口函数addJavascriptInterface可以将Java类或方 法导出以供JavaScript调用,实现网页JS与本地JAVA的交互。由于系统没有限制已注册JAVA类的方法调用,因此未注册的其它任何JAVA类 也可以被反射机制调用,这样可能导致被篡改的URL中存在的恶意代码被执行,用户手机被安装木马程序,发送扣费短信,通信录或者短信被窃取,甚至手机被远 程控制。 |
评估结果 | 存在漏洞 |
漏洞分析 | 该App应用中可能存在被addJavascriptInterface接口导出的未注册Java类函数。 |
漏洞详情 | ["com.tencent.bugly.crashreport.CrashReport.setJavascriptMonitor:(Landroid/webkit/WebView;ZZ)Z"] |
解决方案 | 取消使用addJavascriptInterface接口,以其他Java与 JavaScript互通方案代替;若必须使用,则应对访问的url进行过滤限制或对html页面进行完整性校验,同时显示移除对指定的 javascript接口的调用: removeJavascriptInterface(searchBoxJavaBridge_) emoveJavascriptInterface(accessibility);removeJavascriptInterface(accessibilityTraversal);。 |
Webview绕过证书校验漏洞 | |
---|---|
评估项 | Webview绕过证书校验漏洞 |
漏洞描述 | 检测App应用的webview组件是否在发现https网页证书错误后继续加载页面。 |
漏洞影响 | 低 |
评估方案 | 客户端的Webview组件访问使用HTTPS协议加密的url时,如果服务器证书校验错误,客户端应该拒绝继续加载页面。但如果重载 WebView的onReceivedSslError()函数并在其中执行handler.proceed(),客户端可以绕过证书校验错误继续访问此 非法URL。这样将会导致“中间人攻击”,攻击者冒充服务器与银行客户端进行交互,同时冒充银行客户端与银行服务器进行交互,在充当中间人转发信息的时 候,窃取手机号,账号,密码等敏感信息。 |
评估结果 | 存在漏洞 |
漏洞分析 | 该App应用的webview组件中存在忽略证书校验错误的漏洞。 |
漏洞详情 | [ "com.alipay.sdk.app.b.onReceivedSslError:(Landroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V", "com.alipay.sdk.app.d.onClick:(Landroid/content/DialogInterface;I)V", "com.alipay.sdk.auth.AuthActivity.b.onReceivedSslError:(Landroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V", "com.alipay.sdk.auth.f.onClick:(Landroid/content/DialogInterface;I)V", "com.tencent.smtt.sdk.aw.b.proceed:()V"] |
解决方案 | 取消在Webveiw组件中对onReceivedSslError()函数的重载。 |
360捉虫猎手 检测结果:
因结果扫了很久还没出来,就直接来张其他app的扫描结果吧
阿里聚对墨迹天气的安全检测结果 :
漏洞详情 | 风险等级 | 修复建议 |
---|---|---|
webview远程代码执行漏洞(2个)addJavascriptInterface存在高危远程代码执行漏洞,应尽量避免使用,API 17中用@JavascriptInterface 代替addjavascriptInterface;移除系统webkit内置的危险接口searchBoxJavaBridge_,accessibility,accessibilityTraversal [ 了解更多 ] [ 实际案例 ] | 高危触及安全红线 | 应尽量避免使用,API 17中用@JavascriptInterface 代替addjavascriptInterface;移除系统webkit内置的危险接口searchBoxJavaBridge_,accessibility,accessibilityTraversal |
WebView不校验证书漏洞(1个)调用了android/webkit/SslErrorHandler类的proceed方法,可能导致WebView忽略校验证书的步骤 | 高危触及安全红线 | 不要调用android.webkit.SslErrorHandler的proceed方法 |
中间人攻击漏洞(1个)HTTPS禁止使用ALLOW_ALL_HOSTNAME_VERIFIER,因为这样会存在中间人攻击的风险 [ 了解更多 ] | 高危触及安全红线 | 必须使用STRIC_HOSTNAME_VERIFIER并校验证书 |
备份标识配置风险(1个)当这个标志被设置为true或不设置该标志时应用程序数据可以备份和恢复,adb调试备份允许恶意攻击者复制应用程序数据。 [ 了解更多 ] [ 实际案例 ] | 中危触及安全红线 | 在AndroidManifest.xml中设置android:allowBackup=”false” |
拒绝服务漏洞(22个)不校验导出组件(Activity,Service等)的传递参数,导致拒绝服务,需注意空值判定以及类型转换判断。 [ 了解更多 ] [ 实际案例 ] | 中危触及安全红线 | 请严格校验输入参数,注意空值判定和类型转换判断,防止由于异常输入导致的应用崩溃. |
SharedPrefs任意读写漏洞(2个)存在内容被替换的风险,SharedPreference禁止使用MODE_WORLD_READABLE和MODE_WORLD_WRITABLE [ 了解更多 ] | 中危触及安全红线 | 不要使用MODE_WORLD_READABLE和MODE_WORLD_WRITABLE。 |
主机名弱效验(3个)在实现的HostnameVerifier子类中未对主机名做效验,这样会导致恶意程序利用中间人攻击绕过主机名效验。利用HostnameVerifier子类中的verify函数效验服务器主机名的合法性。 | 中危触及安全红线 | 在实现的HostnameVerifier子类verify函数中校验主机名的合法性。 |
证书弱校验(3个)在实现的HostnameVerifier子类中未对主机名做效验,这样会导致恶意程序利用中间人攻击绕过主机名效验。利用HostnameVerifier子类中的verify函数效验服务器主机名的合法性。 | 中危触及安全红线 | 在实现的X509TrustManager子类中checkServerTrusted函数效验服务器端证书的合法性。 |
File任意读写漏洞(7个)存在内容被替换的风险,openFileOutput禁止使用MODE_WORLD_READABLE和MODE_WORLD_WRITABLE [ 了解更多 ] | 中危触及安全红线 | 不要使用MODE_WORLD_READABLE和MODE_WORLD_WRITABLE。 |
随机数生成函数使用错误(1个)使用SecureRandom时不要使用SecureRandom (byte[] seed)这个构造函数,会造成生成的随机数不随机。 [ 了解更多 ] | 高危 | 建议通过/dev/urandom或者/dev/random获取的熵值来初始化伪随机数生成器PRNG |
AES/DES弱加密风险(19个)使用AES/DES加密算法时,应显式指定使用CBC或CFB模式.否则容易受到选择明文攻击(CPA)的风险,造成信息泄露。 | 高危 | 使用AES/DES加密算法时应使用CBC或CFB模式。或者使用安全组件的安全加密接口SecurityCipher进行加密。 |
Native动态调试(1个)so文件存在被调试的风险,攻击者可以利用此风险对应用进行动态调试,造成核心逻辑和敏感数据等信息泄漏。 | 高危 | 聚安全安全组件通过监控进程的多种调试状态特征,给应用提供全方位的反调试保护。 |
密钥硬编码风险(9个)本地存储密钥存在被攻击者利用并通过密钥构造伪数据的风险。 [ 实际案例 ] | 高危 | 1、禁止把密钥写死在程序中,2、使用聚安全提供的安全加密组件。 |
初始化IvParameterSpec函数错误(7个)使用固定初始化向量,结果密码文本可预测性会高得多,容易受到字典式攻击。修复建议:1、禁止使用常量初始化矢量参数构建IvParameterSpec,2、推荐使用聚安全提供的安全组件。 [ 实际案例 ] | 中危 | 修复建议:1、禁止使用常量初始化矢量参数构建IvParameterSpec,2、推荐使用聚安全提供的安全组件。 |
未进行安全加固风险(1个)应用没有被安全加固,攻击者可以利用重打包等手段修改程序的原始逻辑和内容,并上传仿冒app到第三方应用市场,欺骗用户。 [ 实际案例 ] | 中危 | 建议使用聚安全的应用加固方案,聚安全应用加固提供对dex、so等文件的保护以及混淆。 |
PendingIntent误用风险(5个)使用PendingIntent的时候,如果使用了一个空Intent,会导致恶意用户劫持修改Intent的内容。禁止使用一个空Intent去构造PendingIntent,构造PendingIntent的Intent一定要设置ComponentName或者action。 | 中危 | 禁止使用一个空Intent去构造PendingIntent,构造PendingIntent的Intent一定要设置ComponentName或者action。 |
Webview明文存储密码漏洞(5个)使用Webview时需要关闭webview的自动保存密码功能,防止用户密码被webview明文存储。 | 中危 | 显示设置webView.getSetting().setSavePassword(false) |
未移除有风险的Webview系统隐藏接口(17个)android webview组件包含3个隐藏的系统接口:searchBoxJavaBridge_, accessibilityTraversal以及accessibility,恶意程序可以利用它们实现远程代码执行。请通过显示调用removeJavascriptInterface移除这三个系统隐藏接口。 [ 实际案例 ] | 中危 | 请通过显示调用removeJavascriptInterface移除这三个系统隐藏接口。 |
数据弱保护(1个)数据安全保护级别较低,攻击者可以通过逆向分析等手段,较容易得获取应用的关键数据,比如签名算法、加密密钥、加密数据等。 | 中危 | 推荐使用安全组件的数据加签和安全存储功能,提高应用的安全保护级别。 |
日志泄漏风险(20个)使用System.out.print等标准输出打印日志信息或转存日志信息,容易泄漏敏感信息。建议删除所有使用System.out.print等标准输出打印日志或转存日志信息的代码 [ 实际案例 ] | 低危 | 建议删除所有使用System.out.print等标准输出打印日志或转存日志信息的代码 |
关于阿里巴巴的聚安全,聚安全会给代码详情打码,如下图(4.1号以后的新规则,需要验证app的签名,会给你一个demo,你需要把keystore签到阿里官方给的demo中,验证应用开发者,然后才能看到详情)如下图:
有些朋友说,出现了这个 “为保护应用隐私,查看详情漏洞位置请先申请 应用所有权认证”,
如何签名
如何签名:
jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkin] [alias]
命令格式及参数意义:
-verbose -> 输出签名过程的详细信息
-keystore [keystorePath] -> 密钥的库的位置
-signedjar [apkOut] -> 签名后的输出文件名
[apkin] -> 待签名的文件名
[alias] -> 证书别名
示例:
D:\>jarsigner -verbose -keystore demo.keystore -signedjar jaq_demo_signed.apk jaq_demo.apk demo.keystore
下面讲下如何对app的应用开发者进行认证:
那么如何签名呢
创建一个keystore,用来存放签名app时要用的:
keytool -genkey -v -keystore relax.keystore -alias rela -keyalg RSA 生成私钥
用私钥对apk进行重新签名
root@kali:~/Desktop# jarsigner -verbose -sigalg MD5withRSA --digestalg SHA1 -keystore /root/Desktop/relax.keystore jaq_demo_1460103308355.apk rela
就是说,使用开发者的keystore对聚安全的那个demo.apk进行签名,然后就完成了认证
聚安全的一些其他看点
聚安全结合乌云,里面有很多实例,有很多常用漏洞的集合,是新手快速解决问题的好去处。
聚安全还有一个仿冒监测:(这里说下为什么会出现仿冒软件,因为app没有加固,导致被反编译,被打包后,植入而已代码后又在其他地方上线,所以这里忠告一下,下app,一定要去官方网站上下载,能提供验证MD5,尽量要验证一下)
检测结果总结:
阿里聚安全问题汇总:
webview远程代码执行漏洞
WebView不校验证书漏洞
中间人攻击漏洞
备份标识配置风险
拒绝服务漏洞
SharedPrefs任意读写漏洞
主机名弱效验
证书弱校验
File任意读写漏洞
随机数生成函数使用错误
AES/DES弱加密风险
Native动态调试
密钥硬编码风险
初始化IvParameterSpec函数错误
未进行安全加固风险
PendingIntent误用风险
Webview明文存储密码漏洞
未移除有风险的Webview系统隐藏接口
数据弱保护
日志泄露隐私风险(logcat日志输出)
百度移动测试中心问题汇总:
组件暴露——Activity
组件暴露——Service
组件暴露——BroadcastReceiver
应用数据任意备份风险
权限滥用风险
WebView组件系统隐藏接口未移除漏洞
Dex文件动态加载风险
SSL证书验证不当漏洞
WebView密码明文保存漏洞
PendingIntent包含隐式Intent风险
日志泄露隐私风险
最后看下梆梆的检测结果 :
Java代码保护风险
组件导出风险
敏感函数调用风险
调试日志函数调用风险
应用数据任意备份风险
明文数字证书风险
未使用HTTPS协议的数据传输风险
Webview明文存储密码风险
HTTPS未校验服务器证书漏洞
Webview远程代码执行漏洞
Webview绕过证书校验漏洞
梆梆的新鲜的亮点: 到一处 直接打印出app里涉及到的url列表地址了,是不是涉及到很多新鲜的子域名和url。
总结和一些争议
评估一下APP的安全性可以综合参考以上的检测,然后综合性的评估,阿里的需要验证开发者权限,百度那个要花钱的,还不错,梆梆也可以(很方便渗透额),360怎么一直扫描不出报告。开发不一定能改第三方的包的安全问题,所以本包的问题能改的尽量改,咱们能做的就是给app进行加固。
加固前后效果对比:
加固后,可以看到数据备份还是没有打钩,因为,我没对apk中的(在AndroidManifest.xml中设置android:allowBackup=”false”)这个设置项进行更改。
后记
本次在线检测实战旨在帮助开发者更快的评估自己的android问题,作为一个菜鸟app检测人员,希望带给大家的是让自己的app更加安全,当然安全从开发开始构思时,就该考虑是否使用第三方包,这样,对app的安全更加可控。
阅读拓展
http://www.droidsec.cn/ 安卓安全中文站
http://blog.nsfocus.net/mobile-app-security-security-test/ 移动app检测要点
http://zbc.baijia.baidu.com/article/365622 10大移动安全威胁