前言
從昨天(2020-03-26)開始,國內多地出現了無法訪問啓用HTTPS的Github Pages、GitHub主站、京東等站點的情況,涉及電信、移動等多個運營商。上述站點的證書都被一個未被信任的自簽名的證書所替代,因此被瀏覽器所攔截。
在此事件中,攻擊方僅替換了目標站點的證書,目標站點仍爲實際的IP。對於此事件的具體情況,我們在這就不細談了,有興趣的朋友可參考網絡上的相關文章。本文主要要說一下和事件相關的中間人攻擊(Man-in-the-middle attack, MITM攻擊)。
什麼是中間人攻擊
首先,我們使用一個通俗的例子介紹一下中間人攻擊:
李雷喜歡班上的女同學韓梅梅,於是便寫了封情書請同學轉交給給韓梅梅,但是同學李狗蛋偷偷把情書的內容改成了“吔屎啦你”,於是一段美好的姻緣沒來得及開始就已經結束了。
對於“李雷”而言,他所知的是情書已經給了“韓梅梅”;對於“韓梅梅”而言,她所知的是“李雷”給她一封寫有“吔屎啦你”的信。這就是一個典型的中間人攻擊的例子,作爲被信任的中間人“李狗蛋”,他可以在“李雷”以及“韓梅梅”不知情的情況下對書信做出修改。
我們看一下維基百科中關於中間人攻擊概念的說明:
中間人攻擊在密碼學和計算機安全領域中是指攻擊者與通訊的兩端分別創建獨立的聯繫,並交換其所收到的數據,使通訊的兩端認爲他們正在通過一個私密的連接與對方直接對話,但事實上整個會話都被攻擊者完全控制。在中間人攻擊中,攻擊者可以攔截通訊雙方的通話並插入新的內容。
簡單的說,中間人攻擊就是可以在通信雙方不知情的情況下,監聽、攔截、修改通信的信息。當前有許多的方法可以實現通信數據的攔截,例如在目標用戶終端安裝病毒進行攔截等。
以HTTPS爲例的中間人攻擊
例如我們訪問某一個使用HTTP協議的網站,通信的數據都是通過明文傳輸,中間人容易僞造通信的內容。HTTPS的出現使得通信的安全性大幅度提高,但是,HTTPS也不是萬能的。如同本次針對GitHub等站點的攻擊,攻擊方替換了站點的證書,但由於該證書爲自簽名證書而被攔截。若攻擊方替換的證書爲可信的證書,作爲中間人便可順利的對通信進行控制。下面是一個針對HTTPS攻擊的例子。
黑客通過一些手段在用戶終端安裝僞造的CA根證書並劫持了用戶的DNS。用戶A需要在https://www.bank.com
上轉賬10000元至用戶B的賬戶上,下面是轉賬的通信過程(簡化了HTTPS的具體流程):
- 用戶A通過
https://www.bank.com
域名訪問中間人僞造的站點,因爲本地安裝了攻擊方簽發的僞造根證書,客戶端成功驗證站點的證書; - 用戶A提交轉賬請求,發送數據
{ account: 'user_b', amount: 10000.00 }
,數據通過僞造的證書加密並提交至中間人服務器; - 中間人服務器使用僞造的證書解密數據並修改爲
{ account: 'hacker', amount: 10000.00 }
,並通過真實的證書提交至銀行服務器; - 銀行服務器通過真實證書解密數據,並將用戶A的餘額轉賬至攻擊方的賬戶中。
通常情況下,CA在簽發證書前需要驗證請求方是否擁有該域名。但用戶端安裝了不可信的CA證書,攻擊方便可通過其僞造證書。對於普通用戶而言,儘可能不要安裝第三方提供的根證書,避免此情況發生。
幾種防禦中間人攻擊的方法
對於站點擁有者:
- 使用HTTPS而非HTTP,並開啓HSTS
- 對通信的數據進行加密或校驗
- 通信延遲測試[2]
- …
對於普通用戶:
- 安裝防火牆及殺毒軟件
- 謹慎使用不熟悉的網絡,尤其是開放網絡
- 謹慎訪問瀏覽器提示證書錯誤的站點
- 不隨意安裝證書
- …
參考資料
- 中間人攻擊 - Wikipedia
- 黎松, 段海新, 李星. 域間路由中間人攻擊的實時檢測系統[J]. 清華大學學報(自然科學版), 2015, 55(11): 1229-1234