OWASP 類別: MASVS-NETWORK:網路通訊
總覽
允許 Android 應用程式使用明文網路通訊,表示所有監控網路流量的使用者都能查看及操控傳輸的資料。如果傳輸的資料包含密碼、信用卡號或其他個人資訊等機密資訊,這就是安全漏洞。
無論是否傳送私密資訊,使用明文仍可能造成安全漏洞,因為明文流量也可能遭到 ARP 或 DNS 中毒等網路攻擊,進而讓攻擊者影響應用程式的行為。
影響
Android 應用程式透過網路傳送或接收明文資料時,所有監控該網路的使用者都能攔截及讀取該資料。如果這類資料含有密碼、信用卡號或個人訊息等機密資訊,可能會導致身分遭盜用、財務詐欺和其他嚴重問題。
舉例來說,如果應用程式以明文傳輸密碼,這些憑證可能會曝露給攔截流量的惡意行為人。這樣一來,這項資料就可能會在未經授權的情況下,被用來存取使用者的帳戶。
風險:未加密的通訊管道
透過未加密的通訊管道傳輸資料,會導致裝置與應用程式端點之間共用的資料外洩。攻擊者可能會攔截並修改這類資料。
因應措施
資料應透過加密的通訊管道傳送。請使用安全通訊協定,取代不提供加密功能的通訊協定。
特定風險
本節列舉必須採用非標準因應策略或在特定 SDK 層級進行因應的風險,並提供相關完整資訊。
風險:HTTP
本節指南僅適用於指定 Android 8.1 (API 級別 27) 以下版本的應用程式。自 Android 9 (API 級別 28) 開始,URLConnection、Cronet 和 OkHttp 等 HTTP 用戶端會強制使用 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。
- 確保支援的密碼符合安全性最佳做法。
資源
- Ktor
- 使用 Cronet 執行網路作業
- OkHttp
- 為網路安全性設定選擇不採用明文流量
- 連線到網路
- 使用網路通訊協定確保安全性
- 行動與電腦版應用程式的 OAuth 2.0
- HTTP Over TLS RFC
- HTTP 驗證機制
- Mozilla 網路安全建議
- Mozilla SSL 建議設定產生器
- Mozilla 伺服器端 TLS 建議
- OpenSSH 主要手冊頁面
- SSH RFC,詳細說明可用於此通訊協定的設定和架構
- Mozilla OpenSSH 安全性建議
- Android Keystore 系統