Android 共享存储保护问题

Android Shared Storage protection issue

我已经实现了 Google 中给出的原生广告 Native Ads

除Android 4.x 版本外,它在所有设备上都运行良好。控制台中的崩溃日志是

Non-fatal Exception: java.lang.IllegalArgumentException: Optimized data directory /storage/emulated/0/Android/data/com.myapp/cache is not owned by the current user. Shared storage cannot protect your application from code injection attacks.
       at dalvik.system.DexFile.(DexFile.java:100)
       at dalvik.system.DexFile.loadDex + 149(DexFile.java:149)
       at dalvik.system.DexPathList.loadDexFile + 251(DexPathList.java:251)
       at dalvik.system.DexPathList.makeDexElements + 219(DexPathList.java:219)
       at dalvik.system.DexPathList.(DexPathList.java:96)
       at dalvik.system.BaseDexClassLoader.(BaseDexClassLoader.java:56)
       at dalvik.system.DexClassLoader.(DexClassLoader.java:57)
       at ir.b + 31(ir.java:31)
       at ir.a + 5(ir.java:5)
       at iu.a + 1(iu.java:1)
       at com.google.android.gms.ads.internal.ag.run + 5(ag.java:5)
       at java.util.concurrent.ThreadPoolExecutor.runWorker + 1080(ThreadPoolExecutor.java:1080)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run + 573(ThreadPoolExecutor.java:573)
       at java.lang.Thread.run + 856(Thread.java:856)

从上面的崩溃中可以看出,优化的数据目录 /storage/emulated/0/Android/data/com。myapp/cache 不属于当前用户。 共享存储无法保护您的应用程序免受代码注入攻击

我有与搜索相关的问题 Android DexClassLoader error, 'optimized data directory .. not owned by current user',但那太旧了,与 Admob 无关。如果我删除与原生广告相关的代码,那么它是 运行 否则它会崩溃并简单地在崩溃上方记录。

请注意,我的应用程序在 2019 年 8 月 13 日之前使用相同的 nativeAd 代码运行良好。之后它无法使用 NativeAd 代码。

请帮忙。

您的应用程序似乎通过移动广告内容发生了一些注入攻击

注入攻击发生在以下Android个应用中

1) 无验证检查或可绕过验证检查

2) 文件覆盖漏洞,以及

3)代码触发点

第一个条件包括

的情况

(1) 应用不对下载的 DRU 资源执行完整性或真实性检查或

(2) 攻击者能够绕过此类验证检查。第二个条件表示注入的有效负载可以覆盖可执行文件的情况。

(3)当存在代码触发点时满足第三个条件,该代码触发点在应用上下文中加载并执行被覆盖的文件。 当满足这三个条件时,远程代码注入攻击就成功了。

攻击者注入的payload根据应用的DRU实现存储在指定位置,通常在应用的数据目录(/data/data/PACKAGE_NAME)或外部存储(如SD卡)中。

如果攻击者针对的DRU是应用代码更新,注入的代码会被替换为已有的代码资源(例如, .dex、⟩.jar或 .so),然后在应用触发时加载并执行更新逻辑。

发生这种情况是因为服务器端不在客户端。 移动广告包含一些 文件覆盖漏洞 所以那个应用程序崩溃了。

解法:

在服务器端验证广告内容。是否满足 google 条款和条件。

有关详细信息,请参阅 Large-Scale Analysis of Remote Code Injection Attacks in Android Apps