李佳斌 裴洪卿 鄭雄 孫艷賓 汪藍(lán)
1. 浙江省杭州市公安局西湖區(qū)分局 2. 杭州平航科技有限公司
隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,出現(xiàn)了一條暗刷流量的網(wǎng)絡(luò)灰色產(chǎn)業(yè)鏈,暗刷流量指手機(jī)未經(jīng)使用者的主動(dòng)使用操作,而會(huì)在系統(tǒng)后臺(tái)暗自訪問(wèn)網(wǎng)站或進(jìn)行數(shù)據(jù)傳輸,下載或者打開(kāi)某個(gè)APP,從而達(dá)到提高目標(biāo)網(wǎng)站訪問(wèn)流量、增加活躍度等目的。這些行為可能是由于手機(jī)安裝了某些APP應(yīng)用程序,由其暗自運(yùn)行的行為,也有可能是一些系統(tǒng)刷機(jī)包內(nèi)置后門程序觸發(fā)產(chǎn)生的行為。而各類APP及網(wǎng)站等都需要大量的流量實(shí)現(xiàn)盈利,例如注冊(cè)量、點(diǎn)擊量等,更為常見(jiàn)的還有電商刷單炒信行為,高流量意味著高點(diǎn)擊率以及高關(guān)注率,有了高流量,應(yīng)用排行榜排名就會(huì)靠前,就會(huì)有更多的人群予以關(guān)注,從而擴(kuò)大市場(chǎng)影響,帶來(lái)商業(yè)上的豐厚回報(bào)。由于供需關(guān)系的影響,網(wǎng)絡(luò)流量暗刷就形成了一條完整的產(chǎn)業(yè)鏈。網(wǎng)絡(luò)暗刷的實(shí)現(xiàn)方式包括通過(guò)代碼程序模擬用戶訪問(wèn)行為的“機(jī)刷”和借助在其他APP、廣告中植入JS暗刷點(diǎn)擊代碼,通過(guò)基于SDK增加其自身產(chǎn)品的訪問(wèn)量并不被手機(jī)使用者知曉的“JS暗刷”。本文針對(duì)常見(jiàn)的SDK中植入JS暗刷行為代碼進(jìn)行分析研究。
SDK是Software Development Kit的縮寫,即“軟件開(kāi)發(fā)工具包”,SDK一般是封裝某些特定功能(常見(jiàn)的比如:賬號(hào)管理、支付、推送、統(tǒng)計(jì)等等)的程序組件,第三方SDK主要指軟件開(kāi)發(fā)人員所使用的第三方服務(wù)商所提供的可實(shí)現(xiàn)軟件某些特定功能或接口的軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)等開(kāi)發(fā)工具的集合(工具包)。如Google提供Android系統(tǒng)專屬的開(kāi)發(fā)工具,即Android SDK。由于Android系統(tǒng)擁有龐大的用戶群體,而且每天都有大量的Android應(yīng)用程序被發(fā)布到各大應(yīng)用市場(chǎng),例如應(yīng)用寶、豌豆莢等。為了縮短開(kāi)發(fā)時(shí)間和提高開(kāi)發(fā)效率,Android應(yīng)用開(kāi)發(fā)人員一般只會(huì)開(kāi)發(fā)核心功能而很少自主開(kāi)發(fā)應(yīng)用程序中所有的功能,非核心功能就可以通過(guò)使用第三方服務(wù)提供商提供的SDK來(lái)實(shí)現(xiàn),例如廣告推送、數(shù)據(jù)統(tǒng)計(jì)、社交網(wǎng)絡(luò)、地圖和信息推送平臺(tái)。
第三方服務(wù)提供商在其SDK中封裝了復(fù)雜的代碼邏輯以及請(qǐng)求響應(yīng)的過(guò)程,但同時(shí)提供調(diào)用該SDK的使用說(shuō)明文檔,因此應(yīng)用開(kāi)發(fā)人員并不需要了解SDK內(nèi)部的邏輯原理,即可以根據(jù)文檔集成SDK的功能。因此第三方SDK逐漸成為Android生態(tài)系統(tǒng)的重要組成部分,但基于這種快速開(kāi)發(fā)模式,使第三方SDK在信息安全方面埋下了隱患。
第三方SDK通常都會(huì)根據(jù)自身的服務(wù)內(nèi)容向開(kāi)發(fā)人員提供調(diào)用說(shuō)明和演示信息。以消息推送類的業(yè)務(wù)為例,如圖1所示。根據(jù)SDK的調(diào)用流程,可以發(fā)現(xiàn)其嵌入APP后,會(huì)與業(yè)務(wù)服務(wù)器進(jìn)行數(shù)據(jù)交互,進(jìn)而實(shí)現(xiàn)消息推送功能。因此我們可以通過(guò)對(duì)SDK的逆向分析發(fā)現(xiàn)其連接的服務(wù)器以及針對(duì)通訊行為進(jìn)行分析,可以還原其實(shí)現(xiàn)流程進(jìn)而從中尋找與此類行為有關(guān)的內(nèi)在特點(diǎn)。
Andriod SDK文件主要為jar格式,是一種常見(jiàn)的軟件包文件格式,通常用于聚合大量的Java類文件、相關(guān)的元數(shù)據(jù)和資源(文本、圖片等)文件,并將這些整合到一個(gè)文件中,以便開(kāi)發(fā)Java平臺(tái)應(yīng)用軟件或庫(kù)。
一個(gè)Android應(yīng)用程序的代碼要在Android設(shè)備上運(yùn)行,必須先進(jìn)行編譯,然后被打包成為一個(gè)被Android系統(tǒng)所能識(shí)別的文件才可以被運(yùn)行,而這種能被Android系統(tǒng)識(shí)別并運(yùn)行的文件格式便是APK文件,APK文件作為Android操作系統(tǒng)最廣泛使用的一種應(yīng)用程序包文件格式,用于分發(fā)和安裝移動(dòng)應(yīng)用及中間件。一個(gè)APK文件內(nèi)包含被編譯的代碼文件(.dex文件)、文件資源(Resources)、原生資源文件(Assets)、簽名證書(Certificates)和清單文件(Manifest文件)。APK文件可以通過(guò)使用逆向工具Jadxgui打開(kāi)并對(duì)其文件結(jié)構(gòu)和內(nèi)容進(jìn)行查看分析。
由于SDK的jar文件需要嵌入APK文件中,因此通常都提供嵌入使用的說(shuō)明文檔或者開(kāi)發(fā)手冊(cè),文檔手冊(cè)中也會(huì)包含SDK所需系統(tǒng)或應(yīng)用權(quán)限等內(nèi)容,這些權(quán)限的說(shuō)明也有利于后續(xù)分析APK的權(quán)限范圍和細(xì)節(jié),如圖2所示。
以廣告類SDK為例,在實(shí)際使用場(chǎng)景中,廣告推送服務(wù)并不需要很多或者很高級(jí)別的權(quán)限要求,只要能夠連接網(wǎng)絡(luò)、寫入數(shù)據(jù)即可,即便如此也可以實(shí)現(xiàn)在手機(jī)用戶不知情的情況下,通過(guò)后臺(tái)模擬人工點(diǎn)擊廣告鏈接進(jìn)行牟利。在這種情況下則需要對(duì)該APP的網(wǎng)絡(luò)通訊行為以及相關(guān)數(shù)據(jù)進(jìn)行甄別分析。
如果是一些惡意收集手機(jī)信息的SDK或應(yīng)用,則會(huì)申請(qǐng)?jiān)L問(wèn)通訊錄、短信、硬件等信息的權(quán)限。如果是木馬類程序,則會(huì)申請(qǐng)更多的敏感權(quán)限,如申請(qǐng)讀取、寫入、發(fā)送、刪除短信權(quán)限,再結(jié)合程序邏輯,可用以攔截短信驗(yàn)證碼,或者發(fā)送申請(qǐng)驗(yàn)證碼的短信。因此分析應(yīng)用的權(quán)限對(duì)于安卓應(yīng)用的取證分析非常重要。
本文介紹了環(huán)境工程本科生在水處理綜合實(shí)驗(yàn)中探究式實(shí)驗(yàn)的開(kāi)展和評(píng)價(jià)。通過(guò)評(píng)價(jià)問(wèn)卷的統(tǒng)計(jì)分析,對(duì)傳統(tǒng)實(shí)驗(yàn)與探究式實(shí)驗(yàn)在提高學(xué)習(xí)效果方面進(jìn)行了比較,對(duì)探究式實(shí)驗(yàn)的有效性做出評(píng)價(jià)。
通過(guò)對(duì)比分析某短信攔截木馬應(yīng)用所申請(qǐng)的權(quán)限發(fā)現(xiàn),實(shí)現(xiàn)特定功能時(shí),必須要向安卓系統(tǒng)申請(qǐng)相應(yīng)權(quán)限,但是廣告類SDK僅需要訪問(wèn)網(wǎng)絡(luò)等基礎(chǔ)權(quán)限即可,需要授予的權(quán)限較少且較為基礎(chǔ),此其利用此類SKD實(shí)施的違法行為更加難以被發(fā)現(xiàn)。另一方面SDK都是提前預(yù)置在APP中,如果該APP已經(jīng)申請(qǐng)了很多權(quán)限,那該SDK也可以調(diào)用相同的權(quán)限,因此SDK的行為不需要通過(guò)告知APP即可實(shí)現(xiàn)。我們可以通過(guò)分析APP權(quán)限范圍的方法對(duì)其中的SDK進(jìn)行分析。
第三方SDK的惡意行為除上述廣告刷流量類型外,還包括以下幾類:
流量劫持:第三方SDK通過(guò)惡意劫持APP流量,根據(jù)特定目標(biāo)劫持訪問(wèn)的地址;
資費(fèi)消耗:第三方SDK消耗用戶的網(wǎng)絡(luò)資費(fèi),甚至是訂閱收費(fèi)服務(wù),惡意發(fā)送收費(fèi)短信等;
隱私竊?。旱谌絊DK在用戶不知情的情況下,竊取用戶的通訊錄、短信等個(gè)人隱私信息,甚至是未經(jīng)授權(quán)的拍照,錄音等高危敏感行為;
靜默下載:第三方SDK在運(yùn)行后臺(tái)靜默下載、安裝其他惡意APP或木馬病毒的行為;
惡意廣告:第三方SDK可以向用戶推送包含欺詐內(nèi)容、木馬病毒的連接,干擾用戶正常使用APP;
敲詐勒索:第三方SDK惡意加密用戶手機(jī)中的文件,干擾用戶對(duì)手機(jī)的正常使用,并以恢復(fù)為由向用戶敲詐勒索;
虛擬幣挖礦:第三方SDK在用戶不知情的情況下,利用手機(jī)的計(jì)算能力進(jìn)行數(shù)字虛擬貨幣的獲取,消耗用戶的手機(jī)性能資源;
遠(yuǎn)程控制:第三方SDK在手機(jī)端啟動(dòng)本地服務(wù)器,接收遠(yuǎn)程控制端發(fā)來(lái)的控制指令,隱蔽上述惡意行為。
在某非法控制計(jì)算機(jī)信息系統(tǒng)案件中,嫌疑人將自己研發(fā)的SDK推廣嵌入到其他開(kāi)發(fā)者的APP中。用戶安裝這些APP后,涉案SDK會(huì)在手機(jī)用戶不知情的情況下,通過(guò)網(wǎng)絡(luò)與后臺(tái)服務(wù)器進(jìn)行連接,并自動(dòng)訪問(wèn)服務(wù)器端推送的網(wǎng)站,通過(guò)提高網(wǎng)站訪問(wèn)流量實(shí)現(xiàn)非法盈利,具體調(diào)用流程如圖3 所示。為還原犯罪實(shí)施過(guò)程,為案件偵辦提供證據(jù)支撐,本案重點(diǎn)對(duì)涉案APP中的SDK及服務(wù)器端進(jìn)行分析。
對(duì)涉案的應(yīng)用程序SDK文件進(jìn)行程序功能性分析,獲取到涉案樣本文件名為“XXX.jar”的文件,文件格式為“.jar”,文件大小為“100KB”,SHA256值為“XXX X”,使用“Jadx-gui-1.6.2”反編譯軟件打開(kāi)該文件進(jìn)行源碼檢驗(yàn)。
在程序源碼顯示版本號(hào)為“Manifest-Version:1.0”,經(jīng)前期案件偵辦,重點(diǎn)關(guān)注網(wǎng)絡(luò)連接行為數(shù)據(jù),因此可以通過(guò)搜索關(guān)鍵字“http”,尋找內(nèi)置在SDK代碼中與網(wǎng)絡(luò)地址相關(guān)的數(shù)據(jù),如圖4所示。
通過(guò)對(duì)搜索結(jié)果的上下文代碼查看分析,發(fā)現(xiàn)SDK具備向服務(wù)器發(fā)送http請(qǐng)求的行為,同時(shí)在發(fā)送請(qǐng)求時(shí),確認(rèn)服務(wù)正常并獲取任務(wù)數(shù)據(jù)流。在上傳地址中包含“qid”進(jìn)行標(biāo)識(shí),以便服務(wù)器能夠確認(rèn)任務(wù)請(qǐng)求的來(lái)源,方便后續(xù)數(shù)據(jù)統(tǒng)計(jì)。從代碼中也可以看到SDK同時(shí)判斷服務(wù)器響應(yīng)的狀態(tài)碼,如果狀態(tài)碼為200(響應(yīng)正常),則會(huì)判斷“server ok”并繼續(xù)進(jìn)行任務(wù)處理,如圖5所示。
通過(guò)代碼識(shí)別可以了解到,該SDK將獲取的任務(wù)流數(shù)據(jù)存放在列表(List)中,存放數(shù)據(jù)包括“code”“l(fā)oglevel”“time”“url”“data”等類型,在該案例中,參數(shù)loglevel是指任務(wù)的優(yōu)先等級(jí)。在進(jìn)一步判斷數(shù)據(jù)長(zhǎng)度等情況后,循環(huán)執(zhí)行處理任務(wù)流數(shù)據(jù),如圖6所示。
程序循環(huán)執(zhí)行過(guò)程中,調(diào)用“WebView”控件渲染網(wǎng)頁(yè)。WebView就是“網(wǎng)絡(luò)視圖”,能在APP中直接加載并顯示網(wǎng)頁(yè),可以將其視為一個(gè)內(nèi)置瀏覽器。主要用于展示網(wǎng)絡(luò)請(qǐng)求后的內(nèi)容,包括網(wǎng)絡(luò)地址請(qǐng)求的內(nèi)容。APP如需要訪問(wèn)網(wǎng)絡(luò),可以不使用手機(jī)自帶的瀏覽器,只需使用webView組件即可在APP內(nèi)部展示網(wǎng)絡(luò)頁(yè)面。在webview控件后,發(fā)現(xiàn)該SDK使用“addJavascriptInterface”等方法處理“Javascript”數(shù)據(jù)(任務(wù)數(shù)據(jù))。通過(guò)調(diào)用“MotionEvent”方法(MotionEvent是手指觸摸屏幕產(chǎn)生的一系列事件)模擬觸摸屏幕滑動(dòng)動(dòng)作。利用調(diào)用“sleep”實(shí)現(xiàn)休眠(sleep方法的作用是在指定的毫秒數(shù)內(nèi)讓當(dāng)前“正在執(zhí)行的線程”暫停執(zhí)行),上傳日志信息,如圖7所示。
通過(guò)攔截SDK與后臺(tái)服務(wù)器通訊數(shù)據(jù),可以發(fā)現(xiàn)與其搭配的后臺(tái)地址,經(jīng)對(duì)該服務(wù)器勘查取證分析,可以發(fā)現(xiàn)后臺(tái)管理主頁(yè)內(nèi)包含“任務(wù)”“基礎(chǔ)數(shù)據(jù)”“運(yùn)營(yíng)數(shù)據(jù)”“輔助工具”“子項(xiàng)目”“消息推送”“系統(tǒng)相關(guān)”等內(nèi)容。其中“任務(wù)”欄目下的顯示狀態(tài)為“開(kāi)啟”的任務(wù)有多個(gè),包括名稱為“撞庫(kù)(XXX_拉新)”“手機(jī)號(hào)抓取_初次”“撞庫(kù)(XXX_檢測(cè))”“撞庫(kù)(XXXX_促活)”“手機(jī)號(hào)抓取_二次”“撞庫(kù)(XXX_拉新_個(gè)人)”等任務(wù),同時(shí)還對(duì)任務(wù)的運(yùn)行數(shù)據(jù)進(jìn)行統(tǒng)計(jì)。
通過(guò)對(duì)服務(wù)器數(shù)據(jù)的取證分析,發(fā)現(xiàn)在任務(wù)數(shù)據(jù)中,均會(huì)加入CNZZ統(tǒng)計(jì)鏈接。CNZZ站長(zhǎng)統(tǒng)計(jì)是專業(yè)的實(shí)時(shí)網(wǎng)站流量統(tǒng)計(jì)分析系統(tǒng),可以幫助網(wǎng)站管理員、運(yùn)營(yíng)人員、推廣人員等實(shí)時(shí)獲取網(wǎng)站流量,并從流量來(lái)源、網(wǎng)站內(nèi)容、網(wǎng)站訪客特性等多個(gè)方面提供網(wǎng)站的數(shù)據(jù)分析服務(wù)。從而幫助提高網(wǎng)站流量,提升網(wǎng)站的用戶體驗(yàn),讓訪客更多的沉淀下來(lái)變成會(huì)員或客戶,通過(guò)更少的投入獲得最大化的收入。
在對(duì)任務(wù)名稱為“XXX_拉新”的任務(wù)數(shù)據(jù)進(jìn)行分析時(shí),發(fā)現(xiàn)其入口頁(yè)面的url鏈接地址,對(duì)“XXX_拉新”的運(yùn)行代碼段進(jìn)行分析,發(fā)現(xiàn)在訪問(wèn)上述鏈接后會(huì)執(zhí)行一段代碼,代碼中通過(guò)構(gòu)建某網(wǎng)站的地址參數(shù)實(shí)現(xiàn)該網(wǎng)站頁(yè)面的訪問(wèn)行為。涉及的賬號(hào)參數(shù)則存放在后臺(tái)地址的代碼中,具體參數(shù)包括“id”“sceneCode”“domain”“channel”“partnerId”“weight”等,如圖8中所示。
在取證工作站的瀏覽器中輸入訪問(wèn)任務(wù)地址,發(fā)現(xiàn)會(huì)自動(dòng)跳轉(zhuǎn)到“xxx領(lǐng)紅包”頁(yè)面中,并且自動(dòng)發(fā)送包含有PID等參數(shù)的鏈接,實(shí)現(xiàn)自動(dòng)申請(qǐng)領(lǐng)紅包的行為,如圖9所示。
通過(guò)對(duì)SDK和服務(wù)器數(shù)據(jù)的取證分析,可以發(fā)現(xiàn)該涉案團(tuán)伙在未經(jīng)手機(jī)用戶授權(quán)的情況下,完成服務(wù)器狀態(tài)判斷以及任務(wù)申請(qǐng)、執(zhí)行、統(tǒng)計(jì)等行為,而所有這些行為都不被手機(jī)用戶直觀發(fā)現(xiàn),實(shí)現(xiàn)了網(wǎng)站流量暗刷的一系列操作。
結(jié)合對(duì)案例的取證分析,通過(guò)在應(yīng)用程序中植入具有特定功能的SDK,利用網(wǎng)絡(luò)和服務(wù)器端預(yù)先設(shè)置好的任務(wù)參數(shù),可以實(shí)現(xiàn)SDK程序根據(jù)代碼邏輯,在手機(jī)后臺(tái)自動(dòng)化處理預(yù)制任務(wù),實(shí)現(xiàn)循環(huán)執(zhí)行訪問(wèn)頁(yè)面完成暗刷流量等行為,從而達(dá)到非法獲利的目的。由于這種利用SDK進(jìn)行違法犯罪的行為往往伴隨正常應(yīng)用程序的使用而進(jìn)行,其行為并不會(huì)直接體現(xiàn)在手機(jī)應(yīng)用程序界面中,具有隱蔽性強(qiáng)的特點(diǎn),往往很難被手機(jī)用戶發(fā)現(xiàn),另一方面在對(duì)此類案件進(jìn)行偵查取證時(shí),涉及到應(yīng)用程序逆向分析、代碼功能邏輯分析以及服務(wù)器勘查取證等領(lǐng)域的技術(shù),對(duì)辦案部門有一定實(shí)際操作的技術(shù)要求。本文對(duì)暗刷流量類的涉案SDK關(guān)聯(lián)要素進(jìn)行取證分析研究,為偵辦和打擊此類違法犯罪活動(dòng)的辦案部門提供相關(guān)參考。