?背景:OWASP MASVS(Mobile Application Security Verification Standard 移動應用安全驗證標準)是移動應用安全的行業標準。
一、MASVS-STORAGE:存儲
? ?1.1 不當暴露FileProvider目錄
????????配置不當的?FileProvider
?會無意中將文件和目錄暴露給攻擊者。根據配置,攻擊者可以讀寫這些暴露的文件,進而導致敏感信息泄露,甚至在最壞的情況下導致任意代碼執行。例如,如果應用的配置中設置了?<root-path>
,攻擊者就可以訪問數據庫中存儲的敏感信息或覆蓋應用的原生庫,從而導致任意代碼執行。
? ?1.2 日志信息泄露
????????應用將敏感數據打印到設備日志中。如果這些敏感信息暴露給惡意行為者,這些信息本身可能很有價值(例如用戶的憑據或個人身份信息 (PII)),或者可能促成進一步的攻擊。
? ?1.3 路徑遍歷
????????當攻擊者可以控制路徑的一部分,而該路徑在未經驗證的情況下被傳遞給文件系統 API 時,就會發生路徑遍歷漏洞。這可能導致未經授權的文件系統操作。例如,攻擊者可能會使用特殊字符,例如?../
,通過遍歷到目標目錄之外,意外地更改資源目標。通常會導致文件覆蓋(寫入文件時)、數據泄露(讀取文件時)或權限更改(更改文件或目錄權限時)。
? ?1.4 敏感數據存儲在外部存儲中
????????如果敏感數據存儲在外部存儲上,則設備上任何具有 READ_EXTERNAL_STORAGE 權限的應用都可以訪問它。這使得惡意應用能夠靜默訪問永久或臨時存儲在外部存儲上的敏感文件。此外,由于外部存儲上的內容可以被系統上的任何應用訪問,任何聲明了 WRITE_EXTERNAL_EXTERNAL_STORAGE 權限的惡意應用都可以篡改外部存儲上的文件,例如包含惡意數據。如果將此惡意數據加載到應用中,則可能用于欺騙用戶甚至實現代碼執行。
????????在需要從外部存儲加載數據或代碼到應用中的情況下,建議執行完整性檢查,以驗證其他應用是否篡改了這些數據或代碼。文件的哈希值應以安全的方式存儲,最好是加密后存儲在內部存儲中。
? ?1.5 WebViews - 不安全的文件包含
????????文件包含的影響取決于在 WebView 中配置的 WebSettings。過于寬泛的文件權限可能允許攻擊者訪問本地文件并竊取敏感數據、PII(個人身份信息)或應用私有數據。啟用 JavaScript 執行可能允許攻擊者在 WebView 內或在用戶的設備上運行 JavaScript。onShowFileChooser
?方法選擇的文件可能會損害用戶安全,因為該方法或 WebView 無法確保文件來源是可信的。
? ?1.6 Zip路徑遍歷
????????Zip 路徑遍歷漏洞,也稱為 ZipSlip,與處理壓縮檔案有關。以 ZIP 格式為例,類似的問題也可能出現在處理其他格式(如 TAR、RAR 或 7z)的庫中。
????????此問題的根本原因是,在 ZIP 檔案中,每個打包的文件都存儲有一個完全限定名稱,該名稱允許包含斜杠和點等特殊字符。來自?java.util.zip
?包的默認庫不檢查檔案條目的名稱中是否包含目錄遍歷字符 (../
),因此在將從檔案中提取的名稱與目標目錄路徑連接時必須格外小心。
驗證來自外部來源的任何 ZIP 提取代碼片段或庫非常重要。Zip 路徑遍歷漏洞可用于實現任意文件覆蓋。
二、MASVS-CRYPTO:加密?
2.1 已損壞或有風險的加密算法
????????無意中實現弱或過時的加密算法時,就會產生重大風險。這種漏洞源于這些算法的固有弱點,擁有必要計算能力或知識的惡意攻擊者可以利用這些弱點。此類利用的后果可能非常嚴重,可能導致未經授權的訪問、數據泄露以及敏感信息的篡改。
????????使用弱或已損壞的加密哈希函數(例如?MD5
?或?SHA1
)對數據的安全性和完整性構成重大風險。哈希函數旨在為輸入數據創建唯一的、固定長度的“指紋”(哈希值),使其可用于多種目的,包括數據完整性驗證、密碼存儲和數字簽名。但是,如果使用弱或已遭破解的哈希函數,則可能會出現多種漏洞。
????????使用弱或已損壞的加密函數(例如?DES
?或?RC4
)會對敏感數據的保密性構成嚴重風險。加密旨在通過將信息轉換為不可讀格式來保護信息,但如果加密算法存在缺陷,則這些保護措施可能會被繞過。
????????使用弱或已損壞的加密簽名函數(例如?RSA-PKCS#1 v1.5?或基于弱哈希函數的函數)對數據和通信的完整性構成嚴重風險。數字簽名旨在提供身份驗證、不可否認性和數據完整性,確保消息或文檔源自特定發送者且未經篡改。但是,當底層簽名算法存在缺陷時,這些保證可能會受到損害。
2.2 硬編碼的加密密鑰
????????密鑰存儲通常未得到充分利用,并且常見的做法是將它們硬編碼到應用程序中,作為代碼中的字符串或字節數組,或者作為資產文件(如?strings.xml
)中的一部分。有權訪問逆向工程工具的攻擊者可以非常容易地檢索到硬編碼的密鑰。
2.3 弱PRNG
????????偽隨機數生成器 (PRNG) 是一種算法,它根據稱為種子的起始值生成可預測的數字序列。PRNG 生成的數字序列具有與真隨機數序列近似相同的屬性,但生成速度更快,計算成本也更低。
????????弱 PRNG 漏洞發生在開發者將普通 PRNG 用于加密目的時,而不是使用密碼學安全偽隨機數生成器 (CSPRNG)。CSPRNG 有更嚴格的要求,當種子未知時,它們必須只給攻擊者在區分輸出序列與實際隨機序列方面帶來微不足道的優勢。
????????如果在身份驗證等安全上下文中使用非密碼學安全的 PRNG,攻擊者可能猜出隨機生成的數字并獲得對特權數據或功能的訪問權限。
三、MASVS-NETWORK:網絡通信
3.1 明文通信
????????當 Android 應用通過網絡發送或接收明文數據時,任何監控網絡的人都可以攔截并讀取這些數據。如果這些數據包含密碼、信用卡號或個人消息等敏感信息,則可能導致身份盜竊、金融欺詐和其他嚴重問題。
????????例如,以明文形式傳輸密碼的應用可能會將這些憑據暴露給攔截流量的惡意攻擊者。然后,這些數據可能會被用于未經授權地訪問用戶的賬戶。
3.2 不安全的DNS設置
????????不安全的 DNS 配置可能在開發者自定義應用的 DNS 傳輸行為、繞過設備默認設置或用戶在 Android 9 及更高版本中指定私有 DNS 服務器時發生。偏離已知良好 DNS 配置可能使用戶容易受到 DNS 欺騙或 DNS 緩存污染等攻擊,從而使攻擊者將用戶流量重定向到惡意網站。
????????如果惡意網絡攻擊者能夠欺騙 DNS,他們可以在不引起用戶懷疑的情況下,隱秘地將用戶重定向到他們控制的網站。例如,這個惡意網站可能會網絡釣魚用戶的個人身份信息,對用戶造成拒絕服務,或者在用戶不知情的情況下將用戶重定向到其他網站。
3.3 不安全的下載管理器
????????DownloadManager 是在 API level 9 中引入的一個系統服務。它處理長時間運行的 HTTP 下載,并允許應用作為后臺任務下載文件。其 API 處理 HTTP 交互,并在失敗、連接更改或系統重啟后重試下載。DownloadManager 存在安全相關漏洞,使其成為在 Android 應用中管理下載的不安全選擇。
????????使用 DownloadManager 可能通過利用外部存儲的 WRITE 權限導致漏洞。由于 android.permission.WRITE_EXTERNAL_STORAGE 權限允許對外部存儲進行廣泛訪問,攻擊者可能靜默修改文件和下載內容,安裝潛在惡意應用,拒絕核心服務,或導致應用崩潰。惡意行為者還可以操縱發送給 Uri.parse() 的內容,導致用戶下載有害文件。
四、MASVS-PLATFORM:平臺交互
4.1 內容解析器
????????ContentResolver
?是一個“為應用提供對內容模型訪問權限的類”。ContentResolver 公開用于與【已安裝的應用 (content://
?URI scheme)、文件系統 (file://
?URI scheme)、Android 提供的支持 API (android.resource://
?URI scheme)】進行交互、獲取或修改的方法。
????????濫用使用?file://
?URI 漏洞的?ContentResolver
?利用了?ContentResolver
?返回 URI 所描述的文件描述符的功能。此漏洞影響?ContentResolver
?API中的函數,例如?openFile()
、openFileDescriptor()
、openInputStream()
、openOutputStream()
?或?openAssetFileDescriptor()
。該漏洞可以通過完全或部分由攻擊者控制的?file://
?URI 進行濫用,強制應用訪問本來無權訪問的文件,例如內部數據庫或共享偏好設置。
????????一種可能的攻擊場景是創建一個惡意的圖庫或文件選擇器,當被有漏洞的應用使用時,會返回一個惡意的 URI。
4.2 隱式Intent劫持
????????當應用在調用 Intent 時未指定完全限定的組件類名或軟件包時,會發生隱式 Intent?劫持漏洞。這會導致惡意應用注冊 Intent 過濾器來截獲該 Intent,而非由目標應用處理。
根據 Intent 內容,攻擊者可以讀取或修改敏感信息,或與可變對象(例如可變的PendingIntent?或?Binder)進行交互。
劫持隱式 Intent 還可能讓攻擊者執行任意操作,例如啟動攻擊者控制的組件。
4.3 不安全的API使用
? ? ? ? 許多移動應用使用外部 API 來提供功能。傳統上,使用靜態令牌或密鑰來驗證連接到服務的應用。然而,在客戶端-服務器設置(或移動應用和 API)的環境中,使用靜態密鑰通常不被視為訪問敏感數據或服務的安全身份驗證方法。與內部基礎設施不同,任何人只要擁有該密鑰,就可以訪問外部 API 并濫用該服務。
????????例如,靜態密鑰可能通過逆向工程從應用中獲取,或者在移動應用與外部 API 通信時被攔截。此外,靜態密鑰也更有可能被硬編碼到應用中。
????????當未使用足夠安全的身份驗證和訪問控制時,API 數據和服務就會面臨風險。
????????使用靜態密鑰時,攻擊者可以在不受任何時間限制的情況下,通過重放請求或使用(被攔截或逆向工程獲取的)密鑰構造新請求來利用 API。
4.4 不安全的廣播接收器
????????不當實現的廣播接收器可能允許攻擊者發送惡意 Intent,使存在漏洞的應用執行原本不打算供外部調用方執行的操作。
????????該漏洞通常指廣播接收器被意外導出,具體方法包括在 AndroidManifest 中設置?android:exported="true",或者以編程方式創建廣播接收器(默認情況下會使接收器變為公開)。如果接收器不包含任何 intent 過濾器,默認值為?"false"
;但如果接收器包含至少一個 intent 過濾器,則 android:exported 的默認值為?"true"
。
4.5 Intent重定向
????????Intent 重定向是指攻擊者可以在易受攻擊的應用上下文中,部分或完全控制用于啟動新組件的 intent 的內容。用于啟動新組件的 intent 可以通過多種方式提供,最常見的方式是作為序列化的 intent 放在?extras
?字段中,或者 marshaled 成字符串再解析。參數的部分控制也可能導致相同結果。
4.6 基于權限的導出組件訪問控制
????????Android 權限是在應用的清單中聲明的字符串標識符,用于請求訪問受限數據或操作,并在運行時由 Android 框架強制執行。
????????與基于權限的訪問控制相關的漏洞發生在應用的組件(例如?activity、receiver、content provider?或?service)滿足以下所有條件時
- 組件未在?
Manifest
?中關聯任何?android:permission
; - 該組件執行一項敏感任務,而執行該任務所需的權限用戶已經批準;
- 該組件已導出;
- 該組件未執行任何手動(清單或代碼級別)權限檢查;
發生這種情況時,惡意應用可以通過濫用易受攻擊組件的權限來執行敏感操作,將易受攻擊應用的權限代理給惡意應用
4.7 Pending Intent
????????一個?PendingIntent?是系統維護的令牌引用。應用 A 可以將 PendingIntent 傳遞給應用 B,以便應用 B 代表應用 A 執行預定義操作,無論應用 A 是否仍然存活。
????????PendingIntent 可以是可變的,這意味著應用 B 可以按照?fillIn()?文檔中描述的邏輯來更新指定操作的內部 Intent。換句話說,惡意應用可以修改 PendingIntent 中未填充的字段,從而訪問受漏洞影響應用中原本不可導出的組件。
????????除非設置了?FLAG_ONE_SHOT?標志,否則 PendingIntent 可以被重放。務必使用 FLAG_ONE_SHOT 來避免重放攻擊(執行不應重復的操作)。
4.8 待處理Intent的發送方
????????使用?PendingIntent.getCreator*()?或?PendingIntent.getTarget*()?來判斷是否信任 PendingIntent 的發送方會產生利用風險。
PendingIntent.getCreator*()?或?PendingIntent.getTarget*()?返回 PendingIntent 的創建方,它并不總是與發送方匹配。創建方可能受到信任,但發送方永遠不應受到信任,因為發送方可能是惡意應用,它通過各種機制獲取了另一個應用的 PendingInten
4.9 粘性廣播
????????Android 應用和 Android 系統可以使用廣播作為消息傳遞系統,以通知其他應用它們可能感興趣的事件。粘性廣播是一種特殊的廣播類型,其發送的 Intent 對象在廣播完成后仍保留在緩存中。系統可以將粘性 Intent 重新廣播給稍后注冊的接收器。不幸的是,粘性廣播 API 存在許多與安全相關的缺點,因此已在 Android 5.0(API 級別 21)中被棄用。
4.10 StrandHogg攻擊/任務親和力漏洞
????????StrandHogg 攻擊 / 任務親和力漏洞是由 Android 處理多任務的方式中的設計缺陷導致/促成的,特別是稱為“任務重新關聯”(task reparenting)的功能。應用任務重新關聯是一種允許應用將 Activity 從一個任務移動到另一個任務的功能。
StrandHogg 攻擊利用了對如何審查傳入的應用任務堆棧 Activity 的不明確之處,并允許惡意應用進行以下操作:
-
將惡意 Activity 移入或移出受害者堆棧
-
在受害者 Activity 完成后,將惡意 Activity 設置為返回堆棧
通過操縱?allowTaskReparenting
?和?taskAffinity
?設置來利用此漏洞。
4.11 點擊劫持
????????觸屏劫持(Tapjacking)是 Android 應用中與?點擊劫持(clickjacking)網頁漏洞?等效的一種攻擊:惡意應用通過使用覆蓋層或其他方式模糊 UI,欺騙用戶點擊安全相關的控件(例如確認按鈕)。兩種攻擊變體:完全遮擋和部分遮擋。在完全遮擋中,攻擊者覆蓋觸摸區域;而在部分遮擋中,觸摸區域保持清晰。
4.12 不安全地使用深層鏈接
????????與深層鏈接相關的安全風險源于其核心能力:實現移動應用內的無縫導航和交互。深層鏈接漏洞是由深層鏈接實現或處理中的弱點引起的。惡意攻擊者可以利用這些缺陷訪問特權功能或數據,從而可能導致數據泄露、隱私侵犯和未經授權的操作。攻擊者可以通過各種技術利用這些漏洞,例如深層鏈接劫持和數據驗證攻擊。
4.13 WebView - 原生橋接
????????原生橋接(有時也稱為 JavaScript 橋接)是一種通過使用?addJavascriptInterface?方法實現 WebView 和原生 Android 代碼之間通信的機制。這允許在 WebView 中運行的 JavaScript 代碼與 Android 應用的 Java 代碼之間進行雙向通信。addJavascriptInterface
?方法將一個 Java 對象暴露給 WebView 的所有幀,任何幀都可以訪問該對象名稱并調用其方法。但是,應用無法驗證 WebView 內調用幀的來源,這會引發安全問題,因為內容的信任度是不確定的。
原生橋接也可以使用 Android 的?WebViewCompat.postWebMessage?或?WebMessagePort.postMessage?通過 HTML 消息通道實現,與 JavaScript?Window.postMessage?進行通信。WebViewCompat.postWebMessage
?和?WebMessagePort.postMessage
?可以接受通過?Window.postMessage
?發送的 JavaScript 消息,這些消息將在 WebView 中執行。
原生橋接存在多種風險
-
基于 JavascriptInterface 的橋接
-
The?
addJavascriptInterface
?method injects a supplied Java object into every frame of the WebView, including iframes, which means it is susceptible to attack by malicious third parties injecting frames into a legitimate website. Applications targeting API level 16 or earlier are particularly at risk of attack because this method can be used to allow JavaScript to control the host application. -
在啟用了原生橋接的 WebView 中反映不受信任的用戶提供的內容,可能導致跨站腳本 (XSS) 攻擊。
-
-
基于 MessageChannel 的橋接
-
消息通道端點缺少來源檢查,這意味著會接受來自任何發送方的消息,包括包含惡意代碼的消息。
-
有可能意外地將 Java 暴露給任意 JavaScript。
-
4.14 android:debuggable
????????android:debuggable
?屬性用于設置應用是否可調試。此屬性作用于整個應用,無法由單個組件覆蓋。默認情況下,此屬性設置為?false
。
允許應用自身可調試并非漏洞,但這樣做會通過意外和未經授權訪問管理功能而使應用面臨更大的風險。這可能會使攻擊者比預期獲得更多訪問應用和應用所用資源的權限。
4.15 android:exported
????????android:exported
?屬性用于設置其他應用的組件(activity、服務、廣播接收器等)是否可以啟動某個組件
-
如果設置為?
true
,則任何應用都可以通過確切的類名訪問并啟動此 activity。 -
如果設置為?
false
,則只有同一應用的組件、具有相同用戶 ID 的應用或特權系統組件才能啟動此 activity。
該屬性默認值背后的邏輯隨著時間推移而變化,并且根據組件類型和 Android 版本而有所不同。例如,在 API 級別 16 (Android 4.1.1) 或更低版本中,<provider>
?元素的值默認設置為?true
。未顯式設置此屬性可能會導致某些設備上的默認值不同。
五、MASVS-CODE:代碼質量
5.1 跨應用腳本攻擊
????????WebView 是 Android 應用中嵌入的瀏覽器組件,用于在應用內顯示網頁內容。它在應用的用戶界面中渲染 HTML、CSS 和 JavaScript。當應用接受惡意 JavaScript 到 WebView 中,但沒有進行充分的驗證或清理時,應用就容易受到應用間腳本攻擊。
????????當攻擊者控制的 JavaScript 內容未經驗證或清理就被傳遞給易受攻擊應用的 WebView 時,應用間腳本攻擊漏洞就會被利用。因此,攻擊者提供的 JavaScript 代碼會在受害者應用的 WebView 上下文中執行。惡意 JavaScript 代碼隨后可以使用與受害者應用相同的權限,這可能導致敏感用戶數據被盜和賬戶劫持。
5.2 自定義權限
????????自定義權限相關的風險出現在自定義權限定義缺失或拼寫錯誤時,或者當相應的?android:protectionLevel
?屬性在 Manifest 中被誤用時。
例如,可以通過惡意應用創建同名但定義了不同保護級別的自定義權限來利用這些風險。
自定義權限旨在實現與其他應用共享資源和功能。自定義權限的合法用途示例如下:
-
控制兩個或多個應用之間的進程間通信 (IPC)
-
訪問第三方服務
-
限制對應用共享數據的訪問
5.3 createPackageContext
????????當開發者希望在自己的應用中為另一個應用創建上下文時,會使用?createPackageContext?方法。
????????例如,如果開發者想獲取第三方應用的資源或調用其方法,他們會使用?createPackageContext
。
然而,如果應用使用?CONTEXT_IGNORE_SECURITY?和?CONTEXT_INCLUDE_CODE?標志調用?createPackageContext
,然后調用?getClassLoader(),這可能導致應用容易受到惡意應用的代碼執行攻擊。例如,當攻擊者冒充開發者預期會出現在用戶設備上的未聲明的包名(包名搶占,package squatting)時,就可能發生這種情況。
5.4 動態代碼加載
????????將代碼動態加載到應用中會帶來需要緩解的風險。攻擊者可能會篡改或替換代碼,以訪問敏感數據或執行惡意操作。
如果攻擊者設法訪問將加載到應用中的代碼,他們可以修改代碼以達到其目的。這可能導致數據泄露和代碼執行攻擊。即使攻擊者無法修改代碼以執行其選擇的任意操作,他們仍然可能損壞或移除代碼,從而影響應用的可用性。
5.5 不當信任ContentProvider提供的文件名
????????FileProvider?是?ContentProvider?的一個子類,旨在為應用(“服務器應用”)與另一應用(“客戶端應用”)共享文件提供一種安全的方法。但是,如果客戶端應用未能正確處理服務器應用提供的文件名,則受攻擊者控制的服務器應用可能會實施其自己的惡意?FileProvider,以覆蓋客戶端應用的特定于應用的存儲空間中的文件。
????????如果攻擊者可以覆蓋應用的文件,這可能導致惡意代碼執行(通過覆蓋應用的代碼),或允許修改應用的行為(例如,通過覆蓋應用的共享偏好設置或其他配置文件)。
5.6 不安全的API或庫
????????使用不安全的 API 或庫會顯著降低應用的安全防護能力。這些依賴項中的任何一個發生安全漏洞都可能允許攻擊者利用多種途徑進行廣泛的攻擊,例如中間人 (MitM) 攻擊和遠程代碼執行 (RCE)。
????????當開發者未將安全評估和漏洞測試整合到軟件開發生命周期 (SDLC) 中,或者在某些情況下未針對應用依賴項實施自動化更新策略時,就會出現實現不安全依賴項的威脅。
????????依賴項漏洞利用通常始于分析應用二進制文件 (.apk) 以搜索存在漏洞的庫。此時,會執行開源情報 (OSINT) 來挖掘先前發現的、可能被利用的漏洞。攻擊者隨后可以利用公開披露的漏洞信息(例如常見漏洞和披露 (CVE))來進行進一步攻擊。
5.7 不安全的機器到機器通信設置
????????應用程序實現允許用戶通過射頻 (RF) 通信或有線連接傳輸數據或與其他設備交互的功能并不罕見。為此目的,Android 中最常用的技術是經典藍牙 (Bluetooth BR/EDR)、低功耗藍牙 (BLE)、Wifi P2P、NFC 和 USB。
????????這些技術通常用于需要與智能家居配件、健康監測設備、公共交通自助服務終端、支付終端以及其他 Android 設備通信的應用中。
????????與任何其他通道一樣,機器到機器通信容易受到旨在破壞兩個或多個設備之間建立的信任邊界的攻擊。惡意用戶可以利用設備偽造等技術對通信通道發動多種攻擊。
????????Android 為開發者提供了配置機器到機器通信的特定?API。
????????這些 API 應謹慎使用,因為實現通信協議時出錯可能導致用戶或設備數據泄露給未經授權的第三方。在最糟糕的情況下,攻擊者可能能夠遠程控制一個或多個設備,從而完全訪問設備上的內容。
5.8 備份安全最佳實踐
????????應用備份旨在保留用戶數據,以便日后將其恢復到新設備或在數據丟失的情況下恢復。關于應用備份的現有安全建議是微妙的,因 Android 版本和設備制造商而異。共同的主題是,這些建議旨在確保不泄露任何敏感數據。
標準 Android 備份系統為應用提供了一種最安全、最可靠且最簡單的解決方案,可將數據備份到云端或通過自動備份(此功能默認啟用,無需實施工作即可使用,且可進行擴展)和鍵值對備份將數據傳輸到新設備。我們建議使用此解決方案,因為它會將生成的備份數據存儲在其他第三方應用無法訪問的目錄中,并且支持靜態加密、傳輸中加密以及允許從備份中排除敏感數據的配置。
如果應用實施的備份解決方案不依賴于標準 Android 備份系統,則可能會增加因失誤導致敏感數據泄露的可能性。將用戶數據暴露于泄露風險的非標準備份解決方案示例包括提供“導出”或“備份”功能的應用,這些功能會在其他應用可讀取的目錄中創建應用數據的副本,因此容易被泄露(直接泄露或通過其他漏洞泄露)。
5.9 安全剪貼板處理
??????Android 提供了一個強大的框架,稱為剪貼板,用于在應用之間復制和粘貼數據。對此功能的不當實現可能會將用戶相關數據暴露給未經授權的惡意行為者或應用。
????????與剪貼板數據暴露相關的具體風險取決于應用的性質及其處理的個人身份信息 (PII)。對于金融應用而言,影響尤其高,因為它們可能暴露支付數據,或者處理雙因素身份驗證 (2FA) 代碼的應用。
5.10 SQL注入
????????SQL 注入通過向 SQL 語句插入代碼來利用易受攻擊的應用,從而訪問底層數據庫超出其有意公開接口的部分。這種攻擊可能暴露私人數據、破壞數據庫內容,甚至危及后端基礎設施。
????????通過在執行前連接用戶輸入動態創建的查詢,SQL 可能會受到注入攻擊(如:'OR 1=1–)。SQL 注入針對網絡、移動端和任何 SQL 數據庫應用。
????????SQL 注入可以暴露敏感的用戶或應用數據,繞過身份驗證和授權限制,并使數據庫容易受到損壞或刪除。其影響可能對個人數據被暴露的用戶產生危險和持久的后果。應用和服務提供商面臨丟失知識產權或用戶信任的風險。
5.11 測試/調試功能
????????發布包含測試或調試功能的生產版本可能會對應用的安全狀況產生負面影響。這些功能旨在幫助開發者在新版本發布之前或之后發現并識別應用預期用例中的錯誤,不應公開訪問。
????????應用中任何測試或調試功能的執行應僅限于有限的過渡版本集,以便只有開發者才能在受控環境中調試或測試應用功能。
5.12 不安全的反序列化
????????存儲或傳輸大量 Java 對象數據時,通常先對數據進行序列化會更高效。接收應用、activity 或 provider 在處理數據時會對數據進行反序列化。正常情況下,數據在沒有任何用戶干預的情況下進行序列化和反序列化。但是,反序列化過程與其預期對象之間的信任關系可能被惡意行為者濫用,他們可以例如攔截和修改序列化對象。這會使惡意行為者能夠執行拒絕服務 (DoS)、權限提升和遠程代碼執行 (RCE) 等攻擊。
5.13 不安全的HostnameVerifier
? ? ? ? HostnameVerifier實現負責驗證服務器證書中的主機名是否與客戶端嘗試連接的服務器主機名匹配。Android 應用中不安全的 HostnameVerifier 實現是指未能正確驗證應用正在與其通信的服務器的主機名的實現。這可能允許攻擊者冒充合法服務器,誘騙應用將敏感數據發送給攻擊者。
????????存在此漏洞是因為?HostnameVerifier
?類中包含一些函數調用,這些調用可以跳過 X.509 證書主機名驗證,而僅驗證證書哈希。一個常見的誤解是?SSLSession#isValid?函數會執行與安全相關的操作,而實際上它的目的只是檢查會話是否有效以及是否可用于恢復或加入;這兩者都不會驗證會話的*安全性*。
5.14 不安全的X509TrustManager
????????X509TrustManager
?類負責驗證遠程服務器的真實性。它通過驗證服務器證書來實現此目的。
Android 應用中不安全的?X509TrustManager
?實現是指未正確驗證應用通信服務器真實性的實現。這可能允許攻擊者冒充合法服務器,并誘騙應用將敏感數據發送給攻擊者。
????????存在此漏洞的原因在于,通過使用?X509TrustManager?類,Java/Android 允許完全覆蓋服務器驗證。?X509TrustManager
?類有兩個重要函數:checkServerTrusted()?和?getAcceptedIssuers()。可以將這些函數調用配置為信任所有 X.509 證書。最后,自定義驗證邏輯可能存在錯誤或不完整,并允許意外連接。在所有這些情況下,此類別的目的都已無效,基于?X509TrustManager
?輸出建立的網絡連接是不安全的。
5.15 原生代碼使用
????????Android 應用可以利用以 C 和 C++ 等語言編寫的原生代碼來實現特定功能。然而,當應用使用 Java Native Interface (JNI) 與此原生代碼交互時,可能會暴露自身于原生代碼實現中可能存在的漏洞,例如緩沖區溢出和其他問題。
5.16 XML外部實體注入
????????XML 外部實體注入 (XXE) 是針對解析 XML 輸入的應用的攻擊。當配置薄弱的 XML 解析器處理包含外部實體引用的不可信 XML 輸入時,就會發生 XXE 攻擊。此攻擊可用于引發多起事件,包括拒絕服務、文件系統訪問或數據泄露。
????????當應用解析 XML 文檔時,它可以處理文檔中包含的任何 DTD(文檔類型定義,也稱為外部實體)。攻擊者可以利用此行為,將惡意代碼注入為 DTD。然后,此代碼可以訪問設備文件系統的某些部分,這些部分僅對應用可見,并可能包含敏感數據。此外,此惡意代碼可以從設備發出請求,可能繞過外圍安全措施。
5.17 WebView-不安全的URI加載?
當 Android 應用未能正確評估 URI 的有效性便將其加載到 WebView 時,就會發生不安全的 URI 加載。
????????將惡意 URI(即繞過過濾/白名單的 URI)加載到 WebView 的情況下,可能導致賬戶被盜(例如,使用網絡釣魚)、代碼執行(例如,加載惡意 JavaScript)或設備被入侵(通過超鏈接傳遞利用代碼)。
參考鏈接:降低應用中的安全風險 ?|? 安全 ?|? Android 開發者