鄧逸銘 郭旭



摘要:傳輸層安全協議(TLS)是安全通信中普遍運用的傳輸協議,為安全通信提供保密性、完整性和可靠服務。該文通過對TLS協議的詳細描述,采用Wireshark分析工具在實時網絡中獲取網絡通信數據包,逐一分析TLS的工作過程,并比較了其版本迭代的差異,對深入理解TLS協議及其安全通信過程具有重要意義。
關鍵詞:傳輸層安全協議;Wireshark;安全通信
中圖分類號:TP311? ? ?文獻標識碼:A
文章編號:1009-3044(2022)27-0064-03
開放科學(資源服務)標識碼(OSID):
1 緒論
傳輸層安全協議(TLS)是在安全套接字層協議(SSL)的基礎上標準化之后的產物,目的是保證加密通信的信息完整性,確保其保密性,以實現服務端和客戶端之間的安全通信。通過Wireshark網絡協議分析工具,對實時網絡中的通信過程抓取并進行分析,展開詳細的TLS工作流程解析,對于學習TLS協議在安全通信中的顯著作用有所裨益。
2 Wireshark 協議分析工具簡介
Wireshark是一個用來抓取和解析網絡數據包的工具,對新手學習非常友好,支持圖形化界面,對各個字段的數據分析非常詳細,可以用來學習和驗證傳輸協議,以提升學習效率。Wireshark并不具有預警和風險監測功能,若產生異常流量行為,Wireshark并不能及時作出響應。可以通過Wireshark檢測網絡問題,保證網路通信中的安全性,排除差錯,降低風險[1]。Wireshark的功能十分強大,對于截取網絡數據包有其獨到的便捷性,使用過程中,需要先選擇連接到網絡的接口,設置捕獲過濾器將捕獲文件初步過濾,以免獲取過多文件,再通過顯示過濾器二次過濾,篩選出符合研究對象的數據。Wireshark還支持對會話進行著色突出,以標記不同數據,另外,Wireshark也可以通過重組不同數據包,將離散的多個數據包重新組合,以還原原本的文件[2]。
3 TLS協議簡介
3.1 TLS協議簡介
TLS協議是工作在傳輸層的安全協議,使用的是公開密鑰技術,以保證網絡安全服務的可靠性,便于數據傳輸。TLS協議分為兩層:上層即是TLS握手協議,主要用于協商密鑰,描述雙方如何安全協商會話密鑰以便安全通信,對于身份認證、交換密鑰等方面都有重要作用。下層是TLS記錄協議,用于對上層傳來的數據加密后傳輸,對于向高層協議提供加密解密等功能。TLS協議中的身份認證屬于端到端協議,無須防火墻支持。TLS是一個混合加密系統,采用的是非對稱加密和對稱加密結合的形式,同時,TLS也支持多種密鑰交換算法和加密算法,TLS通信的建立在客戶端和服務端完成TCP三次握手建立連接之后,即開始建立TLS握手過程[3]。
3.2 TLSv1.2與TLSv1.3
TLS的發展歷程是一個不斷前進,不斷迭代的過程,通過對舊版本的修補以兼容更多更新的功能。TLSv1.2主要存在的問題諸如安全問題和性能問題。TLSv1.2的安全問題依然為人詬病,被發掘出許多漏洞,在交換算法的選擇和數字簽名等各個方面都存在較嚴重的安全問題。另外,高版本的TLS協議降級為低版本時,由于不兼容性,也存在較大的漏洞。再者,TLSv1.2對于傳輸的損耗也很大,即使加入了許多的技術改善,TLSv1.2仍然需要2RTT的時延。Client端和Server端仍然需要來回兩次的通信才能建立起TLS傳輸。
而TLSv1.3是對TLSv1.2革命性的進步,在其中更新迭代了許多功能和特性。對于前文所述的安全問題和性能問題,TLSv1.3都給出了解決方案。TLSv1.3不再與之前版本兼容,同時使用安全算法加密通信,以此減少通信時間。當請求資源包并不大時,其優勢即被體現。TLSv1.3將TLSv1.2的TLS握手階段縮短為1-RTT,又由于會話復用階段發送第一個包時即可附加數據,所以引入了0-RTT概念。誠然,使用TLSv1.2和TLSv1.3在具體運用中還需要特定分析,以便在實際應用中有的放矢[4]。
4 TLS協議工作流程分析
4.1 TLSv1.3握手過程
TLSv1.3通信過程如下:
(1)由Client端發送名為Client Hello的消息到達Server端,該消息包含客戶端支持的cipher suites以及隨機數,此時為明文傳輸。
(2)當Server端收到Client端發來的消息后,返回自己支持的cipher suites信息和Server端的生成的隨機數和數字證書等信息。二者通過以上兩個步驟確定安全傳輸能力,協議的版本以及密碼套件,并可以通過商定的安全算法生成共享的密鑰信息,為后續進行對稱加密提供保障。
(3)Client端驗證(2)中Server端的數字證書,不斷溯源直達頂端CA,驗證證書的合法性。為了驗證Server端擁有與其數字證書對應的私鑰,Client端還需要驗證Server端提供的Certificate Verify信息。驗證通過后,Client發送Change Cipher Spec消息,后續依據商定的安全參數進行安全通信,發送加密的Finished消息結束握手協商。
(4)Server端接收到密文Finished后,使用(2)中計算的共享密鑰進行對稱解密,解密成功后驗證握手消息的完整性和真實性。
通過以上步驟,TLS的握手過程結束,之后進行對稱加密通信。
4.2 使用Wireshark抓包分析
首先,利用Wireshark協議分析工具對目標網站抓包。為了從大量的數據包中過濾出預分析的TLS交互流量,需要采用Wireshark的顯示過濾功能。可通過ping命令獲取目標網站域名對應的IP地址,例如圖2所示,yangtzeu.yuketang.cn目標網站的IP地址是140.179.30.171。
通過Wireshark的過濾指令ip.addr == 140.179.30.171過濾出與對應IP通信的流量,得到的未解密的流量如圖3所示。
圖3中可以看到由客戶端發來Client Hello消息,而在第二步中,服務端的Server Hello消息中數據被加密,顯示為Application Data。
為了獲得對應的解密消息,需要在抓包前進行環境變量配置。例如,在Windows 10系統中,添加Administrator的用戶變量,新建變量名為SSLKEYLOGFILE和值為C:\keys\sslkey.log(保存路徑,可自定義)。并在Wireshark首選項中對TLS協議的預主密鑰日志文件名進行配置,如圖4所示。然后重新抓包,通過加載TLS密鑰解密后,得到的數據流。
對比圖3和如圖5,可以看到Server Hello階段一并傳輸的Application Data數據被解密,其中的Encrypted Extensions即為對應的解密部分信息,說明此時用于檢驗對稱加密的密鑰可以正常工作。
協議具體分析如下:
(1) Client端發送的第一條消息Client Hello消息中包含了客戶端生成的隨機數和支持的密碼算法套件。如圖6所示,客戶提供了密碼套件,長度為32,例如TLS_CHACHA20_POLY1305_SHA256、TLS_AES_256_GCM_SHA384等。由于TLSv1.2存在良久,網絡中的部件也已經非常老舊,很久沒有更新,若此時采用TLSv1.3,則因為未知性導致傳輸失敗,所以此時的version字段是TLS1.2[5]。
Client端在發送Client Hello報文時,會將公鑰存于key_share中,如圖7所示,key_share中包含Client端選擇的曲線X25519,長度為32,表示將使用ECDH密鑰交換算法建立對稱密鑰。Client端通過所要使用的ECDH算法生成公鑰和私鑰對后,將其設置于上述key_share信息中。TLSv1.3通過采用key-share信息字段,大大提高了傳輸速度及認證速度,相較于TLSv1.2解決了其性能不足的問題。
(2) Server端返回的Server Hello中包含Server端生成的隨機數和選擇的密鑰算法套件即TLS_AES_256_GCM_SHA384,長度為32位。同樣,此時的version字段是TLS1.2。
Server端同樣生成公鑰和私鑰對,key_share中也包含Server端的公鑰信息。同樣地,key_share中包含Server端選擇的曲線X25519,長度為32,表示將使用ECDH密鑰交換算法建立共享密鑰。至此階段,Client和Server可以依據交換的隨機數和公鑰信息,生成對應的預主密鑰、主密鑰和會話密鑰等共享密鑰。隨后Server端通過Change Cipher Spec協議字段將消息傳輸由明文傳輸改為加密傳輸,增強了安全性。這也是TLSv1.3相較于TLSv1.2改進的重要步驟,由于此后過程都將采用加密傳輸,安全性得到改善。
(3) 為了實現對Server的認證,防止中間人攻擊,一般需要Server端提供相關的認證信息,包括certificate和certificate verify,最后發送Finished信息。
Certificate消息來自服務端的數字證書,在選用ECDH算法時,內容為服務端加密的簽名證書。Certificate Verify信息用于確保Server端擁有其所聲稱的公鑰對應的私鑰,防止中間人攻擊,緊跟于Certificate信息之后。Finished消息指代握手結束,采用SHA384驗證握手過程的真實性,Client端或者Server端在接收后,需要保證自己收到的數據包是否完整且準確。當Client端和Server端都發送且成功接收到對方的Finished信息之后,代表數據傳輸已經完成校驗,保證握手過程無誤。
(4) 當Client端獲取到Server端發來的數據包后,計算出傳輸的密鑰,向Server端發送Change Cipher Spec信息和Finished信息。
至此,通信雙方都接收到了對方的Finished信息,標志著握手完成,Server端會發送一個New Session Ticket報文給客戶端,此信息將為后續會話起到重要作用。
(5) 在有效期內,當客戶端想嘗試會話復用時,則需要在發送的Client Hello消息中攜帶pre-shared-key,即上一步的New Session Ticket信息。pre-shared-key信息由第一次完整結束時Server端發往Client端,所以在Client端需要發回給Server端時即可直接使用。值得注意的是,此時的pre-shared-key信息采用非對稱加密傳輸,保密性和安全性得到了保證。如圖14和圖15所示,New Session Ticket字段內容和pre-shared-key字段內容完全一致,即可印證結論正確性。
Server端接收成功之后,進行校驗,校驗通過后則恢復會話。
5 結語
隨著信息技術的不斷發展,網絡通信日益壯大的同時,其隱患和安全漏洞也不可忽視,新形勢之下也需要新的安全對策。本文通過對Wireshark的功能實現和TLS協議的工作流程和基本狀態進行了較為詳細的介紹,并通過Wireshark分析工具對于傳輸層安全協議TLS的網絡通信過程進行了詳細的分析,了解其保障安全性的原理和流程,對于學習網絡通信協議受益良多。
參考文獻:
[1] 王炅,張華,吳征遠,等.基于Wireshark的OSPF路由協議分析與仿真[J].閩江學院學報,2019,40(2):62-69.
[2] 歐國成.Wireshark在網絡安全管理中的應用[J].網絡安全技術與應用,2020(5):16-19.
[3] 張興隆,程慶豐,馬建峰.TLS 1.3協議研究進展[J].武漢大學學報(理學版),2018,64(6):471-484.
[4] weixin_30780649.TLS 1.3 VS TLS 1.2,讓你明白TLS 1.3的強大.2018[2022-03-12].https://blog.csdn.net/weixin_3078064 9/article/details/98834099.
[5] ChainingBlocks.使用wireshark分析TLSv2(詳細)[EB/OL].2016[2022-02-15].https://blog.csdn.net/liangyihuai/article/details/53098482.
【通聯編輯:梁書】