使用社交工程陷阱( Social Engineering)技巧,開發者可以建立一個應用程式用來誘騙使用者去點一個特製的應用程式跳出視窗(稱為toast view”通知訊息視景”),讓它成為多種威脅的入口,這種攻擊被稱為tapjacking,會利用一個Android使用者互動(UI)組件內的特定漏洞。
這技術並不是很複雜,但會對Android使用者造成嚴重的安全問題。
在我們進入tapjacking的細節之前,讓我先簡單地解釋一下這個UI漏洞的出處。
簡介應用程式活動(Activity)
Android顯示UI元素是以活動(Activity)為單位。一個活動(Activity)是一個會佔據整個螢幕大小的系統組件,可以容納很多不同的視景(View),一個顯示在設備螢幕上的矩形區域。
下面是一個活動(Activity)的例子,它包含兩個視景(View),即(1)文字視景,這是使用者可以輸入文字的地方。還有(2)按鈕,讓使用者點(或輕觸)。如下所示,一個活動(Activity)可能會佔據整個螢幕,即使很大一部分是空的(或黑色)。下面是應用程式WarGames的一個活動(Activity)的擷圖(注:此擷圖並非來自惡意應用程式):
一個應用程式有好幾個活動(Activity),每個活動(Activity)代表一個UI元素,可能會佔用整個螢幕。作業系統利用被稱為堆疊(Stack)的資料結構來管理不同的活動(Activity),最新的活動(Activity)會顯現在堆疊的頂端,而舊活動則會位在它下面。目前出現的活動始終都會顯現在頂端,是唯一可以回應使用者輕觸或滑動的活動(Activity)。
在大多數情況下,應用程式被設計成出現一個新活動(Activity)來顯示一個可能會佔據整個螢幕的新UI。不過也有例外。在某些情況下,一個應用程式可以只顯示視景(View),不需要將視景(View)放在一個活動(Activity)內部。這些例外就是對話框視景(Dialog View)和通知訊息視景(Toast View)。
對話框視景和通知訊息視景之間的不同
對話框視景主要是讓應用程式與使用者互動。這是個雙向的互動:對話框會顯示一些資訊給使用者,使用者可以透過輸入文字或點擊Widget元件,像是按鈕回應。而且,因為對話框視景是暫時出現,它被設計成盡可能的小,讓使用者仍然可以看到背後是什麼。使用者還是不能跟對話框背後的活動(Activity)互動。
至於通知訊息視景就更有趣了。根據Android,通知訊息(Toast)提供「關於在一個小的彈出視窗內的操作的簡單回應」。通常它只會佔據訊息所需的空間,而且使用者還是可以跟它背後的活動(Activity)互動。底下是一個範例:
取決於應用程式(和開發者),通知訊息視景可能會顯示一段簡短資訊(見上圖)。但它的大小並不是固定的。開發者可以自由設計自己的應用程式來顯示較大的通知訊息視景,甚至可以像下圖這樣包含圖片: