隐私合规代码排查思路

简介: 隐私合规代码排查思路

隐私合规整治不仅仅是排查一次就完,而是要做一个完整的体系来规范后面的编码,避免隐私代码调用又出现而触发合规问题。


一个体系的完善,总体流程为:


  • 发现问题
  • 更改问题
  • 规范问题

1、如何检查 “同意用户隐私” 之前的隐私代码调用?


通过 as 去手动 Find in Fies ?那你怎么知道这个代码是在什么时机调用的呢?所以,静态检查隐私代码调用是不合适的。 有没有一种能在运行的时候知道是哪些类调用了隐私 API 呢?有,我们的基础团队写了一篇《Android APP运行时行为监控技术方案》的调研,采用 Frida 来 hook java 的代码,但 Frida 用起来真的太麻烦了,要搭建各种环境,搭建过程可以参考《APP逆向神器之Frida【Android初级篇】》,就不能来点直接 hook 的吗?有,《epic》:


Epic 是一个在虚拟机层面、以 Java Method 为粒度的 运行时 AOP Hook 框架。简单来说,Epic 就是 ART 上的 Dexposed(支持 Android 5.0 ~ 11)。它可以拦截本进程内部几乎任意的 Java 方法调用,可用于实现 AOP 编程、运行时插桩、性能分析、安全审计等。

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


Class clazz=null;
try {
    clazz = Class.forName("android.telephony.TelephonyManager");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}
DexposedBridge.findAndHookMethod(clazz, "getDeviceId", new XC_MethodHook() {
    @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
        Log.i(TAG, "beforeHookedMethod: this:" + param.thisObject, new RuntimeException("stack"));
    }
    @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
        Log.i("Case3", "afterHookedMethod getDeviceId");
    }
});
复制代码


在代码中如果有地方调用 TelephonyManager.getDeviceId 的,都会被 epic 的 beforeHookedMethod 给拦截到,我们只需要在 beforeHookedMethod 打印出堆栈即可看到是谁调用的,打印堆栈也很简单,我们就让他抛出一个异常即可看到,实验结果如图:


image.png

但有那么多隐私的 api 接口调用,如果未来又有新增的 api 变为隐私了,总不能每个都去写一遍 findAndHookMethod 吧,没问题,将隐私 Api 配置化即可。


在主工程的 assets 目录下放置一份 privacy.json 的配置文件,格式如下:


image.png

在初始化中我们去读取该配置转成 json 文件解析出 className 和 method 进行 hook,示例如下:


image.png

2、如何全局检查隐私调用的代码?


1、解压 apk 取出所有 dex,将 dex 反汇编成 smail 文件,根据规则扫描 smail 文件中的方法是否有调用隐私相关的 API,代表作有网易云的 《Android 隐私合规静态检查

2、自定义 gradle transfrom 处理 class 文件和 jar 文件,然后通过 ASM 的 ClassVisitor 获取当前类下所有的方法,并检查该方法是否是有调用隐私相关的 API,visitMethod 可以查看《Mamba


3、基于 lint 去做一套隐私合规检查,《 Lint-隐私检测利器 》中的作者基于 ClassScanner 去做了一套 lint 检查,该方案的好处是可以配合 CI 构建去规范检查


3、如何更改隐私调用的代码?


手动改?很麻烦,模块太多,这个地方可以采用 ASM 方案,将调用隐私的代码全部收拢为自己写的类,可以看阿宝哥的thread_hook_plugin 这个项目:


image.png

替换方法的方案有很多,如 booster 的 booster-transform-thread


4、如何规范隐私调用


这个地方就需要大力发展我们的 lint 检查工具了,将隐私 api 这块能力再丰富一下,但我看现有的很多 lint 工具还是有弊端,每一项规范都需要去写 UastScanner 类,其实很多检查项他们都是相同的代码,只是检查的方法和类不同而已,这块完全可以做成 lint 配置化,读取配置文件来实现,圆圆大佬有出一款基于配置检查的 AndroidLint 工具,我们可以只需要将隐私 api 配置到 custom_lint_config.json 文件中即可


参考文档:


目录
相关文章
|
算法 安全 关系型数据库
阿里云SDDP(敏感数据保护)测试调研
海量数据的使用正在为企业创造越来越多的价值,与此同时,数据也正成为企业的核心资产;如何在对数据高效使用的同时,确保数据的安全,尤其是敏感数据的安全,是一个重要的安全课题,也是很多企业的核心诉求。本次对阿里云SDDP(敏感数据保护)产品进行了测试调研。
4599 0
|
Web App开发 缓存 应用服务中间件
【CDN 最佳实践】获取历史脏数据的处理思路及规避方法
保证提供给客户端准确的数据是保障服务质量的最基本的要求。但是在实际使用过程中经常会发现客户端访问到的数据为历史脏数据影响客户体验。本文将在包括 CDN 的场景下分析常见出现该问题的原因以及规避方法,希望大家可以在遇到该问题时可依据该思路尽快恢复解决。
4625 0
|
5月前
|
数据安全/隐私保护
数据安全用户系统问题之实人认证信息在用户模型中体现的如何解决
数据安全用户系统问题之实人认证信息在用户模型中体现的如何解决
|
5月前
|
数据采集 存储 安全
在电商API采集过程中违反数据隐私和合规性规定如何避免?
为确保电商API数据采集合规与安全,需遵循多项措施:熟悉GDPR等法规;遵守API条款;最小化数据收集;匿名化处理;获用户同意;应用数据加密;实行访问控制;定期安全审计;设定数据保留政策;响应数据主体请求;记录处理活动;建立泄露应对计划;加强员工培训;审查合作伙伴合规性;必要时咨询法律意见。这些步骤有助于降低违规风险。
|
5月前
|
运维 安全 Java
主机入侵痕迹排查指导手册(一)排查概述、排查思路
【8月更文挑战第11天】此文档提供了一线服务交付人员在攻防演练期间对主机进行入侵痕迹排查的指导。主要内容包括:1) 排查概述,明确了手册的目标是传递知识与经验,帮助一线人员高效完成排查工作;2) 排查思路,首先介绍排查流程,强调从网络连接、进程信息等多角度入手;其次提出注意事项,如避免误操作导致业务中断,以及在发现疑似异常文件时应谨慎处理。该指南适用于Windows与Linux系统,并关注Web应用的安全检查。
137 0
|
7月前
|
监控 安全 BI
企业合规性检查包括哪些内容?
【6月更文挑战第24天】企业合规性检查包括哪些内容?
397 5
|
8月前
|
存储 安全 网络安全
怎么处理网站的一些安全风险
为了防范这些安全隐患,网站维护人员应采取一系列安全措施,包括及时更新服务器系统安全漏洞补丁、加强服务器安全防护能力、制定有效的风险预警机制、加密数据、限制外来移动存储设备、管控上网行为等。此外,还应注意提高员工的安全意识和技能水平,增强法律保护意识。
|
安全 程序员 数据库
可控参数带来的网站漏洞修复建议方案
网站中存在的越权漏洞,首先我们来讲一下什么是关键可控参数,也就是说像我们的一些关键参数,例如use ID order by ID就是一些关键的参数,必须是你的这么一个测试者,是能够去对其控制的。如果这个参数已经挟持了,或者说他有固定的这个值。那此时的话就不称为可控参数了。而关键就是你的改动必须能造成这个越权效果的一种称为关键参数。我们一定要快速定位到这种关键可控的这个参数之后,我们才能够更快速的去找到对应的这么一个越权漏洞。
202 0
可控参数带来的网站漏洞修复建议方案
|
SQL 运维 安全
最佳实践|数据泄漏事件频发的背后:企业如何才能保障数据安全?
众所周知,当前全球已逐渐进入数字化时代,数据已成为企业的核心生产要素,任何数据数据安全事件都是影响重大的。一旦出现数据安全事件,不仅对用户的使用体验和个人隐私带来威胁,且企业也可能面临重大损失及经营风险。数据安全防护已经日渐成为企业关注的重要诉求之一。 为帮助广大企业客户有效保护数据安全,阿里云数据库团队推出覆盖事前、事中及事后的全链路数据安全防护方案,并已服务了上万企业客户。
779 0
最佳实践|数据泄漏事件频发的背后:企业如何才能保障数据安全?
验签出错-自查方案
错误原因:    1.密钥不匹配    2.编码格式不统一  3.请求参数中有空格,转义符,特殊字符(基本上会出现在biz_content中)   4. notify_url不能加?id=123这类自定义参数      错误示例:https://您的域名/notify_url.php?id=123&test=abc     注:如果您的请求报错请同时检查您的异步地址是否符合要求    5..NET开发语言请注意在自查上述问题,没有发现问题,请更新官方最新sdk在重新测试。
646 12