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