什么是SDK,它是怎样威胁我们的隐私?

专注IP定位
• 阅读 1376

依据《个人信息保护法》《网络安全法》《电信条例》《电信和互联网用户个人信息保护规定》等法律法规,工业和信息化部近期组织第三方检测机构对移动互联网应用程序(APP)进行检查,截至目前,尚有107款APP未完成整改,洋码头、中公教育等APP在列。

检测过程中发现,13款内嵌第三方软件开发工具包(SDK)存在违规收集用户设备信息的行为。工业和信息化部要求相关APP及SDK应在2月25日前完成整改落实工作。逾期不整改的,将依法依规组织开展相关处置工作。

APP因为过分窃取客户隐私等违规行为,被要求整改,APP:Application,各类手机应用软件,那么SDK又是什么?怎样对我们的个人隐私造成了威胁,我们又该如何应对呢? 什么是SDK,它是怎样威胁我们的隐私? 什么是SDK?

SDK,英文名称为Software Development Kit,即软件开发工具包。广泛来说,它是辅助开发某一类软件的相关文档、范例和工具的集合。而对手机来说,通常情况下,SDK是在APP中提供某种功能或服务的插件。它就像是一种通用的功能或者服务模块,可以作为插件方便地嵌入到不同的APP 中使用。

随着手机移动市场份额的快速增长,应用程序开发人员的数量也增长迅速。为了缩短开发时间和提高开发效率,手机应用开发商将多种类型的第三方SDK(软件开发工具包)集成到他们的应用程序中。这些SDK 是由广告、数据、社交网络、地图和推送平台等第三方服务提供商所开发的工具包,可以提供专业的服务,其中封装了复杂的逻辑实现以及请求响应的过程,使其更便于开发人员使用。不难看出,第三方SDK已经成为手机应用生态系统的重要组成部分。

SDK的运行机制

以安卓系统为例

(1) 第三方 SDK 向远程服务器发送请求,图1展示了这种类型SDK的运行机制,例如,提供广告服务、推送消息服务的第三方 SDK 采用这种机制。

由于HTTP没有加密传输数据,因此不能保证数据隐私以及完整性。HTTPS(超文本传输安全协议)是一种用于在不可信网络上实现安全连接的网络通信协议,它将 SSL/TLS 的安全功能添加到标准 HTTP(超文本传输协议)通 信中,因此只要正确实现并配置,就可以防止窃听和中间人攻击。使用 HTTPs 替代 HTTP 已成为一种趋势,然而仍有许多第三方 SDK 使用 HTTP 协议,通过网络连接到云服务器,这意味着很高的安全风险。 什么是SDK,它是怎样威胁我们的隐私?

(2) 第三方SDK启动本地服务

有些第三方 SDK在主机应用程序中设置本地服务器,以确保这些 SDK的制造商可以可控地监视移动设备。 本地服务器能够收集当前设备中的位置、IMEI、安装信息等信息,而远程服务器可以发送请求并从本地服务器 检索这些信息。甚至是远程安装与卸载也可以通过与本地服务通信来实现。图2描述了这种类型的 SDK 的工作机制。虽然我们可以采取一些措施来使本地服务器由正确的远程服务器控制,但是我们的通信信道可能被攻击者劫持,这使得攻击者能够与本地服务器交互。 什么是SDK,它是怎样威胁我们的隐私? 在手机应用中,集成第三方SDK的优势是显而易见的:首先,应用程序可以获得专业公司在各个领域提供的高质量资源,例如地图(如 GoogleMap)、交通数据、天气数据等;其次,如果应用程序将类似PayPal的第三方SDK包含在内,它就可以执行像付款这样复杂的功能。这些 SDK有助于提高应用的开发效率,并且实现更加健壮,尤其是对于小型的开发团队。另外,广告平台(例如 AdMob)这种第三方SDK可以帮助应用程序的开发者获得收益。

SDK与个人隐私

与此同时,第三方SDK也会对手机用户的隐私和安全性产生威胁。许多研究证实,一些第三方SDK存在隐私泄露问题。据The Hacker News报道,Taomike(中国最大的移动广告提供商)和百度提供的第三方SDK都曾被曝出存在安全漏洞,这两个软件秘密监视用户,将敏感信息上传到远程服务器,并在用户的设备上开启后门。然而,这些 SDK已经集成到众多手机应用中。

除了侵犯用户隐私以外,有些第三方SDK还会采取不安全的实现方式,增加其宿主应用程序的攻击面,从而对用户安全造成威胁。甚至是Facebook 和Dropbox这种信誉良好的软件公司的SDK也被发现存在严重的安全漏洞。这些漏洞带来的攻击包括:将敏感数据泄露到公开可读的数据源、代码注入攻击、帐户劫持、将受害者设备连接到攻击者控制的Dropbox帐户等。

Ma K和Guo SQ分析验证了第三方SDK中存在多个漏洞,他们将其分为 6 种类型,并给出了给出了对分析结果的总结: 什么是SDK,它是怎样威胁我们的隐私? 同时列举了并描述一些易受攻击的 SDK 的示例:

1:滥用HTTP

虽然使用 HTTP 协议进行网络连接已被认为是不安全的,但是我们发现许多第三方 SDK 仍然使用此通道 与远程服务器进行通信。更糟糕的是,一些重要数据还通过 HTTP 通道以明文或密文的形式传输,如IMEI(Int’l mobile equipment identity)。

2:滥用SSL/TLS

HTTPS(SSL/TLS 上的 HTTP)只有在恰当的实现和配置下才会使通信信道安全。要想建立安全的 SSL/TLS 连接,客户端必须检查证书链和主机名是否有效。如果主机名与服务器的域名匹配,则该主机名有效。如果证书链符合以下要求,则被认为有效:(1) 链中的每个证书都没有过期或撤销;(2) 根证书由 CA 在客户端的密钥库中发起;(3) 在多于 1 个证书的情况下,每个证书必须在放入链中后立即由 CA 签名。Lu L, Li Z, Wu Z, Lee W, Jiang G系统地研究了不正确的SSL/TLS证书验证过程所带来的威胁。通过分析,发现这些威胁在第三方SDK中也很常见。

3:滥用敏感权限

通常情况下,Android 应用程序会请求比所需要的更多的权限。它们使用额外的权限来窥探用户的隐私信息,甚至植入恶意背景的插件。分析显示,16个SDK有上述恶意行为。当应用程序开发人员将第三方SDK加入到应用程序中时,会将某些权限、组件、数据等信息添加到 manifest 文件中。

Umeng 是一个推送消息 SDK,可以请求用来发送 SMS、读取SMS和接收SMS的权限。在对其他推送消息SDK分析之后,我们认为这些权限对于核心功能来说并不是必要的。

另外,第三方SDK可以与主机应用程序共享manifest文件中的权限,也就是说,即使 SDK 在开发文档中没 有声明需要某些权限,如果 manifest 文件声明,那么它也可以使用这些权限。这些 SDK 利用代码来检查宿主应用程序是否请求了某个权限(执行此检查的代码示例如图3所示)。 什么是SDK,它是怎样威胁我们的隐私? 4:身份识别

推送消息 SDK是第三方SDK中的一个比较常见的类型,它能够帮助移动应用程序开发商向在用户设备上运行的 APP 传递消息和通知。推送消息SDK的结构如图4所示。找到这个服务的结构并不困难,但是因为该服务需要协调开发人员与应用之间的交互,这使得它容易出错。 什么是SDK,它是怎样威胁我们的隐私? 由 Google提供的Google Cloud Messaging(GCM)SDK 被许多应用程序订阅,包括 Facebook、Oracle、Skype 等,它的运行机制类似于 Apple Push Notification Service。据报道,一些网络犯罪分子使用 GCM 来控制恶意软件。除了Google和苹果之外,还有许多其他第三方推送消息服务提供商都为应用程序开发人员提SDK。

Android 日志系统为开发人员提供了记录应用程序和设备运行状态的接口。日志消息被写入设备的内部存储中。开发人员通常使用 android、util、log打印调试信息。但是,如果他们在应用上线前未关闭日志,则会成为安全风险。在开发中,开发人员通常使用 debug 属性,该代码确定是否输出日志(如图5所示),这使得很容易修改调试属性。 什么是SDK,它是怎样威胁我们的隐私? 在 Android 4.1版本之前,具有 READ_LOGS 权限的 Android 应用程序能够读取设备上所有应用程序的日志文件。因此,将敏感数据写入日志会导致敏感数据泄露。在分析中发现 mapbar SDK(专业的电子地图提供商)会将个人身份信息,如 IMEI 通过日志进行记录。在分析的129个第三方SDK中,有 12 个包含此漏洞。

5.应用程序开发人员的失误

(1) uid 误用

一些社交平台如 Facebook、Twitter、新浪微博等提供了 SDK 用于第三方登录,这可以帮助用户快速完成登录或注册过程,无需为当前访问的应用程序注册新帐户。这些SDK使用 OAuth 2.0协议对用户的账户进行身份验证。如果用户通过认证,SDK 的服务器将返回访问令牌和 uid(用户在该平台上的唯一标识)到当前应用程序的服务器。之后,应用程序可以使用访问令牌和 uid访问用户授权的资源。然而,一些应用程序开发人员只使用 uid 作为用户的凭证,在这种情况下,攻击者可以拦截 uid,并将其篡改为指定 uid 进行登录。

(2) 使用不安全的API

当第三方SDK在 WebView 中使用 JavaScriptInterface 时,远程 Web页面可以通过这个接口执行本地命令。

当 WebView 显示页面时,会在JavaScript代码中调用本地代码。远程网页可以利用反射机制来执行自己的命令。(如图6所示) 什么是SDK,它是怎样威胁我们的隐私? 2021年以来,国家陆续出台了《个人信息保护法》、《网络安全法》等律法建立了健全的隐私保护制度,保护大数据时代下的个人信息安全与隐私。对于每个用户来讲,我们很难判断哪些软件是安全的,因此我们应谨慎开放软件权限,有意识的保护自己的隐私。而作为 SDK服务商,更要遵守国家法律,从根源做起,绝不写入恶意功能。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
人间小土豆 人间小土豆
2年前
工信部下架 106 款侵害用户权益APP,包括豆瓣、唱吧等,还有哪些信息值得关注?
此次通报称,依据《个人信息保护法》《网络安全法》等相关法律要求,工信部即日起将对106款违规App进行下架处理,豆瓣便在下架之列,所涉问题为“超范围收集个人信息”。实际上早在11月3日,工信部就曾重点针对App超范围、高频次索取权限,非服务场景所必需收集用户个人信息,欺骗误导用户下载等违规行为进行检查,并对38款存在问题的App进行了通报。当时,豆瓣便因为存
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这