移動App安全測試要點

在《運營商滲透測試與挑戰》中,隨着運營商新技術、新業務的發展,運營商集團層面對安全的要求有所變化,滲透測試工作將會面臨內容安全、計費安全、客戶信息安全、業務邏輯及APP等方面的挑戰。

隨着運營商自主開發的移動APP越來越多,這些APP可能並不會通過應用市場審覈及發佈,其中的安全性將面臨越來越多的挑戰。這個問題也引起運營商的足夠重視,爲此開發了自動化檢測工具並開展定期的APP安全測試評估工作。

移動App面臨的威脅

隨着智能手機和iPad等移動終端設備的普及,人們逐漸習慣了使用應用客戶端上網的方式,而智能終端的普及不僅推動了移動互聯網的發展,也帶來了移動應用的爆炸式增長。在海量的應用中,APP可能會面臨如下威脅:

  • 木馬
  • 病毒
  • 篡改
  • 破解
  • 釣魚
  • 二次打包
  • 賬戶竊取
  • 資源篡改
  • 廣告植入
  • 信息劫持

移動App評估思路

在這次的移動App安全測試實例中,主要通過七個方面進行移動終端App安全評估:

  • 能力調用
  • 資源訪問
  • 通信安全
  • 鍵盤輸入
  • 認證鑑權
  • 敏感信息安全
  • 反逆向

運營商自動化App測評思路

安全檢測要點

1.Allowbackup漏洞

AndroidManifest.xml文件中allowBackup屬性值被設置爲true。當allowBackup標誌爲true時,用戶可通過adb backup來對應用數據進行備份,在無root的情況下可導出應用中存儲的所有數據,造成用戶數據的嚴重泄漏。

整改建議:將參數android:allowBackup屬性設置爲false,不能對應用數據備份。

2.WebView漏洞

應用中存在WebView漏洞,沒有對註冊JAVA類的方法調用進行限制,導致攻擊者可以利用反射機制調用未註冊的其他任何JAVA類,最終導致javascript代碼對設備進行任意攻擊。

整改建議:通過在Java的遠程方法上面聲明一個@JavascriptInterface 來代替addjavascriptInterface;在使用js2java的bridge時候,需要對每個傳入的參數進行驗證,屏蔽攻擊代碼。

注意:控制相關權限或者儘可能不要使用js2java 的bridge

3.關鍵數據明文傳輸

在登錄過程中,應用程序使用http協議明文傳輸用戶名和密碼,並未對用戶名和密碼進行加密處理。通過監控網絡數據就可以截獲到用戶名和用戶密碼數據,導致用戶信息泄露,給用戶帶來安全風險。

整改建議:在傳輸敏感信息時,應對敏感信息進行加密處理。

4.任意賬號註冊

用手機號133*****887註冊某個APP,獲取驗證碼46908。

在確認提交時,攔截請求,修改註冊的手機號碼,即可註冊任意賬號,這裏修改爲1338*****678(任意手機號)。

然後,分別使用133*****887133*****678(任意手機號)登錄,均可以通過驗證登錄,看到最終結果。

整改建議:註冊過程最後的確認提交時,服務器應驗證提交的賬號是否是下發驗證碼的手機號。

5.登錄界面可被釣魚劫持

應用存在釣魚劫持風險。應用程序沒有做防釣魚劫持措施,通過劫持應用程序的登錄界面,可以獲取用戶的賬號和密碼,導致用戶賬號信息泄露。

整改建議:應用程序自身通過獲取棧頂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 用戶打開了惡意頁面

本文轉載自綠盟科技,原文鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章