明文通訊

OWASP 類別: MASVS-NETWORK:網路通訊

總覽

允許 Android 應用程式使用明文網路通訊,表示所有監控網路流量的使用者都能查看及操控傳輸的資料。如果傳輸的資料包含密碼、信用卡號碼或其他個人資訊等機密資訊,則這種安全漏洞。

無論您是否傳送機密資訊,使用明文仍可能會有安全漏洞,因為明文流量也可能會遭到 ARP 或 DNS 中毒等網路攻擊操控,進而讓攻擊者影響應用程式的行為。

影響

Android 應用程式透過網路傳送或接收明文資料時,所有監控該網路的使用者都能攔截及讀取該資料。如果這類資料含有密碼、信用卡號或個人訊息等機密資訊,可能會導致身分遭盜用、財務詐欺和其他嚴重問題。

舉例來說,如果應用程式以明文傳輸密碼,這些憑證可能會曝露給攔截流量的惡意人士。這樣一來,這項資料就可能會在未經授權的情況下,被用來存取使用者的帳戶。

風險:未加密的通訊管道

透過未加密的通訊管道傳輸資料,會導致裝置和應用程式端點之間共用的資料外洩。攻擊者可能會攔截上述資料,並可能修改該資料。

因應措施

資料應透過加密通訊管道傳送。安全通訊協定應用於取代不提供加密功能的通訊協定。

特定風險

本節列舉必須採用非標準因應策略或在特定 SDK 層級進行因應的風險,並提供相關完整資訊。

風險:HTTP

本節指南僅適用於指定 Android 8.1 (API 級別 27) 以下版本的應用程式。自 Android 9 (API 級別 28) 開始,HTTP 用戶端 (例如 URLConnection、CronetOkHttp) 會強制使用 HTTPS,因此系統會預設停用明文支援功能。不過,請注意,其他 HTTP 用戶端程式庫 (例如 Ktor) 不太可能會對明文強制執行這些限制,因此應謹慎使用。

因應措施

如要選擇不採用明文流量,並為應用程式強制採用 HTTPS,請使用 NetworkSecurityConfig.xml 功能,並只為需要的特定網域設定例外狀況 (通常用於偵錯):

Xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="false">
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">debug.domain.com</domain>
    </domain-config>
</network-security-config>

這個選項可防止應用程式因為外部來源 (如後端伺服器) 提供的網址有變,導致發生迴歸錯誤。


風險:FTP

使用 FTP 通訊協定在裝置之間交換檔案會帶來多項風險,其中最嚴重的是通訊通道缺乏加密機制。建議改用更安全的替代方案,例如 SFTP 或 HTTPS。

因應措施

在應用程式中實作資料交換機制時,建議您使用 HTTPS 等安全通訊協定。Android 提供了一組 API,可讓開發人員建立用戶端與伺服器邏輯。您可以使用傳輸層安全標準 (TLS) 保護這項功能,確保兩個端點之間的資料交換已加密,進而防止惡意使用者竊聽通訊內容並擷取機密資料。

一般而言,用戶端-伺服器架構會依賴開發人員擁有的 API。如果您的應用程式仰賴一組 API 端點,請採用下列安全性最佳做法來保護 HTTPS 通訊,確保具有深入的安全防護機制:

  • 驗證 – 使用者應使用 OAuth 2.0 等安全機制自行驗證。一般來說,我們不建議使用基本驗證,因為這類驗證方式不提供工作階段管理機制,而且如果憑證儲存方式不正確,則可以從 Base64 解碼。
  • 授權:使用者應遵循最低權限原則,僅能存取指定的資源。您可以為應用程式資產採用謹慎的存取權控管解決方案,實作這項功能。
  • 請務必根據安全性最佳做法,使用最合適且最新的密碼組合。舉例來說,如有 HTTPS 通訊,請考慮支援支援 TLSv1.3 通訊協定的回溯相容性。

風險:自訂通訊協定

實作自訂通訊協定,或嘗試手動實作眾所周知的通訊協定,可能會造成危險。

雖然自訂通訊協定可讓開發人員配合預期需求,打造專屬解決方案,但如果開發期間發生任何錯誤,都可能導致安全漏洞。舉例來說,開發工作階段處理機制中的錯誤,可能會導致攻擊者竊聽通訊內容,並即時擷取機密資訊。

另一方面,如果您在實作 HTTPS 等知名通訊協定時,未使用 OS 或維護良好的第三方程式庫,就可能導致程式碼錯誤,導致您難以 (甚至無法) 在需要時更新所實作的通訊協定。此外,這可能會引入與使用自訂通訊協定相同類型的安全漏洞。

因應措施

使用維護的程式庫實作知名通訊協定

如要在應用程式中實作 HTTPS 等知名通訊協定,請使用 OS 程式庫或維護的第三方程式庫。

這可讓開發人員安心選擇經過徹底測試、經過改進,且持續收到安全性更新以修正常見漏洞的解決方案。

此外,開發人員選擇使用知名通訊協定,可受益於各種系統、平台和 IDE 的廣泛相容性,進而減少開發過程中的人為錯誤的可能性。

使用安全檔案傳輸通訊協定

這項通訊協定會將傳輸中的資料加密。使用這類檔案交換通訊協定時,應考量其他措施:

  • SFTP 支援多種驗證方式。應使用公開金鑰驗證方法,而非密碼驗證。這類金鑰應以安全的方式建立及儲存,建議您使用 Android KeyStore 來達成這項目的。
  • 確保支援的密碼遵循安全性最佳做法。

資源