前言
近期,由通付盾提供安全技術(shù)保障服務(wù)的最新版“通信大數(shù)據(jù)行程卡App”已登錄各大應(yīng)用商店,用戶搜索"通信行程卡"即可下載使用。
“通信大數(shù)據(jù)行程卡App”(簡稱“行程卡”)是在工信部指導(dǎo)下,由中國信息通信研究院與中國電信、中國移動、中國聯(lián)通三大電信運(yùn)營商共同推出的行程查詢服務(wù),該服務(wù)于2020年2月13日面向公眾推出,用戶可免費(fèi)查詢本人14天內(nèi)的到訪地。上線僅一個多月累計(jì)查詢量已經(jīng)超過8.5億次。
2020年2月13日起,三大運(yùn)營商提供的短信查詢行程服務(wù)已覆蓋2億多用戶。
2020年2月29日,短信查詢升級為掃碼查詢,并提供了統(tǒng)一的網(wǎng)頁查詢?nèi)肟凇?/p>
2020年3月6日始,在“通信大數(shù)據(jù)行程卡”上上線了境外到訪地的查詢功能,可以對手機(jī)用戶前14天到訪的境外國家或者地區(qū)的信息進(jìn)行查驗(yàn),可及時發(fā)現(xiàn)瞞報、漏報、不實(shí)申報行程信息的問題。
圖 1-1 行程卡App
通付盾憑借自身在移動安全領(lǐng)域與隱私保護(hù)領(lǐng)域研發(fā)服務(wù)實(shí)力,成為此次技術(shù)保障服務(wù)支撐方,為“行程卡”提高安全防護(hù)等級,防止代碼注入、動態(tài)調(diào)試、內(nèi)存注入攻擊,讓應(yīng)用免遭破解、二次打包、API攻擊、數(shù)據(jù)竊取等威脅,保護(hù)App及其資源的完整性及安全性。
下文將分別從Android,iOS兩個平臺的App出發(fā),從代碼安全、攻防安全、API接口安全三個方面詳細(xì)描述此次保護(hù)方案的具體實(shí)施辦法及最終的保護(hù)效果。
Android保護(hù)方案的具體辦法
針對程序開發(fā)過程中可能產(chǎn)生的安全漏洞風(fēng)險以及Android系統(tǒng)自身的安全缺陷,為行程卡安卓端設(shè)計(jì)了一套集合代碼安全、攻防安全、完整性安全、數(shù)據(jù)安全于一體的完整解決方案,使程序反逆向能力更強(qiáng),安全性更高。
圖2-1 Android解決方案功能示意圖
1、代碼安全
市場上針對Android反編譯工具很多,如IDA,dex2Jar,jd-gui等。通過反編譯后的程序代碼接近源代碼,具有極高易讀性,極易暴露程序的業(yè)務(wù)邏輯和處理方式,如服務(wù)器數(shù)據(jù)請求方式、行程結(jié)果顯示邏輯等。因此,對Android程序代碼進(jìn)行加密保護(hù)至關(guān)重要。
代碼保護(hù)采用了DEX加殼與VMP虛擬機(jī)技術(shù)混合的解決方案。可以有效的防止反編譯工具,內(nèi)存dump等技術(shù)對代碼造成泄漏或篡改。
1)技術(shù)原理
Android主要使用Java進(jìn)行代碼編寫,開發(fā)完成后,編譯器將Java代碼打包進(jìn)安裝包中classes.dex文件中,有些程序業(yè)務(wù)較復(fù)雜,編譯時會生成多個dex文件。因此,代碼保護(hù)的首要目標(biāo)就是Android安裝包中的dex文件。
DEX加殼技術(shù):基本原理是對原始的dex文件進(jìn)行整體加密,隱藏dex文件源碼,修改程序入口。運(yùn)行時通過Dalvik虛擬機(jī)動態(tài)加載執(zhí)行解密后的dex文件。具體流程如下:
圖2-2 DEX加殼技術(shù)流程示意圖
VMP保護(hù)技術(shù):與傳統(tǒng)的加殼工具不同,不是簡單地對目標(biāo)進(jìn)行加密、壓縮。而是修改目標(biāo)源碼,讓目標(biāo)的部分指令在VMP創(chuàng)建的虛擬環(huán)境下運(yùn)行。首先對原始字節(jié)碼進(jìn)行加密處理,然后將函數(shù)(方法)替換為native屬性,轉(zhuǎn)到JNI層去執(zhí)行,最后在JNI層將字節(jié)碼解密,并解釋執(zhí)行。具體流程如下:
圖2-3 VMP 虛擬機(jī)保護(hù)技術(shù)流程示意圖
2)實(shí)現(xiàn)效果
通過逆向工具查看經(jīng)過保護(hù)后的DEX文件反編譯效果,可見保護(hù)后的核心代碼得到了保護(hù),無法查看具體函數(shù)方法,不易被逆向分析,重要的數(shù)據(jù)和業(yè)務(wù)邏輯不易被泄漏,達(dá)到了代碼保護(hù)的目的。
圖2-4 代碼保護(hù)后效果演示圖
2、攻防安全
動態(tài)攻擊指攻擊者利用攻擊工具如調(diào)試工具、攔截器、注入工具等跟蹤攔截目標(biāo)程序,進(jìn)行代碼查看,業(yè)務(wù)邏輯分析,并對其操作數(shù)據(jù)進(jìn)行竊取或篡改。比如:修改行程結(jié)果處理邏輯為永遠(yuǎn)顯示綠色碼等。
動態(tài)攻擊防護(hù)采用了反調(diào)試、防注入、防模擬器以及防界面劫持等多重交叉混合的解決方案。通過添加防護(hù)處理,可以有效保護(hù)用戶的敏感信息安全,防止攻擊者通過內(nèi)存注入等方式竊取。
1)技術(shù)原理
反調(diào)試 :通過雙向ptrace保護(hù),阻止其他進(jìn)程進(jìn)行ptrace調(diào)試操作,同時采用輪詢的方式監(jiān)控重點(diǎn)函數(shù)方法,檢查其是否處于調(diào)試狀態(tài),最后監(jiān)聽進(jìn)程狀態(tài)。
防注入 :動態(tài)注入一般使用如hijack工具,向指定進(jìn)程中注入SO文件。防注入的保護(hù)方案通過對市場主流注入工具進(jìn)行監(jiān)測,保護(hù)整個程序生命周期的進(jìn)程安全,阻止動態(tài)注入攻擊。
動態(tài)劫持 :對相關(guān)檢測函數(shù)添加__attribute__(constructor)屬性,保證其在SO加載時優(yōu)先進(jìn)行系統(tǒng)運(yùn)行環(huán)境檢測,查看是否存在zjdroid、xposed、substrate等劫持工具。
2)實(shí)現(xiàn)效果
反調(diào)試:采用調(diào)試防護(hù)策略后的程序在檢測到處于調(diào)試狀態(tài)時會強(qiáng)制退出,阻止動態(tài)調(diào)試操作。
防注入:采用注入防護(hù)策略后的程序在監(jiān)測到發(fā)生注入時,會進(jìn)行加載攔截,讓注入無法掛載。
圖2-5 保護(hù)后的注入效果演示圖
防劫持:采用劫持防護(hù)策略后的程序在監(jiān)測到環(huán)境中存在劫持工具時,終止程序繼續(xù)運(yùn)行或者彈窗提示運(yùn)行風(fēng)險。
3、完整性驗(yàn)證
攻擊者通過逆向分析,對程序代碼、資源文件等進(jìn)行添加或修改,再打包生成新的程序安裝包發(fā)布到市場中,即可實(shí)現(xiàn)應(yīng)用釣魚。在應(yīng)用中廣告SDK,或者通過插入惡意代碼竊取用戶的登錄賬號密碼、攔截短信驗(yàn)證碼,甚至修改行程碼的顯示結(jié)果等。這些被二次打包發(fā)布的安裝包,對疫情防空會產(chǎn)生嚴(yán)重威脅。因此,需要對程序的完整性進(jìn)行有效保護(hù)。
應(yīng)用完整性驗(yàn)證保護(hù)方案主要從文件校驗(yàn)、簽名證書校驗(yàn)、配置文件加密入手。
1)技術(shù)原理
文件校驗(yàn) :通過對程序安裝包中所有的文件做加密提取處理,再對提取的校驗(yàn)數(shù)據(jù)及校驗(yàn)代碼進(jìn)行存儲保護(hù),程序啟動時立即校驗(yàn)所有文件,檢測是否發(fā)生篡改。
簽名證書校驗(yàn) :通過對程序安裝包中的證書信息進(jìn)行加密處理,提取加密后的數(shù)據(jù)作為校驗(yàn)標(biāo)準(zhǔn),將校驗(yàn)數(shù)據(jù)進(jìn)行存儲保護(hù),程序啟動時校驗(yàn)當(dāng)前簽名信息是否與校驗(yàn)數(shù)據(jù)一致。
配置文件加密 :遍歷提取程序包中的XML配置文件,對文件做加密處理,并提取加密后的數(shù)據(jù)作為校驗(yàn)標(biāo)準(zhǔn)。程序啟動后校驗(yàn)當(dāng)前的配置文件是否與校驗(yàn)數(shù)據(jù)一致。
2)實(shí)現(xiàn)效果
APK具有完整性校驗(yàn),只要修改了其中的程序代碼、資源文件、配置文件,程序立即終止運(yùn)行。
4、小結(jié)
通付盾的Android保護(hù)方案對程序的代碼安全,動態(tài)攻擊防護(hù)、程序完整性都起到了很好保護(hù)作用,大大增加程序逆向閱讀難度,有效阻止動態(tài)攻擊,保護(hù)App及其資源的完整性及安全性。
iOS保護(hù)方案的具體辦法
相對安卓系統(tǒng)而言,iOS系統(tǒng)的封閉性為其終端上的APP起到了很好的保護(hù)作用。但近年來iOS系統(tǒng)漏洞頻發(fā),iOS設(shè)備上的應(yīng)用屢遭惡意攻擊;此外,安全開發(fā)管制缺失,安全編碼不規(guī)范,缺乏對應(yīng)用運(yùn)行環(huán)境、傳輸協(xié)議、加密機(jī)制等的安全防護(hù),導(dǎo)致應(yīng)用防護(hù)能力極弱。
其次,iOS設(shè)備一旦被越獄后系統(tǒng)便失去了安全防護(hù),設(shè)備安全性降低。運(yùn)行在越獄設(shè)備上的iOS應(yīng)用,非常容易遭受破解分析,同時,iOS越獄的漏洞很容易被惡意軟件利用,造成用戶信息泄露、惡意扣費(fèi)、設(shè)備中毒等安全問題。
為此,針對行程卡App iOS端的程序安全采用了集合代碼安全、動態(tài)防護(hù)以及完整性校驗(yàn)于一體的App保護(hù)解決方案。
1.代碼安全
iOS端行程卡的代碼保護(hù)方案采用的是iPA動態(tài)殼保護(hù)的模式。整體采用 iPA加固技術(shù),對安裝包中的可執(zhí)行文件進(jìn)行加殼保護(hù)。
1)技術(shù)原理
iPA動態(tài)殼保護(hù):提取iPA文件中的可執(zhí)行文件、info.plist等資源文件,通過加密程序?qū)蓤?zhí)行文件鏈接殼代碼、Mach-O文件加密,對保護(hù)后的二進(jìn)制文件進(jìn)行重打包、重簽名后生成受保護(hù)IPA,受保護(hù)的IPA功能、性能等均不受影響。
圖3-1 iPA動態(tài)殼保護(hù)技術(shù)流程示意圖
代碼混淆 :通過在程序代碼編譯階段通過進(jìn)行指令替換、字符串加密等技術(shù)手段,增加代碼閱讀難度,極大提高程序執(zhí)行邏輯被逆向分析的難度,降低被破解的風(fēng)險。除此以外,通過將程序代碼中的類名、方法名、屬性名、變量名等符號進(jìn)行隱藏或混淆保護(hù)。從而使代碼安全性更高,能夠更好地對抗逆向分析。
2)實(shí)現(xiàn)效果
通過Hopper查看經(jīng)過代碼保護(hù)后的可執(zhí)行文件反編譯效果,可見反編譯后代碼段起到了混淆和加密,代碼可讀性差,達(dá)到了代碼保護(hù)的效果。
圖3-2 保護(hù)后代碼反編譯效果圖
2. 動態(tài)防護(hù)
對于 iOS 應(yīng)用而言,越獄環(huán)境的安全性相對較低,應(yīng)用存在較大的被調(diào)試、篡改的風(fēng)險。因此針對iOS的動態(tài)防護(hù)實(shí)現(xiàn)體現(xiàn)在程序安裝運(yùn)行時,可對運(yùn)行環(huán)境進(jìn)行安全檢測查看是否處于越獄環(huán)境,在程序運(yùn)行時實(shí)時監(jiān)測運(yùn)行環(huán)境是否遭受逆向攻擊,全周期保證應(yīng)用安全。
1)技術(shù)原理
截屏/ 錄屏檢測 (anti- Screen capture):程序運(yùn)行時,動態(tài)監(jiān)測應(yīng)用是否正在執(zhí)行截屏操作,檢測到程序正在截屏/錄屏操作,啟動防護(hù)機(jī)制,程序告警。
反調(diào)試 (anti-Debug): 程序運(yùn)行時,實(shí)時檢測ptrace狀態(tài)防止被調(diào)試工具如debugserver、lldb等掛載,當(dāng)檢測到程序被調(diào)試時,啟動防護(hù)機(jī)制,防止調(diào)試工具掛載,處于調(diào)試狀態(tài)時程序退出運(yùn)行。
反鉤子 (anti-Hook): 程序運(yùn)行時,動態(tài)監(jiān)測應(yīng)用是否正在被 Hook,檢測到程序被 Hook,啟動防護(hù)機(jī)制,程序退出運(yùn)行。
反注入 (anti-Inject): 程序運(yùn)行時,實(shí)時動態(tài)檢測應(yīng)用的動態(tài)庫加載情況,一旦發(fā)現(xiàn)有新的動態(tài)庫注入程序退出運(yùn)行。其次,動態(tài)監(jiān)測應(yīng)用是否正在被第三方工具進(jìn)行注入操作,檢測到程序被注入,啟動防護(hù)機(jī)制,程序退出運(yùn)行。反篡改 (anti-Tamper): 程序運(yùn)行時,動態(tài)監(jiān)測應(yīng)用進(jìn)程,防止被篡改工具掛載調(diào)試篡改。
2)實(shí)現(xiàn)效果
當(dāng)檢測到程序處于動態(tài)攻擊狀態(tài)時,啟動防護(hù)機(jī)制,終止程序運(yùn)行。
圖3-3 保護(hù)后調(diào)試效果圖(掛載攔截)
3 . 完整性校驗(yàn)
iOS端的應(yīng)用完整性驗(yàn)證保護(hù)方案主要從資源文件校驗(yàn)、簽名證書校驗(yàn)、可執(zhí)行文件完整性著手。
1)技術(shù)原理
資源文件校驗(yàn) :通過對程序安裝包中所有的資源文件做加密提取處理,再對提取的校驗(yàn)數(shù)據(jù)進(jìn)行安全存儲保護(hù),程序啟動時立即校驗(yàn)所有資源文件,檢測是否發(fā)生篡改。
簽名證書校驗(yàn) :通過對程序安裝包中的證書信息作為校驗(yàn)數(shù)據(jù)進(jìn)行提取并安全存儲,程序啟動時校驗(yàn)當(dāng)前簽名信息是否與校驗(yàn)數(shù)據(jù)一致。
可執(zhí)行文件完整性校驗(yàn) :通過對程序安裝包中的可執(zhí)行文件的數(shù)據(jù)段做加密處理,程序啟動時立即校驗(yàn)程序的數(shù)據(jù)段是否發(fā)生篡改。
2)實(shí)現(xiàn)效果
當(dāng)檢測到程序處于動態(tài)攻擊狀態(tài)時,啟動防護(hù)機(jī)制,終止程序運(yùn)行。
4 . 小結(jié)
通付盾的iOS保護(hù)方案對程序的代碼安全,動態(tài)攻擊防護(hù)、程序完整性都達(dá)到了很好保護(hù)作用,對常用的逆向工具、動態(tài)攻擊工具都起到了很好的攔截阻斷作用,應(yīng)用安全性得到很大提高。同時采用iPA加固技術(shù)使整個保護(hù)過程更靈活、兼容性更強(qiáng)、具有更高的代碼安全性。
0x04 API接口安全保護(hù)方案的具體辦法
移動App的背后是支撐其運(yùn)行的后臺服務(wù),App與后臺服務(wù)通過API接口進(jìn)行數(shù)據(jù)交換。在移動App安全設(shè)計(jì)中,API接口安全設(shè)計(jì)是重中之中,API接口安全的好壞,直接關(guān)系整個系統(tǒng)及用戶數(shù)據(jù)的安全。經(jīng)常會看見一些移動App的后臺API接口被非法利用,身份驗(yàn)證信息和敏感數(shù)據(jù)在傳輸過程中被不法分子截獲,對用戶的信息安全造成嚴(yán)重威脅。甚至可以利用API接口漏洞攻擊篡改系統(tǒng)數(shù)據(jù),造成嚴(yán)重?fù)p失。對于API接口安全,我們也向“行程卡”App提供了以下幾種安全設(shè)計(jì)建議,保障了API接口安全。
1)動態(tài)Token授權(quán)認(rèn)證,防止未授權(quán)用戶獲取數(shù)據(jù)及完善身份認(rèn)證;
2)時間戳超時機(jī)制,可有效防止DOS攻擊;
3)數(shù)據(jù)簽名機(jī)制,防止傳輸?shù)臄?shù)據(jù)被篡改及完善身份認(rèn)證;
4)拒絕重復(fù)調(diào)用,防止接口被重放攻擊、防止被惡意采集;
5)采用HTTPS通信協(xié)議及有效證書驗(yàn)證,防止數(shù)據(jù)明文傳輸及中間人攻擊。
結(jié)語
通付盾加固解決方案經(jīng)歷了長期技術(shù)積累和持續(xù)創(chuàng)新過程,采用多種專利技術(shù),并首次將VMP虛擬機(jī)保護(hù)技術(shù)運(yùn)用到App加固領(lǐng)域,DEX加殼與VMP保護(hù)技術(shù)相結(jié)合的混合加固模式,多種技術(shù)交叉融合,縱深防護(hù),達(dá)到合規(guī)性要求,保護(hù)客戶的財產(chǎn)、隱私、業(yè)務(wù)、數(shù)據(jù)、交易等安全;在iOS加固中,通付盾國內(nèi)首創(chuàng)IPA動態(tài)殼加固,無需提供應(yīng)用的源代碼,可以有效避免源碼泄露問題。
此次“行程卡”App的加固技術(shù)方案,同時采用了通付盾安全專家提出的DEX加殼與VMP保護(hù)技術(shù)結(jié)合的混合加固模式,以及國內(nèi)首創(chuàng)的IPA動態(tài)殼加固,確保了Android和iOS兩種生態(tài)運(yùn)行環(huán)境下的數(shù)據(jù)安全。
在API接口安全保護(hù)方面,憑借多年的安全開發(fā)、滲透測試、軟件源代碼審計(jì)經(jīng)驗(yàn),為“行程卡”App提供了有效的API接口保護(hù)設(shè)計(jì)方案。
近日,通付盾安全專家們針對Android加固方案第一時間完成了Android 12 DP2版本兼容性適配,密切關(guān)注著行業(yè)最前沿技術(shù)動態(tài),確保通付盾加固服務(wù)時刻保持完美的兼容效果,初心不改,嚴(yán)格保證客戶服務(wù)質(zhì)量。