App客戶端劫持及簡單防護

轉自:http://blog.nsfocus.net/app-client-hijacking-simple-protection/

Android APP客戶端安全評估中,有一項叫做activity界面劫持。該bug的攻擊場景是,當手機中的惡意APP檢測到當前運行的爲目標APP時,就啓動自身的釣魚界面覆蓋到目標APP之上,以欺騙用戶輸入賬號密碼等。本文將要歸納Android各個版本可以使用的檢測當前運行的APP的方法,及附帶webview的劫持示例。

1、getRunningTasks(android5.0之前)

getRunningTasks需要使用權限android:name=”android.permission.GET_TASKS”

除了使用activity覆蓋目標APP,還可以使用alertwindow(模態彈窗),如下demo

alertwindow需要使用權限android:name=”android.permission.SYSTEM_ALERT_WINDOW”

2、Accessibility Service(輔助功能,一直可用)

(Accessibility Service,需要引導用戶在手機 “設置” 中激活纔能有效,需要使用權限android:name=”android.permission.BIND_ACCESSIBILITY_SERVICE“)

在Accessibility Service的onAccessibilityEvent回調函數中,可以檢測到當前執行的APP,如下

3、通過/proc/目錄也可以獲取當前應用(Android7.0中限制了APP獲取/proc/的內容,會失效)

使用github中的AndroidProcesses庫,可以直接獲取,如下

4、UsageStatsManager(Android5.0引入)

需要系統級別權限android.permission.PACKAGE_USAGE_STATS(系統簽名的APP能使用該權限),參見

github中的android-overlay-malware-example

5、webview

webview加載目標m站後,再加載惡意js,劫持用戶輸入,如下

webview添加java接口:

webView.addJavascriptInterface(new MyJavaScriptInterface(), “MYOBJECT”);

然後覆蓋setWebViewClient的onPageFinished,插入js代碼,劫持用戶輸入

以上是個人歸納的客戶端劫持可能的途徑(此類攻擊難度較大,分享出來作技術研究)

防護方法

最後,一個粗略的防護方案:

①、對於界面(activity)覆蓋,可以利用同樣的方法,判斷是否爲自身在activity棧頂。

②、alertwindow不是activity棧機制,依然無法檢測。在android6.0之後,如果app是從Play  Store安裝的,則SYSTEM_ALERT_WINDOW自動允許,如果是其他途徑安裝的則需要用戶手動在設置中開啓 懸浮窗 權限。

另外重載onFilterTouchEventForSecurity函數可以進行安全檢測(未測)

③、對Accessibility Service這類,只有提高用戶的安全意識方面着手

④、對於webview類型的劫持,可以利用js計算當前頁面是否被篡改過

⑤、對於/proc/目錄和UsageStatsManager兩個 Android系統方面也有相應的防護

文章分類: 安全分享 
文章關鍵詞: Android APP客戶端安全評估中APP客戶端App客戶端劫持安卓會話劫持安卓劫持客戶端劫持 
轉載請註明:“轉自綠盟科技博客”: 原文鏈接.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章