一、漏洞分析
今天我們來看一下Android中的屏幕錄製功能帶來的一個漏洞問題,在之前的一篇文章中介紹了關於Android5.0新增的Api來進行錄製屏幕視頻,不瞭解的同學,可以點擊這裏。當時記得我們在使用這個api的時候,系統會給一個授權提示:
這個對話框是系統彈出來的提示消息,主要由兩部分組成,應用的名稱+提示文案,看似是一個很平常的授權對話框,但是這背後卻有這個一個很大的UI漏洞,而且在之前的一篇文章中瞭解到,這個錄製屏幕功能的危險性還是很大的。那麼這個UI漏洞是啥呢?
其實很簡單,就是Android系統中在彈出對話框的時候,如果內容過多,會採用滾動樣式,來展示全部消息,而不是使用字符省略的方式。那麼這裏就存在一個問題了,如果把應用的名稱故意弄的很長,導致後面一段提示文案:“將開始截取您的屏幕上顯示的所有內容”給抵到底部,只有滑動的時候才能看到,這樣來騙取用戶點擊立即開始。同時再把應用的名稱改成一些銀行或者是社交賬號,支付應用的提示文案,比如:“xx寶新增了特性...點擊立即開始,即可體驗!”,而用戶相信就開始點擊了,當然這裏還需要一個功能,就是監聽系統的TopActivity,當監聽到用戶打開了銀行app或者是社交app的時候,就去申請權限,彈出對話框!
下面通過MediaProjectionManager的源碼來分析一下,授權提示流程:
在使用錄製屏幕功能的時候,去授權頁面調用的是createScreenCaptureIntent方法,獲取授權Intent:
源碼瞭解到了,這裏調用的是MediaProjectionPermissionActivity來進行授權:
這裏直接用系統對話框展示了。
那麼下面就來演示一個例子,比如現在惡意軟件在後臺監聽到了用戶啓動了某某應用app,然後就啓動授權界面:
惡意app的名稱爲:
這就看到了,這些提示信息,對於用戶打開銀行app的時候給與提示感覺還是很正常的,而且一般彈出的提示對話框,用戶不會去滑動看到底部的,而關鍵提示信息就在底部:
所以,這裏就是一個UI漏洞,Google在處理這個對話框的時候,沒有使用省略號來做處理,而用滾動方式,但是最重要的提示信息卻被搞到底部了,用戶很難發現,很多用戶就認爲很正常按照提示點擊立即開始了,一旦授權了,那麼惡意app就在後臺偷偷的錄製你的屏幕,當你輸入賬號和密碼的時候也都是可以被記錄了。在把錄製app發到服務端進行分析。賬號就會被盜取!
二、漏洞產生的原因
上面分析完了這個漏洞,其實理解還是很簡單,就是一個UI漏洞,在關鍵中的提示信息展示的時候,沒有做省略處理,從而把最重要的提示文案給隱藏了。導致用戶被騙取了授權。
該漏洞實際上是由於Google沒有制定合理的Android應用名稱規範導致,綜合表現爲如下兩點:
1) 沒有規範應用名稱長度,使得應用名稱可爲任意長度;
2) 沒有規範應用名稱字符集,如應用名稱可包含換行符和製表符。
三、漏洞修復
那麼關於這個漏洞我們該怎麼修復了呢?
當然Google在後續的6.0系統中進行修復了這個問題,修復之後的效果:
採用了省略號代替了,不會把重要的提示信息給隱藏了。那麼對於5.0系統的用戶該怎麼辦呢?這個漏洞依舊存在,這就要求我們開發者做一下工作了,在Android中涉及用戶隱私的Acitivity中(例如登錄,支付等其他輸入敏感信息的界面中)增加屬性:
WindowManager.LayoutParams.FLAG_SECURE
看一下屬性源碼說明:
該屬性能防止屏幕被截圖和錄製。這個屬性就是可以防止當前Activity不會被錄製,我們可以做一個案例:
還記得上一篇內容中,我們使用MediaProjection進行截圖功能,如果加上了這個屬性,再次截圖,效果如下:
看到下面的截圖是一片漆黑,截圖失敗的,而且這時候使用adb shell screencap 命令去截圖也是失敗的:
所以從這裏可以看出來,其實adb shell screencap和screenrecord命令底層的實現和MediaProjection是一樣的。
下面再來看看視頻錄製功能:
看到了,我們的app,沒有被錄製,也是一片漆黑,這個屬性就是爲了防止當前應用被錄製的功能!
所以在5.0的系統中,或者對於銀行app,社交app,支付app等,開發者應該把當前登錄的Activity添加這個屬性是最安全的!如果你沒有添加的話,就加上吧,給自己的app加上一份保險!
四、漏洞總結
到這裏,我們就分析完了這個錄製功能的UI漏洞,下面來總結一下
第一、漏洞產生的原因
因爲Google在處理對話框提示的時候,沒有做字符限制,導致一些重要的提示信息被遮擋
第二、漏洞的危險
惡意app利用這個UI漏洞,把自己的app名稱弄得很長,而且在後臺監聽用戶打開了一些支付app,銀行app之後,就彈出這個授權對話框,但是因爲名稱太長了,重要的提示文案被蓋住了,用戶很容易被騙取授權
第三、漏洞修復
Google在6.0以後進行了修復,使用字符限制功能,但是對於沒有升級到6.0的用戶,這時候對於我們開發者就需要在自己的項目中給Activity添加安全屬性,特別是登錄頁面,這樣就可以防止當前頁面被錄製或者截屏了。
本文的目的只有一個就是學習更多的逆向技巧和思路,如果有人利用本文技術去進行非法商業獲取利益帶來的法律責任都是操作者自己承擔,和本文以及作者沒關係,本文涉及到的代碼項目可以去編碼美麗小密圈自取,歡迎加入小密圈一起學習探討技術
五、總結
Android中5.0好不容易釋放了錄製屏幕功能的api,結果就弄出這個漏洞,也是服了Google了,本來錄製功能就非常危險,卻在授權的時候,還有這麼一個UI漏洞,讓用戶被惡意app騙取授權,在後臺偷偷錄製桌面信息了,人生處處是坑,Android處處是漏洞!
《Android應用安全防護和逆向分析》
點擊立即購買:京東 天貓
更多內容:點擊這裏
關注微信公衆號,最新技術乾貨實時推送