5

萬用字元 SSL/TLS 憑證為什麼不安全?

 2 years ago
source link: https://blog.darkthread.net/blog/wildcard-tls-cert-risk/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

萬用字元 SSL/TLS 憑證為什麼不安全?

2022-02-18 08:55 PM 5 7,244

一般 SSL/TLS 憑證需明確註明網站 DNS 供特定網站使用,每次新增網站需申請新憑證。所謂萬用字元憑證則是將 DNS 網域名稱第一段改為萬用字元「*」,讓一張憑證能適用符合該網域名稱結尾的網站,例如:若萬用字元憑證簽發對象為 *.darkthread.net,可同時用於 www.darkthread.netblog.darkthread.net,若未來再新增 shop.darkthread.net,繼續使用同一張憑證即可,不需再申請,省事又省錢。

今天聽同事提到「萬用字元憑證具有額外風險」並提供一新聞連結 - 提防ALPACA跨協定攻擊手法,美國NSA呼籲應正視萬用字元TLS憑證風險 by iThome

花了點時間反覆讀了幾回,還查了美國國家安全局的原始說明,才搞懂這種靠萬用字元憑證突破的攻擊手法,順手整理分享。

首先,要先了解所謂 ALPACA(Application Layer Protocols Allowing Cross-Protocol Attacks)攻擊手法,是利用 TLS 協定對 TCP 連線完整性保護不足的弱點,將 HTTPS 流量導向另一個 IP 的 TLS 端點。而要成功有個必要條件,導到新 IP 的 TLS 端點必須提供有效 TLS 憑證才能成功。有了這層認識,來看為什麼萬用字元憑證會增加被 ALPACA 的風險。

案例一 (案例及圖片來源:NSA 文件)

攻擊者想盜取使用者傳送給 secure.example.com 的機密資料,但 secure.example.com 防禦嚴密,屢攻不下,而 weak.example.com 是實習生寫的訂便當網站,且其使用 *.example.com 萬用字元憑證,被攻擊盯上成功入侵,在網頁加入偷資料的程式。下一步是發動 ALPACA 攻擊,將使用者送給 ℎttps://secure.example.com TLS 連線偷偷導向 ℎttps://weak.example.com,由於 weak.example.com 所回應 TLS 憑證的 DNS 為 *.example.com 可涵蓋 secure.example.com,瀏覽器判定憑證有效,完成 TLS Handsake 將資料傳送到 weak.example.com。
在此案例中,攻擊者成功用 weak.example.com 頂替 secure.example.com 接收機密資料,若 weak.example.com 使用的 TLS 憑證限定 weak.example.com,瀏覽器比對與 secure.example.com 不同,攻擊便無法成功。

攻擊者送出釣魚 URL 引誘受害者點擊,釣魚網站 URL 為合法有效網站(如 app.example.com),但攻擊者透過操控網路手法,將通往 app.example.com 的 HTTPS 連線被導向非 HTTP 服務(FTP、SMTP、POP3... 等服務,通常防護不如重要網站) - service.example.com,FTP/SMTP 無法處理 HTTPS 請求吐回錯誤訊息,而錯誤訊已被攻擊者加料植入惡意腳本,訊息以 *.example.com 憑證簽名回傳,瀏覽器視為 app.example.com 傳回的有效內容,惡意腳本得以執行展開攻擊。

整理結論:

  1. 萬用字元憑證造成風險的前題 - 使用萬用字元憑證的伺服器被入侵,萬用字元 DNS 與重要網站後端網名相同,攻擊者成功實現 TCP 連線導向
    (黑觀點:坦白說這漏洞要被利用並不容易,伺服器先被入侵是必要前題。但攻擊者既然都成功入侵了,似乎沒必要花功夫加碼連線導向搞出這麼迂迴的攻擊套路,理應有更省力的行竊管道,不過萬一... 就是這個萬一,依資安常導向無限上綱的特性及政治正確考量,萬用字元憑證只怕連合理使用的空間都沒了)
  2. 嚴格限制萬用字元憑證的使用範圍,限定性質、安全等級相同的應用,才不會讓次要網站、FTP/SMTP 等非網站主機成為破口
  3. WAF 或 Application Gateway 的 TLS Server Name Indication (SNI) 過濾能降低被導向風險
  4. 使用加密 DNS 並驗證 DNS Security Extensions (DNSSEC) 可防止 DNS 導向
  5. 啟用 Application-Layer Protocol Negotiation (ALPN) 可防止 HTTP、IMAP、POP3、FTP 頂替 HTTPS
  6. 有些新版瀏覽器已加入 ALPACA 相關防護,雖無法社絕風險,但加減有防護力,建議即時更新至最新版

【參考資料】


Recommend

  • 44
    • www.tuicool.com 5 years ago
    • Cache

    详解TLS/SSL运行机制

      TLS 传输层安全性协议(Transport Layer Security)及其前身 SSL 安全套接层(Secure Sockets Layer)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障, TLS/SSL 协议位于网络O...

  • 44
    • www.tuicool.com 5 years ago
    • Cache

    SSL&TLS Tips

    每天的日常编码工作:就是解决一个问题的时候再创造另外一个问题 Orz….. 话说刚才生成一个私钥的时候, Python3绑定libssl1.1 又崩了;正在痛苦思考中~~~ 现在有两个选择: 放弃ssl动态库调用,反正我只用ECDS...

  • 17

    本文主要探讨当我们使用SSL/TLS时,在协议级别发生了什么。为了便于分析,我将会使用一个基于OpenSSL所实现的非阻塞式TCP客户端。 我们首先要记住,SSL/TLS能让应用像底层基础设施(指的是网...

  • 13
    • fanzhenyu.cn 3 years ago
    • Cache

    SSL/TLS 协议

    SSL/TLS 协议 2019-12-01 ...

  • 50
    • blog.darkthread.net 3 years ago
    • Cache

    使用 OpenSSL 製作萬用字元 SSL 憑證

    使用 OpenSSL 製作萬用字元 SSL 憑證 2019-01-21 07:01 AM

  • 6

    PowerShell 小技巧 - 路徑參數解析與萬用字元-黑暗執行緒 手上有個需求,PowerShell 腳本接收檔案路徑參數,參數可為一到多筆,可以是明確路徑也可以包含萬用字元(Wildcard,即星號「*」),甚至要支援用 ~ 代表使用者 Home 目錄(C:\Users\username

  • 2

    Nic Lin's Blog喜歡在地上滾的工程師有時開發用或是自己防火牆內要用 HTTPS,就會需要用到自己簽 SSL 的部分通常我會在機器上的位置例如 /etc/certs/awesome.domain...

  • 4
    • blog.darkthread.net 2 years ago
    • Cache

    冷知識 - NTLMv1 為什麼不安全?

    冷知識 - NTLMv1 為什麼不安全? 2018-12-11 06:27 AM 1

  • 3

    Cmder PowerShell 視窗隱形字元地雷與 VSCode 新功能-黑暗執行緒 對,我又踩到隱形字元的坑!

  • 3

    .NET 範例 - 好用的萬用字元彈性規則檔案搜尋程式庫-黑暗執行緒 檔案同步工具需要以黑名單方式排除特定路徑及檔案型別,這回我想要高級一點,學習 .gitignore 或 .csproj 的 Include 屬性,支援

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK