HTTP2還沒用上,HTTP3就出來了
作者:IT影子
鏈接:https://www.jianshu.com/p/b0b3c6df1a16
安全優(yōu)勢
1.端到端加密
TCP協(xié)議旨在確保在傳輸過程中進行有效負載加密,但是對于特定傳輸?shù)男畔⑷晕醇用?,所以這會引發(fā)許多安全和隱私問題。預(yù)防攻擊的對策不是在TCP堆棧上,而是在處理協(xié)議和網(wǎng)絡(luò)的網(wǎng)絡(luò)設(shè)備和中間盒上。此外,解析器可以克服負載均衡器和其他網(wǎng)絡(luò)設(shè)備中的這些問題,但它們也還存在嚴重的性能問題,并且可能會限制網(wǎng)絡(luò)發(fā)展速度和可靠性。使用QUIC協(xié)議時,只有網(wǎng)段中的必填字段未加密,而其余信息默認情況下是加密的。通過查看TCP和QUIC的網(wǎng)絡(luò)段,我們發(fā)現(xiàn)包括數(shù)據(jù)包標志(數(shù)據(jù)包NR和ACK NR),窗口和選項的字段在QUIC中已加密,但在TCP中未加密。QUIC中建議加密有助于防止普遍存在的監(jiān)視攻擊(在HTTP / 3的前身中很普遍)以及協(xié)議工件和元數(shù)據(jù)、應(yīng)用程序數(shù)據(jù)的侵入式信息收集。搜索公眾號:互聯(lián)網(wǎng)架構(gòu)師,回復(fù)“2T”,送你一份架構(gòu)師寶典。下面的圖1顯示了QUIC協(xié)議在網(wǎng)絡(luò)分析器工具Wireshark中的呈現(xiàn)方式。根據(jù)QUIC的網(wǎng)段,互聯(lián)網(wǎng)協(xié)議(IP)層保存源IP地址和目標IP地址信息。UDP保留源端口和目標端口,而QUIC包含公共標志,數(shù)據(jù)包編號,連接ID和加密的有效負載。
圖1 Wireshark代碼段顯示QUIC協(xié)議的網(wǎng)段
2.TLS安全連接
為了在連接期間支持端到端加密,QUIC主要依賴于加密和傳輸層握手。由于QUIC直接與TLS 1.3 交互,因此它可用于所有原始連接的授權(quán)加密,并且沒有禁用TLS。QUIC還負責確保建立安全連接,同時考慮到所有原始連接的機密性和完整性保護。關(guān)注公眾號:互聯(lián)網(wǎng)架構(gòu)師,回復(fù)“2T”,送你一份架構(gòu)師寶典。與HTTP / 2 + TLS實現(xiàn)不同,QUIC在其傳輸上下文中處理TLS握手和警報機制,這反過來又幫助QUIC利用從握手交換的密鑰來建立密碼保護。如果我們從整體上考慮該協(xié)議,則TLS和QUIC之間存在兩個主要通信:QUIC為TLS提供了穩(wěn)定的流抽象,通過QUIC發(fā)送和接收消息。TLS使用以下內(nèi)容更新QUIC組件。3.完全正向保密性
當在用戶代理和服務(wù)器之間交換臨時私鑰時,可以實現(xiàn)協(xié)議中的完全前向保密性(PFS)。用戶代理啟動的每個會話都使用新的唯一會話密鑰,并且它與先前的會話密鑰沒有任何關(guān)系。通過為每次傳輸使用單獨的會話密鑰,即使任何會話密鑰被泄露,來自較早或?qū)頃挼娜魏涡畔⒁膊粫艿狡茐摹募用芙嵌葋砜?,沒有密鑰交換可以提供完美前向保密性。但是,完全正向保密性,一個新術(shù)語對PFS的實現(xiàn)提供了可能。QUIC使用TLS 1.3,該協(xié)議支持橢圓曲線(EC)DHE密鑰交換或有限字段上的預(yù)共享密鑰(PSK)和Diffie-Hellman(DH)。0-RTT密鑰交換提供了完全的正向保密性,因為加密規(guī)范僅接受通過0-RTT握手的前向安全連接。盡管TLS 1.2還支持前向保密性,但從技術(shù)上講,當用戶代理發(fā)送由只有服務(wù)器已知的對稱密鑰保護的機密資料副本時,正向保密性在會話恢復(fù)期間會丟失。該協(xié)議甚至為用戶代理和服務(wù)器之間的初始消息提供了完全的正向保密。此外,由于QUIC協(xié)議不支持長期密鑰,因此QUIC借助TLS 1.3可以使用其協(xié)議層為應(yīng)用程序提供完全正向保密功能。4.重放攻擊防護
除了隨機數(shù),QUIC實現(xiàn)還用于存儲密鑰派生的客戶端值。服務(wù)器會識別并拒絕具有相同密鑰派生值和隨機數(shù)的任何重復(fù)請求??紤]到用戶代理和服務(wù)器之間的協(xié)議通信開銷,這種設(shè)計被稱為性能噩夢。從理論上講,該解決方案看似適用,但是在實踐中,該協(xié)議可能會變得很占內(nèi)存并導致性能問題。當前的設(shè)計不是最好的,但是從協(xié)議層面來說,這會防止任何服務(wù)器多次接受同一密鑰。同樣,QUIC在初始步驟中不提供重放保護,而是在服務(wù)器初始回復(fù)后立即開始保護。QUIC是讓初始交易能得到應(yīng)用程序保護并減少協(xié)議所占內(nèi)存。關(guān)注公眾號:互聯(lián)網(wǎng)架構(gòu)師,回復(fù)“2T”,送你一份架構(gòu)師寶典。考慮到Web組件可能會使用從會話密鑰派生的密鑰,因此在此階段可能會發(fā)生重放攻擊。但是,可以在應(yīng)用程序?qū)用媸褂妙A(yù)防措施來減輕這種情況。5.IP欺騙保護
QUIC在握手期間支持地址驗證,并且需要簽名的地址證明,從而消除了任何IP欺騙攻擊。IP地址欺騙問題主要在QUIC中通過廣泛利用“源地址令牌”來解決,“源地址令牌”是服務(wù)器的經(jīng)過身份驗證的加密塊,其中包含用戶代理的IP地址和服務(wù)器的時間戳。用戶代理可以重復(fù)使用服務(wù)器生成的源地址令牌,除非連接更改、IP地址不在變化。由于源地址令牌用作承載令牌,因此它們可以反復(fù)使用,并且可以繞過服務(wù)器設(shè)置的任何IP地址限制。由于服務(wù)器僅響應(yīng)令牌中的IP地址,因此即使是被盜的cookie或令牌也不會成功進行IP欺騙。6.防止SSL降級
TLS 1.3可以防止TLS降級攻擊,因為該協(xié)議規(guī)定了所有握手通信的密鑰哈希,并且要求握手接收方驗證發(fā)送的密鑰哈希。在握手過程中,任何檢測到的對客戶端功能的篡改嘗試都將導致握手終止并出現(xiàn)錯誤。此外,檢測還涉及用戶代理與服務(wù)器之間的證書驗證消息,包括有關(guān)特定連接的所有先前消息的PKCS RSA哈希簽名。QUIC中的校驗和實現(xiàn)將成功防止TLS降級攻擊。
安全挑戰(zhàn)
1.0-RTT恢復(fù)漏洞
HTTP / 3的最大優(yōu)勢之一是0-RTT恢復(fù),它可以極大地提高連接速度并減少延遲。但是,僅當成功建立了先前的連接,并且當前交易使用在上一次連接期間建立了預(yù)共享機密時,這一優(yōu)勢才發(fā)揮作用。0-RTT恢復(fù)功能存在一些安全方面的缺點。最常見的攻擊媒介之一是重放攻擊,當對手重新發(fā)送初始數(shù)據(jù)包時可能會造成這種攻擊。在特定的情況下,這可能會迫使服務(wù)器認為該請求來自先前已知的客戶端?;謴?fù)0-RTT的另一個安全缺點是完全前向保密的部分失效。如果對手破壞了令牌,那么他們就可以解密用戶代理發(fā)送的0-RTT通信內(nèi)容。2.連接ID操縱攻擊
3.UDP放大攻擊
4.流量耗盡型攻擊
5.連接重置攻擊
連接重置攻擊主要是向受害者發(fā)送無狀態(tài)重置,從而可能產(chǎn)生類似于TCP重置注入攻擊的拒絕服務(wù)攻擊。如果攻擊者可以獲得具有特定連接ID的連接生成的重置令牌,則可能存在潛在的攻擊媒介。最后,攻擊者可以使用生成的令牌重置具有相同連接ID的活動連接,從而使服務(wù)器等待連接,直到發(fā)生超時為止。如果大規(guī)模進行此攻擊,則服務(wù)器必須大量消耗其資源,以等待連接完成。
6.QUIC版本降級攻擊
QUIC數(shù)據(jù)包保護為通信中的所有數(shù)據(jù)包(版本協(xié)商數(shù)據(jù)包除外)提供身份驗證和加密。版本協(xié)商數(shù)據(jù)包旨在協(xié)商用戶代理和服務(wù)器之間QUIC的版本。該功能可能允許攻擊者將版本降級到QUIC的不安全版本。該攻擊目前暫時不會發(fā)生,因為只有QUIC的一個版本,但是將來需要注意。
7.缺少監(jiān)視支持
盡管一些用戶代理,服務(wù)器和信譽良好的網(wǎng)站支持HTTP3 / QUIC,但是許多網(wǎng)絡(luò)設(shè)備(例如反向/正向代理,負載均衡器,Web應(yīng)用程序防火墻和安全事件監(jiān)視工具)并不完全支持HTTP / 3。與TCP不同,QUIC連接中不需要套接字,這使得檢測主機和惡意連接變得更加困難。惡意攻擊者可能能夠通過QUIC中繼惡意有效載荷并執(zhí)行數(shù)據(jù)泄露攻擊,并且保持隱身狀態(tài),因為大多數(shù)檢測工具無法檢測到QUIC流量。關(guān)注公眾號:互聯(lián)網(wǎng)架構(gòu)師,回復(fù)“2T”,送你一份架構(gòu)師寶典。
QUIC的歷史
2016年,互聯(lián)網(wǎng)工程任務(wù)組(IETF)開始標準化Google的QUIC,并宣布IETF QUIC成為新HTTP / 3版本的基礎(chǔ)。但是,出于性能和安全方面的考慮,IETF QUIC與原始QUIC設(shè)計大相徑庭。
TCP上的傳統(tǒng)Web流量需要三向握手。QUIC使用UDP,由于往返次數(shù)減少和發(fā)送的數(shù)據(jù)包減少,因此延遲減少,從而加快了網(wǎng)絡(luò)流量傳輸。UDP除了速度更快之外,還具有其他優(yōu)點,包括連接遷移、改進延遲、擁塞控制和內(nèi)置加密。根據(jù)Google的說法, “與TCP + TLS的1-3次往返相比, QUIC握手通常需要零往返來發(fā)送有效負載?!?第一個連接需要一個往返,而隨后的連接則不需要任何往返。同樣,由于QUIC用于多路復(fù)用操作,因此與TCP相比,它在數(shù)據(jù)包丟失方面做得更好,并且握手速度更快。關(guān)注公眾號:互聯(lián)網(wǎng)架構(gòu)師,回復(fù)“2T”,送你一份架構(gòu)師寶典。
Google的QUIC版本現(xiàn)在是gQUIC。從gQUIC進化的HTTP / 3,具備了重大的改進,并得到IETF工作組的貢獻和增強。盡管從技術(shù)上講HTTP / 3是完整的應(yīng)用程序協(xié)議,但QUIC指的是基礎(chǔ)傳輸協(xié)議,它不限于服務(wù)Web流量。UDP是無連接的,不是很可靠。QUIC通過在UDP上添加類似于TCP的堆棧,來添加可靠的連接,并在其之上重新發(fā)送具有流控制功能的方式來克服這些限制,同時解決了TCP的行頭阻塞問題。
和HTTP/2的比較分析
QUIC旨在通過減輕HTTP/2的數(shù)據(jù)包丟失和延遲問題來提高性能。雖然HTTP/2對每個數(shù)據(jù)來源使用單個TCP連接,但這會導致行頭阻塞問題。例如,一個請求的對象可能會停滯在另一個遭受丟失的對象之后,直到該對象恢復(fù)為止。QUIC通過將HTTP/2的流層向下推送到傳輸層來解決此問題,從而避免了應(yīng)用程序?qū)雍蛡鬏攲拥膯栴}。HTTP/3還支持多路復(fù)用,在與TLS直接集成的同時,提供獨立于其他連接請求的請求。盡管HTTP/2和HTTP/3的工作方式相似,但以下是HTTP/2和HTTP/3的一些重要區(qū)別。

圖2:QUIC在網(wǎng)絡(luò)協(xié)議堆棧中的位置
連接ID的優(yōu)勢
TCP連接即利用數(shù)據(jù)源和目標網(wǎng)絡(luò)實體(主要是地址和端口)來標識特定連接。但是,QUIC連接使用連接ID,它是64位隨機生成的客戶端標識符。這項更改對于當前的Web技術(shù)非常有利,主要是因為要求它們支持用戶的移動性。如果用戶從Wi-Fi網(wǎng)絡(luò)移動到蜂窩網(wǎng)絡(luò),則HTTP/2 TCP協(xié)議將需要基于當前地址建立新的連接。但是,由于HTTP/3 QUIC協(xié)議使用隨機連接ID,因此當從蜂窩網(wǎng)絡(luò)轉(zhuǎn)移到Wi-Fi連接時,HTTP/3上的客戶端更改IP地址將繼續(xù)使用現(xiàn)有的連接ID而不會中斷。從協(xié)議的角度來看,連接ID提供了其他好處。服務(wù)器和用戶代理可以使用連接ID識別原始連接和重傳連接,并避免TCP中普遍存在的重傳歧義問題。結(jié)論
QUIC已獲得多數(shù)瀏覽器的支持。YouTube和Facebook等重要網(wǎng)站已啟用該功能,可以更快地加載頁面。在撰寫本文時,目前只有4%的頂級網(wǎng)站支持QUIC。微軟已經(jīng)宣布,他們將在內(nèi)核中交付帶有通用QUIC庫MsQuic的Windows,以支持各種收件箱功能。QUIC和HTTP/3旨在滿足當今互聯(lián)網(wǎng)網(wǎng)絡(luò)性能、可靠性和安全性的目標。強制性支持TLS 1.3的安全性得到了顯著改善,從而解決了HTTP/2和早期版本的HTTP的弱點。在HTTP/3傳輸過程中使用端到端加密有助于抵御攻擊者和數(shù)據(jù)聚合者的一些隱私問題。盡管存在一些弱點,但從性能和安全性角度來看,HTTP/3仍將繼續(xù)發(fā)展,不管怎么說都是對HTTP/2的重大改進。PS:如果覺得我的分享不錯,歡迎大家隨手點贊、轉(zhuǎn)發(fā)、在看。
PS:歡迎在留言區(qū)留下你的觀點,一起討論提高。如果今天的文章讓你有新的啟發(fā),歡迎轉(zhuǎn)發(fā)分享給更多人。