查看原文
其他

移动互联网应用供应链(SDK)行为安全性现状研究报告

安天移动安全 安天移动安全 2023-04-01


前言



2月18日,工业和信息化部信息通信管理局通报了2022年第一批侵害用户权益的App(SDK)名单,通报中提到,工信部近期组织第三方检测机构对移动互联网应用程序(App)进行检查,尚有107款App未完成整改。同时,检测过程中发现,13款内嵌第三方软件开发工具包(SDK)存在违规收集用户设备信息的行为,并令其整改。查看通报


近年来,国内移动互联网呈现出快速、多样化的发展态势,而手机 App 作为移动互联网业务在用户终端上最主要的呈现方式,其功能的复杂程度和版本的更新迭代速度都大幅增加。应用开发者为了提高应用的迭代速度、降低开发成本以及提供更加丰富的业务功能,除了自主开发 App 的相关功能代码外,还会接入由第三方开发的功能代码模块,从而快速接入和实现某类业务功能,目前常见的第三方开发的功能代码模块类型有广告 SDK、支付 SDK、消息推送 SDK、用户行为统计 SDK 等等。

应用开发者往往和第三方 SDK 开发者签订某种开发接入的协议约定,获取到接入的 SDK 开发工具包,以及通过接入 demo 示例和开发文档以调用SDK 提供的相关 API 的方式获取 SDK 提供的功能和服务。

在上述过程中,应用开发者(通常以中小开发者为主)往往难以全面的评估其接入 SDK 的安全性,以及 SDK 的全部运行行为。如果第三方 SDK 存在某些恶意或风险的代码、行为,则会被引入到 App 中,给应用开发者和App 用户带来不可估量的安全风险和权益问题。

本报告基于安天移动安全多年来对App 及其接入的第三方 SDK 的分析、研究结果,从SDK给应用开发者和 App 用户可能带来安全风险和权益问题的角度,对当前SDK行为安全性现状进行的一次总结,但不涉及 SDK 本身代码实现上的脆弱性问题。


01

应用第三方SDK概述



第三方SDK的定义


这里我们基于《TC260-PG-20205A 移动互联网应用程序(App)中的第三方 软件开发工具包(SDK)安全指引(征求意见稿)》(以下简称“SDK 安全指引”)中给出的SDK 定义为主:

“软件开发工具包(Software Development Kit,简称SDK)是指辅助开发某一类软件的相关文档、范例和工具的集合。第三方SDK是指由第三方服务商或开发者提供的实现软件产品某项功能的工具包,通常不包括企业自己开发的仅供自己使用的通用功能模块。”


App和SDK角色关系说明


那么,对于第三方 SDK 和接入第三方SDK 的 App 来说,其角色关系主要可划分为“第三方 SDK 提供者”(包括第三方 SDK 开发者和运营者)、“App 提供者”(包括APP 开发者和运营者)。

在《TAF-WG4-AS0057 移动智能终端应用软件 SDK 安全技术要求》(以下简称“ SDK 安全技术要求”),对 App提供者和 SDK 提供者之间的角色关系和权责划分做了详细的诠释:


这里存在一种特殊情况,即第三方 SDK 代码中引用了其他开发者的 SDK 模块和服务,这种情况下,主动嵌入一方相当于App 提供者,而被嵌入一方相当于 SDK 提供者。


SDK的使用场景


这里,基于国标《信息安全技术 移动互联网应用程序(App)SDK安全指南(征求意见稿)》(以下简称“ SDK 安全指南”)中对 SDK 使用场景的示意图说明:


实际应用中, SDK 的使用场景通常更为多样化,除了 SDK 提供者提供开发工具包供应用开发者接入的形式外,还包括 SDK 提供者提供 URL 请求 API(通常为 RESTful API 形式)、非 Java 实现的 SDK 代码模块,以及可供应用开发者内嵌至其 URL 请求 API 中的外链地址或脚本等多种形式,下图是从文件视角和接入关系视角对 SDK 使用场景的示意图。



SDK的识别和分类


我们可以通过如下几个维度对 SDK 进行识别与分类:
# SDK 名称
# 获取方式:开源、公开商用、非公开商用、私有
# SDK 提供者名称
# SDK提供者类型:海外、国内、黑灰产、未知
# SDK 功能类型,在《SDK 安全指南》中做出了分类定义。



02

应用第三方 SDK 的行业现状



第三方SDK的使用情况


当前,第三方 SDK被应用于移动互联网几乎所有 App 中,这些应用使用的第三方 SDK 通常提供一些 App 常用的功能服务,例如消息推送、支付、广告、行为分析统计、第三方登录等,此外,还有些SDK 主要用于特定的品类应用中,例如社交交友类 App 通常会接入即时消息类 SDK,网赚类 App 则会接入安全风控类 SDK 等。

安天移动安全结合自身对主流 SDK 的识别库以及移动互联网流行的应用样本库,将 App 接入 SDK 的功能类型分布统计如下图。



从上述统计来看,功能型 SDK 普遍使用的类型依次以推送类、第三方登录类、支付类、广告类和分析统计类 SDK 使用最多。


主流的SDK的提供者


在本报告中,我们将重点关注国内的 SDK 提供者,从国内主流的 SDK 提供者来看,其主要可以划分为三种类型:

# 综合性的 SDK 提供者,旗下会开发多款 SDK 产品用于向应用开发者提供多样性的 SDK 功能,例如极光、个推、友盟等 SDK 提供者;

# 特定品类 SDK 提供者,其 SDK主要针对特定品类应用提供其所必须的某种功能,旗下 SDK 产品的类型较为单一,例如数盟、数美主要提供安全风控类的 SDK;

# 手机终端厂商,手机终端厂商也会基于其系统功能特性为应用开发者提供更为便利的 SDK 功能服务,既降低了应用在特定手机终端系统上功能开发的成本,也能够有效利用系统提供的多样化功能服务,为应用实现更多功能。

我们也统计了不同功能类型 SDK涉及的主流提供商数量情况。可以看出,像推送、社交、支付等 SDK 类型,其主流的提供商相对集中。


而大型SDK 提供商开发的 SDK 产品类别也相对丰富,如下图是对主流 SDK 提供商SDK 产品数量分布的统计。


下面,我们对上述三类的 SDK 提供者以及旗下 SDK 产品进行简单的介绍。


综合性的SDK提供者


在广大SDK 提供者中,有些 SDK 提供者开发和运营着多种功能类型的 SDK 产品,并且广泛接入了市场上绝大部分 App,这里我们列举了其中四家主流的 SDK 提供者及其相关 SDK 产品情况。



特定品类 SDK 提供者


在这里,我们也对部分特定品类SDK 提供者及其主要使用的应用品类做了总结,这些 SDK 提供者通常只提供特定类型的 SDK 产品,并主要使用于特定App 品类或者为 App 提供特定的功能服务类型。



手机终端厂商 SDK 提供者


当前,手机终端厂商也是主要的 SDK 提供者之一,这里我们重点关注华为、小米、OPPO 和 vivo 四家厂商的 SDK 产品情况。




03

应用第三方 SDK 安全问题现状


这里我们结合了部分行业相关法律法规及专门针对SDK的行业标准:《个人信息安全规范》;《中华人民共和国数据安全法》。

国家相关监管单位针对 App 和 SDK生态治理的相关政策和标准,包括工信部《工信部信管函〔2020〕164号》、《中华人民共和国工业和信息化部令 第 20 号》、《App违法违规收集使用个人信息行为认定方法》;

行业标准包括包括《TAF-WG4-AS0057 移动智能终端应用软件 SDK 安全技术要求》、《TC260-PG-20205A 移动互联网应用程序(App)中的第三方 软件开发工具包(SDK)安全指引(征求意见稿)》、国标《信息安全技术 移动互联网应用程序(App)SDK安全指南(征求意见稿)》。

我们从恶意代码行为、用户隐私权限、云端控制逻辑、插件化和热更新实现、后台静默行为等方面,对主流SDK 的安全问题进行了总结和评估。

安天移动安全认为,当前应用第三方 SDK 的安全问题主要包括如下:

第三方 SDK的恶意行为问题主要和 SDK 中的恶意代码八大类行为相关,在《SDK 安全指南》中对 SDK 的常见恶意行为进行了分类和定义。



除了上述 SDK恶意行为外,当前 App 接入的 SDK 中还存在如下风险行为类型。


在对上述SDK 风险行为进行评估时发现,移动互联网应用第三方 SDK 生态相对复杂,主要体现在:

# App在不同版本中引入的第三方 SDK 可能随应用开发者在开发制作阶段的需求变更产生变化,接入新的 SDK 或者移除特定 SDK;

# App 在不同版本中引入同一 SDK 的版本、功能、模块可能存在差异性;

# 同一 SDK 在不同 App 中分发的版本、功能、模块可能存在差异性;

# App 内嵌了 SDK 模块并不一定表明其在运行时会触发对 SDK 的功能调用,有可能是废弃代码。

我们对主流SDK 提供者提供的相关 SDK 产品分析研究后发现,部分 SDK 存在如下问题:




04

SDK主要问题及案例分析



违规收集个人信息


我们在检测、分析中发现,应用接入第三方 SDK 引发的违规收集个人信息问题较为普遍,其中主要包括用户同意隐私政策前就开始收集个人信息、隐私政策中未明确提及所接入的 SDK 和数据收集情况、SDK 收集的个人信息范围与隐私政策不相符的问题。

# 案例一:某统计类违规收集个人信息问题

在对某统计类SDK检测分析时,安天移动安全发现,其主要提供用户行为统计功能,并在此过程中实现用户终端数据的收集和上传。

由于该SDK 在不同App中存在模块代码和版本的不同,因此我们对其在不同月活范围 App 中的数据收集行为进行l 抽样分析,从结果上来看,该SDK 普遍存在违规收集和超范围收集个人信息的问题,并且在月活较低的 App 接入的版本中,还存在通过云控参数控制 SDK 在终端侧收集数据范围的情况,并且涉及大量用户隐私路径数据的访问。

以某知名地图 App为例
(hash:3157a01a220ffec5a1b1e69a1253271a),在隐私政策中明确提到了应用内第三方 SDK所收集的个人信息类型为设备信息和 Wi-Fi 地址。


而实际上传的数据中除了包含 WiFi 的 BSSID 名称信息外,还频繁上传用户安装应用的列表信息。

如下图其上传了 WiFi 的 BSSID 名称。


如下图其上传了用户安装软件列表信息。



#案例二:某推送 SDK 违规收集个人信息问题

这里以一款接入某推送 SDK 的 App 作为示例
(hash:A2DE2679F62AB32E7376350A99EAF65F)
,并进行详细分析。

该 App 在隐私声明涉及相关 SDK 收集信息中提及了该推送 SDK,从实际运行行为来看,其收集的数据范围未明显超出该声明范围,但部分声明内容存在模糊性。


如下所示,该SDK在收集 WiFi 网络信息时,存在收集 BSSID 和 MAC 地址信息的情况,但并未在隐私声明中说明。


除此以外,其还会收集设备电量和温度信息。


#案例三某推送 SDK 违规收集个人信息问题

这里我们选择了一款应用作为分析示例(hash:05A4D2701DC95A4A06F8E3A97DD8FA6E)。

在检测分析时发现,该应用存在明显的违规收集个人信息的问题。收集的数据包含应用隐私声明中未提及的数据(如软件安装列表信息),并且在隐私声明对话框弹窗之前,也即用户还未选择时,SDK 就存在数据收集和上传行为。


在用户未同意隐私政策前,SDK 收集的数据包括如下:

1. 收集软件安装列表,除了包名、应用名、版本信息外,还收集了证书相关信息等。


2. MAC 地址,手机品牌信息等。


3. 网络相关信息,包括 BSSID。


4. 对传感器相关信息收集


#案例四:某统计 SDK违规收集个人信息问题

我们选择一款接入某统计 SDK 的 App 作为分析示例
(hash:05A4D2701DC95A4A06F8E3A97DD8FA6E)
,其主要问题为违规收集个人信息。

通过检测分析发现,该 App 在用户同意隐私政策前就存在用户数据收集行为,其中包括如下信息。

基本设备信息。


软件安装列表。


WiFi 信息,输入法应用信息,内存和 cpu 信息。


通过分析评估,我们认为这是应用开发者未以正确的方式调用 SDK 接口。
但我们也发现统计 SDK 收集的数据范围超出了隐私声明范围。


SDK收集了详细的 WiFi 节点信息,软件安装列表,以及前面提到的设备基本信息、运行状态信息等。


结合该 SDK的官方文档,我们得知其采集这些数据主要用于制作用户画像,而该目的也未在隐私政策中提及。



超范围收集个人信息


国家标准计划《信息安全技术 移动互联网应用程序(App)收集个人信息基本要求》中明确定义了不同业务场景下,应用收集个人信息范围的最小化原则。而在应用接入的 SDK 中,收集个人信息范围、频度的必要性和最小化原则同样适用于SDK的功能业务场景,。虽然部分应用接入 SDK 时明示了 SDK 所收集的个人信息范围,但其合理性和必要性存疑,例如收集个人信息范围为软件安装列表,但实际除了收集安装应用包名信息外,还收集了安装应用运行状态信息等。

#案例一:某统计类 SDK超范围收集个人信息问题

除了应用开发者本身主动调用相关事件接口外,SDK自身还注册监听了多种广播消息,在监听到相关消息后则会触发数据的收集和上传行为。

例如对解锁屏、电源连接断开事件进行监听。


对用户终端安装、卸载应用行为进行监听。


除此以外,还会监听应用前台、后台的切换行为从而触发数据的收集和上传。


云端控制SDK行为


#案例一:某统计 SDK使用云控策略控制数据收集行为

我们发现该 SDK会按特定频次联网更新控制配置,例如在某 App 
(hash:1CB41AA67F988DFF97848896AC81F867)中。


其获取的配置结果中包含丰富的配置参数,其中可以控制数据上传的时间间隔,定向监听用户手机上其他 App下载应用的行为和所下载应用的信息,甚至是尝试获取部分知名 App 的相关路径文件。


案例二:某聚合广告 SDK 利用云控参数控制广告推广行为

我们发现某聚合广告 SDK 中,还存在通过云控参数控制“应用推广广告”中下载安装和打开逻辑的情况。



热更新技术控制 SDK 行为


这里的热更新技术包括远程下载、加载代码模块、使用插件化技术和使用热更新框架。在海外 Google Play 政策中,很早就禁止了应用自定义的执行代码下载和运行行为,而对于国内 Android 生态来说,该类技术被普遍应用,但过度灵活且完全云端可控的插件化或者热更新技术存在运行风险,叠加对终端和用户的个性化识别完全可以做到千人千面的效果。


#案例一:某推送 SDK 使用插件化技术

该推送 SDK 实现了运行时动态下载和加载插件 SDK,并且下载和加载行为完全云端可控。

这是 SDK 内置的插件加载逻辑和内置的加载入口类。


而实际上,该推送 SDK能够灵活的加载任意云端下发的插件,其中云端完全可以控制下载的模块内容和初始加载的入口。


并且每个插件都包含丰富的云控配置项,对 SDK 行为进行控制,其中部分云控配置涉及数据收集范围和收集频度相关。

例如其中加载某插件获取的相关配置信息:


通过云端下发的消息类型控制特定的行为触发。


#案例二:某广告 SDK使用插件化技术

在分析某网赚应用
(hash:ef31670646dab2afa743bd37ab29be22)时发现,其中内嵌的广告 SDK使用了插件化技术,并在初始化时会发起远程的插件获取。


但在实际分析过程中发现,远程插件获取返回错误,其中明显可以推断其云端存在一定的插件下发策略限制机制。



后台拉活


#案例一:某推送 SDK 存在后台拉活行为

通过检测 SDK 行为发现,其存在拉起同设备其他应用组件的行为。



自动下载安装、误触下载


自动下载安装和误触下载主要存在于一些广告 SDK 或者聚合广告 SDK 中,其不规范的弹窗布局实现是导致上述问题的直接原因。

#案例一:某 SDK广告弹窗存在自动下载应用行为

在分析某网赚应用
(hash:ef31670646dab2afa743bd37ab29be22)时发现,其中内嵌的广告 SDK弹窗界面为FullscreenActivity,其布局如下:


最后一个控件实际是一个webview 控件。


webview client 实现如下。


#案例二:某知名广告 SDK 原生模板广告存在误触下载问题

在对某应用
(hash:566852FAB7DCA8692BE5B944C43E2B7C)进行分析的过程中发现,其加载的原生模板 Banner 广告存在误触下载问题。



#案例三:聚合广告 SDK 的误触下载问题

由于聚合广告 SDK 大多会自行实现和提供广告弹窗的布局实现,其往往不规范的布局实现导致用户误触点击广告下载应用的问题。其中涉及的应用依次为:(3E9D3C6D12ED498B85C797D33971CC18)
(F7B55C51F31D87F6B4FA9FE101755126)
(86258B71642AE3FB6259C042A19DD935)


例如下图为某聚合广告 SDK 完全自定义实现的开屏广告布局。



伪装推送和匿名推送


匿名推送和伪装推送行为通常是指应用、SDK 实现的通知栏消息推送展示的内容与其应用无关,用户无法明确知道推送内容的来源以及点击推送消息的风险,其通常会以诱导用户点击从而跳转到第三方应用来达到推广的目的。

#案例一:某推送SDK 存在通知栏推送行为问题

我们发现该 App 
(hash:A2DE2679F62AB32E7376350A99EAF65F)在当日启动运行后,会进行通知栏消息推送,每天推送2-3条消息,并且通知栏消息的展现形式存在匿名推送和伪装推送两种问题。

下图示例的匿名推送中,我们无法从通知栏消息上明确看出推送消息的 App 主体。


经过分析发现,该行为是由推送 SDK 从云端推送的消息,并显示在通知栏上,用于广告推广。


其存在推送内容与 App 本身业务功能不相符的情况,并且推送的内容文字和图标让用户无法得知其具体内容,我们也称其为伪装推送。


其实际会打开某支付应用的信用卡推广页面。



其他问题



#案例一:SDK 分发版本的碎片化问题

在对某知名 SDK 的分析检测过程中发现,其存在多个历史版本,调用入口和代码结果都存在显著的差异。例如下列对应不同的 SDK 分发版本。

版本一:

版本二:
版本三:

#案例二:某聚合广告 SDK 存在后台广告触发行为

我们在分析某聚合广告 SDK 时发现,存在后台触发广告推送行为,并实现了多种方式。


下图为其占用锁屏实现广告推送行为。


#案例三:某药品推广广告存在隐私收集违规问题

安天移动安全发现,某清理工具应用
(hash:95FB7186C21A38B3E0543D8D7B1AE8C6)中使用的知名广告平台推送的药品广告中存在用户隐私收集违规现象,且并未在收集用户隐私声明中明确征求用户同意,而是采用了“提交即视为您已阅读并同意《个人信息保护声明》”的方式。



#案例四:拉快应用弹广告问题

除了应用接入的第三方 SDK 开发包这种形式外,应用在开发制作和运行阶段直接接入或者随其他供应链方式接入的接口、脚本文件、代码也应该考虑在内。例如,下图是在应用运行时,其接入的第三方 JS 脚本会拉起“快应用”,并且“快应用”启动后会立即触发广告弹窗行为。



*更多《移动互联网风险应用白皮书(2021)》内容,敬请关注接下来发布的系列内容。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存