當應用程式透過未加密的通道(如 HTTP)來傳輸使用者名稱、密碼、Session Token 等敏感憑證時,就犯了「傳輸層保護不足」的錯誤。這相當於將一個裝滿現金的透明袋子交給快遞員,運送過程中的任何人都可能窺視甚至取走裡面的內容。
什麼是傳輸層保護不足?
此漏洞的核心問題是,應用程式未能使用強大的加密協定(如 TLS)來保護網路通訊。當資料以明文形式在網路上傳輸時,任何能夠監聽網路流量的攻擊者(例如,在同一個公共 Wi-Fi 下的駭客)都可以輕易地攔截並讀取這些資料。
攻擊原理與範例
情境:在咖啡廳使用公共 Wi-Fi
- 不安全的登入頁面:某網站的登入頁面未使用 HTTPS 加密,或者其 SSL/TLS 憑證已過期/無效,導致瀏覽器與伺服器之間使用純文字的 HTTP 協定通訊。
- 中間人攻擊 (Man-in-the-Middle):攻擊者在咖啡廳的公共 Wi-Fi 環境中,利用工具攔截所有網路流量。
- 竊聽憑證:當使用者在該網站輸入他的帳號密碼並點擊登入時,這些憑證會以明文形式通過 Wi-Fi 傳輸。攻擊者可以像看純文字文件一樣,直接讀取到使用者的帳號密碼。
- 帳戶被盜:攻擊者利用竊取到的憑證,登入使用者的帳戶。
風險與影響
- 憑證洩漏:使用者密碼、Session Token、API 金鑰等敏感資訊被輕易竊取。
- 會話劫持 (Session Hijacking):攻擊者竊取 Session Token 後,可以直接冒用使用者身份,無需知道其密碼。
- 資料竄改:攻擊者不僅能讀取,還能修改傳輸中的資料。
防禦與預防措施
1. 全站強制使用 TLS (HTTPS)
- 確保網站的所有頁面(不僅是登入頁)都強制使用 TLS 1.2 或更高版本的 HTTPS 加密連線。
- 使用由受信任的憑證頒發機構 (CA) 所簽發的有效憑證。
- 定期檢查憑證的有效期限,並設定自動續期。
2. 啟用 HTTP 嚴格傳輸安全 (HSTS)
- 在伺服器回應中加入
Strict-Transport-Security
標頭。這會強制瀏覽器在未來一段時間內,只能透過 HTTPS 訪問您的網站,徹底杜絕降級攻擊的可能。
3. 設定 Cookie 的 Secure
旗標
- 為所有敏感的 Cookie(特別是 Session Cookie)設定
Secure
旗標。這可以確保該 Cookie 只會透過 HTTPS 連線傳輸,不會在 HTTP 連線中意外洩漏。
4. 停用不安全的加密演算法
- 在伺服器端設定,只使用目前公認安全的加密套件 (Cipher Suites),停用所有過時且不安全的演算法(如 SSLv3, RC4)。
錯誤的程式碼範例 (Django)
在 Django 設定中,SECURE_REDIRECT_EXEMPT
用於指定哪些 URL 路徑可以豁免,不被強制重定向到 HTTPS。
1 | # 錯誤範例 |
問題分析:
這段設定將登入 API 的路徑加入了豁免清單,意味著允許使用者透過不安全的 HTTP 來提交登入憑證。這直接導致了傳輸層保護不足的漏洞,讓憑證暴露於中間人攻擊的風險之下。正確的做法是移除這個豁免,強制所有登入操作都必須在 HTTPS 下進行。
說些什麼吧!