草庐IT

移动APP安全合规检测技术浅析

刘素云 2023-03-28 原文

1、监管机构及政策

想要确保App安全合规,需要先了解相关政策法规。对于企业而言,App合规监管背后,主要涉及哪些监管机构?包括中央网信办、工业和信息化部、公安部和国家市场监管总局,由四部门在全国范围组织开展App违法违规收集使用个人信息专项治理活动。日常App开发中,主要是来自工信部的安全整改问题。

常见的法律法规包括《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》、《信息安全技术个人信息安全规范》、《常见类型移动互联网应用程序必要个人信息范围规定》等。

图1 移动安全相关法律法规

近几年,工信部不断开展推进App侵害用户权益专项整治行动,整治对象包括三大类,即App服务提供者(即应用软件,包括快应用和小程序等新应用形态)、软件工具开发包(SDK)提供者、应用分发平台。

下面是App典型违规问题分类:

  • 违规收集用户个人信息方面,包括“私自收集个人信息”、“超范围收集个人信息”;
  • 违规使用用户个人信息方面,“私自共享个人信息给第三方”、“强制用户使用定向推送功能”;
  • 不合理索取用户权限方面,“不给权限不让用”、“频繁申请权限”、“过度索取权限”;
  • 为用户账号注销设置障碍方面,即“账号注销难”。

2、检测手段

对App的安全合规检测手段除了工信部的定期抽查,自查手段包括人工检测、通过采购第三方的App漏洞扫描工具(目前第三方漏洞扫描产品有:爱加密、梆梆、360等),也有一些开源的第三方工具检测套件辅助使用。从技术形态上可以分为静态检测方案与动态检测方案,以下分别作简要介绍。

2.1 静态检测方案

静态检测方案基于反编译技术通过对移动应用的安装包反编译出代码文件,逐个扫描验证分析,主要对配置文件、源码文件、资源文件和so等文件进行静态扫描,检测移动应用中敏感权限申请及隐私相关API代码,生成精准可视化安全报告。

在该领域中,常用到以下工具:

✔ Apktool : 反编译安卓Apk,可以反编译资源,并在进行修改之后重新打包Apk。

✔ dex2jar : 将Apk反编译成Java源码(classes.dex转化成jar文件)。

✔ baksmali:dex文件转化成smali文件。

利用上述工具,开发者可以基于安全隐私规范,制定相应的安全检测项,利用脚本检测到存在的安全隐私问题。

下面是Android系统中典型的敏感API:

图2 Android典型敏感API

优点:检测速度快、通用性强、技术简单。

缺点:无法确定是否合规、加固后无法检测。

2.2 动态检测方案

通过抓包&Hook沙箱或操作系统沙箱技术,在APP运行的过程中,针对特定API进行埋点(可参考上文敏感函数),查看App是否执行了埋点的API,从而判断是否合规。

➪ 应用场景


  • 通过抓包的方式,在同意《隐私政策》之前查看流量中是否出现敏感数据。
  • 通过Hook技术,对敏感函数进行埋点,在同意《隐私政策》之前查看埋点的函数是否执行。
➪ 工具推荐


  • 抓包工具,burpsuite/charles/fiddler等
  • Hook框架,frida/Xposed框架等
优点:检测确认性高100%能检测(不会受加固影响)。

缺点:技术复杂、通用性差。

3、常态化&防劣化技术

常规的检测手段基于安装包,适用于第三方检测,在技术手段上受限,不能高效彻底的检测安全合规问题。人工抓包方式耗时长且覆盖率低,Hook系统方式往往前提是需要手机root,随着移动安全的发展,root手机已不再轻松,成本高,都不适用于常态化安全合规自查。

对于大型App而言,业务复杂,接入的第三方SDK众多,开发过程中难免踩雷。常规检测手段很难充分全量排查,且无法常态化(工信部、第三方机构检测次数有限)。相对基于APK的安全自查,开发者具有一个显著的优点,那就是拥有源码权限,可以自由在编译等各阶段插入自定义安全检测逻辑。基于此,App开发可以实现更加深入彻底的安全合规自查,切实保障用户隐私安全。

下面就在源码权限基础上提出了两种常态化深度安全合规自查方案。从技术形态依然可以分为静态检测及动态检测模式。

方案的静态检测能力基于Python脚本,实现App引用三方SDK的全列举,快速检测各个三方SDK中隐私权限、网络请求、隐私API和漏洞API调用情况。可协助工信部安全审查问题快速整改。整体实现思路:

1️⃣基于App依赖树,采用深度优先遍历算法,快速查找App引用全部SDK列表,以及各个SDK使用的AndroidManifest.xml、jar和so文件。

2️⃣使用反编译工具cfr将jar包转成java文件,同时使用dx工具将jar包转成dex文件。然后,使用baksmali工具将dex文件转化成smali文件。

3️⃣读取相关政策代码及隐私代码检测策略、策略说明建议等json配置 。逐个分析AndroidManifest.xml中声明的权限及相关包信息。基于java文件及smali文件,完成网络请求、隐私API和漏洞API调用情况分析。

4️⃣整合分析结果,输出对应检测报告,开发人员根据检测报告自查整改即可。

流程图及隐私策略配置见图3、图4:


图3 常态化静态安全检测流程


图4 隐私策略配置文件

本方案有两大优点,第一,可快速检测完App,输出安全检测报告,同时针对安全问题,有详细的路径说明,方便后续问题解决。第二,基于可变的隐私策略,支持json自定义隐私api、敏感api等,可扩展性强。

方案的常态化动态检测能力基于Gradle transform+ASM+Hook+动态代理编译插桩技术,最终以Gradle插件的形式应用于安全隐私检测,基于编译任务针对敏感API、隐私权限申请、网络请求实现全局插桩检测,同时输出调用堆栈,方便问题排查。此方法直接在源码编译阶段,通过ASM字节码操作框架对字节码进行修改,兼容性好,且可以全工程无缝Hook。下面是Hook敏感API “getDeviceId”的一个代码段示例。关于插桩技术末尾的参考文献有更详细的说明,这里不再细谈。

图5 Hook敏感API代码段




4、结语

大数据时代,每一个人在互联网中的画像都是“数据化”的。近年来,App成为个人信息监管的重点,工信部不断开展App侵害用户权益专项整治行动,开发者不仅要提高安全合规意识,还要一套完善的合规检测体系,切实保障用户信息安全,为App健康发展保驾护航。

参考文献

[1] https://mp.weixin.qq.com/s/rCfUAB_xqSdZ3P0x5kLNkw

[2] http://www.gov.cn/zhengce/zhengceku/2020-08/02/content_5531975.htm

有关移动APP安全合规检测技术浅析的更多相关文章

  1. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  2. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  3. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  4. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  5. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  6. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  7. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  8. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  9. ruby - 使用 postgres.app 在 rvm 下要求 pg 时出错 - 2

    我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension

  10. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

随机推荐