导语:卡巴斯基实验室的研究人员发现,由于第三方SDK的缘故,许多流行的应用程序都会将用户数据泄露在网络中,而广告SDK通常是这方面的重灾区。这些广告SDK通常会收集用户数据以便向用户显示更加有关联的广告内容,但在分析用户的个人信息时,

timg.jpg

在目前发生的许多网络攻击中,很大一部分原因是因为用户在非官方的渠道下载了经过恶意改造的应用。所以经验告诉我们,只要在使用官方应用商店里的评级很高的流行应用时,它们就一定是安全的。其实这种想法只是部分正确的,之所以说对,是因为通常这些官方应用商店里的应用程序是在开发时考虑到安全性并且已经由应用商店的安全团队进行审查。但之所以不全对,是因为卡巴斯基实验室的研究人员发现,由于第三方SDK的缘故,许多流行的应用程序都会将用户数据泄露在网络中,而广告SDK通常是这方面的重灾区。这些广告SDK通常会收集用户数据以便向用户显示更加有关联的广告内容,但在分析用户的个人信息时,这些SDK会首先将数据发送到服务器,而在这个过程中,数据往往无法被保护,很容易被泄漏。

官方应用商店里的应用程序100%安全吗?

在卡巴斯基实验室的研究人员对约会应用程序进行安全性检测时,他们发现了一些应用程序正在通过HTTP传输未加密的用户数据。这让研究者很吃惊,因为这些应用程序虽然在使用HTTPS与其服务器进行通信。但在HTTPS请求中,第三方服务器却存在未加密的HTTP请求。由于这些应用程序非常受欢迎,所以卡巴斯基实验室的研究人员决定仔细研究这些未加密的HTTP请求。

180411-leaking-ads-1.png

含有未加密HTTP请求的用户数据

其中一个应用程序正在向 api.quantumgraph[.]com服务器发送POST请求。这样,该应用就能将未加密的JSON文件发送到与应用程序开发人员无关的服务器。在以上这个JSON文件中,卡巴斯基实验室的研究人员发现了很多用户数据,其中包括设备信息,出生日期,用户名和GPS位置信息。此外,这个JSON还包含了关于应用使用情况的详细信息,其中包括用户喜欢的配置文件信息。所有这些数据除了都以未加密方式发送到第三方服务器外,包含的信息之详细也让人瞠目结舌。经过分析,这是由于使用了一个叫qgraph的分析模块。

180411-leaking-ads-2.png

由应用发送的未加密的用户数据

卡巴斯基实验室的研究人员研究的另外两个约会应用程序基本上也是这样,他们虽然使用HTTPS与他们的服务器通信,但同时却有HTTP请求,未加密的用户数据被发送到第三方服务器。不过这两个约会应用的第三方服务器除了将数据发送给了广告SDK外,GET HTTP请求的用户数据还被用作URL中的参数。一句话,将未加密的用户数据传输到第三方服务器本身就没有什么安全保障。

180411-leaking-ads-3.png

来自广告SDK的HTTP请求列表

从这一点来看,合法的应用程序的安全性有时也很糟糕。为了验证这个想法,其中一个研究人员决定检查他自己的设备,他收集了将近一个小时的网络活动。事实证明,这些数据足以验证他自己的数据存在着未加密的请求。之所以会出现这些请求,是因为流行应用程序使用的第三方SDK。它正在发送我的位置,设备信息和用于推送消息的令牌。

180411-leaking-ads-4.png

来自设备的HTTP请求和自己的未加密数据

所以他决定看看那些与发生信息泄漏的sdk有关的约会应用程序,以了解泄漏发生的真实原因。毫无疑问,这些约会应用程序的数据不止被一个第三方所使用。事实上,每个应用程序至少包含40个不同的模块。他们构成了这些应用程序的一大部分构件,至少有75%的Dalvik字节码位于第三方模块中。甚至在一个应用程序中,第三方代码的比例高达90%。

180411-leaking-ads-5.png

约会应用的模块列表

开发人员经常使用第三方代码来节省开发时间并利用一些现成的功能,这非常能节省成本,而且还允许开发人员专注于自己的想法,而不是处理之前已经开发多次的东西。但同时,这也意味着开发人员不太可能知道所使用的第三方代码的所有细节,以及是否可能包含安全问题,这就是卡巴斯基实验室的研究人员在研究中所发现的应用程序出现信息泄漏的根本原因。

调查分析结果

由于知道有很多暴露用户数据的SDK,并且几乎每个应用都使用多个SDK,卡巴斯基实验室的研究人员决定对更多类似的应用和SDK进行调查。为此,卡巴斯基实验室的研究人员使用来自内部Android沙盒的网络流量转储。自2014年以来,卡巴斯基实验室的研究人员已从1300多万个APK收集了相关的网络活动。这个想法很简单,就是卡巴斯基实验室的研究人员安装并启动应用程序并模仿用户活动。在应用执行期间,卡巴斯基实验室的研究人员收集日志和网络流量。虽然没有真正的用户数据,但对于应用程序而言,它看起来就是一个真实用户设备。

卡巴斯基实验室的研究人员搜索了两个最流行的HTTP请求:GET和POST。在GET请求中,用户数据通常是URL参数的一部分,而在GET请求中,用户数据位于请求的Content字段中,而不是URL。在卡巴斯基实验室的研究人员的研究中,卡巴斯基实验室的研究人员一开始只是想寻找了使用至少其中一个请求发送未加密的用户数据的应用程序,结果发现许多应用程序都使用了这两个请求。

目前,卡巴斯基实验室的研究人员能够确定,有超过400万个APK会将用户数据泄漏在网上。其中有很多是因为它们的开发人员在一开始构建时就犯了一个错误,所以目前大多数受欢迎的应用程序都会为第三方SDK暴露用户的数据。对于每种类型的请求(GET或POST),卡巴斯基实验室的研究人员提取应用程序传输用户数据的域。然后,他们根据应用程序的受欢迎程度对这些域进行了排序,即按照已安装这些应用程序的用户数。这样,哪些是泄漏用户数据最多的SDK就一目了然了。他们中的大多数都暴露了设备信息,且有些传输的还是更加敏感的信息,如GPS位置或个人信息。

通过GET请求泄漏应用程序敏感数据的四个最流行的域

mopub.com

该域名是一个流行的广告网络,它被本文开头提到的两个约会应用程序使用。卡巴斯基实验室的研究人员在该SDK中发现了更多受欢迎的应用。根据Google Play商店和其他设备的统计,其中至少有5个应用程序拥有超过1亿的安装量。

它们以未加密的形式传输以下数据:

1.设备信息(制造商名称,型号,屏幕分辨率);

2.网络信息(MCC,MNC);

3.程序包名称;

4.设备所在的位置;

5.关键词;

180411-leaking-ads-6.png

HTTP请求与URL中的用户数据

关键词是传输数据中最有趣的部分,它们可以根据应用参数设置而有所不同。在卡巴斯基实验室的研究人员的数据中,通常会有一些个人信息,如姓名、出生日期和性别。位置也需要由应用程序设置,而且通常应用程序会向广告SDK提供GPS定位。

卡巴斯基实验室的研究人员发现这个SDK有几个不同版本,最常见的版本能够使用HTTPS而不是HTTP。但它需要由应用程序开发人员设置,根据卡巴斯基实验室的研究人员的调查分析,大部分广告SDK都会默认使用HTTP。

180411-leaking-ads-7.png

默认使用HTTP的广告SDK

rayjump.com

该域名也是一个非常流行的广告网络,卡巴斯基实验室的研究人员发现有与该域名相关的两个应用程序的安装量超过5亿,七个应用程序的安装量超过了1亿,另外还有许多安装了数百万的应用程序。

这些SDK会传输以下数据:

1.设备信息(制造商名称,型号,屏幕分辨率,操作系统版本,设备语言,时区,IMEI,MAC);

2.网络信息(MCC,MNC);

3.程序包名称;

4.设备位置;

卡巴斯基实验室的研究人员提到,尽管大部分数据都是以纯文本的形式作为URL参数传输的,但设备位置,IMEI和MAC地址是用Base64编码的。虽然不能说这些信息受到了安全保护,但至少他们不是纯文字的。目前,卡巴斯基实验室的研究人员还无法找到可以使用HTTPS的任何SDK版本,因为所有版本都有硬编码的HTTP URL。

180411-leaking-ads-8.png

广告SDK所收集的设备位置

tapas.net

这是另一个受欢迎的广告SDK,收集以下数据:

1.设备信息(制造商名称,型号);

2.网络运营商代码;

3.程序包名称;

4.设备位置;

卡巴斯基实验室的研究人员在Google Play商店和其他的设备中发现了与该域名相关七个应用,其中有一个的安装,已经超过一千万次。卡巴斯基实验室的研究人员目前还无法找到任何方式让开发人员在此SDK中从HTTP切换到HTTPS。

appsgeyser.com

第四个广告SDK是appsgeyser,它与以上3个的不同之处在于它实际上是构建应用程序的平台,它允许应用程序的开发者简单地创建一程序个。这样,创建的应用就将在其中包含一个广告SDK,该SDK使用HTTP请求中的用户数据。所以,这些应用程序实际上是由该服务平台而不是由开发人员开发的。这个广告SDK会传输以下数据:

1.设备信息(制造商名称,型号,屏幕分辨率,操作系统版本,android_id);

2.网络信息(运营商名称,连接类型);

3.设备位置;

卡巴斯基实验室的研究人员发现使用此平台创建的大量应用程序正在使用此广告SDK,但其中大多数不是很受欢迎。最流行的也只有成千上万的安装。但是,真的有很多这些应用程序。

180411-leaking-ads-9.png

appsgeyser.com的屏幕截图

根据appsgeyser.com的统计,有超过600万的类似应用程序,它们的安装量加起来接近20亿。它们总共展示了近2000亿个广告 ,可能都是通过HTTP。

通过POST请求泄漏应用程序敏感数据的四个最流行的域

ushareit.com

所有将未加密数据发布到此服务器的应用程序都是由同一家公司创建的,因此数据泄漏不是因为第三方代码。但这些应用程序非常受欢迎,其中一个应用程序在Google Play商店中安装了5亿次以上。这些应用程序收集大量的设备信息:

1.生产商名称;

2.模型;

3.屏幕分辨率;

3.操作系统版本;

4.设备语言;

5.设备所在的国家;

6.android_id;

7.IMEI;

8.IMSI;

9.MAC;

180411-leaking-ads-10.png

由应用程序收集的设备信息

这个未加密的数据除了会被发送到服务器,此外,他们上传的数据中还包含一系列支持数据发送的命令,其中一个是安装应用程序。命令列表以纯文本形式传输,并且来自服务器的响应也是未加密的,这意味着它可以被拦截和修改。该应用程序可以静默安装一个下载的应用程序。更糟糕的是,这款应用程序可以悄无声息地安装一个下载的应用程序,它们只需成为一个系统应用程序,或者含有root权限就能运行。

180411-leaking-ads-11.png

悄无声息地安装应用程序的代码片段

Lenovo

这是流行的应用泄露用户数据的另一个例子,不是因为第三方代码,而是因为开发人员的错误。卡巴斯基实验室的研究人员发现了一些流行的Lenovo应用程序会收集和传输未加密的如下设备信息:

1.IMEI;

2.操作系统版本;

3.设备语言;

4.生产商名称;

5. model;

6.屏幕分辨率;

180411-leaking-ads-12.png

含有未加密设备信息的HTTP请求

虽然这些信息不是很敏感,但是,卡巴斯基实验室的研究人员发现了几款Lenovo应用程序以未加密的形式发送更敏感的数据,例如GPS位置,电话号码和电子邮件。

180411-leaking-ads-13.png

用于收集设备位置和其他数据的代码片段

卡巴斯基实验室的研究人员已向Lenovo报告了这些问题,且Lenovo已经修复了所有问题。

Nexage.com

该域名被一个非常受欢迎的广告SDK使用,目前有大量的应用程序在使用它。其中一个甚至安装了超过5亿次备,其他七个应用的安装量加起来超过1亿。使用此SDK的大多数应用程序都是游戏程序。这个SDK有两个有趣的事情:传输的数据和使用的协议。该SDK会将以下数据发送到第三方服务器:

1.设备信息(屏幕分辨率,存储大小,音量,电池电量);

2.网络信息(运营商名称,IP地址,连接类型,信号强度);

3.设备位置;

4.它还发送有关硬件可用性的信息:

4.1前后摄像头可用性

4.2 NFC许可

4.3 蓝牙许可

4.4 麦克风权限

4.5 GPS位置权限许可

180411-leaking-ads-14.png

广告SDK收集有关设备硬件功能的信息

该广告SDK也可能发送一些个人信息,例如年龄、收入、教育程度、种族、政治观点等。虽然卡巴斯基实验室的研究人员还没有看到任何向此SDK提供这些详细信息的应用程序,但研究人员认为用户在向应用此SDK应用程序输入此类详细信息时应该能被SDK捕获到,这样信息泄漏就不可避免。

180411-leaking-ads-15.png

广告SDK可以发送个人信息

关于这个SDK的第二个有趣的事情是它使用HTTPS来传输数据,但通常只用于传输初始通信信息。之后,它可能会从服务器接收指定HTTP URL的新配置设置。

180411-leaking-ads-16.png

广告SDK中的HTTPS URL

Quantumgraph.com

另一个泄露数据的SDK使用的是quantumgraph.com域,这是一个具有分析功能的SDK,而不是广告。卡巴斯基实验室的研究人员在Google Play商店中发现了两个安装量超过1000万的应用,另外还有七个应用的安装量加起来也超过了100万。不过,使用此SDK的用户超过90%来自印度。

该SDK通过HTTP发送带有数据的JSON文件,不过传输的数据可能因应用程序而异,因为它是一个分析SDK,它会发送应用程序提供的信息。在大多数情况下,发送的数据包括以下项目:

1.设备信息;

2.个人信息;

3.设备位置;

4.应用使用情况;

180411-leaking-ads-17.png

已安装的应用程序列表会以未加密的形式发送到服务器

在约会应用程序的研究中,还会发送一些用户的偏好信息,及所有用户的活动信息。

180411-leaking-ads-18.png

应用程序的使用情况会以未加密的形式发送到服务器

虽然该SDK使用硬编码的HTTP URL,但在卡巴斯基实验室的研究人员的曝光之后,他们使用HTTPS URL创建了另一个版本。但是,目前大多数应用程序仍在使用旧的HTTP版本。

其他SDK

当然,还有其他的SDK使用HTTP来传输用户数据,但它们都不太流行。几乎与上述SDK相同,他们中的很多都暴露了设备位置,有些还暴露了电子邮件和电话号码。

180411-leaking-ads-19.png

通过HTTP发送的电话号码和电子邮件

其他发现

在卡巴斯基实验室的研究人员的研究中,他们还发现许多应用程序通过HTTP传输未加密的身份验证信息。令人惊讶地的是,目前还有很多应用程序仍在使用HTTP来进行验证。

180411-leaking-ads-20.png

未经加密的请求与身份验证令牌

不过这些SDK,并不总是传输用户的验证令牌,有时也传输数据库的信息。由于这些SDK以暴露于互联网中,因此拥有这些服务的凭据是没有意义的。这类应用程序通常会传输身份验证令牌,但卡巴斯基实验室的研究人员也看到了未加密的登录名和密码。

180411-leaking-ads-21.png

未加密的凭证请求

恶意软件也存在使用HTTP来传输用户数据的情况

挖掘具有未加密数据的HTTP请求,使卡巴斯基实验室的研究人员能够发现新的恶意网站。事实证明,许多恶意应用程序也使用HTTP来传输用户数据。对于恶意软件来说,它们甚至更糟糕,因为它可以窃取更多敏感数据,例如短信、通话记录、联系人等。恶意应用程序不仅窃取用户数据,还将它们暴露在互联网,以供其他人利用和销售。

泄露的数据

在本次研究中,卡巴斯基实验室的研究人员分析了沙箱中超过1300万个APK文件的网络活动。平均下来,大约每四个网络通信应用程序就有一个会暴露用户数据。事实上,有一些真正流行的应用程序也在传输未加密的用户数据,这值得我们警惕。根据卡巴斯基实验室的统计数据,平均下来,每个用户大概会安装100多个应用程序,其中包括系统和预安装的应用程序,因此卡巴斯基实验室的研究人员认为大多数用户都受到了影响。

在大多数情况下,这些应用程序都会暴露以下信息:

1.IMEI,国际移动设备身份(唯一的电话模块ID),除非用户更换设备,否则用户无法重置;

2.IMSI,国际移动用户识别码(唯一SIM卡ID),除非用户更换SIM卡,否则用户无法重置;

3.Android ID,手机设置期间随机生成的一个号码,用户可以通过将其设备重置为出厂设置来更改该号码。但是从Android 8开始,每个应用程序,用户和设备都会随机生成一个数字。

设备信息,如制造商、型号、屏幕分辨率、系统版本和应用程序名称;

4.设备位置;

5.一些应用会暴露个人信息,主要是用户的姓名、年龄和性别,甚至是用户的收入。用户的电话号码和电子邮件地址也可能被泄露;

为什么会出现信息泄露?

因为这些数据是通过HTTP传输的,可以被拦截,任何人都可以通过Wi-Fi连接拦截它,网络管理员可以拦截它,网络运营商也可以拦截它。这些数据将通过多个网络设备传输,并可以在任何网络设备上读取。即便是你的家庭路由器也可能被感染,目前有很多恶意软件感染家庭路由器的例子。

在没有加密的情况下,这些数据将以纯文本形式公开,并且可以简单地从请求中被提取。通过了解IMSI和IMEI,任何人都可以跟踪来自不同来源的数据。所以,你需要同时更换SIM卡和设备才能摆脱跟踪。

不幸的是,HTTP数据可以被修改。比如,有人可能会更改正在显示的广告,更糟的是,别有用心的人可能会将链接更改为应用下载。由于一些广告网络推广应用程序会要求用户安装它们,因此可能会导致用户下载恶意软件而不是所请求的应用程序。

目前有应用可以拦截HTTP流量并绕过Android权限系统,你可以通过更改Android使用权限来保护用户免受意外的应用程序活动。这就涉及在安装应用程序时,需要看清它们将需要什么访问权限。从Android 6开始,所有权限被分为两组:正常和危险。如果应用程序需要危险的权限,则必须在运行时询问用户权限,而不是在安装之前。所以,为了获得位置,应用程序需要请求用户授予访问权限。为了读取IMEI或IMSI,应用程序还需要询问用户的访问权限,以免被划分为恶意出现。

但是,应用可以将代理添加到Wi-Fi设置,并读取从其他应用传输的所有数据。要做到这一点,应用就需要成为系统应用程序、配置为配置文件或是设备所有者本身。或者,应用程序可以在设备上设置VPN服务,将用户数据传输到其服务器上来。之后,应用程序可以通过读取HTTP请求来找到设备的位置,而无需访问设备的位置。

缓解措施

180411-leaking-ads-22.png

自2014年3月以来,应用中的HTTP(蓝色)和HTTPS(橙色)使用情况

从2016年下半年开始,越来越多的应用程序已经从HTTP切换到HTTPS。但截至2018年1月,63%的应用程序正在使用HTTPS,但其中大多数仍在使用HTTP。将近90%的应用程序正在使用HTTP,其中许多人的敏感数据正在被未加密地传输。

对于程序开发者来说

1.不要使用HTTP,这样用户数据就被泄漏;

2. 打开301重定向到HTTPS的前端;

3.如果你必须使用HTTP,就加密数据,此时非对称密码学非常有效。

4.始终使用最新版本的SDK,虽然要进行额外的测试,但这非常重要,因为一些安全问题可能会在最新的版本中得到解决。但从卡巴斯基实验室的本次研究来看,许多应用程序都不是使用的最新的第三方SDK版本。

5.发布前请检查应用的网络通信,虽然这个过程不会超过几分钟,但是你将能够发现是否有任何SDK从HTTPS切换到HTTP并暴露用户数据。

对于用户来说

1.检查你的应用权限,如果你不明白为什么程序需要此权限,请不要授予。大多数应用程序不需要访问你的位置,所以不要授予。

2.使用VPN,它将加密你的设备和外部服务器之间的网络流量。

源链接

Hacking more

...