測試和偵錯功能

OWASP 類別:MASVS-CODE:程式碼品質

總覽

發布包含測試或偵錯功能的正式版本,可能會對應用程式的安全防護機制造成負面影響。這些功能有助於開發人員在新版本發布之前或之後,找出並識別應用程式預期用途中的錯誤,因此不應開放公開存取。

舉例來說,測試/偵錯功能包括:

  • 隱藏的選單
  • 啟用偵錯記錄檔的選項
  • 修改應用程式流程的選項
  • 規避付款或訂閱程序的選項
  • 規避驗證程序的選項
  • 應用程式專屬活動的測試

惡意使用者可能會利用以上所有方法,修改應用程式的預期流程或擷取系統資訊,依需求設計進一步攻擊。

公開測試或偵錯功能所帶來的風險,可能會因偵錯功能本身相關聯的動作而異。

應用程式面臨的另一個風險,是在 AndroidManifest.xml 元素 <application> 內設定的 android:debuggable 屬性。如 android:debuggable 文章所述,在設定上述值的情況下部署正式版應用程式,會讓惡意使用者得以存取以下原本不開放存取的管理資源。

影響

惡意使用者在正式版中與測試或偵錯功能互動,可能會導致非預期的結果。任何動作所造成的影響,都與指派給功能的權限直接相關。權限越高,漏洞攻擊帶來的影響就越大。應用程式內的這類功能可用於規避多項保護措施、略過付費牆、擷取系統/使用者相關資訊,或是觸發測試活動。

因應措施

避免使用偵錯元件

測試或偵錯功能一律不應在正式版應用程式元件 (例如活動、廣播接收器、服務或內容供應器) 中實作,因為這些功能一旦匯出之後,即可由裝置上的任何其他程序執行。不過,將偵錯元件設為未匯出 (android:exported="false"),也不表示功能已獲得實質保護,因為在啟用偵錯選項的情況下,任何已解鎖的裝置只要使用 Android Debug Bridge (ADB) 工具,就還是能執行偵錯元件。

限制只能在測試環境版本中使用偵錯或測試功能

應用程式中的任何測試或偵錯功能,都應只在一組受限的測試環境版本中執行,這樣才能限制開發人員僅在受控環境中對應用程式功能進行偵錯或測試。為此,您可以建立應用程式的專屬測試或偵錯版本,並對其進行進階檢測設備測試,確保任何測試或偵錯功能都能在獨立版本上執行。

實作自動化 UI 測試

在應用程式上執行測試時,請選擇採用自動化 UI 測試,因為這類可重複的測試可在獨立環境中執行,較不容易出現人為錯誤。

資源