1. 程式人生 > >Android中利用5.0系統螢幕錄製UI漏洞騙取應用錄製螢幕授權

Android中利用5.0系統螢幕錄製UI漏洞騙取應用錄製螢幕授權

一、漏洞分析

今天我們來看一下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應用安全防護和逆向分析》

點選立即購買:京東  天貓

更多內容:點選這裡

關注微信公眾號,最新Android技術實時推送