如何修改云打包生成的以下安卓原生安全漏洞?
1. PendingIntent安全检测风险
-
描述:检测应用是否存在PendingIntent安全检测风险漏洞,可能导致恶意用户劫持修改Intent的内容
-
文件:classes4.dex/io/dcloud/feature/pdr/RuntimeFeatureImpl.smali
-
问题代码上下文:const/high16 v8, 0x40000000 # 2.0f invoke-static{v0, v2, v1, v8},Landroid/app/PendingIntent>getActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;
move-result-object v0 -
修复建议:禁止使用一个空Intent去构造PendingIntent,构造 PendingIntent的Inten,一定要设置ComponentName或者action
2. 广播拦截风险
-
描述:检测应用是否存在广播拦截风险漏洞,可能导致拒绝服务、信息泄漏等问题
-
文件:classes4.dex/io/dcloud/WebAppActivity.smali
-
问题代码上下文:invoke-virtual {v0, p1},Landroid/content/Intent;>setPackage(Ljava/lang/String;)Landroid/content/Intent;.line 159
invoke-virtual {p0, v0}, Landroidx/fragment/app/FragmentActivity;- >sendBroadcast(Landroid/content/Intent;)V return-void -
修复建议:通过setComponent明确指定目标组件
3. 发送广播权限缺失风险
-
描述:检测应用是否存在发送广播权限缺失风险漏洞,可能导致拒绝服务、信息泄漏等问题
-
文件:classes4.dex/io/dcloud/WebAppActivity.java
-
问题代码上下文:((StringBuilder)localObject).append(".WebAppActivityFinish");
localObject = new Intent(((StringBuilder)localObject).toString());
((Intent)localObject).setPackage(getPackageName());
this.that.sendBroadcast((Intent)localObject);
}
public String getErrorTipMsg() -
修复建议:明确设置广播权限
4. 动态注册Receiver权限缺失风险
-
描述:检测应用是否存在动态注册Receiver权限缺失风险漏洞,可能导致拒绝服务、信息泄漏等问题
-
文件:classes4.dex/io/src/dcloud/adapter/DCloudBaseActivity.java
-
问题代码上下文:if (bool) {
this.mDebugSocketStatusReceiver = new
DebugSocketStatusReceiver();
LocalBroadcastManager.getInstance(this).registerReceiver(this.mDebugSocketStatusReceiver, new
IntentFilter("io.dcloud.debug.SOCKET_STATUS")); -
修复建议:静态注册BroadcastReceiver,同时设置exported为false
5. 密钥硬编码
-
描述:检测应用是否存在秘钥硬编码漏洞,可能导致加密算法被破解
-
文件:classes4.dex/io/dcloud/f/f/a.smali
-
问题代码上下文:const-string p0, "PBKDF2WithHmacSHA1"
move-result-object v0
invoke-direct {p1, p0, v0},
Ljavax/crypto/spec/SecretKeySpec;-<init>([BLjava/lang/String;)V
.line 41
new-instance p0, Lio/dcloud/f/f/a$c; -
修复建议:将密钥进行加密或变形后存储
6. 采用不安全通信协议
-
描述:检测应用是否存在采用不安全通信协议漏洞,可导致中间人攻击,泄露通信内容
-
文件:
-
问题代码上下文:http://ask.dcloud.net.cn/article/283
http://ask.dcloud.net.cn/article/287
http://schemas.android.com/apk/res/android -
修复建议:使用https进行通信
7. activity劫持
-
描述:检测应用是否存在activity劫持漏洞,可能导致拒绝服务、信息泄漏等问题
-
文件:classes4.dex/io/dcloud/common/util/LoadAppUtils.smali
-
问题代码上下文:.line 6
cond_0
invoke-virtual {p0, v0}, Landroid/content/Context;-
>startActivity(Landroid/content/Intent;)V try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. try_end_0} :catch_0 -
修复建议:设置Activity的exproted属性为false,对于必须导出的组件需要限制授权用户或者特定应用组件,并且尽量不包含任何Intent Filter
8. Activity组件暴露风险
-
描述:检测应用是否存在Activity组件暴露的风险,可能导致攻击者通过构造恶意数据针对导出Activity组件实施越权攻击
-
文件:AndroidManifest.xml
-
问题代码上下文:<activity android:exported="true" android:launchMode="singleTop"
android:name="com.xxx.xxx.wxapi.WXPayEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/> -
修复建议:私有组件设置exported属性为false,私有组件开启
9. TrustManager校验风险
-
描述:检测在SSL验证中,自定义SSL x509 TrustManager是否存在信任任意证书漏洞,存在中间人攻击的风险
-
文件:classes4.dex/com/kunyun/sygh/CustomTrustMgr.smali
-
问题上下文:.method public
checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V
.locals 0
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/security/cert/CertificateException;
}
.end annotation
return-void
.end method -
修复建议:利用X509TrustManager子类中的checkServerTrusted函数,校验服务端证书的合法性;使用默认的系统网络库默认的信任管理/校验方案
10. Intent隐式调用
-
描述:检测应用是否存在Intent隐式调用漏洞,可能导致使用隐式的Intent调用时存在被劫持的风险
-
文件:classes4.dex/io/dcloud/WebAppActivity.smali
-
问题代码上下文: "ACTION_APP_DOWNLOAD_ERROR_DIALOG_CLICK"
const-string v1, "ACTION_APP_DOWNLOAD_ERROR_DIALOG_CLICK"
invoke-direct {v0, v1}, Landroid/content/Intent;-><init>(Ljava/lang/String;)V
const-string v1, "type" -
修复建议:建议使用显式Intent来处理敏感信息
11. 不安全的浏览器调用漏洞
-
描述:检测应用是否存在不安全的浏览器调用漏洞,可能导致浏览器被恶意篡改
-
文件:classes4.dex/io/dcloud/application/DCLoudApplicationImpl.smali
- 问题代码上下文:move-result-object p1 .line 4 invoke-static {p1}, Landroid/webkit/WebView;->setDataDirectorySuffix(Ljava/lang/String;)V try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
-
修复建议:建议在应用调用外部浏览器时对引擎版本进行检测,当发现调用Chrome V8引擎并且版本低于4.2时停止调用外部浏览器并且提示用户对调用的系统浏览器进行升级或者修改系统默认的浏览器
alchemist (作者)
用的是360基础加固服务加固过的,没有解决这些问题
2022-09-13 10:19