移動(dòng)安全
移動(dòng)廣告的安全和隱私問題
陳浩美國(guó)加州大學(xué)戴維斯分校教授
移動(dòng)廣告中的兩個(gè)安卓問題:第一,克隆應(yīng)用對(duì)原作者的影響,第二,廣告欺騙對(duì)廣告商的影響。只有了解這樣的問題現(xiàn)在有多嚴(yán)重,才能找到好的解決手段。
移動(dòng)廣告是移動(dòng)生態(tài)的基石,因?yàn)榇蟛糠值囊苿?dòng)生態(tài)系統(tǒng)是免費(fèi)的,安卓系統(tǒng)也是免費(fèi)的,它們的主要收入來(lái)源是移動(dòng)廣告。如果移動(dòng)廣告的安全出了問題,大家不再使用移動(dòng)廣告,我們就不能再繼續(xù)使用免費(fèi)的移動(dòng)生態(tài)系統(tǒng)。
移動(dòng)廣告是非常復(fù)雜的系統(tǒng),有四大組成成員。第一是移動(dòng)用戶,第二是移動(dòng)軟件的開發(fā)者,第三是廣告的提供商,第四是進(jìn)行廣告分發(fā)的運(yùn)營(yíng)商。在移動(dòng)廣告的生態(tài)系統(tǒng)里面,有以下兩個(gè)主要的安全問題:
第一個(gè)問題是移動(dòng)應(yīng)用開發(fā)者,他們之所以參與開發(fā)應(yīng)用,是因?yàn)橛袕V告收入。如果其廣告收入被黑客截留,那么移動(dòng)應(yīng)用開發(fā)者們就可能會(huì)減少或者不開發(fā)移動(dòng)應(yīng)用。
第二個(gè)問題是對(duì)于廣告商來(lái)說(shuō),投放廣告是希望有市場(chǎng)效應(yīng),如果發(fā)現(xiàn)廣告是虛假的,沒有市場(chǎng)效應(yīng),那么其廣告的投入將會(huì)大打折扣。
那么,移動(dòng)廣告系統(tǒng)的流程是什么樣的?在移動(dòng)廣告中,開發(fā)者在應(yīng)用里面嵌入一個(gè)廣告庫(kù),在運(yùn)營(yíng)的時(shí)候,廣告庫(kù)會(huì)向廣告提供商發(fā)送一個(gè)traffic。我們?cè)谘芯恐邪l(fā)現(xiàn),有很多的應(yīng)用在克隆其他的應(yīng)用,一開始我們覺得很奇怪,既然這些應(yīng)用都是免費(fèi)的,那么應(yīng)用的克隆會(huì)給克隆者帶來(lái)什么樣的好處?后來(lái)發(fā)現(xiàn)克隆者的目的是為了截獲廣告收入,它們通常將一個(gè)原來(lái)的廣告庫(kù)克隆,將原來(lái)的廣告庫(kù)置換成克隆者的廣告庫(kù),那么,廣告收入就歸了克隆者所有??寺?yīng)用對(duì)原作者的利益是有損害的。同時(shí)克隆應(yīng)用使得用戶很難找到真正的應(yīng)用。
研究工作有以下幾個(gè)主要目的:一是想知道這些克隆的應(yīng)用有哪些特性,比如說(shuō)在應(yīng)用市場(chǎng)上,哪些市場(chǎng)的克隆應(yīng)用比較嚴(yán)重。二是試圖量化這些克隆的應(yīng)用對(duì)原開發(fā)者的影響。
我們從17個(gè)應(yīng)用市場(chǎng)上下載了約26萬(wàn)個(gè)應(yīng)用,根據(jù)每個(gè)市場(chǎng)上下載應(yīng)用的情況,開發(fā)了一個(gè)檢測(cè)克隆應(yīng)用的方法。這個(gè)檢測(cè)克隆應(yīng)用的方法,如果簡(jiǎn)單使用一一對(duì)應(yīng)的方法是不行的。比如有100萬(wàn)個(gè)應(yīng)用,檢測(cè)速度會(huì)非常慢。因此,我們從這些應(yīng)用中,導(dǎo)出了大約5000個(gè)克隆的樣本,在這些樣本里的應(yīng)用是類似的。而5000個(gè)克隆樣本里,有44000個(gè)左右的獨(dú)立應(yīng)用。
圖1顯示了這些克隆應(yīng)用的來(lái)源,這張圖中的每個(gè)節(jié)點(diǎn)代表一個(gè)應(yīng)用市場(chǎng),每個(gè)線條代表了在這兩個(gè)應(yīng)用市場(chǎng)中間有多少個(gè)克隆應(yīng)用。有兩種顏色,其中,藍(lán)色的代表美國(guó)的市場(chǎng),紅色的代表中國(guó)的市場(chǎng)。線條上的數(shù)字代表了在這一對(duì)應(yīng)用市場(chǎng)之中有多少對(duì)應(yīng)用是被克隆的。圖2顯示了在這些不同的應(yīng)用市場(chǎng)上,克隆的數(shù)量和克隆的百分比。紅線代表了有多少個(gè)是克隆的,藍(lán)線代表在每個(gè)應(yīng)用市場(chǎng)上有多少個(gè)是克隆的。這是第一部分工作。
圖1 克隆應(yīng)用的來(lái)源
圖2 克隆的數(shù)量和百分比
第二部分,這些克隆的應(yīng)用對(duì)原作者帶來(lái)的影響到底有多大?被多少個(gè)應(yīng)用克隆,并不能夠反映克隆對(duì)原作者帶來(lái)的損失。假如說(shuō)這些克隆應(yīng)用很少被用戶裝載,這對(duì)原作者來(lái)說(shuō),損失是非常小的。而只要克隆應(yīng)用被用戶大量地裝載,這時(shí)候才會(huì)對(duì)原作者帶來(lái)巨大的損失。所以我們?cè)噲D分析出有多少用戶在用克隆應(yīng)用,而不是用原版的應(yīng)用。
為了回答這個(gè)問題,首先需要回答三個(gè)子問題:第一,有多少個(gè)用戶運(yùn)行每一個(gè)App;第二,在這些App里面,哪些是原作的,哪些是克隆的;第三,每一個(gè)應(yīng)用的原作者是誰(shuí)。
第一個(gè)方法是,如何知道每一個(gè)用戶的手機(jī)上,他運(yùn)行的App到底是原作還是克隆的版本,這取決于觀察。如果軟件運(yùn)行在每一個(gè)手機(jī)上,比如和手機(jī)廠商合作,在每個(gè)用戶手機(jī)上安裝“安全衛(wèi)士”,它能夠檢測(cè)到每一個(gè)用戶手機(jī)上運(yùn)行著什么樣的軟件,那么就可以回答這樣的問題。可是有一個(gè)條件,我們沒有辦法在大批的用戶手機(jī)上安裝軟件。
第二個(gè)方法,可以和應(yīng)用廠商合作,在它的應(yīng)用服務(wù)器上可以記錄有多少用戶在用它的應(yīng)用。但是這種方法也有困難,因?yàn)橄霗z測(cè)克隆的軟件,很顯然克隆的發(fā)布者不會(huì)和我們合作,不會(huì)提供有多少用戶在用他們克隆的軟件。
第三種方法,被動(dòng)地在網(wǎng)絡(luò)上進(jìn)行檢測(cè)。
第一步,在網(wǎng)絡(luò)上檢測(cè),對(duì)每一個(gè)應(yīng)用的流量,需要檢測(cè)這個(gè)應(yīng)用是哪一個(gè)。在每一個(gè)廣告庫(kù)發(fā)出廣告請(qǐng)求的時(shí)候,在廣告請(qǐng)求里面,它標(biāo)出這個(gè)廣告收入歸誰(shuí),廣告里面會(huì)有一個(gè)Client ID,這樣就知道了是哪一個(gè)應(yīng)用,向這個(gè)廣告發(fā)出請(qǐng)求,就抓住了應(yīng)用的所有者。第二步,在實(shí)驗(yàn)室里,通過靜態(tài)分析的方法,將Client ID抽出,通過Client ID將網(wǎng)絡(luò)上的每一個(gè)流量和在實(shí)驗(yàn)室中所檢測(cè)的每一個(gè)應(yīng)用結(jié)合起來(lái)。這樣就知道在網(wǎng)絡(luò)上的每一個(gè)請(qǐng)求都是從哪一個(gè)Client ID發(fā)出的。那么,如何判定哪個(gè)是原作,哪個(gè)是克???我們的方法是,把裝機(jī)量多的應(yīng)用作為原版,裝機(jī)量少的認(rèn)為是克隆。
圖3是系統(tǒng)的流程圖。可以看見圖中左邊是網(wǎng)絡(luò)分析部分,在網(wǎng)絡(luò)分析部分上,我們和美國(guó)的一個(gè)主要無(wú)線運(yùn)營(yíng)商合作,在它的實(shí)驗(yàn)室里抓取網(wǎng)絡(luò)數(shù)據(jù)。并對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行分析,抽取出Client ID。右邊的工作是在實(shí)驗(yàn)室里面進(jìn)行的研究情況,我們從應(yīng)用市場(chǎng)上下載App,通過靜態(tài)分析找出其Client ID,以及與這個(gè)App之間的克隆關(guān)系。最后通過Client ID把網(wǎng)絡(luò)流量和App聯(lián)系起來(lái)。
圖3 系統(tǒng)流程
圖4 網(wǎng)絡(luò)數(shù)據(jù)分析對(duì)比
圖4中左邊的圖說(shuō)明,從收集的數(shù)據(jù)里面,估計(jì)由于克隆應(yīng)用,原作開發(fā)者損失了百分之多少的收入,右邊的三張圖顯示了由于克隆應(yīng)用,軟件開發(fā)應(yīng)用開發(fā)者損失了百分之多少的用戶群。在每張圖里面,有三個(gè)直線圖,這三個(gè)直線圖,代表了我們通過不同的方法估計(jì)收入和用戶群體的損失。
這是第一部分工作,即量化克隆應(yīng)用對(duì)原應(yīng)用開發(fā)者的廣告收入造成的損失和對(duì)其利益造成的損失。這是從原作開發(fā)者的角度看,惡意行為對(duì)它造成的損失。
在一個(gè)移動(dòng)廣告系統(tǒng)里面,還有另外一個(gè)主要的問題是廣告商,廣告商發(fā)布廣告是為了讓大家能夠看見。他有兩個(gè)目的,一是為了增加品牌知名度,二是希望當(dāng)用戶點(diǎn)擊購(gòu)買的時(shí)候形成交易。如果廣告商發(fā)出的廣告用戶沒有看到但廣告商都付了錢,或是用戶沒有點(diǎn)擊但廣告商也付了錢,就會(huì)對(duì)廣告的價(jià)格產(chǎn)生影響。這不是一件新鮮事,在萬(wàn)維網(wǎng)廣告出現(xiàn)之前,它們可以自動(dòng)地做軟件,可以自動(dòng)地向廣告商發(fā)出廣告請(qǐng)求,這樣來(lái)獲得收入。廣告欺騙,在移動(dòng)應(yīng)用出現(xiàn)之后迅速地被移植到了應(yīng)用上,這方面我們發(fā)現(xiàn)一些例子,有些移動(dòng)應(yīng)用在用戶沒有做任何行為的時(shí)候,出現(xiàn)了一些廣告流量和點(diǎn)擊。那么,到底有多少應(yīng)用在進(jìn)行廣告欺騙,這些廣告欺騙有什么樣的特點(diǎn),如何能夠大規(guī)模自動(dòng)化地檢測(cè)有哪些應(yīng)用進(jìn)行廣告欺騙?
為此,我們?cè)O(shè)計(jì)了一個(gè)系統(tǒng),這個(gè)系統(tǒng)可以大規(guī)模地檢測(cè)廣告欺騙。另外,希望通過運(yùn)營(yíng)這個(gè)系統(tǒng),對(duì)于大規(guī)模的應(yīng)用進(jìn)行檢測(cè),查看廣告欺騙有哪些特性。廣告欺騙有兩種,第一種是用戶沒有點(diǎn)擊的時(shí)候,廣告庫(kù)向廣告商發(fā)一個(gè)文件,得到一個(gè)background;第二種是廣告商知道不是一個(gè)來(lái)自用戶的點(diǎn)擊。
我們的系統(tǒng)是一個(gè)基于動(dòng)態(tài)分析的平臺(tái),左邊是廣告商系統(tǒng)不停地輸入很多應(yīng)用,系統(tǒng)通過很多安卓虛擬機(jī)運(yùn)行這些應(yīng)用,對(duì)這些應(yīng)用進(jìn)行動(dòng)態(tài)分析。在動(dòng)態(tài)分析過程中,通過網(wǎng)絡(luò)抓包,獲得所有和廣告有關(guān)的流量,在這些流量中,把與廣告有關(guān)的流量抽取出來(lái),最后從所有的廣告流量中分析哪些是合法的流量,哪些是欺騙流量。
具體的做法是,對(duì)于每一個(gè)應(yīng)用,產(chǎn)生一個(gè)安卓虛擬機(jī),在虛擬機(jī)里面裝載這樣的應(yīng)用。接著讓這個(gè)應(yīng)用在前景運(yùn)行一分鐘,然后把這個(gè)應(yīng)用放在背景里再運(yùn)行一分鐘。因?yàn)樵诎沧恐?,任何時(shí)候只有一個(gè)應(yīng)用運(yùn)行在前景,應(yīng)用在背景的方法就是在前景開著瀏覽器。在這個(gè)過程之中,通過抓包獲得了所有的網(wǎng)絡(luò)流量。值得關(guān)注的一點(diǎn),在整個(gè)過程之中,不和應(yīng)用進(jìn)行任何的交互。所以不需要任何的手段,而只是安裝、運(yùn)行,放到后臺(tái),然后結(jié)束。
這個(gè)想法的目的是,在前一分鐘應(yīng)用運(yùn)行在前景里面,因?yàn)闆]有和應(yīng)用進(jìn)行任何交互,所以如果發(fā)現(xiàn)了任何的點(diǎn)擊,這一定是惡意的。那么在后一分鐘,應(yīng)用運(yùn)行在背景里面。當(dāng)一個(gè)應(yīng)用運(yùn)行在背景里面的時(shí)候,它沒有任何的UI,它顯示的任何圖像用戶是看不見的。如果一個(gè)應(yīng)用運(yùn)行在背景中的時(shí)候,如果出現(xiàn)了廣告請(qǐng)求,這也是一個(gè)欺騙。因?yàn)檫@個(gè)圖像或是任何的動(dòng)畫,任何的顯示用戶是看不見的,這是一個(gè)基本的想法。
這個(gè)想法很簡(jiǎn)單,但是實(shí)現(xiàn)起來(lái)有各種各樣的問題。比如涉及特別多的流量,這個(gè)流量里面有哪些是和廣告有關(guān)的流量。有一個(gè)方法是,可以通過收集所有的域名,可能知道哪些域名是廣告商的域名。但是也有一個(gè)問題,其中很主要的問題是可能會(huì)漏掉很多廣告商的域名。第二,所有的廣告商為了防止欺騙,如果它收到了一個(gè)client卻沒有對(duì)應(yīng),為了找到哪些是真正的用戶,必須把這些聯(lián)系起來(lái)。我們的做法是創(chuàng)建一個(gè)request trees。當(dāng)用戶點(diǎn)擊含廣告的頁(yè)面的時(shí)候會(huì)產(chǎn)生一個(gè)client ,這個(gè)過程會(huì)發(fā)現(xiàn)它有一個(gè)因果關(guān)系。頁(yè)面導(dǎo)致了廣告,廣告導(dǎo)致了client。所以如果能把這樣一個(gè)trees創(chuàng)建出來(lái),就能很明確地知道哪些是client 。
第一步,通過機(jī)器學(xué)習(xí)的算法,提取以下三類特征:第一個(gè)特征是build request trees,這個(gè)trees有多寬,有多高。第二個(gè)特征是query,第三個(gè)特征是identify。然后通過這個(gè)找到未知的或者說(shuō)新的欺騙流量。
如圖5所示,我們一共從19個(gè)市場(chǎng)上,查了15萬(wàn)個(gè)Apps,在這些Apps里有4萬(wàn)個(gè)是有欺騙流量,其中,有12000多個(gè)App,當(dāng)這些App運(yùn)行的時(shí)候,即App在背景中運(yùn)行時(shí),查出這些App中有21個(gè)Apps。按照我們的試驗(yàn)方法,如果在任何時(shí)候出現(xiàn)了client ,就說(shuō)明是欺騙流量。有人可能會(huì)疑惑為什么這個(gè)數(shù)字這么少,15萬(wàn)個(gè)App,只有五萬(wàn)多個(gè)存在欺騙流量。原因是它對(duì)硬件的要求不一致,有些App在安裝以后一定要介入某些功能里面才能出現(xiàn)App,因?yàn)闆]有任何的交互,所以它在某些情況下發(fā)現(xiàn),試驗(yàn)方法并不能檢測(cè)到。
圖5 網(wǎng)絡(luò)數(shù)據(jù)分析對(duì)比
(本文根據(jù)美國(guó)加州大學(xué)戴維斯分校陳浩教授在中國(guó)互聯(lián)網(wǎng)安全大會(huì)ISC2016的分論壇“移動(dòng)安全發(fā)展論壇”上的演講內(nèi)容整理。)