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