Android隐私合规

2022-12-12  本文已影响0人  Android出海

目录介绍

前言

从2020年开始,全球各大应用程序商店对应用程序安全隐私问题监管变的越来越严格,这说明应用的隐私合规安全问题愈加被重视,对 Android 平台的管控程度也要比 IOS 平台严格很多,很多不合规的应用也先后被下架要求整改。笔者就曾遇到过加班整改隐私合规的问题,隐私合规问题主要针对两个方面:

那么从技术角度思考,有没有一劳永逸的办法,杜绝隐私调用不合规问题呢?

当然有!下面从合规检查合规整改合规解决方案ASM两方面来介绍来拆分隐私合规问题。

合规检查

检查这个操作主要针对于App发布和技术同学,App发布之前肯定需要系统性检查用户同意隐私协议之前有没有收集用户隐私数据的操作。
通过检查收集项目中(自有代码 + 三方 sdk)使用隐私合规相关 api 的相关代码。

目前市面已经有很多方案检测隐私API,下面介绍几种常见方案:

检测隐私API方案

如果你对Xposed比较熟悉,并且手头有个root的设备安装了Xposed框架,那么直接开发一个Xposed模块来hook指定方法就可以了,缺点是需要root权限。

如果不想折腾 Xposed 或者 VirtualXposed,只要在应用内接入epic,就可以实现应用内Xposed hook功能,满足运行hook需求。
epic 存在兼容性问题,例如Android 11 只支持64位App,所以建议只在debug环境使用。

当然我们推荐方案3,它可以拦截本进程内部几乎任意的 Java 方法调用,可用于实现 AOP 编程、运行时插桩、性能分析、安全审计等。

使用起来也非常简单:提前设置需要 hook 哪个 java 方,比如,我要 hook TelephonyManager 的 getDeviceId 方法:

//核心方法
DexposedBridge.findAndHookMethod(TelephonyManager.class, "getDeviceId", new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
        String className = param.method.getDeclaringClass().getName();
        String methodName = param.method.getName();
        Log.i(PrivacyHelper.TAG, "检测到风险函数被调用: " + className + "#" + methodName);
        Log.d(PrivacyHelper.TAG, StackTraceUtils.getMethodStack());
    }

    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
        Log.d(PrivacyHelper.TAG, "afterHookedMethod getDeviceId");
    }
});

在代码中如果有地方调用 TelephonyManager.getDeviceId 的,都会被 epic 的 beforeHookedMethod 给拦截到,只需要在 beforeHookedMethod 打印出堆栈即可看到是谁调用的。

既然我们知道了哪里有非法API调用,那么接下来看看如何整改。

合规整改

做过隐私合规的同学,想必都知道一些常见的合规操作:

但是特殊场景怎么办?那么我们有哪些特殊场景呢?

很显然常见的合规操作并不足以解决特殊场景下的隐私合规。下面就要用到今天的主角ASM插桩

合规解决方案-ASM插桩

什么是ASM

ASM 是一款通用的JAVA 平台字节码修改和分析框架。ASM 能够被用于直接在二进制层面修改现有的或生成新的class 文件。

ASM 插桩可以做什么?

最终效果

触发本地敏感调用


image.png

查看Logcat打印

image.png

查看编译后源码

image.png

原aar库敏感调用

image.png

触发三方SDK敏感调用

image.png

查看Logcat打印

image.png

查看编译后源码

image.png

可以看到不管是本地还是三方SDK敏感API调用,都在编译阶段被修改替换成了hook函数。

这样常见场景的隐私合规,特殊场景的隐私合规是不是都简单了?

上一篇 下一篇

猜你喜欢

热点阅读