通過區域網中間人攻擊學網路第四篇

JoeKerouac發表於2020-11-13

通過區域網中間人攻擊學網路第四篇

HTTPS篇1

Abstract

最近因為個人原因停更有段時間,後邊會慢慢恢復更新;

前三篇基本把區域網中間人攻擊的原理介紹了一下,根據前三篇我們可以做一個簡易的工具來實現區域網攻擊了,但是攻擊過程中你可能會發現一個問題,當前大多數 網站都已經採用HTTPS連結了,這樣會導致你抓到的資料都是加密過的,沒辦法檢視、修改,那搞中間人攻擊幹啥呢?抓包抓了個寂寞嗎?要解決這個問題,我們首先 要清楚HTTPS是什麼;

什麼是HTTPS,HTTPS解決了什麼問題?

要了解什麼是HTTPS,我們首先要知道HTTPS解決了什麼問題;在傳統HTTP的場景下,很容易就會被我們前邊的中間人攻擊手段攻擊,因為資料都是明文傳輸的,那麼 怎麼解決這個問題呢?答案就是加密,我們把要傳輸的內容加密,這樣即使被中間人截獲中間人也只能得到一堆亂碼,得不到真正要傳輸的明文;

雖然加密能解決中間人攻擊的問題,但是加密本身會帶來了一個新的問題,我們應該如何加密呢?傳統的對稱加密要求加密雙方要有一個相同的金鑰,這樣雙方才能互 相解密對方傳送的加密資訊,那麼伺服器如何告訴客戶端這個加密金鑰呢?因為目前為止我們的網路都是不可信的(未加密的),也就是我們不能直接通過網路傳輸這 個金鑰,幸好我們有非對稱加密,非對稱加密使用一對公私鑰對資料進行加解密,公鑰可以加密,加密資料只有私鑰可以解密,公鑰無法對加密資料進行解密,也就是 我們可以隨意分發公鑰,只要不洩露私鑰,我們的加密資料就不可能(短時間內,如果時間無限算力無限的話目前沒有任何加密演算法是安全的)被攻擊者解密,然而 非對稱加密有些問題:

  • 一個是隻能使用公鑰加密,私鑰不能做加密操作,所以當服務端把公鑰分發出去後,只有客戶端發往服務端的訊息能被加密,而服務端發往客戶端的訊息無法做加 密操作,這樣就只能做單向加密;

  • 還有一個就是非對稱加密由於其演算法導致如果要做到相同的安全等級效率要比對稱加密低好多,所以如果使用非對稱加密來加密傳輸資料會導致服務端效能大幅下降;

雖然有以上兩個問題,但是不要忘了我們還有對稱加密,如果將其兩者結合,那豈不是就可以了?我們可以這樣做:將服務端的公鑰分發出去,客戶端隨機生成一個對稱 加密金鑰,然後通過公鑰加密傳送給服務端,這樣該對稱加密金鑰的傳輸安全問題就解決了,而服務端收到加密後的金鑰後使用非對稱加密的私鑰解密出真正的對稱加密 金鑰,這樣客戶端和服務端就完成了對稱金鑰的交換,後續只需要使用對稱加密演算法加密傳輸資料即可,這樣就完美解決上邊提到的兩個非對稱加密的問題了;整個流程 如下圖所示:

到這裡,我們就完成了在不可信網路上安全的交換加密金鑰並且構建安全通道通訊的過程,而這個正是HTTPS所做的事情,HTTPS將其進行了規範化,上述是比較簡 單的描述,並且使用的加密套件(後續會解釋)也是不安全的,完整的HTTPS協議如下圖所示:

 

現在,我們已經弄清楚了HTTPS是什麼以及HTTPS解決了什麼問題;後續我們將詳細解析HTTPS協議,對握手的每個步驟進行拆分詳解;另外,目前作者已經實現了 一個丐版的HTTPS握手流程,在 git倉庫 中,找到tls包,程式碼就在裡邊,如果等不及後續文章更新可以先看 原始碼學習,裡邊僅實現了兩個加密套件,同時對於重連等複雜場景也沒有處理,所以稱其為丐版HTTPS握手,不過用來學習基本也夠了;

 

系列歷史文章

通過區域網中間人攻擊學網路

通過區域網中間人攻擊學網路 第二篇:ARP欺騙

通過區域網中間人攻擊學網路 第三篇 netfilter框架之核心篇

聯絡我

  • 作者微信:JoeKerouac

  • 微信公眾號(文章會第一時間更新到公眾號):Java初學者

  • GitHub:https://github.com/JoeKerouac

參考文獻

  • TLS1.2定義:https://tools.ietf.org/html/rfc5246

相關文章