1. 程式人生 > >惡意程式利用Android漏洞點選劫持

惡意程式利用Android漏洞點選劫持

作者:趨勢科技

通過社會工程學陷阱技巧,開發者可以建立一個應用程式用來誘騙使用者點選特製的應用程式彈出視窗,讓它成為多種威脅的入口,這種攻擊被稱為點選劫持(Tapjacking),利用了Android 使用者介面元件內的一個漏洞。

這技術並不是很複雜,但會對Android 使用者造成嚴重的安全問題。在介紹點選劫持的細節前,先簡單解釋一下這個UI 漏洞的出處。

應用程式活動(Activity)簡介

Android 顯示的UI 元素以活動(Activity)為單位。活動是一個會佔據整個螢幕大小的系統元件,可以容納很多不同的檢視(View),檢視則是指顯示在裝置螢幕上的一塊矩形區域。

下面是一個活動的例子,它包含兩個檢視,即(1

)文字檢視,這是使用者可以輸入文字的地方。還有(2)按鈕,讓使用者點(或碰觸)。如下所示,一個活動可能會佔據整個螢幕,即使很大一部分是空的(或黑色)。下面是應用程式WarGames 的一個活動的截圖(注:此截圖並非來自惡意應用程式):

   

一個應用程式可能有好幾個活動,每個活動代表一個UI 元素,可能會佔用整個螢幕。作業系統利用被稱為堆疊(Stack)的資料結構來管理不同的活動,最新的活動會顯現在堆疊的頂端,而舊活動則會位於它下面。當前出現的活動始終都會顯現在頂端,是唯一可以響應使用者操作的活動。

在大多數情況下,應用程式被設計成顯示一個新活動,藉此顯示可能會佔據整個螢幕的新UI。不過也有例外。在某些情況下,一個應用程式可以只顯示檢視,不需要將檢視放在活動內部。這些例外就是對話方塊檢視(Dialog View

)和通知資訊檢視(Toast View)。

對話方塊檢視和通知資訊檢視之間的差異

對話方塊檢視主要是讓應用程式與使用者互動。這是個雙向的互動:對話方塊會顯示一些資訊給使用者,使用者可以輸入文字或點選小工具元件,例如對按鈕做出響應。而且因為對話方塊檢視是臨時的,因此被設計成儘可能小,讓使用者仍然可以看到背後是什麼。但使用者還是不能跟對話方塊遮擋住的活動進行互動。

至於通知資訊檢視就更有趣了。根據Android 的定義,通知資訊提供了關於在一個小的彈出視窗內的操作的簡單迴應。通常它只會佔據資訊所需的空間,而且使用者還是可以跟它背後的活動互動。下面是一個範例:

取決於應用程式和開發者的設計,通知資訊檢視可能會顯示一段簡簡訊息(見上圖)。但它的大小並不是固定的。開發者可以自由設計自己的應用程式來顯示較大的通知資訊檢視,甚至可以像下圖這樣包含圖片。

現在是耐人尋味的部分出現了。能夠在檢視內顯示任何圖片,這會導致許多可能性。因為通知資訊檢視只是將使用者輕觸或滑動的行為帶給背後的活動,陰險的開發者可以用吸引人的圖片(例如色情圖片,明星照片等)或假UI 作為誘餌,讓使用者和隱藏活動進行互動。這可能會讓使用者陷入各種威脅中,例如下載惡意應用程式,線上購買,註冊增值服務,甚至抹除整個作業系統。

但使用通知資訊作為誘餌有個先決條件。通知資訊檢視通常被設計為只能短時間顯示,可能只會出現幾秒鐘。為了有效將通知資訊檢視用在攻擊中,它在螢幕上停留的時間必須超過幾秒鐘。

雖然有阻礙,但這問題並不會阻擋一切。為了繞過這個限制,惡意開發人員可以使用定時器。定時器是由Android SDK 所提供,可以在預先定義好的時間執行一段程式程式碼。壞人可以使用定時器來讓它在螢幕上消失前重新出現。

因為惡意程式只使用點選劫持方式欺騙使用者,本身並不執行任何惡意行為,因此這些應用程式不需要在裝置上取得任何許可權。這對安全研究人員和防毒產品來說可能是個挑戰,有問題的應用程式可能除了顯示這些檢視外不做任何事,要單靠靜態程式程式碼分析來標記惡意應用程式將會有所困難。

根據我們的研究,這個威脅會影響到所有執行早期薑餅人系統的Android 裝置(早於 2.3 的版本)。Google 為開發人員提供了一個方法來解決這一漏洞,讓檢視在被另外一個檢視覆蓋後能防止互動事件,從而消除了使用者與隱藏檢視進行互動的可能性。

然而這個新功能只能用在兩方面:(1)將filterTouchesWhenObscured 屬性設為true,或(2)實施onFilterTouchEventForSecurity方法。這需要開發者明確修改自己的程式,而很有可能的是,並非每個開發人員都能意識到這一點。更重要的是,使用者需要同時將作業系統和應用程式都更新到最新版本才能防止這種攻擊。

總之,點選劫持威脅並非不存在,而且可能會存在相當長的一段時間。

本文版權為趨勢科技所有,對於非贏利網站或媒體轉載請註明作者以及原文連結。謝謝合作!