美国加州大学戴维斯分校陈浩:移动广告的安全和隐私问题
移动广告中的两个安卓问题:第一,克隆应用对原作者的影响,第二,广告欺骗对广告商的影响。只有了解这样的问题现在有多严重,才能找到好的解决手段。
移动广告是移动生态的基石,因为大部分的移动生态系统是免费的,安卓系统也是免费的,它们的主要收入来源是移动广告。如果移动广告的安全出了问题,大家不再使用移动广告,我们就不能再继续使用免费的移动生态系统。
移动广告是非常复杂的系统,有四大组成成员。第一是移动用户,第二是移动软件的开发者,第三是广告的提供商,第四是进行广告分发的运营商。在移动广告的生态系统里面,有以下两个主要的安全问题:
第一个问题是移动应用开发者,他们之所以参与开发应用,是因为有广告收入。如果其广告收入被黑客截留,那么移动应用开发者们就可能会减少或者不开发移动应用。
第二个问题是对于广告商来说,投放广告是希望有市场效应,如果发现广告是虚假的,没有市场效应,那么其广告的投入将会大打折扣。
那么,移动广告系统的流程是什么样的?在移动广告中,开发者在应用里面嵌入一个广告库,在运营的时候,广告库会向广告提供商发送一个traffic。我们在研究中发现,有很多的应用在克隆其他的应用,一开始我们觉得很奇怪,既然这些应用都是免费的,那么应用的克隆会给克隆者带来什么样的好处?
后来发现克隆者的目的是为了截获广告收入,它们通常将一个原来的广告库克隆,将原来的广告库置换成克隆者的广告库,那么,广告收入就归了克隆者所有。克隆应用对原作者的利益是有损害的。同时克隆应用使得用户很难找到真正的应用。
研究工作有以下几个主要目的:一是想知道这些克隆的应用有哪些特性,比如说在应用市场上,哪些市场的克隆应用比较严重。二是试图量化这些克隆的应用对原开发者的影响。
克隆应用对原作者的影响
我们从17个应用市场上下载了约26万个应用,根据每个市场上下载应用的情况,开发了一个检测克隆应用的方法。这个检测克隆应用的方法,如果简单使用一一对应的方法是不行的。比如有100万个应用,检测速度会非常慢。因此,我们从这些应用中,导出了大约5000个克隆的样本,在这些样本里的应用是类似的。而5000个克隆样本里,有44000个左右的独立应用。
图1显示了这些克隆应用的来源,这张图中的每个节点代表一个应用市场,每个线条代表了在这两个应用市场中间有多少个克隆应用。有两种颜色,其中,蓝色的代表美国的市场,红色的代表中国的市场。线条上的数字代表了在这一对应用市场之中有多少对应用是被克隆的。
图2显示了在这些不同的应用市场上,克隆的数量和克隆的百分比。红线代表了有多少个是克隆的,蓝线代表在每个应用市场上有多少个是克隆的。这是第一部分工作。
第二部分,这些克隆的应用对原作者带来的影响到底有多大?被多少个应用克隆,并不能够反映克隆对原作者带来的损失。假如说这些克隆应用很少被用户装载,这对原作者来说,损失是非常小的。而只要克隆应用被用户大量地装载,这时候才会对原作者带来巨大的损失。所以我们试图分析出有多少用户在用克隆应用,而不是用原版的应用。
为了回答这个问题,首先需要回答三个子问题:第一,有多少个用户运行每一个App;第二,在这些App里面,哪些是原作的,哪些是克隆的;第三,每一个应用的原作者是谁。
第一个方法是,如何知道每一个用户的手机上,他运行的App到底是原作还是克隆的版本,这取决于观察。如果软件运行在每一个手机上,比如和手机厂商合作,在每个用户手机上安装“安全卫士”,它能够检测到每一个用户手机上运行着什么样的软件,那么就可以回答这样的问题。可是有一个条件,我们没有办法在大批的用户手机上安装软件。
第二个方法,可以和应用厂商合作,在它的应用服务器上可以记录有多少用户在用它的应用。但是这种方法也有困难,因为想检测克隆的软件,很显然克隆的发布者不会和我们合作,不会提供有多少用户在用他们克隆的软件。
第三种方法,被动地在网络上进行检测。
第一步,在网络上检测,对每一个应用的流量,需要检测这个应用是哪一个。在每一个广告库发出广告请求的时候,在广告请求里面,它标出这个广告收入归谁,广告里面会有一个Client ID,这样就知道了是哪一个应用,向这个广告发出请求,就抓住了应用的所有者。
第二步,在实验室里,通过静态分析的方法,将Client ID抽出,通过Client ID将网络上的每一个流量和在实验室中所检测的每一个应用结合起来。这样就知道在网络上的每一个请求都是从哪一个Client ID发出的。那么,如何判定哪个是原作,哪个是克隆?我们的方法是,把装机量多的应用作为原版,装机量少的认为是克隆。
图3是系统的流程图。可以看见图中左边是网络分析部分,在网络分析部分上,我们和美国的一个主要无线运营商合作,在它的实验室里抓取网络数据。并对网络数据进行分析,抽取出Client ID。右边的工作是在实验室里面进行的研究情况,我们从应用市场上下载App,通过静态分析找出其Client ID,以及与这个App之间的克隆关系。最后通过Client ID把网络流量和App联系起来。
图4中左边的图说明,从收集的数据里面,估计由于克隆应用,原作开发者损失了百分之多少的收入,右边的三张图显示了由于克隆应用,软件开发应用开发者损失了百分之多少的用户群。在每张图里面,有三个直线图,这三个直线图,代表了我们通过不同的方法估计收入和用户群体的损失。
这是第一部分工作,即量化克隆应用对原应用开发者的广告收入造成的损失和对其利益造成的损失。这是从原作开发者的角度看,恶意行为对它造成的损失。
广告欺骗对广告商的影响
在一个移动广告系统里面,还有另外一个主要的问题是广告商,广告商发布广告是为了让大家能够看见。他有两个目的,一是为了增加品牌知名度,二是希望当用户点击购买的时候形成交易。如果广告商发出的广告用户没有看到但广告商都付了钱,或是用户没有点击但广告商也付了钱,就会对广告的价格产生影响。
这不是一件新鲜事,在万维网广告出现之前,它们可以自动地做软件,可以自动地向广告商发出广告请求,这样来获得收入。广告欺骗,在移动应用出现之后迅速地被移植到了应用上,这方面我们发现一些例子,有些移动应用在用户没有做任何行为的时候,出现了一些广告流量和点击。那么,到底有多少应用在进行广告欺骗,这些广告欺骗有什么样的特点,如何能够大规模自动化地检测有哪些应用进行广告欺骗?
为此,我们设计了一个系统,这个系统可以大规模地检测广告欺骗。另外,希望通过运营这个系统,对于大规模的应用进行检测,查看广告欺骗有哪些特性。广告欺骗有两种,第一种是用户没有点击的时候,广告库向广告商发一个文件,得到一个background;第二种是广告商知道不是一个来自用户的点击。
我们的系统是一个基于动态分析的平台,左边是广告商系统不停地输入很多应用,系统通过很多安卓虚拟机运行这些应用,对这些应用进行动态分析。在动态分析过程中,通过网络抓包,获得所有和广告有关的流量,在这些流量中,把与广告有关的流量抽取出来,最后从所有的广告流量中分析哪些是合法的流量,哪些是欺骗流量。
具体的做法是,对于每一个应用,产生一个安卓虚拟机,在虚拟机里面装载这样的应用。接着让这个应用在前景运行一分钟,然后把这个应用放在背景里再运行一分钟。因为在安卓中,任何时候只有一个应用运行在前景,应用在背景的方法就是在前景开着浏览器。在这个过程之中,通过抓包获得了所有的网络流量。值得关注的一点,在整个过程之中,不和应用进行任何的交互。所以不需要任何的手段,而只是安装、运行,放到后台,然后结束。
这个想法的目的是,在前一分钟应用运行在前景里面,因为没有和应用进行任何交互,所以如果发现了任何的点击,这一定是恶意的。那么在后一分钟,应用运行在背景里面。当一个应用运行在背景里面的时候,它没有任何的UI,它显示的任何图像用户是看不见的。如果一个应用运行在背景中的时候,如果出现了广告请求,这也是一个欺骗。因为这个图像或是任何的动画,任何的显示用户是看不见的,这是一个基本的想法。
这个想法很简单,但是实现起来有各种各样的问题。比如涉及特别多的流量,这个流量里面有哪些是和广告有关的流量。有一个方法是,可以通过收集所有的域名,可能知道哪些域名是广告商的域名。但是也有一个问题,其中很主要的问题是可能会漏掉很多广告商的域名。
第二,所有的广告商为了防止欺骗,如果它收到了一个client却没有对应,为了找到哪些是真正的用户,必须把这些联系起来。我们的做法是创建一个request trees。当用户点击含广告的页面的时候会产生一个client,这个过程会发现它有一个因果关系。页面导致了广告,广告导致了client。所以如果能把这样一个trees创建出来,就能很明确地知道哪些是client。
第一步,通过机器学习的算法,提取以下三类特征:第一个特征是build request trees,这个trees有多宽,有多高。第二个特征是query,第三个特征是identify。然后通过这个找到未知的或者说新的欺骗流量。
如图5所示,我们一共从19个市场上,查了15万个Apps,在这些Apps里有4万个是有欺骗流量,其中,有12000多个App,当这些App运行的时候,即App在背景中运行时,查出这些App中有21个Apps。按照我们的试验方法,如果在任何时候出现了client,就说明是欺骗流量。有人可能会疑惑为什么这个数字这么少,15万个App,只有五万多个存在欺骗流量。原因是它对硬件的要求不一致,有些App在安装以后一定要介入某些功能里面才能出现App,因为没有任何的交互,所以它在某些情况下发现,试验方法并不能检测到。
(本文根据美国加州大学戴维斯分校陈浩教授在中国互联网安全大会ISC2016的分论坛“移动安全发展论坛”上的演讲内容整理。)