OWASP 類別:MASVS-PLATFORM:平台互動
總覽
Tapjacking 發生在 Android 應用程式中,是與 clickjacking 網路安全漏洞對等的攻擊模式,亦即惡意應用程式藉由重疊或其他方式對 UI 進行模糊處理,誘騙使用者點選與安全性相關的控制項 (確認按鈕等等)。在這個頁面中,我們會分別介紹兩種攻擊變化形式:完全遮蔽和部分遮蔽。在完全遮蔽的情況下,攻擊者會在觸控區域添加疊加層,而在部分遮蔽中,觸控區域仍會保持未遮蔽狀態。
影響
Tapjacking 攻擊用於誘騙使用者執行特定動作。這會造成什麼影響,則視攻擊者指定的動作而定。
風險:完全遮蔽
在完全遮蔽的情況下,攻擊者會在觸控區域添加疊加層,進而駭入觸控事件:
因應措施
在程式碼中設定 View.setFilterTouchesWhenObscured(true)
可避免發生完全遮蔽情形。此設定會封鎖疊加層傳遞的觸控事件。如果您較喜歡採用宣告式方法,也可針對要保護的 View
物件在版面配置檔案中加入 android:filterTouchesWhenObscured="true"
。
風險:部分遮蔽
在部分遮蔽攻擊中,觸控區域仍會保持未遮蔽狀態:
因應措施
手動忽略含有 FLAG_WINDOW_IS_PARTIALLY_OBSCURED
旗標的觸控事件,即可緩解部分遮蔽造成的影響。這種情況沒有預設防護機制。
潛在警告:這項因應措施可能會對沒問題的應用程式造成干擾。而在某些情況下,也可能會無法推出這項修正程式,因為如果部分遮蔽是由沒問題的應用程式引起,可能會對使用者體驗造成負面影響。
特定風險
本節列舉必須採用非標準因應策略或在特定 SDK 層級進行因應的風險,並提供相關完整資訊。
風險:android.Manifest.permission.SYSTEM_ALERT_WINDOW
SYSTEM_ALERT_WINDOW
權限可讓應用程式建立一個視窗,顯示在所有應用程式頂端。
因應措施
我們在較新版本的 Android 導入了幾項因應措施,包括:
- 在 Android 6 (API 級別 23) 以上版本中,使用者必須明確授予應用程式建立疊加視窗的權限。
- 在 Android 12 (API 級別 31) 以上版本中,應用程式可以將
true
傳遞至Window.setHideOverlayWindows()
。
風險:自訂浮動式訊息
攻擊者可利用 Toast.setView()
自訂浮動式訊息的外觀。在 Android 10 (API 級別 29) 以下版本中,惡意應用程式可能會從背景啟動這類浮動式訊息。
因應措施
如果應用程式以 Android 11 (API 級別 30) 以上版本為目標,系統會封鎖背景自訂浮動式訊息。但在某些情況下,攻擊者可以透過「浮動式訊息爆發」的手段來規避這個因應措施,也就是在前景中將多個浮動式訊息排入佇列,這麼一來,即使應用程式會進入背景,這些浮動式訊息仍會保持啟動。
自 Android 12 (API 級別 31) 起,系統已可全面因應背景浮動式訊息和浮動式訊息爆發攻擊。
風險:活動三明治
如果惡意應用程式設法說服使用者開啟應用程式,還是可以從受害者的應用程式中啟動活動,然後將其與自身活動重疊,形成「活動三明治」並建立部分遮蔽攻擊。
因應措施
請參閱部分遮蔽的一般因應措施。為進行深入防護,請確保不要匯出不需匯出的活動,以免攻擊者將這些活動變成活動三明治。
資源
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- android:exported
- # 金鑰管理 {:#key-management}
- 直接從 APK 執行嵌入式 DEX 程式碼