一、前言
如今,網路環境複雜多變,尤其是在資料隱私日益受到關注的時代,HTTPS作為加密傳輸協議,已成為我們保護資料安全的關鍵武器。但,HTTPS的保護到底是如何實現的?抓包和反抓包,又是如何與之較量?今天這篇文章會對這些問題進行解析。
二、HTTPS是如何保護我們的資料的?
HTTPS,即超文字傳輸安全協議,它是在HTTP的基礎上加入了SSL/TLS加密層,從而實現了數據傳輸過程中的機密性、完整性和身份驗證。在進行HTTPS連線時,客戶端和伺服器之間會進行一系列的握手操作,以便交換加密金鑰並確認彼此身份。
基礎概念理解
在理解HTTPS之前,先了解幾個概念:
1、數字證書 (digital certificate)
在非對稱加密通訊過程中,伺服器需要將公鑰傳送給客戶端,在這一過程中,公鑰很可能會被第三方攔截並替換,然後這個第三方就可以冒充伺服器與客戶端進行通訊,這就是傳說中的“中間人攻擊”(man in the middle attack)。解決此問題的方法是透過受信任的第三方交換公鑰,具體做法就是伺服器不直接向客戶端傳送公鑰,而是要求受信任的第三方,也就是證書認證機構 (Certificate Authority, 簡稱 CA)將公鑰合併到數字證書中,然後伺服器會把公鑰連同證書一起傳送給客戶端,私鑰則由伺服器自己儲存以確保安全。
2、數字簽名 (digital signature)
這個概念很好理解,其實跟人的手寫簽名類似,是爲了確保資料傳送者的合法身份,也可以確保資料內容未遭到篡改,保證資料完整性。與手寫簽名不同的是,數字簽名會隨著文字資料的變化而變化。
3、證書鏈 (certificate chain)
證書鏈,也稱為證書路徑,是用於認證實體合法身份的證書列表,具體到 HTTPS 通訊中,就是爲了驗證伺服器的合法身份。之所以使用證書鏈,是爲了保證根證書 (root CA certificate)的安全
握手過程的細節
1、"client hello"訊息
客戶端透過傳送"client hello"訊息向伺服器發起握手請求,該訊息包含了客戶端所支援的 TLS 版本和密碼組合以供伺服器進行選擇,還有一個"client random"隨機字串。
2、"server hello"訊息
伺服器傳送"server hello"訊息對客戶端進行迴應,該訊息包含了數字證書,伺服器選擇的密碼組合和"server random"隨機字串。
3、驗證
客戶端對伺服器發來的證書進行驗證,確保對方的合法身份,驗證過程可以細化為以下幾個步驟:
(1)檢查數字簽名
(2)驗證證書鏈
(3)檢查證書的有效期
(4)檢查證書的撤回狀態 (撤回代表證書已失效)
4、"premaster secret"字串
客戶端向伺服器傳送另一個隨機字串"premaster secret (預主金鑰)",這個字串是經過伺服器的公鑰加密過的,只有對應的私鑰才能解密。
5、使用私鑰
伺服器使用私鑰解密"premaster secret"。
6、生成共享金鑰
客戶端和伺服器均使用 client random,server random 和 premaster secret,並透過相同的演算法生成相同的共享金鑰 KEY。
7、客戶端就緒
客戶端傳送經過共享金鑰 KEY加密過的"finished"訊號。
8、伺服器就緒
伺服器傳送經過共享金鑰 KEY加密過的"finished"訊號。
9、達成安全通訊
握手完成,雙方使用對稱加密進行安全通訊。
三、抓包:瞭解數據傳輸的過程
抓包,顧名思義,就是攔截並分析網路中的資料包。常用的抓包工具有Wireshark、Fiddler等,它們透過監控網路介面,可以捕獲到網路傳輸中的原始資料包,幫助開發者或安全人員除錯網路問題、分析數據流等。
然而,在抓取HTTPS資料包時,我們會發現抓包工具無法直接檢視加密後的資料。原因顯而易見:HTTPS協議使用了對稱加密的會話金鑰來保護傳輸資料,而這個金鑰只有通訊雙方知曉。因此,即便抓到資料包,我們看到的也只是一堆無法理解的密文。
抓包工具的工作原理
抓包工具通常工作在網路層,它透過抓取經過裝置的網路流量來獲取資料包。這些資料包可能包括HTTP請求、響應、DNS查詢等。然而,HTTPS流量由於經過了SSL/TLS加密,普通的抓包工具無法直接解密其中的內容。
如果想解密HTTPS流量,我們可以藉助中間人攻擊(MITM)的方式,透過偽造伺服器證書,從而攔截並解密客戶端與伺服器之間的通訊。具體操作方式是在客戶端和伺服器之間插入一個代理,使得客戶端與代理建立加密連線,而代理再與伺服器建立另一條加密連線。抓包工具透過代理的角色,可以解密並檢視其中的明文資料。
具體簡述起來就是對客戶端設定抓包工具(Charles/Fiddler等)的代理,作為客戶端的代理,由抓包工具連線到實際伺服器。
四、中間人攻擊:HTTPS的致命弱點?
儘管HTTPS在理論上提供了較為完善的安全保護,但在現實環境中,中間人攻擊仍然是一大威脅。這種攻擊的基本思路就是在客戶端和伺服器之間充當“中間人”,攔截並修改雙方傳輸的資料。
中間人攻擊的成功往往依賴於不嚴格的證書校驗。例如,使用者連線到不安全的Wi-Fi網路時,攻擊者可以透過偽造證書,劫持客戶端與伺服器的通訊。一旦客戶端接受了偽造的證書,攻擊者便可以解密並修改雙方傳輸的所有資料。
五、反抓包:如何保護資料不被竊取?
上文介紹了中間人攻擊,駭客可以透過充當中間人竊取資料,那麼開發者如何防範這種“偷窺”行為?反抓包技術,就是爲了防止網路通訊被惡意攔截和分析,特別是在金融、支付等敏感領域,反抓包的需求更為強烈。
HTTPS 的反抓包機制
HTTPS 本身是一道強大的防線。由於資料是加密的,即使抓包工具截獲了資料包,也無法直接讀取其中的內容,尤其是 HTTPS 下的對稱加密讓加密強度進一步提升。
但除了加密,現代應用還會透過多種方法來增強反抓包的能力。最常見的反抓包技術包括:
1、SSL-Pinning技術
它包含證書鎖定(Certificate Pinning)公鑰鎖定(Public Key Pinning)兩種方式:
(1)證書鎖定
證書鎖定是SSL/TLS加密的額外保證手段。它會將伺服器的證書公鑰預先儲存在客戶端。在建立安全連線的過程中,客戶端會將預置的公鑰和接受的證書做比較。如果一致,就建立連線,否則就拒絕連線。在客戶端設定證書只允許設定指定域名的證書,而不接受作業系統或瀏覽器內建的CA根證書對應的任何證書。
(2)公鑰鎖定
HTTP公鑰鎖定是HTTPS網站防止攻擊者CA機構錯誤簽發的證書進行中間人攻擊的一種安全機制,用於預防CA遭受入侵或其他會造成CA簽發未授權證書的情況。採用公鑰鎖定時,網站會提供已授權公鑰的雜湊列表,指示客戶端在後續通訊中只接受列表上的公鑰。提取證書中的公鑰並內建到客戶端中,透過與伺服器對比公鑰值來驗證連線的正確性。
2、程式碼混淆與加固
開發者透過混淆和加固程式碼,增加分析的難度,使得抓包工具在分析過程中難以追蹤請求的真正邏輯。
3、加密數據流
即便在應用層,開發者也可以對關鍵的資料進行二次加密或進行序列化處理,增加資料破解的難度。
4、使用HSTS
HTTP Strict Transport Security是一種機制,強制客戶端只能透過HTTPS連線到伺服器,並且禁止接受任何HTTP連線或降級的請求。即便攻擊者試圖強制客戶端降級到HTTP,也會被HSTS阻止。
5、完善的證書管理
確保證書及時更新,並且證書的簽發與管理過程嚴格規範,防止證書被偽造或濫用。
動態反抓包技術與攻防戰
隨著抓包技術和工具的進步,反抓包技術也逐漸演化,形成了一場“攻防戰”。有些反抓包技術會動態生成加密金鑰,這意味著每次請求的金鑰都是不同的,甚至在加密資料時會加入一些隨機值或雜湊操作,增加資料解密的難度。
還有一些更為複雜的方式,藉助於機器學習,系統會監控網路請求的行為,一旦發現可疑的抓包行為,如流量異常、請求頻率異常等,就會自動觸發防護機制,拒絕後續請求,或者讓資料返回變為亂碼。
六、HTTPS效能的隱患:為什麼有時會變慢?
HTTPS雖好,但在效能上確實有不小的隱患。由於SSL/TLS握手的複雜性,以及加解密過程帶來的開銷,HTTPS連線相比於HTTP連線有時會顯得“慢”一些。
尤其在高併發場景下,頻繁的握手與加解密會對伺服器資源帶來較大壓力。爲了解決這一問題,業界提出了不少最佳化方案,例如TLS 1.3的引入便大大簡化了握手過程,減少了連線的延遲。
此外,CDN(內容分發網路)的應用也在一定程度上緩解了HTTPS的效能瓶頸。透過在全球範圍內分佈伺服器節點,CDN可以幫助減小使用者與伺服器之間的物理距離,從而提升數據傳輸速度。
七、抓包工具的演進
隨著技術的發展,抓包工具也在不斷進化。除了傳統的抓包分析功能,現代的抓包工具還引入了自動化分析、流量回放等高階功能。Fiddler、Burp Suite等工具可以幫助開發者更好地分析複雜的網路通訊,甚至可以透過外掛擴充套件,進行自動化的安全測試。
當然,抓包工具不僅限於開發和除錯,它們在網路安全中的作用同樣不可忽視。安全研究人員常常利用抓包工具,發現應用中的漏洞和安全隱患,幫助提升整體的網路安全水平。
八、總結
在網路安全的戰場上,HTTPS無疑是保護資料安全的重要屏障。然而,隨著技術的進步,抓包與反抓包的攻防較量也在不斷升級。我們不僅要了解HTTPS的工作原理,還需深入掌握如何透過抓包工具分析資料,防範中間人攻擊和其他安全威脅。網路的世界雖然隱秘,但我們可以透過技術的力量,守護每一份隱私。