【干货】移动APP安全测试要点解析
隨著運(yùn)營(yíng)商新技術(shù)新業(yè)務(wù)的發(fā)展,運(yùn)營(yíng)商集團(tuán)層面對(duì)安全的要求有所變化,滲透測(cè)試工作將會(huì)面臨內(nèi)容安全、計(jì)費(fèi)安全、客戶信息安全、業(yè)務(wù)邏輯及APP等方面的挑戰(zhàn)。隨著運(yùn)營(yíng)商自主開(kāi)發(fā)的移動(dòng)APP越來(lái)越多,這些APP可能并不會(huì)通過(guò)應(yīng)用市場(chǎng)審核及發(fā)布,其中的安全性將面臨越來(lái)越多的挑戰(zhàn)。
這個(gè)問(wèn)題也引起了運(yùn)營(yíng)商的足夠重視,已經(jīng)自主開(kāi)發(fā)了自動(dòng)化檢測(cè)工具及定期的APP安全測(cè)試評(píng)估工作。在此,綠盟科技博客特別邀請(qǐng)到移動(dòng)APP安全測(cè)試專家,讓他們結(jié)合一次Android APP安全測(cè)試實(shí)例,為大家講解評(píng)估特點(diǎn),并將評(píng)估檢查點(diǎn)、評(píng)估細(xì)節(jié)和整改建議一一列出,給大家提供移動(dòng)終端APP安全測(cè)試的思路。
評(píng)估思路
移動(dòng)APP面臨的威脅
風(fēng)起云涌的高科技時(shí)代,隨著智能手機(jī)和iPad等移動(dòng)終端設(shè)備的普及,人們逐漸習(xí)慣了使用應(yīng)用客戶端上網(wǎng)的方式,而智能終端的普及不僅推動(dòng)了移動(dòng)互聯(lián)網(wǎng)的發(fā)展,也帶來(lái)了移動(dòng)應(yīng)用的爆炸式增長(zhǎng)。在海量的應(yīng)用中,APP可能會(huì)面臨如下威脅:
新技術(shù)新業(yè)務(wù)移動(dòng)APP評(píng)估思路
在這次的移動(dòng)APP安全測(cè)試實(shí)例中,工作小組主要通過(guò)如下7個(gè)方向,進(jìn)行移動(dòng)終端APP安全評(píng)估:
運(yùn)營(yíng)商自動(dòng)化APP測(cè)評(píng)思路
運(yùn)營(yíng)商自主開(kāi)發(fā)的自動(dòng)化APP安全檢測(cè)工具,通過(guò)”地、集、省”三級(jí)機(jī)構(gòu)協(xié)作的方式,來(lái)完成移動(dòng)終端APP安全檢測(cè)與評(píng)估。APP測(cè)試思路如下:
安全檢測(cè)要點(diǎn)
Allowbackup漏洞
AndroidManifest.xml文件中allowBackup屬性值被設(shè)置為true。當(dāng)allowBackup標(biāo)志為true時(shí),用戶可通過(guò)adb backup來(lái)進(jìn)行對(duì)應(yīng)用數(shù)據(jù)的備份,在無(wú)root的情況下可以導(dǎo)出應(yīng)用中存儲(chǔ)的所有數(shù)據(jù),造成用戶數(shù)據(jù)的嚴(yán)重泄露。
整改建議:
將參數(shù)android:allowBackup屬性設(shè)置為false,不能對(duì)應(yīng)用數(shù)據(jù)備份。
WebView漏洞
應(yīng)用中存在WebView漏洞,沒(méi)有對(duì)注冊(cè)JAVA類的方法調(diào)用進(jìn)行限制,導(dǎo)致攻擊者可以利用反射機(jī)制調(diào)用未注冊(cè)的其他任何JAVA類,最終導(dǎo)致javascript代碼對(duì)設(shè)備進(jìn)行任意攻擊。
整改建議:
通過(guò)在Java的遠(yuǎn)程方法上面聲明一個(gè)@JavascriptInterface 來(lái)代替addjavascriptInterface;
在使用js2java的bridge時(shí)候,需要對(duì)每個(gè)傳入的參數(shù)進(jìn)行驗(yàn)證,屏蔽攻擊代碼;
Note :控制相關(guān)權(quán)限或者盡可能不要使用js2java 的bridge 。
關(guān)鍵數(shù)據(jù)明文傳輸
應(yīng)用程序在登錄過(guò)程中,使用http協(xié)議明文傳輸用戶名和密碼,并未對(duì)用戶名和密碼進(jìn)行加密處理。通過(guò)監(jiān)控網(wǎng)絡(luò)數(shù)據(jù)就可以截獲到用戶名和用戶密碼數(shù)據(jù),導(dǎo)致用戶信息泄露,給用戶帶來(lái)安全風(fēng)險(xiǎn)。
整改建議:
在傳輸敏感信息時(shí)應(yīng)對(duì)敏感信息進(jìn)行加密處理。
任意賬號(hào)注冊(cè)
使用手機(jī)號(hào)133*****887注冊(cè)某個(gè)APP,獲取驗(yàn)證碼46908;
在確認(rèn)提交時(shí),攔截請(qǐng)求,修改注冊(cè)的手機(jī)號(hào)碼,即可注冊(cè)任意賬號(hào),這里修改為1338*****678(任意手機(jī)號(hào));
分別使用133**887和133**678(任意手機(jī)號(hào))登錄,均可以通過(guò)驗(yàn)證登錄,看到最終結(jié)果。
整改建議:
注冊(cè)過(guò)程最后的確認(rèn)提交時(shí),服務(wù)器應(yīng)驗(yàn)證提交的賬號(hào)是否是下發(fā)驗(yàn)證碼的手機(jī)號(hào)。
登錄界面可被釣魚劫持
應(yīng)用存在釣魚劫持風(fēng)險(xiǎn)。應(yīng)用程序沒(méi)有做防釣魚劫持措施,通過(guò)劫持應(yīng)用程序的登錄界面,可以獲取用戶的賬號(hào)和密碼,可能導(dǎo)致用戶賬號(hào)信息的泄露。
整改建議:
應(yīng)用程序自身通過(guò)獲取棧頂activity,判斷系統(tǒng)當(dāng)前運(yùn)行的程序,一旦發(fā)現(xiàn)應(yīng)用切換(可能被劫持),給予用戶提示以防范釣魚程序的欺詐。
獲取棧頂activity(如下圖),當(dāng)涉及敏感activity(登錄、交易等)切換時(shí),判斷當(dāng)前是否仍留在原程序,若不是則通過(guò)Toast給予用戶提示。
使用HTML5架構(gòu)或android+HTML5混合開(kāi)發(fā),實(shí)現(xiàn)登陸、支付等關(guān)鍵頁(yè)面,降低被劫持的風(fēng)險(xiǎn)。
有爭(zhēng)議的整改建議
在實(shí)施整改過(guò)程中,運(yùn)營(yíng)商、APP廠商及安全廠商之間就如下幾點(diǎn)存在爭(zhēng)議:
關(guān)鍵數(shù)據(jù)明文傳輸
根據(jù)客戶測(cè)評(píng)結(jié)果以及移動(dòng)終端APP廠商理解,目前的數(shù)據(jù)安全問(wèn)題可為:
客戶端安全(數(shù)據(jù)錄入) 客戶端到服務(wù)器安全(數(shù)據(jù)傳輸) 服務(wù)器端安全(數(shù)據(jù)存儲(chǔ))而關(guān)鍵數(shù)據(jù)明文傳輸屬于客戶端數(shù)據(jù)錄入安全,針對(duì)此部分,目前不僅是移動(dòng)終端APP,包括Web安全方面,對(duì)此部分要求也是不一而分,具體可以體現(xiàn)為:
具有現(xiàn)金流的交易平臺(tái):此類業(yè)務(wù)安全級(jí)別要求最高,在數(shù)據(jù)傳輸方面也是目前做得最好的。主要代表是:淘寶、京東、各大銀行網(wǎng)銀等。
具有較大社會(huì)影響力的平臺(tái):此類業(yè)務(wù)安全級(jí)別低于上述業(yè)務(wù),但由于賬戶數(shù)據(jù)丟失以后,對(duì)其自身以及社會(huì)影響較大,所以在傳輸上也不會(huì)采取明文傳輸。如:百度、騰訊等。
數(shù)據(jù)丟失本身不會(huì)造成較大的影響的平臺(tái):此類業(yè)務(wù)賬戶數(shù)據(jù)本身價(jià)值不大,丟失以后也不會(huì)造成影響,或者本身不會(huì)受到太大關(guān)注,一般都不會(huì)對(duì)傳輸數(shù)據(jù)進(jìn)行加密。這樣的例子比比皆是。
當(dāng)然也有廠商提出,明文傳輸在某些專業(yè)的漏洞檢測(cè)和通報(bào)的網(wǎng)站上,是不屬于安全漏洞的,為了驗(yàn)證此異議,在某平臺(tái)上提交了一份關(guān)于明文傳輸?shù)穆┒?#xff0c;得到的結(jié)果請(qǐng)看下圖:
登錄界面釣魚劫持
APP應(yīng)用存在釣魚劫持風(fēng)險(xiǎn)。應(yīng)用程序沒(méi)有做防釣魚劫持措施,通過(guò)劫持應(yīng)用程序的登錄界面,可以獲取用戶的賬號(hào)和密碼,可能導(dǎo)致用戶賬號(hào)信息的泄露。
這一條檢測(cè)結(jié)果,最大的爭(zhēng)議在于按照整改建議整改以后,對(duì)一般用戶來(lái)說(shuō),沒(méi)有任何作用。首先,我們了解一下釣魚劫持如何產(chǎn)生。
Android釣魚原理
需要理解,Android啟動(dòng)一個(gè)Activity時(shí),是這樣設(shè)計(jì)的,給Activity加入一個(gè)標(biāo)志位FLAG_ACTIVITY_NEW_TASK,就能使它置于棧頂并立馬呈現(xiàn)給用戶。但是這樣的設(shè)計(jì)卻有一個(gè)缺陷。如果這個(gè)Activity是用于盜號(hào)的偽裝Activity呢?這種現(xiàn)象在XcodeGhost事件中,已經(jīng)被證實(shí)是可以實(shí)現(xiàn)的。
在Android系統(tǒng)當(dāng)中,程序可以枚舉當(dāng)前運(yùn)行的進(jìn)程而不需要聲明其他權(quán)限,這樣的話,就可以編寫一個(gè)程序,啟動(dòng)一個(gè)后臺(tái)的服務(wù),這個(gè)服務(wù)不斷地掃描當(dāng)前運(yùn)行的進(jìn)程,當(dāng)發(fā)現(xiàn)目標(biāo)進(jìn)程啟動(dòng)時(shí),就啟動(dòng)一個(gè)偽裝的Activity。如果這個(gè)Activity是登錄界面,那么就可以從中獲取用戶的賬號(hào)密碼,具體的過(guò)程如下圖:
檢測(cè)原理描述清楚以后,就需要給出讓軟件廠商能夠明白的整改建議以及漏洞情景重現(xiàn)。
Android釣魚情景演示
以小米手機(jī)為例:
1.當(dāng)打開(kāi)3個(gè)APP時(shí),最后一個(gè)打開(kāi)的APP”語(yǔ)音助手”,切換至手機(jī)桌面,長(zhǎng)按HOME鍵查看進(jìn)程,”語(yǔ)音助手”會(huì)顯示在進(jìn)程的第一個(gè)。
2.點(diǎn)擊”微信”以后,切換至”微信”,再查看進(jìn)程,可以看到,進(jìn)程中由于”微信”已切換至當(dāng)前窗口,故進(jìn)程中不存在。
3.可以從第1步看到,當(dāng)切換至手機(jī)桌面時(shí),無(wú)論是語(yǔ)音助手、手機(jī)令牌、還是微信,都是默認(rèn)后臺(tái)運(yùn)行,而且切換出來(lái)以后無(wú)任何提示。這樣,當(dāng)惡意activity收到微信登錄界面或者其他敏感界面的時(shí)候,就會(huì)搶先推送至客戶,從而讓客戶輕易的輸入了帳號(hào),并獲取了客戶的信息,但此時(shí)微信不會(huì)做任何提示。
4.再來(lái)觀看一下某行手機(jī)APP,當(dāng)切換至手機(jī)桌面時(shí),會(huì)對(duì)客戶做出提示。如下圖:
假設(shè)一下頁(yè)面是惡意推送的activity,那么在惡意推送的APP頁(yè)面,應(yīng)該會(huì)顯示出此類提示,告知客戶,此頁(yè)面并非正常APP的頁(yè)面。
用戶打開(kāi)正常頁(yè)面 vs 用戶打開(kāi)了惡意頁(yè)面:
本文轉(zhuǎn)自 小強(qiáng)測(cè)試幫 51CTO博客,原文鏈接:http://blog.51cto.com/xqtesting/1706184,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的【干货】移动APP安全测试要点解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 更改sybase服务名
- 下一篇: mysql高可用+keepalived