巧用客戶端防禦 - 談談HSTS

2021-02-19 唯品會安全應急響應中心

    HSTS是HTTP Strict Transport Security響應頭的簡稱,它的主要作用是防止協議降級攻擊,如SSL剝離中間人攻擊。它的工作原理是允許伺服器下發指令給客戶端瀏覽器,要求其只能通過安全的HTTPS連接與服務端進行交互。 HSTS是一種IETF標準協議, 具體可參見RFC6797。

    在日常的瀏覽習慣中,除了通過搜尋引擎之外,大部分用戶會直接在地址欄中輸入網址進行訪問,但是其中的大多數用戶為了方便,都直接輸入網址而忽略輸入協議。例如訪問百度,輸入www.baidu.com,而不是https://www.baidu.com。當網站採用https進行通訊並同時允許http時,通常在此處服務端會做一次302重定向跳轉,客戶端才進而請求HTTPS連接。那麼這樣的場景是否存在安全風險呢?答案是肯定的,比較經典的一個case是2013年在波蘭發生過一次DNS劫持事件。

見下圖(圖片引用自CERT):

    當用戶訪問網站時,由於第一次未輸入協議(https://)導致明文HTTP通信,攻擊者可以在完成DNS劫持之後執行SSL剝離開始嗅探用戶。具體步驟為:攻擊者劫持DNS之後,進行SSL剝離劫持HTTP請求流量,將出現的HTTPS替換成HTTP,採用HTTP與受害者進行連結,同時與合法的伺服器建立HTTPS連結,受害者與合法伺服器之間的全部通信實質上是通過攻擊者進行轉發的。

    對於以上Case的解決方案,網站提供方其實是可以通過提供HSTS響應頭進行防禦,因此這也解釋了HSTS出現的歷史原因。

    當用戶初次發起請求時, 伺服器通過下發HSTS響應頭,支持HSTS功能的用戶瀏覽器將識別該頭部並將該站點域名加入其HSTS列表中,當用戶後續訪問如www.example.com而不是https://www.example.com時,瀏覽器將會阻止發出非https的請求,而是在瀏覽器內部先完成一次307跳轉(而不是302跳轉),將http轉換為https後再發出去,這樣可以有效避免SSL剝離中間人攻擊。

下面我們看下國內外HSTS應用的案例:

支付寶:瀏覽器內部做了一次307跳轉:

Facebook:瀏覽器內部同樣做了307跳轉

再看看Chrome瀏覽器內置HSTS列表

chrome://net-interals/#hsts

如圖可見Facebook早已有內置。到此為止,你可能會有疑問,比如初次加載就被劫持怎麼辦? 瀏覽器支持情況如何等等。

    針對第1個問題,如果初次訪問就被劫持怎麼辦?

    目前網站可以通過HSTS的preload屬性實現瀏覽器提前預內置,很多瀏覽器廠商已經提供了HSTS列表提前內置申請,如谷歌,可以通過提交申請進行域名提前內置,目前Facebook等很多公司均已經提前內置。


    針對第2個問題,瀏覽器的支持情況如何?

下面是目前支持HSTS功能的瀏覽器版本,看起來覆蓋還是挺全的。

http://www.rfc-editor.org/rfc/rfc6797.txt

https://blog.cloudflare.com/enforce-web-policy-with-hypertext-strict-transport-security-hsts/

http://www.freebuf.com/news/25532.html

https://www.chromium.org/hsts

https://hstspreload.appspot.com/

http://www.freebuf.com/articles/web/66827.html

https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security 


點擊下方「閱讀原文」查看VSRC2016第一季度安全專家名人榜

相關焦點

  • 談談HSTS超級Cookie
    所謂超級cookie,就是一種客戶端可以保存數據的手段,但是這種手段顯然比cookie更厲害,是可以跨任何域的(這裡根本沒有域的概念了)。具體是怎麼做的呢?phpheader("Strict-Transport-Security: max-age=31536000; includeSubDomains")//下面這個1是必須輸出的值,cb回調函數裡會用到echo 1;?
  • 開啟HSTS讓瀏覽器強制跳轉HTTPS訪問
    如果要想把自己的域名加進這個列表,首先需要滿足以下條件:即便滿足了上述所有條件,也不一定能進入HSTS Preload List,更多信息可以查看:https://hstspreload.org/。客戶端訪問此列表中的域名將主動的使用HTTPS,並拒絕使用HTTP訪問該站點。方案二:將HSTS信息加入到域名系統記錄中。但這需要保證DNS的安全性,也就是需要部署域名系統安全擴展。其它可能存在的問題由於HSTS會在一定時間後失效(有效期由max-age指定),所以瀏覽器是否強制HSTS策略取決於當前系統時間。
  • 解決缺陷,讓HSTS變得完美
    但是HSTS是有缺陷的,第一次訪問網站的客戶端,HSTS並不工作。 要解決這個問題,就要了解我們下面要講解的HSTS preload list。申請的方法和需要滿足的條件在https://hstspreload.appspot.com網站上都有具體說明。
  • HTTP Strict Transport Security (HSTS) in ASP.NET Core
    服務端通過Strict-Transport-Security響應頭來通知客戶端應用HSTS協議:Strict-Transport-Security: max-age=31536000; includeSubDomains若瀏覽器認可該響應頭:因為HSTS策略由客戶端強制執行,有一些前置條件:Preload
  • HSTS原理及實踐
    黑客可以用下圖的方式劫持用戶請求,阻止瀏覽器與伺服器創建HTTPS連接。加入Preload List的方式很簡單,訪問https://hstspreload.org/,輸入你的網站域名即可。添加的域名需要滿足以下要求:總結SSL剝離攻擊可以劫持用戶發起的http請求,讓服務端的https配置形同虛設。因此需要開啟HSTS,強制客戶端使用https連接,保障網站的安全。
  • 什麼是HSTS,為什麼要使用它?
    與此同時,如果你提供 max-age 0 的 HSTS header,瀏覽器將在下一次連接嘗試時將該站點視為一個新站點(這對測試非常有用)。你可以使用稱為 HSTS 預加載列表(HSTS preload list)的附加保護方法。Chromium 項目維護一個使用 HSTS 的網站列表,該列表通過瀏覽器發布。
  • HTTP HSTS協議和 nginx
    然而,只在主頁或者登陸頁面添加它可能是不夠的,如果你只添加到緩存的響應,客戶端可能無法看到它。確保儘可能多的合理的覆蓋到你的URL,特別注意動態的內容。server {    listen 443 ssl;    server_name www.ttlsa.com;     add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;}加強HSTS保護客戶端從
  • HSTS 詳解,讓 HTTPS 更安全
    而且 301 跳轉不會出現警示信息,客戶端很容易在不知情的情況下被攻擊劫持。您可以通過訪問https://hstspreload.org/  提交域名申請。但需要注意的是,添加後的域名將會硬編碼到瀏覽器內,除非能保證域名會長久使用 HTTPS,否則請勿隨意加入 Preload List。
  • 火影中23種防禦忍術:小南和水月免疫物理攻擊,鬼鮫巧用困術防禦
    這個原本只可以用來困人的低級水遁忍術,在幹柿鬼鮫的手中卻發揮出了防禦忍術的作用。在幹柿鬼鮫敗給邁特凱被抓住之後,鬼鮫用最後的力量掙脫木遁的束縛,就直接用水牢之術保護自己,並以自己的通靈獸殺死自己。以禁錮敵人的術來保護自己,幹柿鬼鮫對水牢之術的應用和三代火影猿飛日斬對金剛牢壁的使用頗有異曲同工之妙。土遁土矛
  • 淺析DDOS的攻擊與防禦
    二、再談談DDoS的攻擊方式三、也說說DDoS的攻擊工具1、 LOIC2、 HULK (HTTP Unbearable Load King)3、R.U.D.Y.四、 最後嘮嘮DDoS的防禦1、設置高性能設備2、帶寬得保證3、不要忘記升級4、異常流量的清洗5、考慮把網站做成靜態頁面6、分布式集群防禦先聊聊DDoS的概念和發展在說發展之前,咱先得對分布式拒絕服務(DDoS)的基本概念有個大體了解。
  • 作為 HTTPS 的骨灰粉,怎麼可以不加入 HSTS 預載入列表
    伺服器開啟 HSTS 的方法是,當客戶端通過 HTTPS 發出請求時,在伺服器返回的 HTTP 響應頭中包含 Strict-Transport-Security 欄位。瀏覽器接收到這樣的信息之後,在一定期限內對該網站的任何請求都會以 HTTPS 發起,而不會以 HTTP 發起並由伺服器重定向到 HTTPS。所以,我們早早就配置上了 HSTS 響應頭了。
  • 巧用 Docker 在 Linux 下 運行微信 PC 客戶端
    DoChat(盒裝微信)是一個 Linux 下的 Docker 化的微信 PC Windows 客戶端
  • 淺談DDos攻擊與防禦
    網絡層DDos防禦網絡架構上做好優化,採用負載均衡分流。添加抗DDos設備,流量清洗。限制單ip請求頻率。防火牆等防護設置禁止icmp包等網絡層的DDos攻擊究其本質其實是無法防禦的,我們能做的就是不斷優化自身的網絡架構,以及提升網絡帶寬。
  • 什麼是客戶端授權碼,網易企業郵箱客戶端授權碼如何使用?
    客戶端授權碼是指:為每個客戶端(如PC上的Outlook、行動裝置上的郵件APP)設置專屬的授權密碼,用授權碼代替郵箱密碼登錄客戶端,即使郵箱密碼丟失
  • 淺談 DDoS 攻擊與防禦
    脈衝波型 DDoS 相對難以防禦,因為其攻擊方式避開了觸發自動化的防禦機制。這種攻擊方式顯然沒有 SYN Flood 給伺服器帶來的衝擊大,因此攻擊者一定要用大流量 ACK 小包衝擊才會對伺服器造成影響。所以在實際環境中,只有當攻擊程序每秒鐘發送 ACK 報文的速率達到一定的程度,才能使主機和防火牆的負載有大的變化。當發包速率很大的時候,主機作業系統將耗費大量的精力接收報文、判斷狀態,同時要主動回應 RST 報文,正常的數據包就可能無法得到及時的處理。
  • 巧用窗體域 讓Word文檔受保護不被刪除
    巧用窗體域 讓Word文檔受保護不被刪除 - 選擇「文字型窗體域」step03 如果是一些只有幾個固定內容的,我們可以來設置下拉型窗體域,如性別。巧用窗體域 讓Word文檔受保護不被刪除 - 設置下拉型窗體域step04 其他內容按上面的方法設置即可,如果想看看效果的話,可以點擊工具欄上的「保護窗體」按鈕,使圖標呈鎖住狀態
  • 梭子魚推出高級程序機器人防禦技術
    領先的應用安全供應商通過機器學習技術,幫助企業機構防禦自動化威脅梭子魚高級程序機器人防禦技術通過人工智慧和機器學習技術來識別和阻止惡意程序機器人
  • Sekiro發布1.0.3(客戶端線程池)
    Sekiro發布1.0.3Sekiro是一個私有API服務暴露框架,一般用在app/js rpc黑盒調用中。
  • 如何巧滅天敵胡蜂等
    隨著最後一季的蜜源已經結束或即將結束,蜂群的群勢呈曲線下滑趨勢,蜂群對外來天敵的抵禦能力有所減弱,在面對著數隻,甚至幾十隻胡蜂或虎頭蜂的騷擾時,蜜蜂的防禦攻擊性開始崩潰,所以針對大部分養蜂新人來說我們有時候往往束手無策,亂了方寸,師夷長技以制夷,萬事萬物,撐握了其中的規律,總得有辦法的,下面這個