原文地址:
http://wetest.qq.com/lab/view/138.html?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.196734.TASKID&ADUIN=286513245&ADSESSION=1470806885&ADTAG=CLIENT.QQ.5485_.0&ADPUBNO=26602
本文由騰訊WeTest授權(quán)發(fā)布嘹屯,禁止任何形式轉(zhuǎn)載捏膨!
作者:anglia仰坦,騰訊資深系統(tǒng)測試工程師
引言
作為Android手機用戶中的一枚殘粉灵妨,假如突然手機掉了,腦電波蹦出的第一個念想是見鬼术羔,還是您的支付寶或者微信上的錢不安全呢苹支?
假如最新下載的app,進去時不僅彈出各種無聊廣告宣渗,而且通知欄還會冒出意想不到的推送,您會想到這可能是釣魚推送梨州,馬上卸載app痕囱?
假如百度全家桶事件,您卸載了所有的百度app暴匠,但烏云暴漏的百度WormHole事件鞍恢,無論是wifi或3G/4G蜂窩網(wǎng)絡(luò),只要手機在聯(lián)網(wǎng)狀態(tài)都有可能受到攻擊每窖,你是否會考慮換掉Android手機呢帮掉?
Mi粉狂熱已經(jīng)冷卻,華為手機開始跟著Android生態(tài)發(fā)展攻陷全球窒典,物美價廉的Android手機走入尋常百姓家蟆炊。面對Android安全漏洞認知不足的用戶,如何保證我們的app給用戶安心的體驗瀑志?Android生態(tài)安全漏洞有哪些涩搓?Android安全測試技術(shù)探新在哪兒?如何將安全常規(guī)測試流程化劈猪?
Android常見安全漏洞匯總
首先昧甘,Android操作系統(tǒng)擁有開源的開發(fā)紅利,也暗藏著后天發(fā)展的安全畸形战得,如:Android系統(tǒng)設(shè)計了沙箱系統(tǒng)(即虛擬機)充边,但是底層卻出現(xiàn)一個又一個漏洞讓惡意程序(或工具)獲取root權(quán)限以打破沙箱的限制。如同pc時代贡避,沒有絕對安全的pc操作系統(tǒng)痛黎,移動互聯(lián)網(wǎng)時代予弧,也沒有有絕對安全的移動操作系統(tǒng)刮吧。Android開源生態(tài)的安全隱患,就像染血的警鐘掖蛤,敲擊在每位Android開發(fā)者的心里杀捻。
其次,Android APP/SDK開發(fā)過程中的安全隱患就像未知黑洞蚓庭,永遠都不知道安全對抗的終點在哪致讥,攻擊者是誰仅仆,終結(jié)者又是誰,如何防御垢袱。
最后墓拜,用戶層面,常見的请契、可識別的安全行為漏洞有哪些表現(xiàn)咳榜。
以上三個維度的已知安全漏洞總結(jié)如下:
無論是Android App,還是SDK,或多或少都有安全漏洞的死角。說不定某天你的應(yīng)用就遭到以上的某種安全漏洞呢浪箭。恰巧到腥,前段時間測試一款A(yù)ndroid版SDK時,發(fā)現(xiàn)一種跟Android應(yīng)用組件相關(guān)的安全漏洞拧廊。借此實例化地總結(jié)了Android?SDK安全測試方法、技術(shù)和流程。
應(yīng)用Android版安全測試實例
漏洞原因概述
某款應(yīng)用(后面簡稱應(yīng)用)Android版SDK的一個可選組件雇毫,在本地開啟了一個隨機端口踩蔚,用于監(jiān)控java層service是否存活,但java層跟組件通訊時寂纪,未對輸入?yún)?shù)做嚴(yán)格檢驗,導(dǎo)致在調(diào)用linux系統(tǒng)“system()”函數(shù)時捞蛋,有被填充攻擊代碼孝冒,惡意攻擊的可能性。
如下截圖是模擬端口被攻擊后庄涡,在應(yīng)用組件intent進行通信過程中搬设,修改了url內(nèi)容穴店,webview顯示亂碼的情況:
漏洞潛在安全危害
Android APP的四大應(yīng)用組件:Activity、Receiver拿穴、Service和Content?provider泣洞,以及應(yīng)用組件通過intent進行IPC通信等安全角色默色,暫不發(fā)散詳述。借助于上述案例中應(yīng)用的組件相關(guān)漏洞,展示終端APP側(cè)相關(guān)的攻擊維度如下圖:
由于Android APP本地應(yīng)用環(huán)境缘厢,網(wǎng)絡(luò)socket先天缺乏細粒度的認證授權(quán)機制甩挫,因此,如果把Android客戶端當(dāng)做服務(wù)器伊者,利用逆向代碼搜索應(yīng)用的本地隨機端口號删壮,主動向端口發(fā)送攻擊,就潛伏著如下安全危害:
1.本地命令執(zhí)行:當(dāng)嵌入應(yīng)用的Packagename指定為應(yīng)用自身央碟,Componentname指定為應(yīng)用的activity時,可以啟動該應(yīng)用的任意activity菱涤,包括受保護的未導(dǎo)出activity洛勉,從而造成安全危害。如收毫,通過HTTP請求,逐一啟動若干未導(dǎo)出的activity昔搂,可以發(fā)現(xiàn)拒絕服務(wù)漏洞输拇。
2.命令控制修改應(yīng)用權(quán)限:通過開放socket端口傳入啟動Android應(yīng)用組件的intent,然后以被攻擊應(yīng)用的權(quán)限執(zhí)行啟動activity逛裤、發(fā)送廣播等操作猴抹。由于通過socket傳入的intent,無法對發(fā)送者的身份和權(quán)限進行細粒度檢查洽糟,繞過了Android提供的對應(yīng)用組件的權(quán)限保護坤溃,能啟動未導(dǎo)出的和受權(quán)限保護的應(yīng)用組件,對安全造成危害
3.敏感信息泄露薪介,控制手機:本地某service打開UDP的端口監(jiān)聽,接收特定的命令字后道偷,可返回手機的敏感信息记劈。如百度手機管家,遠程管理手機的secretKey目木,進而未授權(quán)的攻擊者可通過網(wǎng)絡(luò)完全管理手機刽射。
應(yīng)用Android安全測試執(zhí)行
應(yīng)用Android安全加固版本優(yōu)化點
1.Native層和Java層增加對系統(tǒng)命令檢查,特殊字符檢查過濾
2.JNI Watchdog守護進程 socket通信加密
3.本地通知功能誓禁,添加url、intent辫继、activity的特性驗證俗慈,防止點擊通知后,跳轉(zhuǎn)到惡意鏈接
4.修改Packagename在應(yīng)用本地的存儲位置
5.增加在線配置功能
以上是此次安全加固優(yōu)化的重要需求點低千。
專項安全點測試
如果按照常規(guī)的系統(tǒng)測試或者性能測試馏颂,只需要根據(jù)變動需求,進行正向的測試便可救拉,但對于安全測試亿絮,保證SDK安全的健壯性需要進行逆向?qū)m棞y試麸拄,模擬各種安全攻擊手段黔姜,針對修改點發(fā)散測試用例。
Android常規(guī)的安全流程回歸測試
1.隱私數(shù)據(jù):外部存儲安全和內(nèi)部存儲安全淮椰;用戶名纳寂、密碼、聊天記錄毙芜、配置信息等隱私信息是否被保存在本地,是否加密保存猾浦;使用數(shù)據(jù)前都判斷信息是否被篡改灯抛;
2.權(quán)限攻擊:檢查App所在的目錄,其權(quán)限必須為不允許其他組成員讀寫夹抗;檢查系統(tǒng)權(quán)限是否收到攻擊纵竖;
3.Android組件權(quán)限保護:禁止App內(nèi)部組件被任意第三方程序調(diào)用:禁止Activity被任意第三方程序調(diào)用,禁止Activity劫持靡砌;Broadcast的接收和發(fā)送安全通殃,只能接收本程序發(fā)出的廣播,發(fā)送的內(nèi)容不想讓第三方獲得画舌;禁止惡意的啟動或者停止service;Content ?provider的操作權(quán)限霹购;若需要供外部調(diào)用的組件朋腋,應(yīng)檢查對調(diào)用者是否做了簽名限制膜楷;
4.升級:檢查是否對升級包的完整性贞奋、合法性進行了校驗,避免升級包被劫持察蹲;
5.3rd庫:如果使用了第三方庫催训,需要跟進第三方庫的更新并且檢查第三方庫的安全性宗收;
6.ROM安全:使用官方ROM或者權(quán)威團隊提供的ROM,避免ROM中被添加了植入廣告采驻、木馬等匈勋;
7.對抗反破解:對抗反編譯,即無法通過反編譯工具對其進行反編譯洽洁,或者反編譯之后無法得到正確的反匯編代碼;對抗靜態(tài)分析汰翠,采用代碼混淆技術(shù)昭雌,代碼加密;對抗動態(tài)調(diào)試佛纫,在軟件中加入檢測調(diào)試器和模擬器的代碼总放;防止重編譯,檢查簽名攒盈、校驗編譯之后dex文件的Hash值哎榴。
安全專項測試和常規(guī)流程測試完后僵蛛,針對應(yīng)用現(xiàn)有的功能迎变、新舊版本兼容性、以及不同Android操作系統(tǒng)版本的兼容性驼侠,進行滾動回歸測試谆吴。
Android安全測試總結(jié)
相對于普通的性能和系統(tǒng)功能測試用例,安全測試用例需要更全面的理解Android生態(tài)系統(tǒng)笋熬,如:用例需要覆蓋到用戶安全表象層面腻菇、應(yīng)用系統(tǒng)本地和遠程攻擊層面、以及操作系統(tǒng)本身漏洞層面筹吐,且更多的需要設(shè)計逆向攻擊思維的測試用例丘薛。
如果說開發(fā)的出發(fā)點是安全對抗防御,那么測試的出發(fā)點卻是黑客攻擊的思維榔袋,如何設(shè)計攻擊場景的測試用例,攻擊測試的技術(shù)如何實現(xiàn)妥粟,決定了SDK安全的健壯性吏够。
相關(guān)參考文獻和案例