安卓安全問題手冊

問題:RSA加密算法不安全使用帶來的安全風險

RSA加密算法是一種非對稱加密算法。當其密鑰長度過短,通常認爲長度小於512位時,就會存在較高的被破解風險;沒有使用正確的工作模式和填充方式,將會存在重放攻擊的風險。因RSA加密算法不安全使用造成的加密方法失效,可能造成客戶端隱私數據泄露、加密文件破解、傳輸數據被獲取、中間人攻擊等後果,導致用戶敏感信息被竊取。

解決方案

  1. 使用RSA算法進行數字簽名時,建議密鑰長不要低於512位,推薦1024位
  2. 使用RSA加密時,如果設置工作模式爲ECB,建議填充方式爲OAEPWithSHA256AndMGF1Padding

 

問題:截屏攻擊風險

截屏攻擊是指在APP運行過程中,界面被監控並且截屏或者錄屏。截屏攻擊主要發生在APP登錄、身份認證、資金操作等界面。Android5.0中增加了一個MediaProjection接口,它提供截屏或者錄屏的服務,准許APP擁有截取屏幕或者記錄系統音頻的能力。同時系統允許其他消息窗口覆蓋在系統的錄製提示上,從而在用戶無感知的情況下啓動錄屏或者截屏工具。通過此方式,攻擊者可以獲取APP關鍵界面的截圖或者錄像,從而獲取用戶的敏感信息。

解決方案

在Activity的oncreate()方法中調用:getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);或者getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);來達到防止截屏攻擊的目的。

 

問題:ZipperDown漏洞

如果大量應用會讀取zip壓縮包進行相關邏輯業務,常見的場景就是從服務器下載壓縮包,進行資源、代碼熱更新。在解壓zip包時,如果對文件名沒有進行限制,通過在文件名加上 ../../ 前綴的方式,可以將文件解壓到任意路徑。如果攻擊者用遠程劫持或者本地替換等方式將APP將要加載的正常zip包替換爲帶有路徑前綴的惡意zip包,而APP又未對解壓文件的文件名稱進行處理,則可能會出現攻擊者可以對應用資源、代碼進行任意篡改、替換,從而實現遠程代碼劫持等安全問題。

解決方案

1. 對zip包進行解壓操作時,在獲取文件名後,添加過濾代碼對文件名中可能包含的 ../ 進行過濾判斷。

2. 使用通信協議加密技術,對通信過程中的數據進行加密保護,保證數據不被篡改。

3. 建議客戶端與服務端使用加密通道進行數據交互,並對傳輸數據進行完整性校驗,防止zip包被攔截替換。

 

 

問題:WebView明文存儲密碼帶來的安全漏洞

WebView組件默認開啓了密碼保存功能,會提示用戶是否保存密碼,當用戶選擇保存在WebView中輸入的用戶名和密碼,則會被明文保存到應用數據目錄的databases/webview.db中。攻擊者可能通過root的方式訪問該應用的WebView數據庫,從而竊取本地明文存儲的用戶名和密碼。

解決方案

開發者調用 WebView.getSettings().setSavePassword(false),顯示調用API設置爲false,讓WebView不存儲密碼。

 

問題:WebView遠程代碼執行漏洞

Android API level 17以及之前的系統版本,由於程序沒有正確限制使用addJavascriptInterface方法,遠程攻擊者可通過使用Java Reflection API利用該漏洞執行任意Java對象的方法。通過addJavascriptInterface給WebView加入一個 JavaScript橋接接口,JavaScript通過調用這個接口可以直接與本地的Java接口進行交互。就有可能出現手機被安裝木馬程序、發送扣費短信、通信錄或者短信被竊取,甚至手機被遠程控制等安全問題。

解決方案

如果一定要使用addJavascriptInterface接口,需使用以下方法:

  1. 設置minSdkVersion值大於或等於17,使應用不能在4.2以下系統上運行
  2. 允許被JavaScript調用的方法必須以@JavascriptInterface進行註解聲明

 

問題:未移除有風險的WebView系統隱藏接口漏洞

根據CVE披露的WebView遠程代碼執行漏洞信息(CVE-2012-663、CVE-2014-7224),Android系統中存在一共三個有遠程代碼執行漏洞的隱藏接口。分別是位於android/webkit/webview中的“searchBoxJavaBridge”接口、android/webkit/AccessibilityInjector.java中的“accessibility”接口和“accessibilityTraversal”接口。調用此三個接口的APP在開啓輔助功能選項中第三方服務的Android系統上將面臨遠程代碼執行漏洞。

解決方案

如果應用內使用了WebView組件,那麼使用 WebView.removeJavascriptInterface(String name) API時,顯示的移除searchBoxJavaBridge、accessibility、accessibilityTraversal這三個接口。

 

問題:動態註冊Receiver風險

使用BroadcastReceiver組件需要動態註冊或者靜態註冊,如果動態註冊廣播,即在代碼中使用registerReceiver()方法註冊BroadcastReceiver,只有當registerReceiver()的代碼執行到了才進行註冊,取消時則調用unregisterReceiver()方法。但registerReceiver()方法註冊的BroadcastReceiver是全局的並且默認可導出的,如果沒有限制訪問權限,可以被任意外部APP訪問,向其傳遞Intent來執行特定的功能。因此,動態註冊的BroadcastReceive可能會導致拒絕服務攻擊、APP數據泄漏或是越權調用等安全風險。

解決方案

1:在 AndroidManifest.xml 文件中使用靜態註冊 BroadcastReceiver,同時設置 exported="false"。(關於這個屬性後面會說)

2:必須動態註冊 BroadcastReceiver時,使用registerReceiver(BroadcastReceiver,IntentFilter,broadcastPermission,android.os.Handle)函數註冊。

3:Android8.0新特性想要支持靜態廣播、需要添加intent.setComponent(new ComponentName()),詳情可以自行查閱。

 

問題:公共組件配置風險

Activity、Service、Provider、Receiver四大組件若配置爲android:exported =”true”,將可以被外部應用調用,這樣存在安全隱患的風險。

解決方案

在應用的AndroidManifest.xml文件中,設置組件的android:exported 屬性爲false或者通過設置自定義權限來限制對這些組件的訪問。值得一提的是,若部分功能使用前提是配置必須使用exported爲true,這種情況開發者應該根據實際情況來進行集成。

 

問題:So文件加固檢測

So文件爲APK中包含的動態鏈接庫文件,Android利用NDK技術將C/C++語言實現的核心代碼編譯爲So庫文件供Java層調用。So文件被破解可能導致應用的核心功能代碼和算法泄露。攻擊者利用核心功能與算法可輕易抓取到客戶端的敏感數據,並對其解密,導致用戶的隱私泄露或直接財產損失。

解決方案

對so文件進行安全加固、可以使用第三方的安全平臺so加固方案。

 

問題:H5文件加固檢測

應用內若存在明文存儲的H5資源文件,則會泄露頁面基本佈局和一些重要的信息,如登錄界面、支付界面等。攻擊者可篡改H5資源文件,可能植入釣魚頁面或者惡意代碼,導致用戶賬號、密碼、支付密碼等敏感信息泄露。更有甚者,通過H5代碼暴露相關活動的業務邏輯,可能被黑產團隊用來刷紅包、薅羊毛等,造成經濟損失。

解決方案

可以使用第三方的專業安全加固方案,對應用中的H5文件進行加固保護。

 

問題:數據越權備份風險

Android 2.1以上的系統可以爲APP提供應用程序數據的備份和恢復功能,該功能由AndroidMainfest.xml文件中的allowBackup 屬性值控制,其默認值爲true。當該屬性沒有顯式設置爲false時,攻擊者可通過adb backup和adb restore對APP的應用數據進行備份和恢復,從而可能獲取明文存儲的用戶敏感信息,如用戶的密碼、證件號、手機號、交易密碼、身份令牌、服務器通信記錄等。利用此類信息攻擊者可僞造用戶身份,盜取用戶賬戶資產,或者直接對服務器發起攻擊。

解決方案

將AndroidMainfest.xml文件中的allowBackup屬性值設置爲false來關閉應用程序的備份和恢復功能;也可以使用專業安全加固方案的本地數據保護功能,避免本地數據泄露。

 

問題:日誌數據泄露風險

調試信息函數可能輸出重要的調試信息,常見的就是Log日誌類其中包含的信息可能會導致用戶信息泄露,泄露核心代碼邏輯等,爲發起攻擊提供便利,例如:Activity的組件名;通信交互的日誌;跟蹤的變量值等。

解決方案

應用內使用統一的Log控制基類,可以靈活的控制Log的輸出打印。(測試環境允許打印日誌、正式環境不打印);或者使用第三方的日誌框架。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章