淺談設備指紋技術和應用
當你手機APP上刷著某些視頻并多停留幾秒,后續再刷視頻的時候,是否有感覺到更多是推送同類型的視頻;
當你在某APP搜索某產品的時候,后面在啟動APP時候,是否能感覺到更多給你推送相關的產品信息;
當你更換手機的時候,在登錄同一個APP的時候,是否會有提示你是新環境登錄需要特別驗證才能登錄;
當你手機上安裝一些作弊軟件,在進行支付的時候,是否會有提示你當前環境不安全不允許支付或支付不成功;
這些的背后都是依靠哪些技術進行支撐實現呢?這些場景下都離不開一個重要的設備指紋技術,下面就梳理設備指紋技術的細節。
理論基礎
設備指紋是指可以用于唯一標識出該設備的設備特征或者獨特的設備標識。
設備指紋圍繞著設備的唯一ID、設備環境風險特征、設備歷史風險標簽等維度對設備進行全方位刻畫,識別設備風險、并且透傳設備風險特征。
設備指紋在同一設備中的不同應用,必須具備設備ID不變,同一設備卸載重裝APP應用,設備ID同樣要保持不變,在IOS設備中重置IDFA后,設備ID不變改機軟件修改屬性后,設備保持ID不變。
設備指紋需要考慮設備指紋唯一標識的穩定性、唯一標識的唯一性、設備風險標簽的精準度、設備風險標簽的準召率、設備指紋所需的隱私權限、微行為無感識別能力、設備終端覆蓋識別。
設備指紋的關鍵用途:設備信息唯一性、渠道流量檢測、風險設備識別、通用風控策略。

(上圖來源網絡)
技術分析
采集設備信息需要關注的問題:用戶設備是真實設備?哪個設備信息是穩定?Android系統大版本升級是否導致權限變動?采集的數據是否符合隱私合規政策?采用什么算法來計算出唯一ID?新APP上線所有設備ID是全新?
技術實現流程:通過采集客戶端的特征屬性信息并將其加密上傳到云端,然后通過特定的算法分析并為每臺設備生成唯一的ID來標識這臺設備。
設備指紋必須具備:穩定性、唯一性、安全性、易用性、高性能。
設備環境風險特征:識別模擬器環境、多開、ROOT、篡改設備參數、腳本,等異常環境特征。具有穩定性高,性能高。

通常情況下,設備指紋采集到用戶的設備數據后,數據會通過異步方式先上傳到業務的服務器上,然后再通過代理服務端進行轉發到對應設備指紋的服務端。這樣也是為了保證數據的安全性,客戶端采集數據功能防止被剝離,從而采集不到設備數據。采集的數據一般通過json格式加密數據進行上傳。

設備指紋上傳一般采用URL的POST請求,并集成json格式,并且所采集的字段信息中會有一些字段是無用的,有一些字段適用于對json信息采用強校驗的混淆信息。
設備指紋中設備風險識別的微行為常用的屬性:電池狀態、重力傳感器、加速度傳感器狀態、聯網狀態、USB狀態、觸摸軌跡、壓感、按壓時長、剪切板。
設備指紋的SDK主要以java代碼和C、C++代碼為主,java代碼部分是以aar包或jar包方式存在,C\C++代碼主要以SO方式存儲的。例如某易的設備指紋就是以aar包(NEDevice-SdkRelease_v1.7.0_2022xxxxxx.aar)單獨方式存在,某盾的設備指紋以aar文件(fraudmetrix-xxx.aar)和so文件(libtongdun.so)兩者相結合存在,某美的設備指紋以aar包(smsdk-x.x.x-release.aar)和so文件(libsmsdk.so)相結合存在。
設備指紋主要是通過集成到APP中的SDK,還有小程序的SDK,通常情況下是采用aar包方式進行提供的SDK,還有就是強度較高的是通過aar包和SO文件進行結合集成的設備指紋SDK。將關鍵的采集信息集成到SO中代碼中實現,并且SO文件采用虛擬機保護。
下面是某設備指紋以aar形式的,它關鍵代碼都是java實現的。并且java代碼利用proguard 混淆規則進行對aar的class類進行混淆類名而已,并沒有混淆到函數名稱和變量名稱,字符串信息。

下面是某設備指紋的java代碼和C++代碼部分,java代碼和C++代碼都采用了虛擬化保護技術進行保護。



設備指紋讀取用戶信息,通常需要涉及到向用戶申請權限的情況,所以在android的AndroidManifest.xml配置文件中通常有一系列的權限申請。

(上圖只是申請權限的一小部分)

設備指紋合規
設備指紋應用中,在采集用戶設備指紋信息的過程,首先必須確保用戶APP中有《用戶隱私政策》,并且在首次啟動APP時就彈出《用戶隱私政策》獲得用戶的同意,不得默認用戶已勾選。并且確保只有用戶同意的時候才可以進行對用戶信息的采集。
根據《網絡安全法》等相關法律法規要求,APP應當在隱私政策中向最終用戶告知收集、使用、于第三方共享最終用戶個人信息的目的、方式和范圍,并征得最終用戶明示同意才可以采集用戶信息。
設備信息采集需要遵循必要最小化低頻采集非敏感信息原則,在采集用戶屬性時候,不應采集用戶行為和應用列表、傳感器狀態、通訊錄、相冊等敏感信息,采集這些屬性容易出現不符合隱私合規政策。支持按需采集和合規上架指導,采集信息 合規和安全加固,不觸碰用戶隱私,不會被黑產破解,兼容性好。
設備指紋SDK的初始化時機,在安裝后首次啟動時,并且只有在用戶同意隱私協議后,才進行設備指紋SDK初始化。如果用戶沒有同意隱私協議不可進行采集數據。
風控場景分析
設備指紋的在游戲應用場景中主要風控維度:手機設備、游戲賬號、賬號行為、賬號動機。
設備指紋識別設備的風控特征:模擬器、協議刷數據、腳本外掛、設備改機、多開工具、云手機等。
設備指紋識別游戲賬號的風控特征:批量注冊游戲賬號、貓池、接碼手機、通訊小號等等。
設備指紋識別游戲行為的風控特征:批量養號、黃牛養號、魚塘賬號。
設備指紋識別賬號動機的風控特征:賬號的買賣、游戲的代練等
設備指紋識別風險識別重點在于:注冊、登錄、營銷、交易、充值、渠道推廣等業務場景中,識別出虛假注冊、盜號、養號、薅羊毛、虛假推廣、作弊行為,然后對應采取一定的對抗策略方案。
游戲中黑灰產破解移動端的技術及工具不斷在更新變化發展,設備指紋中核心的技術攻防點主要圍繞,root(非法讀取文件,反安全檢測)、自動化工具(批量注冊、活動作弊)、模擬器(自動注冊小號、秒殺)、多開(虛假作弊、養號、)、改機、群控(薅羊毛、虛假流量),app重打包(植入廣告、破解功能限制)等問題。
通過基于設備指紋技術,可以實現IP風險畫像、風險情報、郵箱風險畫像去識別游戲的黑灰產行為,然后對游戲黑灰產進行重點打擊。

(上圖來源網絡)
設備指紋思考
一個人常用設備的總是有限,一般正常情況下一段時間內不會超過5個,因此可以通過這些信息進行作為風控的策略,而設備指紋中關鍵的一個采集點是網絡相關信息的采集,通過采集網絡相關信息,可以判斷出同一網絡下的用戶的設備數量。
一個好的設備指紋必須具備:1.可以靈活定制化,可以根據不同的業務需求提供靈活的接口;2.高準確性,對設備唯一碼必須準確率足夠高;3.性能卓越,設備指紋的sdk不能影響到APP的性能;4.系統兼容性好,需要兼容到android4.0到android 13的所有系統。
如果作為開發者,開發一個設備指紋sdk中需要綜合考慮的:LaunchTime、閃退率、體積大小、網絡消耗情況。
設備指紋技術存在一定的被動性。黑灰產研發者處在暗處,公司的業務在明處,在什么時間段,采用什么方式的攻擊方式,都是黑灰產攻擊者決定的,這一點業務安全人員也是非常頭疼。更進一步,黑灰產可以不斷試錯通過分析設備指紋技術采用的算法,嘗試采用新的攻擊方式繞過已有加解密算法,就可以達到新的攻擊目的。設備指紋技術對抗過程中是存在一定的滯后性。
版權申明:內容來源網絡,版權歸原創者所有。除非無法確認,都會標明作者及出處,如有侵權,煩請告知,我們會立即刪除并致歉!
本公號發布、轉載的文章中所涉及的技術、思路和工具僅供以安全為目的的學習交流使用,任何人不得將其用于非法用途及盈利等目的,否則后果自行承擔!