01
引 言
截至2025年11月,Android系统的用户数量已经达到39亿,市占率高达72.55%[1]。随着Android市场份额快速增长,外加其开源、灵活的系统特性,Android应用程序的开发人员数量也在不断增多。为了缩短应用程序的开发周期,Android应用开发商通常会在应用中集成多种类型的第三方软件开发工具包(SDK, Software Development Kit),从而便捷地使用第三方供应商开发的地图、广告、社交等功能,提升开发效率。如今,第三方SDK已经成为Android生态的重要组成部分,但在提供高效便捷功能的背后,SDK也隐含着诸多不可忽视的安全问题。

图1 2012-2025年Android用户数量变化
02
SDK的基本概念
SDK并非某个单一的开发工具或程序,而是辅助某一类软件开发所提供的文档、范例以及工具的集合,其核心目的是降低软件开发门槛,让开发者不必从零开始编写所有底层代码。一个典型的SDK通常包含以下几个关键部分:
**1)API和库文件:**包含一组预先定义好的函数、协议和工具,将底层代码进行封装保护,为开发者提供与SDK背后的平台、服务或硬件进行通信的桥梁;
**2)开发工具:**包括集成开发环境、编译器、调试器及模拟器等实用工具,协助开发者生成可执行程序、检查错误代码等;
**3)文档:**如技术文档、教程指南、API速览列表等帮助开发者理解SDK功能及用法的文档;
**4)项目示例:**提供一些现成的、可运行的示例项目或代码片段,让开发者更加直观地理解如何将SDK集成到实际项目中。
在Android应用的开发中,有很多常用的SDK类型,如地图类、支付类、广告类、实时音视频类等。在应用中集成这些第三方SDK有着诸多的优势:首先,应用程序可以获得专业公司在各个领域提供的高质量资源,如地图信息、交通数据、天气数据等;其次,在收付款等特定功能场景下,使用微信支付等成熟SDK不仅能大幅缩短开发时间,还能规避自主开发时可能面临的合法合规问题;另外,一些广告平台SDK还可以帮助开发者获得收益,为开发者提供额外的变现和盈利途径[2]。
03
SDK的安全隐患
随着SDK应用规模的持续扩大,SDK本身的安全问题也逐渐得到重视。许多研究表明,一些恶意SDK可能非法收集用户敏感信息,并传输至外部服务器,对用户隐私造成严重伤害。国家安全部也在近期发出提示,警惕境外组织利用恶意SDK收集敏感信息。由此可见,恶意SDK对于隐私的侵犯不仅关乎个人权益,更有可能对国家安全造成威胁。
此外,一些在市场上流行的通用SDK若存在安全漏洞,更是会在整个Android生态系统中链式传播,影响所有集成该组件的应用[3]。因此,分析SDK存在的安全问题,寻找SDK安全隐患的治理方法,对提升Android应用的安全性具有重要意义。整体而言,本文将SDK的安全问题分为两个层面:恶意行为和安全漏洞。恶意行为是SDK主动注入的非法程序,而安全漏洞是SDK无意识包含的安全隐患,下面将分别对两种问题进行描述。
04
SDK的恶意行为
SDK恶意行为的根源都来自其数据流动不透明的"黑箱"特性,使得开发者无法完全审计其内部行为,无意间将恶意代码引入自己的项目。在Android应用中,SDK最常见的恶意行为包括:
**1)违规收集信息:**部分SDK会在后台主动采集用户设备信息,如IMEI、地理位置、MAC地址等,这些行为有可能构成违规收集个人信息,对用户隐私造成损害。根据国家工信部2025年11月公布的最新一批关于侵害用户权益行为的APP(SDK)通报,被报告存在问题的7个SDK中全都包含违规或超范围收集个人信息的问题,是所有恶意行为中出现最频繁的类型[4]。此外,在收集本地数据后,SDK可能会将其回传至自有服务器,再与其它广告商或数据公司共享,使用户隐私受到更大范围的传播,加深侵害程度;
**2)滥用敏感权限:**通常情况下,Android应用程序会请求比正常所需更多的权限,在SDK中也不例外。当应用程序的开发人员将第三方SDK加入到应用程序中时,会将某些权限、组件、数据等信息添加到Manifest文件中。这些额外的权限可能被用来窥探用户的隐私信息,或是植入恶意背景的插件。此外,SDK还可以与主机应用程序共享Manifest文件中的权限,即使SDK在开发文档中没有声明需要某些权限,若Manifest文件中有所声明,则SDK也可以使用这些权限。这一特性驱使了一些SDK利用代码检查宿主应用程序中是否请求了某个权限,从而绕过声明直接进行使用;
**3)远程加载代码:**除了从用户端收集数据之外,部分SDK还可在远程动态加载代码或配置,绕过APP的审核体系,以实施更加多变的牟利行为。2016年的一起案例中,一家广告SDK利用静默下载功能安装特殊插件,在用户点击推送的文章或新闻后自动下载公众号二维码图片,并利用手机辅助功能模拟用户操作,使用户微信自动识别下载的二维码图片,以关注特定的公众号。这类远程加载行为往往涉及强制、频繁、过度索取权限,严重违反相关的信息安全保护条例。
SDK的大部分恶意行为都是人为制造了一条隐蔽的数据通道,它能绕过应用本身的隐私控制逻辑,不仅会伤害用户权益,还可能因责任判定问题给应用开发者带来惩罚风险,应受到用户、开发者甚至国家安全部门的重视[5]。
05
SDK的安全漏洞
除了SDK主动设计的恶意行为,在功能正常的SDK中也可能存在一些安全漏洞,成为不法分子攻击的入口。常见的SDK安全漏洞主要包括:
**1)滥用HTTP:**使用HTTP协议进行网络连接如今已普遍认为是不安全的,但事实上有许多第三方SDK仍在使用HTTP与远程服务器进行通信。更糟糕的是,一些SDK还将其中的部分重要数据以明文的形式传输,增加了敏感信息被截获检索到的风险。即便采取了加密措施,一些SDK使用的也是本地生成的加密密钥,而非通过与远程服务器协商产生。攻击者可以通过解析写有加密密钥以及加密算法的.so文件来破解加密算法,使得用户数据的隐私保障依然受到威胁。

图2 使用HTTP协议与远程服务器通信的SDK
**2)SSL/TLS实现与配置问题:**目前大多数常用SDK已经使用HTTPS进行网络通信。然而,要使HTTPS真正实现安全的通信信道,必须正确实现和配置SSL/TLS连接。客户端需要验证服务器证书链的有效性以及主机名是否匹配:即证书链中每个证书都应未过期或撤销,根证书须来自客户端信任的CA,并且链中每个证书均应由上一级CA正确签名。在Android系统中,X509TrustManager接口负责证书验证以保障socket通信的安全,开发人员可通过重写该接口来自定义验证过程。然而,在部分SDK的实现中,关于证书验证的方法为空,即使在证书非法时也不会抛出任何异常。此外,也有一些SDK虽然实施了验证,却未对过期或吊销的证书作出响应。这类漏洞常出现于广告平台、消息推送平台等SDK,使得HTTPS无法真正保护用户数据的安全。
**3)身份识别漏洞:**在消息推送类的SDK中,云服务器通常利用注册ID与相应的应用程序进行通信。然而,部分SDK使用的注册ID是基于其IMEI、IMSI、MAC地址以及包名称在设备上确定生成的。如果设备的敏感信息暴露,攻击者就可以根据它计算注册ID,进而有权从远程服务器接受推送消息。另外,一些SDK对注册ID的加密密钥同样是在本地生成,因此攻击者也可以通过逆向工程获得关键字等信息,辅助解密设备中的注册ID。
**4)本地服务器漏洞:**SDK常通过向远程服务器发送请求来实现相应功能,但也有一些SDK会在主机应用程序中设置本地服务器,使远程服务器也能发送请求并从本地服务器中检索需要的信息,必要时还可能执行控制指令[6]。如果本地服务器未能适当地执行访问控制,就有可能被攻击者非法访问,检索设备中的敏感数据甚至操纵设备,给包含此SDK的所有应用程序带来巨大威胁。

图3 设置本地服务器的SDK
**5)日志泄露:**Android 日志系统为开发人员提供了记录应用程序和设备运行状态的接口,相关日志消息会被写入设备的内部存储。开发人员通常使用 android.util.Log 来打印调试信息。然而,若在应用上线前未关闭这些日志输出,则可能引发安全风险。部分SDK会将一些敏感信息通过日志进行记录,这些信息就很有可能跟随未妥善处理的日志一同泄露。
SDK在这些功能上的不完善增加了用户数据被泄露、截获以及篡改的风险,影响了应用程序的安全性。此外,即使一些漏洞在新版本得以修复,一些应用也没有能力第一时间更换成最新的SDK;即使一些应用在最新版本中更换此SDK,也还有大量的用户仍在使用易受攻击的旧版本应用,漏洞修复的效果具有严重的滞后性。
06
SDK的安全检测
为了防止含有恶意功能或安全漏洞的SDK在Android应用生态中持续传播,需要不断地对SDK的安全问题进行检测、分析与修复。
基于不同的技术需求,SDK安全检测方法主要分为静态分析、动态分析和混合分析三类。静态分析通过逆向解析代码结构,可实现高效批量检测,但对动态加载、代码混淆等技术存在解析盲区。动态分析通过在沙箱中监控SDK的运行时行为,借助开源工具易于部署,但难以覆盖所有代码路径。混合分析则结合静动态数据,旨在平衡效率与精度,但二者结合进行规模化应用时难度较大。

图4 SDK静态安全分析
当前 SDK 的安全分析技术已从人工经验演进至自动化、智能化分析。早期研究主要依赖人工审计和静态规则匹配,但其检测效率低下且误报率较高,难以应对大规模应用场景。随着技术迭代,研究者逐步引入多种自动化分析方法使检测精度大幅提升,这些技术显著提升了安全检测的工业化和自动化进度。
07
结 语
随着移动互联网的高速发展,在Android应用开发中采用SDK已成为主流,但其黑箱特性在便捷之余也隐藏着无法忽视的安全隐患。现如今,Android系统在工控机、车机等领域应用广泛,这也使得Android生态下的SDK安全问题辐射到工业控制场景,需要厂商、用户以及开发人员予以重视。
**上海控安针对工控通信系统中存在的网络安全隐患和漏洞,推出了专为工业互联网设计,深度融合模糊测试技术与仿真分析能力的自动化智能模糊渗透测试工具SmartRocket TestSec。**该工具全面覆盖数据链路层、网络层、传输层、应用层,可针对通信协议或基础软件进行各种模糊攻击、渗透攻击及安全功能验证。以软件对象模糊为例,TestSec可面向数据库、内核、Web与应用等全类型软件对象挖掘未知的安全性缺陷,提供缺陷管理、复现和修复等实用功能。工具可检测C/C++、Rust、Go、C#、Java语言代码项目,识别内存缺陷、未定义行为、未捕捉异常等编码安全漏洞。对于Java开发的Web应用对象,TestSec也能检测如SQL注入、跨站脚本等安全问题。

图5 SmartRocket TestSec应用测试模块
技术的本质是服务于人,而安全是这一服务得以成立的先决条件。面对SDK泛滥带来的安全挑战,唯有通过开发者、厂商、研究社区与监管机构的协同努力,建立更严格的审核机制,推行隐私优先的设计理念,强化动态的监测响应能力,才能共同构筑一个既充满创新活力,又值得用户托付的Android生态。
参考文献:
-
马凯, 郭山清. 面向 Android 生态系统中的第三方 SDK 安全性分析[J]. 软件学报, 2018, 29(5): 1379-1391.
-
许腾, 刘路遥, 姜灏宇, 等. Android SDK安全性研究综述[J/OL]. 计算机科学, 2025, 1-20.
-
https://www.miit.gov.cn/jgsj/xgj/gzdt/art/2025/art_677d4e303744447d8dbdfca31ada60d9.html