移動APP安全合規檢測技術淺析
1、監管機構及政策
想要確保App安全合規,需要先了解相關政策法規。對于企業而言,App合規監管背后,主要涉及哪些監管機構?包括中央網信辦、工業和信息化部、公安部和國家市場監管總局,由四部門在全國范圍組織開展App違法違規收集使用個人信息專項治理活動。日常App開發中,主要是來自工信部的安全整改問題。
常見的法律法規包括《中華人民共和國數據安全法》、《中華人民共和國個人信息保護法》、《信息安全技術個人信息安全規范》、《常見類型移動互聯網應用程序必要個人信息范圍規定》等。
圖1 移動安全相關法律法規
近幾年,工信部不斷開展推進App侵害用戶權益專項整治行動,整治對象包括三大類,即App服務提供者(即應用軟件,包括快應用和小程序等新應用形態)、軟件工具開發包(SDK)提供者、應用分發平臺。
下面是App典型違規問題分類:
- 違規收集用戶個人信息方面,包括“私自收集個人信息”、“超范圍收集個人信息”;
- 違規使用用戶個人信息方面,“私自共享個人信息給第三方”、“強制用戶使用定向推送功能”;
- 不合理索取用戶權限方面,“不給權限不讓用”、“頻繁申請權限”、“過度索取權限”;
- 為用戶賬號注銷設置障礙方面,即“賬號注銷難”。
2、檢測手段
對App的安全合規檢測手段除了工信部的定期抽查,自查手段包括人工檢測、通過采購第三方的App漏洞掃描工具(目前第三方漏洞掃描產品有:愛加密、梆梆、360等),也有一些開源的第三方工具檢測套件輔助使用。從技術形態上可以分為靜態檢測方案與動態檢測方案,以下分別作簡要介紹。
2.1 靜態檢測方案
靜態檢測方案基于反編譯技術通過對移動應用的安裝包反編譯出代碼文件,逐個掃描驗證分析,主要對配置文件、源碼文件、資源文件和so等文件進行靜態掃描,檢測移動應用中敏感權限申請及隱私相關API代碼,生成精準可視化安全報告。
在該領域中,常用到以下工具:
? Apktool : 反編譯安卓Apk,可以反編譯資源,并在進行修改之后重新打包Apk。
? dex2jar : 將Apk反編譯成Java源碼(classes.dex轉化成jar文件)。
? baksmali:dex文件轉化成smali文件。
利用上述工具,開發者可以基于安全隱私規范,制定相應的安全檢測項,利用腳本檢測到存在的安全隱私問題。
下面是Android系統中典型的敏感API:
圖2 Android典型敏感API
優點:檢測速度快、通用性強、技術簡單。
缺點:無法確定是否合規、加固后無法檢測。
2.2 動態檢測方案
通過抓包&Hook沙箱或操作系統沙箱技術,在APP運行的過程中,針對特定API進行埋點(可參考上文敏感函數),查看App是否執行了埋點的API,從而判斷是否合規。
? 應用場景
- 通過抓包的方式,在同意《隱私政策》之前查看流量中是否出現敏感數據。
- 通過Hook技術,對敏感函數進行埋點,在同意《隱私政策》之前查看埋點的函數是否執行。
? 工具推薦
- 抓包工具,burpsuite/charles/fiddler等
- Hook框架,frida/Xposed框架等
優點:檢測確認性高100%能檢測(不會受加固影響)。
缺點:技術復雜、通用性差。
3、常態化&防劣化技術
常規的檢測手段基于安裝包,適用于第三方檢測,在技術手段上受限,不能高效徹底的檢測安全合規問題。人工抓包方式耗時長且覆蓋率低,Hook系統方式往往前提是需要手機root,隨著移動安全的發展,root手機已不再輕松,成本高,都不適用于常態化安全合規自查。
對于大型App而言,業務復雜,接入的第三方SDK眾多,開發過程中難免踩雷。常規檢測手段很難充分全量排查,且無法常態化(工信部、第三方機構檢測次數有限)。相對基于APK的安全自查,開發者具有一個顯著的優點,那就是擁有源碼權限,可以自由在編譯等各階段插入自定義安全檢測邏輯。基于此,App開發可以實現更加深入徹底的安全合規自查,切實保障用戶隱私安全。
下面就在源碼權限基礎上提出了兩種常態化深度安全合規自查方案。從技術形態依然可以分為靜態檢測及動態檢測模式。
方案的靜態檢測能力基于Python腳本,實現App引用三方SDK的全列舉,快速檢測各個三方SDK中隱私權限、網絡請求、隱私API和漏洞API調用情況。可協助工信部安全審查問題快速整改。整體實現思路:
1??基于App依賴樹,采用深度優先遍歷算法,快速查找App引用全部SDK列表,以及各個SDK使用的AndroidManifest.xml、jar和so文件。
2??使用反編譯工具cfr將jar包轉成java文件,同時使用dx工具將jar包轉成dex文件。然后,使用baksmali工具將dex文件轉化成smali文件。
3??讀取相關政策代碼及隱私代碼檢測策略、策略說明建議等json配置 。逐個分析AndroidManifest.xml中聲明的權限及相關包信息。基于java文件及smali文件,完成網絡請求、隱私API和漏洞API調用情況分析。
4??整合分析結果,輸出對應檢測報告,開發人員根據檢測報告自查整改即可。
流程圖及隱私策略配置見圖3、圖4:
圖3 常態化靜態安全檢測流程
圖4 隱私策略配置文件
本方案有兩大優點,第一,可快速檢測完App,輸出安全檢測報告,同時針對安全問題,有詳細的路徑說明,方便后續問題解決。第二,基于可變的隱私策略,支持json自定義隱私api、敏感api等,可擴展性強。
方案的常態化動態檢測能力基于Gradle transform+ASM+Hook+動態代理編譯插樁技術,最終以Gradle插件的形式應用于安全隱私檢測,基于編譯任務針對敏感API、隱私權限申請、網絡請求實現全局插樁檢測,同時輸出調用堆棧,方便問題排查。此方法直接在源碼編譯階段,通過ASM字節碼操作框架對字節碼進行修改,兼容性好,且可以全工程無縫Hook。下面是Hook敏感API “getDeviceId”的一個代碼段示例。關于插樁技術末尾的參考文獻有更詳細的說明,這里不再細談。
圖5 Hook敏感API代碼段
4、結語
大數據時代,每一個人在互聯網中的畫像都是“數據化”的。近年來,App成為個人信息監管的重點,工信部不斷開展App侵害用戶權益專項整治行動,開發者不僅要提高安全合規意識,還要一套完善的合規檢測體系,切實保障用戶信息安全,為App健康發展保駕護航。
參考文獻
[1] https://mp.weixin.qq.com/s/rCfUAB_xqSdZ3P0x5kLNkw
[2] http://www.gov.cn/zhengce/zhengceku/2020-08/02/content_5531975.htm