手機(jī)上怎樣的APP是安全的呢?
點(diǎn)擊上方藍(lán)字關(guān)注我
怎樣的APP是安全的呢?
只要攻擊者所花費(fèi)的時(shí)間成本和精力超過其攻擊逆向破解后獲取到的收益,那么你的APP就相對(duì)安全。
對(duì)于個(gè)人開發(fā)者或者某些小企業(yè)開發(fā)者而言,APP安全的始終是一件讓人非常頭疼的事情。下面我以安全開發(fā)角度出發(fā),進(jìn)行梳理了一個(gè)APP需要關(guān)注的APP安全的問題(沒有絕對(duì)的安全)。
主要分為四個(gè)方向分別為: 應(yīng)用安全、組件安全、運(yùn)行時(shí)安全、通信安全。


應(yīng)用安全



在開發(fā)APP過程中,不安全的代碼編寫方式和沒有周全考慮到相應(yīng)的安全性,從而給開發(fā)的APP帶來一定的安全風(fēng)險(xiǎn),那么應(yīng)用安全這個(gè)最重要的安全需要關(guān)注哪些方面?
應(yīng)用安全主需要關(guān)注:二進(jìn)制安全、敏感數(shù)據(jù)安全、敏感資源安全、完整性安全、證書存儲(chǔ)安全。這五個(gè)方面處理的好會(huì)一定程度提高APP安全性,下面就對(duì)這五方面進(jìn)行做個(gè)詳細(xì)分析。

二進(jìn)制安全

1. 環(huán)境檢測
環(huán)境檢測主要關(guān)注點(diǎn): 模擬器檢測、root檢測。
目前主流的模擬器:夜神模擬器、雷電模擬器、逍遙模擬器、mumu模擬器、騰訊手游模擬器。
對(duì)模擬器實(shí)現(xiàn)原理:一種基于Qemu,一種基于Genymotion(VirtualBox)
模擬器的檢測主要方式:模擬器的特有文件、模塊、特征,代理類等等。
root:獲取手機(jī)超級(jí)管理員權(quán)限,android系統(tǒng)是基于linux內(nèi)核,默認(rèn)情況下并不提供超級(jí)管理員權(quán)限,所有獲取su的權(quán)限就是所謂root。
檢測root的方式:特有刷root工具的包名稱、特有root的文件路徑。
2. 反注入檢測
目前主要的注入: zygote屬于全局注入(xposed工具)、ptrace單進(jìn)程注入(frida工具)。
注入的檢測方式(只是檢測規(guī)則一小部分):
檢測APP自身的/proc/%d/maps模塊是否有第三方so模塊,
2. 優(yōu)先把自身ptrace,那么就其他就無法注入。
下圖是個(gè)簡單的ptrace反注入方式。

3. 反調(diào)試檢測
目前調(diào)試工具: jeb、IDA、GDB等調(diào)試工具進(jìn)行調(diào)試分析代碼和數(shù)據(jù)。
反調(diào)試方式(檢測規(guī)則一小部分):
檢測/proc/%d/status和/proc/pid/stat 和 /proc/pid/task/pid/stat狀態(tài)值。
2.檢測調(diào)速器端口和名稱和通信的關(guān)鍵文件信息。
下圖是個(gè)簡單的tracePid檢測實(shí)現(xiàn)

4. 代理檢測
目前app應(yīng)用面臨的嚴(yán)峻問題之一:數(shù)據(jù)被抓包分析。
App目前的抓包流程以charles抓包工具為例(http和socket)(https需要安裝SSL證書): 電腦端上charles工具上進(jìn)行設(shè)置代理端口,模擬器或者手機(jī)環(huán)境,安裝charles證書,設(shè)置代理模式,設(shè)置電腦端的ip和代理的端口。

對(duì)APP抓包問題可以檢測校驗(yàn)抓包所需要安裝的證書信息。
敏感數(shù)據(jù)安全

1. 代碼中敏感URL
直接將訪問的網(wǎng)址或訪問的IP地址硬編碼寫到代碼中,那么攻擊者可以通過反編譯app進(jìn)行靜態(tài)分析(jeb,jadx,IDA),搜索URL或IP相關(guān)的信息,那么這些URL或IP信息就會(huì)成為攻擊者的一個(gè)利用目標(biāo)。
2. APP中敏感數(shù)據(jù)
在APP的代碼或配置文件中,存儲(chǔ)著敏感而且沒有進(jìn)行做加密保護(hù)的數(shù)據(jù)。
攻擊者攻擊方式有兩種
1.利用apktool反編譯APP應(yīng)用,并進(jìn)行查看二進(jìn)制代碼數(shù)據(jù)就能直觀的看到敏感的操作調(diào)用敏感數(shù)據(jù)。
2.通過代理模式進(jìn)行抓包就可以直接抓到APP運(yùn)行中的操作的敏感數(shù)據(jù)。
3. 通用加密算法參數(shù)
代碼中往往會(huì)出現(xiàn)一些保護(hù)敏感信息的常量字符串,例如在代碼中硬編碼AES加密的key、iv等,或者用戶的VPN密碼等等。

敏感資源安全
APP中的一些關(guān)鍵資源文件沒有進(jìn)行加密保護(hù),攻擊者可以從APP中提取關(guān)鍵的資源文件,進(jìn)行二次使用或從資源文件中獲取本地業(yè)務(wù)邏輯代碼,從而對(duì)APP發(fā)起攻擊。例如對(duì)APP進(jìn)行關(guān)鍵邏輯篡改,植入惡意代碼,網(wǎng)絡(luò)協(xié)議分析等等。
完整性校驗(yàn)
APP開發(fā)者如果沒有對(duì)開發(fā)的APP進(jìn)行做完整性校驗(yàn)的話,那么攻擊者用androidkiller工具進(jìn)行對(duì)APP功能的逆向修改,例如對(duì)app植入惡意代碼,木馬、廣告等等,那么這些修改APP后,并進(jìn)行重新簽名發(fā)布,這會(huì)導(dǎo)致包的完整性被破壞,那么如果有包完整性校驗(yàn),校驗(yàn)包被破壞了就進(jìn)行檢驗(yàn)并做對(duì)應(yīng)閃退效果。
證書存儲(chǔ)風(fēng)險(xiǎn)
APP中使用的數(shù)字證書可被用來校驗(yàn)服務(wù)器的合法身份,以及在于服務(wù)器進(jìn)行做通信的過程中對(duì)傳輸數(shù)據(jù)進(jìn)行加解密的運(yùn)算,保證傳輸數(shù)據(jù)的保密性,完整性。
明文存儲(chǔ)的數(shù)字證書如果被篡改,APP客戶端可能會(huì)連接到攻擊者的服務(wù)器上,導(dǎo)致APP的敏感信息被盜取。如果明文證書被盜取,可能會(huì)造成傳輸數(shù)據(jù)被攔截解密,偽造第三方的APP客戶端向服務(wù)器進(jìn)行發(fā)送請(qǐng)求,篡改服務(wù)器中的關(guān)鍵數(shù)據(jù)或者造成服務(wù)器響應(yīng)異常。

組件安全



什么是組件?
Android是以組件為單位進(jìn)行權(quán)限聲明和生命周期管理。
組件的作用是什么?
Android系統(tǒng)共有四大組件:活動(dòng)組件、服務(wù)組件、廣播組件、內(nèi)容組件。
Activity(活動(dòng)組件):用于展示用戶交互的界面,它是最常見的組件。
Service(服務(wù)組件):用于后臺(tái)運(yùn)行服務(wù)不提供界面展示,常見于監(jiān)控類應(yīng)用。
Content Provider(內(nèi)容組件): 不同的APP應(yīng)用進(jìn)行數(shù)據(jù)共享,比如通訊錄數(shù)據(jù),圖片數(shù)據(jù)。
Broadcast Receiver(廣播組件): 用于注冊特定的事件,并在其發(fā)生時(shí)被激活。

組件安全方面:需要關(guān)注四大組件以及第三方sdk中的組件安全。如果組件暴露會(huì)影響到APP應(yīng)用的邏輯核心和泄露用戶敏感信息,這個(gè)是很嚴(yán)重安全問題,攻擊者只要通過組件利用的方式就可以獲取到關(guān)鍵信息,那么就會(huì)導(dǎo)致關(guān)鍵信息被泄露的風(fēng)險(xiǎn)。所以在APP應(yīng)用中如果非必要的組件不要進(jìn)行導(dǎo)出,在AndroidManifest.xml文件中, 設(shè)置組件的exported屬性為false,如果組件一定要提供給外部進(jìn)行調(diào)用的話,可以對(duì)組件的權(quán)限進(jìn)行控制。

運(yùn)行時(shí)安全




日志輸出
開發(fā)人員在開發(fā)調(diào)試APP過程中, 會(huì)進(jìn)行做一些日志的輸出,日志信息往往會(huì)記錄著一些敏感信息如:用戶名、密碼、函數(shù)調(diào)用棧信息、Token、Cookies、網(wǎng)絡(luò)請(qǐng)求IP或URL等等,在發(fā)布的APP過程中往往會(huì)漏掉或者忘記將日志輸出的信息進(jìn)行刪除。那么只要用monitor工具就可以分成APP運(yùn)行的敏感日志信息。這就給APP的安全帶來一定的威脅,攻擊者通過分析日志信息就可以作為攻擊的入口點(diǎn)。
數(shù)據(jù)存儲(chǔ)
APP運(yùn)行時(shí)候會(huì)進(jìn)行記錄或存儲(chǔ)一些敏感信息:個(gè)人隱私、登錄信息、本地驗(yàn)證碼、聊天記錄等等。
Android主要有五種數(shù)據(jù)存儲(chǔ)方式: 1.文件存儲(chǔ)、2.SharedPreferences輕量級(jí)存儲(chǔ)、3.SQLite數(shù)據(jù)庫存儲(chǔ)、4.ContentProvider數(shù)據(jù)共享、5.網(wǎng)絡(luò)存儲(chǔ)。
從下圖的截圖中,某個(gè)APP沙盒目錄下的數(shù)據(jù)存儲(chǔ)目錄shared_prefs(SharedPreferences實(shí)現(xiàn)),該目錄主要記錄存儲(chǔ)一些一些數(shù)據(jù)量較小的信息。存儲(chǔ)的信息直接可以用MT管理工具或者直接用adb復(fù)制傳輸?shù)酵獠侩娔X主機(jī)上,再通過可視化工具進(jìn)行打開查看文件,會(huì)造成配置信息或敏感的賬號(hào)信息泄露。

配置文件中獲取運(yùn)行環(huán)境的IMEI值

所以對(duì)于運(yùn)行時(shí)的讀寫操作本地?cái)?shù)據(jù)存儲(chǔ),在本地操作關(guān)鍵敏感信息,進(jìn)行用一些加密算法進(jìn)行做保護(hù),以此提高APP運(yùn)行時(shí)數(shù)據(jù)存儲(chǔ)的安全性。

通信安全



在APP通信過程中數(shù)據(jù)傳輸協(xié)議以及字段數(shù)據(jù)保護(hù)。
以下通過charles抓某個(gè)APP包的檢測更新功能性數(shù)據(jù)包,可以看到抓包的數(shù)據(jù)看到具體通信的功能,攻擊者可以通過對(duì)這些包進(jìn)行分析偽造假的數(shù)據(jù)包等進(jìn)行做影響APP安全的事情。

建議在通信傳輸功能可以采用SSL協(xié)議進(jìn)行傳輸,并在客戶端和服務(wù)端證書信息和關(guān)鍵數(shù)據(jù)加密和進(jìn)行校驗(yàn)。加密過程中盡量避免使用CBC模式。
— 完 —
點(diǎn)這里??關(guān)注我,記得標(biāo)星呀~
長按進(jìn)入小程序,進(jìn)行打卡簽到
(更多精彩值得期待……)
最近熱文: 一周內(nèi)被程序員瘋轉(zhuǎn)5.6W次,最終被大廠封殺! 知乎上這個(gè)程序員火了,竟是因?yàn)榻o老板修了一 次U盤... 重磅推薦:一套開源的網(wǎng)校系統(tǒng),無論是自建網(wǎng)校還是接副業(yè)都很方便! 辭退了一位簡歷造假的程序員,簡歷美化可以,造假不可??! 華為鴻蒙系統(tǒng)是安卓套殼?直接看代碼 2T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,人工智能,考研,軟考,英語,等等。在公眾號(hào)內(nèi)回復(fù)「資源」,即可免費(fèi)獲??!回復(fù)「社群」,可以邀請(qǐng)你加入讀者群! ??給個(gè)「在看」,是對(duì)我最大的支持??


