視頻彙總首頁:http://edu.51cto.com/lecturer/index/user_id-4626073.htmljavascript
隨着運營商新技術新業務的發展,運營商集團層面對安全的要求有所變化,***測試工做將會面臨內容安全、計費安全、客戶信息安全、業務邏輯及APP等方面的挑戰。隨着運營商自主開發的移動APP愈來愈多,這些APP可能並不會經過應用市場審覈及發佈,其中的安全性將面臨愈來愈多的挑戰。html
這個問題也引發了運營商的足夠重視,已經自主開發了自動化檢測工具及按期的APP安全測試評估工做。在此,綠盟科技博客特別邀請到移動APP安全測試專家,讓他們結合一次Android APP安全測試實例,爲你們講解評估特色,並將評估檢查點、評估細節和整改建議一一列出,給你們提供移動終端APP安全測試的思路。java
評估思路android
移動APP面臨的威脅安全
風起雲涌的高科技時代,隨着智能手機和iPad等移動終端設備的普及,人們逐漸習慣了使用應用客戶端上網的方式,而智能終端的普及不只推進了移動互聯網的發展,也帶來了移動應用的爆炸式增加。在海量的應用中,APP可能會面臨以下威脅:服務器
新技術新業務移動APP評估思路微信
在此次的移動APP安全測試實例中,工做小組主要經過以下7個方向,進行移動終端APP安全評估:網絡
運營商自動化APP測評思路架構
運營商自主開發的自動化APP安全檢測工具,經過」地、集、省」三級機構協做的方式,來完成移動終端APP安全檢測與評估。APP測試思路以下:ide
安全檢測要點
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 用戶打開了惡意頁面: