Android隐私合规

简介: Android隐私合规

目录介绍

  • 前言
  • 合规检查
  • 检测隐私API方案
  • 合规整改
  • 合规解决方案-ASM插桩
  • 什么是ASM
  • ASM 插桩可以做什么?
  • 最终效果

前言

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

  • 在用户同意隐私协议之前不能收集用户隐私数据,例如 IMEI、AndroidId、MAC 等
  • 在用户同意隐私协议之后,收集用户数据行为在对应场景不能超频,比如一分钟不能超过 3 次获取 IMEI

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

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

合规检查

检查这个操作主要针对于App发布和技术同学,App发布之前肯定需要系统性检查用户同意隐私协议之前有没有收集用户隐私数据的操作。

通过检查收集项目中(自有代码 + 三方 sdk)使用隐私合规相关 api 的相关代码。

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

检测隐私API方案

  • 方案1:Xposed

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

  • 方案2:VirtualXposed
    VirtualXposed 是基于VirtualApp 和 epic 在非ROOT环境下运行Xposed模块的实现(支持5.0~10.0)。
    VirtualXposed其实就是一个支持Xposed的虚拟机,我们把开发好的Xposed模块和对应需要hook的App安装上去就能实现hook功能。
  • 方案3:epic

如果不想折腾 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调用,那么接下来看看如何整改。

合规整改

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

  • 用户在点击隐私政策协议“同意”按钮前,APP和SDK不能调用系统的敏感权限接口,特别是能获取IMEI、IMSI、MAC、IP、Android、已安装应用列表、硬件序列表、手机号码、位置等等信息的系统接口。
  • 集成的第三方SDK建议升级到最新版本,用户在点击隐私政策协议“同意”按钮后,SDK再进行初始化。
  • 在“同意”按钮上加入判定函数,当用户点击“同意”后,APP和SDK再执行调用系统接口的相关函数行为。
  • 统一管理敏感信息采集入口,缓存敏感信息数据,可以设定缓存过期时间(建议设置超过5分钟)。获取android_id,缓存下来,下次调用先拿缓存,避免超频调用系统api。

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

  • 三方SDK断更了没法升级了,但是这个库又很重要,一时半会儿找不到好的合规库替代
  • 三方SDK很重要,应用一启动等不了用户同意隐私政策就必须调用
  • 三方SDK在调用某个敏感API,本地代码也调用同一个,这时候虽然本地代码做了缓存,尽可能的避免超频调用,但是三方SDK并不会读缓存,这样就有可能导致三方SDK本身没超频,本地代码本身也没有超频,但是两个都调用了而超频

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

合规解决方案-ASM插桩

什么是ASM

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

ASM 插桩可以做什么?

  • 编译阶段扫描修改代码,注意这里不管是本地代码还是三方SDK代码都可以修改,通过ASM插桩
    可以达到在调用敏感API之前插入代码,记录运行时的方法调用链和当前时间。
  • hook敏感API,替换字节码指令将调用链指向工具类从而统一管理敏感数据。这样既可以在未同意隐私协议之前,不调用相关API,又可以控制调用频率

最终效果

  • 本地敏感调用

触发本地敏感调用

1686637863503.png

image.png

查看Logcat打印

1686637884233.png

image.png

查看编译后源码

1686637897796.pngimage.png

  • 模拟三方SDK敏感调用

原aar库敏感调用


1686637918337.png

image.png

触发三方SDK敏感调用

1686637937377.png

image.png

查看Logcat打印

1686637953663.png

image.png

查看编译后源码

1686637968446.png

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

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


相关文章
|
8天前
|
安全 Android开发 数据安全/隐私保护
探索Android 12的新特性:用户体验与隐私保护的革新
【7月更文挑战第7天】随着技术的不断进步,用户对手机操作系统的期望也日益增长。本文将深入分析Android 12带来的创新特性,特别是其如何通过重新设计的用户界面和增强的隐私功能提升整体体验,并探讨这些变化如何影响开发者和用户的互动模式。
|
14天前
|
安全 算法 数据安全/隐私保护
探索Android 12中的隐私保护新特性
【6月更文挑战第30天】随着数字时代的到来,个人数据安全和隐私保护日益成为用户关注的焦点。本文将深入探讨Android 12操作系统中引入的隐私保护功能,从全新的隐私仪表板到精细的应用权限管理,再到增强的系统安全性,我们将逐一分析这些新特性如何提升用户的隐私保护水平,并讨论它们对开发者和用户体验可能产生的影响。
|
3天前
|
存储 安全 Android开发
探索Android 12中的隐私特性及其对开发者的影响
【7月更文挑战第12天】随着数字隐私意识的增强,Android操作系统在新版本中引入了多项隐私保护功能。本文将深入分析Android 12中新增的隐私特性,探讨这些变化如何影响应用开发流程及用户体验,并指导开发者如何优化应用以适应新的隐私要求。
15 0
|
1月前
|
安全 Android开发 数据安全/隐私保护
探索Android 12的隐私特性:用户数据保护的新纪元
【6月更文挑战第14天】在数字时代,用户数据安全和隐私保护日益成为焦点。随着Android 12的发布,Google引入了一系列创新的隐私特性,旨在为用户提供前所未有的数据控制权。本文将深入探讨这些新特性,并分析它们如何塑造移动操作系统的未来。
|
11天前
|
安全 数据处理 数据安全/隐私保护
探究iOS与安卓在隐私保护方面的差异及影响
随着智能手机的普及,操作系统的隐私保护功能成为了消费者关注的焦点。本文将深入分析iOS和安卓两大主流操作系统在隐私保护方面的设计差异,并探讨这些差异对用户隐私安全的实际影响。通过对比研究,揭示各系统的优势与不足,为读者提供全面的系统选择参考。
|
1月前
|
安全 算法 数据安全/隐私保护
探索iOS与Android的隐私保护机制
【6月更文挑战第5天】在数字时代,隐私保护已成为用户最关心的问题之一。iOS和Android作为两大主流操作系统,各自发展出了独特的隐私保护技术。本文将深入探讨这两个平台在隐私保护方面的策略、技术和挑战。
27 3
|
1月前
|
监控 安全 Android开发
探索Android 12的隐私特性:用户数据保护的新纪元
【6月更文挑战第4天】随着数字时代的到来,用户数据安全和隐私保护成为全球关注的热点。Android 12作为谷歌推出的最新操作系统版本,引入了一系列创新功能以增强用户隐私和安全性。本文将深入探讨这些新特性如何改变我们与技术的互动方式,并评估它们对普通用户和企业的潜在影响。
|
1月前
|
安全 API Android开发
探索Android 12的隐私特性:用户数据保护的新纪元
【6月更文挑战第3天】本文将深入探讨Android 12中引入的隐私特性,分析其对用户数据保护的影响。我们将从操作系统级别的变化出发,解读这些新特性如何增强用户隐私和安全性,以及它们对开发者和普通用户的潜在影响。
|
1月前
|
安全 搜索推荐 数据安全/隐私保护
探索Android 12中的隐私保护新特性
【6月更文挑战第6天】在数字化时代,用户隐私和数据安全成为全球关注的焦点。Android 12引入了一系列创新的隐私保护功能,旨在为用户提供更加安全、透明的使用环境。本文将深入探讨这些新特性,并分析它们如何增强用户的隐私保护。
20 0
|
2月前
|
Android开发 开发者
Android12 开始推送 Beta2,新增隐私控制面板
Android12 开始推送 Beta2,新增隐私控制面板
43 0