張廷龍 張浩東 唐青


前言:目前,隨著網絡數據傳輸的規模不斷擴大,出現的漏洞和風險也越來越繁復。其中的漏洞之一OpenSSL的心跳處理邏輯沒有檢測心跳包中的長度字段是否和后續的數據字段相符合,攻擊者可以利用這一點,構造異常的數據包,來獲取心跳數據所在的內存區域的數據。這些數據中可能包含了證書私鑰,用戶名,用戶密碼,用戶地址等敏感信息。本篇文章就對OpenSSL協議在實現TLS和DTLS的心跳處理邏輯時存在編碼缺陷稱為Heartbleed漏洞的原理作初步的研究。
關鍵詞:Heartbleed漏洞;SSL;TLS
1. Heartbleed漏洞原理
SSL(Secure Socket Layer)安全套接層及其繼任者傳輸層安全TLS(Transport Layer Security)是為網絡通信提供安全及數據完整性的一種安全協議。TLS和SSL在傳輸層對網絡連接進行加密。所以通過SSL或TLS協議加密后的數據包再通過WireShark軟件進行對數據包的抓取時,抓取到的數據也是經過加密處理的數據。
DTLS(Datagram Transport Layer Security)數據包傳輸層安全協議。TLS不能用來保證UDP上傳輸的數據的安全,因此Datagram TLS試圖在現存的TLS協議架構上提出擴展,使之支持UDP,即成為TLS的一個支持數據報傳輸的版本。
心臟出血漏洞主要通過攻擊者模擬向服務器端發送自己編寫的Heartbeat心跳數據包,主要是HeartbeatMessage的長度與payload的length進行匹配,若payload_lenght長度大于HeartbeatMes sage的length,則會在服務器返回的response響應包中產生數據溢出,造成有用數據泄露。
2.Heartbleed漏洞的發現與驗證
心臟出血漏洞必須在含有心跳擴展和漏洞沒有被修復的版本中存在,目前存在OpenSSL心血漏洞的OpenSSL版本有OpenSSL1.X等多個版本。心臟出血漏洞主要存在于OpenSSL的心跳機制里,判斷OpenSSL有沒有開啟心跳擴展,并開啟心跳擴展機制。在客戶端對虛擬機中搭建的靶場頁面進行訪問,同時在客戶端中通過POC程序對靶場進行攻擊,最后通過wireshark對攻擊的請求包和響應包進行捕獲。
TLS數據請求包如下圖所示:
分析由于SSL記錄協議位于某個傳輸協議,例如TCP上面由于數據通過SSL加密處理后顯示亂碼,我們抓取的數據包主要通過16進制顯示,所以像heartbeat_Request的數據包主要分為四部分:(1)數據包幀頭部分;(2)IPv4(IPv6)網絡層部分;(3)TCP傳輸層部分;(4)圖片中方框標注的部分即為通過SSL加密的心跳數據包部分。payload和padding都為空,下面利用漏洞將后面內存中的數據dump下來。TLS數據響應包如下圖所示:
上圖中為通過wireshark抓取的heartbeat_Response數據包的模塊化展示,同樣數據包分為幀頭部分,IPv4網絡層部分,TCP傳輸層部分以及SSL返回的數據部分。
0x4000表示返回的數據包長度為16384。0x02表示返回的心跳消息類型。0x4000表示返回的payload_length(16384)。剩余的數據即為通過心臟出血漏洞從內存中dump下來的數據。
由于請求包的長度為3。但是要返回的payload_length為0x4000(16384),所以響應包返回的數據長度為0x4000(16384)即漏洞攻擊成功。
3.結束總結
OpenSSL心臟出血漏洞(heartbleed)的產生主要由于OpenSSL的心跳處理邏輯沒有檢測心跳包中的長度字段是否和后續字段相吻合導致攻擊者構造異常數據包,來直接獲取心跳數據所在的內存區域的后續數據。主要特征有:heartbleed漏洞主要存在于有心跳機制的OpenSSL協議中。
IANA組織把開啟心跳擴展機制的SSL數據包type類型定義為24(0x18)。 heartbleed漏洞主要存在于TLS和DTLS兩種協議中,在含有heartbleed漏洞的OpenSSL協議中需要開啟心跳擴展機制,而含有心跳擴展機制的TLS版本主要包含在TLSv1.0,TLSv1.1,TLSv1.2三種版本中。heartbleed漏洞攻擊主要由于攻擊者構造異常的心跳數據包,即心跳包中的長度字段與后續的數據字段不相符合,來獲取心跳數據所在的內存區域的后續數據。
綜上所述我們可以通過對線網中的數據首先進行判斷是否為含有OpenSSL的數據包,同時通過對數據包中的type類型判斷數據包是否為心跳數據包,然后對TLS的版本進行匹配找到相應的含有心跳擴展機制的心跳數據包,最后通過對心跳包中的數據實際長度與長度字段定義的值比較,如果實際長度小于定義的長度則該數據包即為含有heartbleed漏洞的數據包。
參考文獻:
[1]石一鳴,馬利民.基于OpenSSL的程序完整性度量方案設計與實現[J],電子世界.?2020,(02).
[2]周興暉,王朝,金鑫.?生成對抗機制的密碼算法組件化設計[J].?北京電子科技學院學報.?2020(04)
[3] 謝東良.基于國密算法的OpenSSL安全性優化研究[D].哈爾濱工程大學?2016
資助項目:國家級大學科技創新項目(基于Spark的校園網蜜罐系統的研究與設計,項目編號:023220076?)。