淺談設(shè)備指紋技術(shù)和應(yīng)用
背景
當(dāng)你手機(jī)APP上刷著某些視頻并多停留幾秒,后續(xù)再刷視頻的時(shí)候,是否有感覺到更多是推送同類型的視頻;
當(dāng)你在某APP搜索某產(chǎn)品的時(shí)候,后面在啟動(dòng)APP時(shí)候,是否能感覺到更多給你推送相關(guān)的產(chǎn)品信息;
當(dāng)你更換手機(jī)的時(shí)候,在登錄同一個(gè)APP的時(shí)候,是否會(huì)有提示你是新環(huán)境登錄需要特別驗(yàn)證才能登錄;
當(dāng)你手機(jī)上安裝一些作弊軟件,在進(jìn)行支付的時(shí)候,是否會(huì)有提示你當(dāng)前環(huán)境不安全不允許支付或支付不成功;
這些的背后都是依靠哪些技術(shù)進(jìn)行支撐實(shí)現(xiàn)呢?這些場(chǎng)景下都離不開一個(gè)重要的設(shè)備指紋技術(shù),下面就梳理設(shè)備指紋技術(shù)的細(xì)節(jié)。
理論基礎(chǔ)
設(shè)備指紋是指可以用于唯一標(biāo)識(shí)出該設(shè)備的設(shè)備特征或者獨(dú)特的設(shè)備標(biāo)識(shí)。
設(shè)備指紋圍繞著設(shè)備的唯一ID、設(shè)備環(huán)境風(fēng)險(xiǎn)特征、設(shè)備歷史風(fēng)險(xiǎn)標(biāo)簽等維度對(duì)設(shè)備進(jìn)行全方位刻畫,識(shí)別設(shè)備風(fēng)險(xiǎn)、并且透?jìng)髟O(shè)備風(fēng)險(xiǎn)特征。
設(shè)備指紋在同一設(shè)備中的不同應(yīng)用,必須具備設(shè)備ID不變,同一設(shè)備卸載重裝APP應(yīng)用,設(shè)備ID同樣要保持不變,在IOS設(shè)備中重置IDFA后,設(shè)備ID不變改機(jī)軟件修改屬性后,設(shè)備保持ID不變。
設(shè)備指紋需要考慮設(shè)備指紋唯一標(biāo)識(shí)的穩(wěn)定性、唯一標(biāo)識(shí)的唯一性、設(shè)備風(fēng)險(xiǎn)標(biāo)簽的精準(zhǔn)度、設(shè)備風(fēng)險(xiǎn)標(biāo)簽的準(zhǔn)召率、設(shè)備指紋所需的隱私權(quán)限、微行為無感識(shí)別能力、設(shè)備終端覆蓋識(shí)別。
設(shè)備指紋的關(guān)鍵用途:設(shè)備信息唯一性、渠道流量檢測(cè)、風(fēng)險(xiǎn)設(shè)備識(shí)別、通用風(fēng)控策略。
(上圖來源網(wǎng)絡(luò))
技術(shù)分析
采集設(shè)備信息需要關(guān)注的問題:用戶設(shè)備是真實(shí)設(shè)備?哪個(gè)設(shè)備信息是穩(wěn)定?Android系統(tǒng)大版本升級(jí)是否導(dǎo)致權(quán)限變動(dòng)?采集的數(shù)據(jù)是否符合隱私合規(guī)政策?采用什么算法來計(jì)算出唯一ID?新APP上線所有設(shè)備ID是全新?
技術(shù)實(shí)現(xiàn)流程:通過采集客戶端的特征屬性信息并將其加密上傳到云端,然后通過特定的算法分析并為每臺(tái)設(shè)備生成唯一的ID來標(biāo)識(shí)這臺(tái)設(shè)備。
設(shè)備指紋必須具備:穩(wěn)定性、唯一性、安全性、易用性、高性能。
設(shè)備環(huán)境風(fēng)險(xiǎn)特征:識(shí)別模擬器環(huán)境、多開、ROOT、篡改設(shè)備參數(shù)、腳本,等異常環(huán)境特征。具有穩(wěn)定性高,性能高。
通常情況下,設(shè)備指紋采集到用戶的設(shè)備數(shù)據(jù)后,數(shù)據(jù)會(huì)通過異步方式先上傳到業(yè)務(wù)的服務(wù)器上,然后再通過代理服務(wù)端進(jìn)行轉(zhuǎn)發(fā)到對(duì)應(yīng)設(shè)備指紋的服務(wù)端。這樣也是為了保證數(shù)據(jù)的安全性,客戶端采集數(shù)據(jù)功能防止被剝離,從而采集不到設(shè)備數(shù)據(jù)。采集的數(shù)據(jù)一般通過json格式加密數(shù)據(jù)進(jìn)行上傳。
設(shè)備指紋上傳一般采用URL的POST請(qǐng)求,并集成json格式,并且所采集的字段信息中會(huì)有一些字段是無用的,有一些字段適用于對(duì)json信息采用強(qiáng)校驗(yàn)的混淆信息。
設(shè)備指紋中設(shè)備風(fēng)險(xiǎn)識(shí)別的微行為常用的屬性:電池狀態(tài)、重力傳感器、加速度傳感器狀態(tài)、聯(lián)網(wǎng)狀態(tài)、USB狀態(tài)、觸摸軌跡、壓感、按壓時(shí)長(zhǎng)、剪切板。
設(shè)備指紋的SDK主要以java代碼和C、C++代碼為主,java代碼部分是以aar包或jar包方式存在,C\C++代碼主要以SO方式存儲(chǔ)的。例如某易的設(shè)備指紋就是以aar包(NEDevice-SdkRelease_v1.7.0_2022xxxxxx.aar)單獨(dú)方式存在,某盾的設(shè)備指紋以aar文件(fraudmetrix-xxx.aar)和so文件(libtongdun.so)兩者相結(jié)合存在,某美的設(shè)備指紋以aar包(smsdk-x.x.x-release.aar)和so文件(libsmsdk.so)相結(jié)合存在。
設(shè)備指紋主要是通過集成到APP中的SDK,還有小程序的SDK,通常情況下是采用aar包方式進(jìn)行提供的SDK,還有就是強(qiáng)度較高的是通過aar包和SO文件進(jìn)行結(jié)合集成的設(shè)備指紋SDK。將關(guān)鍵的采集信息集成到SO中代碼中實(shí)現(xiàn),并且SO文件采用虛擬機(jī)保護(hù)。
下面是某設(shè)備指紋以aar形式的,它關(guān)鍵代碼都是java實(shí)現(xiàn)的。并且java代碼利用proguard 混淆規(guī)則進(jìn)行對(duì)aar的class類進(jìn)行混淆類名而已,并沒有混淆到函數(shù)名稱和變量名稱,字符串信息。
下面是某設(shè)備指紋的java代碼和C++代碼部分,java代碼和C++代碼都采用了虛擬化保護(hù)技術(shù)進(jìn)行保護(hù)。
設(shè)備指紋讀取用戶信息,通常需要涉及到向用戶申請(qǐng)權(quán)限的情況,所以在android的AndroidManifest.xml配置文件中通常有一系列的權(quán)限申請(qǐng)。
(上圖只是申請(qǐng)權(quán)限的一小部分)
設(shè)備指紋合規(guī)
設(shè)備指紋應(yīng)用中,在采集用戶設(shè)備指紋信息的過程,首先必須確保用戶APP中有《用戶隱私政策》,并且在首次啟動(dòng)APP時(shí)就彈出《用戶隱私政策》獲得用戶的同意,不得默認(rèn)用戶已勾選。并且確保只有用戶同意的時(shí)候才可以進(jìn)行對(duì)用戶信息的采集。
根據(jù)《網(wǎng)絡(luò)安全法》等相關(guān)法律法規(guī)要求,APP應(yīng)當(dāng)在隱私政策中向最終用戶告知收集、使用、于第三方共享最終用戶個(gè)人信息的目的、方式和范圍,并征得最終用戶明示同意才可以采集用戶信息。
設(shè)備信息采集需要遵循必要最小化低頻采集非敏感信息原則,在采集用戶屬性時(shí)候,不應(yīng)采集用戶行為和應(yīng)用列表、傳感器狀態(tài)、通訊錄、相冊(cè)等敏感信息,采集這些屬性容易出現(xiàn)不符合隱私合規(guī)政策。支持按需采集和合規(guī)上架指導(dǎo),采集信息 合規(guī)和安全加固,不觸碰用戶隱私,不會(huì)被黑產(chǎn)破解,兼容性好。
設(shè)備指紋SDK的初始化時(shí)機(jī),在安裝后首次啟動(dòng)時(shí),并且只有在用戶同意隱私協(xié)議后,才進(jìn)行設(shè)備指紋SDK初始化。如果用戶沒有同意隱私協(xié)議不可進(jìn)行采集數(shù)據(jù)。
風(fēng)控場(chǎng)景分析
設(shè)備指紋的在游戲應(yīng)用場(chǎng)景中主要風(fēng)控維度:手機(jī)設(shè)備、游戲賬號(hào)、賬號(hào)行為、賬號(hào)動(dòng)機(jī)。
設(shè)備指紋識(shí)別設(shè)備的風(fēng)控特征:模擬器、協(xié)議刷數(shù)據(jù)、腳本外掛、設(shè)備改機(jī)、多開工具、云手機(jī)等。
設(shè)備指紋識(shí)別游戲賬號(hào)的風(fēng)控特征:批量注冊(cè)游戲賬號(hào)、貓池、接碼手機(jī)、通訊小號(hào)等等。
設(shè)備指紋識(shí)別游戲行為的風(fēng)控特征:批量養(yǎng)號(hào)、黃牛養(yǎng)號(hào)、魚塘賬號(hào)。
設(shè)備指紋識(shí)別賬號(hào)動(dòng)機(jī)的風(fēng)控特征:賬號(hào)的買賣、游戲的代練等
設(shè)備指紋識(shí)別風(fēng)險(xiǎn)識(shí)別重點(diǎn)在于:注冊(cè)、登錄、營(yíng)銷、交易、充值、渠道推廣等業(yè)務(wù)場(chǎng)景中,識(shí)別出虛假注冊(cè)、盜號(hào)、養(yǎng)號(hào)、薅羊毛、虛假推廣、作弊行為,然后對(duì)應(yīng)采取一定的對(duì)抗策略方案。
游戲中黑灰產(chǎn)破解移動(dòng)端的技術(shù)及工具不斷在更新變化發(fā)展,設(shè)備指紋中核心的技術(shù)攻防點(diǎn)主要圍繞,root(非法讀取文件,反安全檢測(cè))、自動(dòng)化工具(批量注冊(cè)、活動(dòng)作弊)、模擬器(自動(dòng)注冊(cè)小號(hào)、秒殺)、多開(虛假作弊、養(yǎng)號(hào)、)、改機(jī)、群控(薅羊毛、虛假流量),app重打包(植入廣告、破解功能限制)等問題。
通過基于設(shè)備指紋技術(shù),可以實(shí)現(xiàn)IP風(fēng)險(xiǎn)畫像、風(fēng)險(xiǎn)情報(bào)、郵箱風(fēng)險(xiǎn)畫像去識(shí)別游戲的黑灰產(chǎn)行為,然后對(duì)游戲黑灰產(chǎn)進(jìn)行重點(diǎn)打擊。
(上圖來源網(wǎng)絡(luò))
設(shè)備指紋思考
一個(gè)人常用設(shè)備的總是有限,一般正常情況下一段時(shí)間內(nèi)不會(huì)超過5個(gè),因此可以通過這些信息進(jìn)行作為風(fēng)控的策略,而設(shè)備指紋中關(guān)鍵的一個(gè)采集點(diǎn)是網(wǎng)絡(luò)相關(guān)信息的采集,通過采集網(wǎng)絡(luò)相關(guān)信息,可以判斷出同一網(wǎng)絡(luò)下的用戶的設(shè)備數(shù)量。
一個(gè)好的設(shè)備指紋必須具備:1.可以靈活定制化,可以根據(jù)不同的業(yè)務(wù)需求提供靈活的接口;2.高準(zhǔn)確性,對(duì)設(shè)備唯一碼必須準(zhǔn)確率足夠高;3.性能卓越,設(shè)備指紋的sdk不能影響到APP的性能;4.系統(tǒng)兼容性好,需要兼容到android4.0到android 13的所有系統(tǒng)。
如果作為開發(fā)者,開發(fā)一個(gè)設(shè)備指紋sdk中需要綜合考慮的:LaunchTime、閃退率、體積大小、網(wǎng)絡(luò)消耗情況。
設(shè)備指紋技術(shù)存在一定的被動(dòng)性。黑灰產(chǎn)研發(fā)者處在暗處,公司的業(yè)務(wù)在明處,在什么時(shí)間段,采用什么方式的攻擊方式,都是黑灰產(chǎn)攻擊者決定的,這一點(diǎn)業(yè)務(wù)安全人員也是非常頭疼。更進(jìn)一步,黑灰產(chǎn)可以不斷試錯(cuò)通過分析設(shè)備指紋技術(shù)采用的算法,嘗試采用新的攻擊方式繞過已有加解密算法,就可以達(dá)到新的攻擊目的。設(shè)備指紋技術(shù)對(duì)抗過程中是存在一定的滯后性。
作者: 小道安全
歡迎關(guān)注微信公眾號(hào) :小道安全