作者:IT影子\链接:https://www.jianshu.com/p/b0b...HTTP/3是超文本传输??协议(HTTP)的第三个正式版本,将提高网络性能和稳定性能,解决各种安全和隐私问题,但尽管如此,仍然存在一些安全挑战。HTTP/3不再使用传输控制协议(TCP)。取而代之的是,它将使用谷歌在2012年提出的QUIC传输协议。实际上,HTTP/3的前身就是HTTP-over-QUIC。2018年10月,互联网工程任务组(IETF)HTTP和QUIC工作组主席MarkNottingham提议将HTTP-over-QUIC重命名为HTTP/3QUIC是一个基于用户数据报多路复用版本的传输层协议(UDP)连接协议。与TCP不同,UDP不遵循TCP三向握手,而是使用单次UDP往返。因此,用户代理和Web服务器之间的每个连接都使用UDP,QUIC协议大大提高了任何Web组件的网络性能。同样,QUIC依靠多路复用在单个连接上无缝管理用户代理和服务器之间的多个交互,而不会相互阻塞,从而有助于提高与以前版本相比的性能。从性能和稳定性的角度来看,HTTP/3似乎有很大的优势。在安全性方面,HTTP/3有其优势和局限性。安全优势1.端到端加密TCP协议旨在确保传输过程中的有效负载加密,但特定传输的信息仍然未加密,因此这引发了许多安全和隐私问题。防止攻击的对策不在TCP堆栈上,而在处理协议和网络的网络设备和中间盒上。此外,解析器可以在负载均衡器和其他网络设备中克服这些问题,但它们也存在严重的性能问题,可能会限制网络发展的速度和可靠性。使用QUIC协议时,只有报文段中必填字段不加密,其余信息默认加密。通过查看TCP和QUIC的网段,我们发现包括数据包标志(数据包NR和ACKNR)、窗口和选项在内的字段在QUIC中是加密的,而在TCP中没有加密。QUIC中提出的加密有助于防止无处不在的监视攻击(常见于HTTP/3的前身)以及协议工件和元数据、应用程序数据的侵入式信息收集。下面的图1显示了QUIC协议在网络分析工具Wireshark中的呈现方式。根据QUIC的网段,网际协议(IP)层持有源IP地址和目的IP地址信息。UDP保留源端口和目标端口,而QUIC包含公共标志、数据包编号、连接ID和加密的有效负载。2.TLS安全连接为了在连接过程中支持端到端的加密,QUIC主要依靠加密和传输层握手。由于QUIC直接与TLS1.3交互,它可以用于所有原始连接的授权加密,而无需禁用TLS。QUIC还负责确保建立安全连接,同时考虑到所有原始连接的机密性和完整性保护。与HTTP/2+TLS实现不同,QUIC在其传输上下文中处理TLS握手和警报机制,这反过来帮助QUIC利用从握手中交换的密钥来建立加密保护。如果我们将协议作为一个整体来考虑,则TLS和QUIC之间主要有两个通信:QUIC为TLS提供稳定的流式抽象,通过QUIC发送和接收消息。TLS使用以下内容更新QUIC组件。1.Secret,authenticated加密算法和密钥派生函数(KDF)2.数据包保护密钥3.协议状态变化(如握手状态,服务器证书)与HTTP/2不同,QUIC使用STREAM帧,以QUIC数据包。TLS握手以CRYPTO帧的形式形成,主要由连续流中的握手数据组成。QUIC旨在并行发送数据包,有时会将不同的消息捆绑在一起并对其进行加密,因为这些消息具有相同的加密级别。此功能为网络性能提供了巨大优势,同时确保在传输过程中应用正确的加密模式。3.完美前向保密协议中的完美前向保密(PFS)可以在用户代理和服务器之间交换临时私钥时实现。用户代理发起的每个会话都使用一个新的唯一会话密钥,并且它与以前的会话密钥没有关系。通过为每次传输使用单独的会话密钥,即使任何会话密钥被泄露,也不会泄露来自早期或未来会话的信息。从密码学的角度来看,没有任何密钥交换可以提供完美的前向保密。然而,一个新的术语,完美的前向保密,使得PFS的实现成为可能。QUIC使用TLS1.3,该协议支持有限字段上的椭圆曲线(EC)DHE密钥交换或预共享密钥(PSK)和Diffie-Hellman(DH)。0-RTT密钥交换提供完美的前向保密,因为加密规范仅接受通过0-RTT握手的前向安全连接。尽管TLS1.2也支持前向保密,但从技术上讲,当用户代理发送一份由只有服务器知道的对称密钥保护的机密副本时,它会在会话恢复期间丢失。该协议甚至为用户代理和服务器之间的初始消息提供完美的前向保密。此外,由于QUIC协议不支持长期密钥,QUIC可以使用其协议层在TLS1.3的帮助下为应用程序提供完全前向保密。4.重放攻击保护除了随机数,QUIC实现还用于存储客户端值以进行密钥推导。服务器识别并拒绝任何具有相同密钥派生值和随机数的重复请求。考虑到用户代理和服务器之间的协议通信开销,这种设计被称为性能噩梦。理论上,此解决方案似乎可行,但在实践中,该协议可能会占用大量内存并导致性能问题。当前的设计不是最好的,但在协议级别,这可以防止任何服务器多次接受相同的密钥。同样,QUIC在初始步骤中不提供重放保护,而是在服务器初始回复后立即开始保护。QUIC允许初始交易受到应用程序的保护,并减少协议占用的内存。考虑到Web组件可能使用从会话密钥派生的密钥,重放攻击在此阶段是可能的。但是,可以在应用程序级别使用预防措施来缓解这种情况。5.IP欺骗防护QUIC支持握手过程中的地址验证,需要签名的地址证明,从而杜绝任何IP欺骗攻击。IP地址欺骗问题在QUIC中主要通过广泛使用“源地址令牌”来解决,“源地址令牌”是经过身份验证的服务器加密块,其中包含用户代理的IP地址和服务器的时间戳。用户代理可以重用服务器生成的源地址令牌,除非连接发生变化且IP地址不变。由于源地址令牌用作不记名令牌,因此可以反复使用,并且可以绕过服务器设置的任何IP地址限制。由于服务器只响应token中的IP地址,即使窃取cookie或token也无法进行IP欺骗。6.防止SSL降级TLS1.3可以防止TLS降级攻击,因为该协议规定了所有握手通信的密钥散列,并要求握手接收方验证发送的密钥散列。在握手期间,任何检测到的对客户端功能的篡改尝试都将导致握手因错误而终止。此外,检测涉及用户代理和服务器之间的证书验证消息,包括特定连接上所有先前消息的PKCSRSA哈希签名。QUIC中的校验和实现将成功防止TLS降级攻击。安全挑战1.0-RTT恢复漏洞HTTP/3最大的优势之一是0-RTT恢复,它可以大大提高连接速度并减少延迟。然而,只有在先前的连接成功建立并且当前交易使用在先前连接期间建立的预共享秘密时,此优势才会发挥作用。0-RTT恢复功能有一些安全缺陷。最常见的攻击媒介之一是重放攻击,当对手重新发送初始数据包时可能会引起这种攻击。在某些情况下,这可能会迫使服务器认为请求来自先前已知的客户端。恢复到0-RTT的另一个安全缺陷是完全前向保密的部分失败。如果对手泄露了令牌,则他们可以解密用户代理发送的0-RTT通信的内容。2.连接ID操纵攻击连接ID操纵攻击需要将攻击者置于用户代理和服务器之间。他们可以在交换客户端和服务器问候消息的初始握手期间操纵连接ID。握手将照常进行,服务器假定连接已建立,但用户代理将无法解密它,因为连接ID需要作为加密密钥派生过程的输入步骤,并且用户代理和服务器将计算不同的加密密钥。用户代理最终会超时并向服务器发送连接已终止的错误消息。由于客户端使用原始加密密钥将错误消息加密到服务器,服务器将无法解密它并保持连接,直到空闲连接超时(通常在10分钟内)到期。当大规模执行时,相同的攻击可能会导致对服务器的拒绝服务攻击并保持多个连接,直到连接状态过期。另一种保持连接有效的攻击方法是更改??其他参数,例如源地址令牌,从而阻止客户端建立任何连接。2.UDP放大攻击为了成功进行放大攻击,攻击者必须欺骗受害者的IP地址,并向服务器发送UDP请求。如果服务器发回更重要的UDP响应,攻击者可以大规模利用此服务器行为并创建DDOS攻击场景。具体来说,在QUIC中,当对手从目标接受地址验证令牌并释放最初用于生成令牌的IP地址时,就会发生UDP放大攻击。攻击者可以使用相同的IP地址将0-RTT连接发送回服务器,该地址可能已更改为指向不同的端点。通过强制执行此设置,攻击者可能会指示服务器向受害服务器发送大量流量。为了防止此类攻击,HTTP/3具有速率限制和短期身份验证令牌的功能,可以作为DDOS攻击的补偿控制,同时部分缓解攻击场景。3.流量耗尽攻击流量耗尽攻击发生在对手故意启动多个连接流时,这可能导致端点耗尽。攻击者可以通过重复提交大量请求来利用耗尽序列。尽管某些传输参数可能会限制并发活动流的数量,但在某些情况下,可以有意将服务器配置设置为更高的值。由于服务器协议配置的协议性能提高,受害服务器可能成为此类攻击的目标。4.连接重置攻击连接重置攻击主要是向受害者发送无状态的重置,可能会造成类似于TCP重置注入攻击的拒绝服务攻击。如果攻击者可以获得由具有特定连接ID的连接生成的重置令牌,则存在潜在的攻击媒介。最后,攻击者可以使用生成的令牌重置具有相同连接ID的活动连接,导致服务器等待连接直到发生超时。如果大规模进行这种攻击,服务器必须大量消耗其资源,等待连接完成。5.QUIC版本降级攻击QUIC数据包保护对所有通信中的数据包(版本协商数据包除外)进行认证和加密。版本协商数据包旨在协商用户代理和服务器之间的QUIC版本。此功能可能允许攻击者将版本降级为QUIC的不安全版本。由于QUIC只有一个版本,目前无法进行这种攻击,但需要在未来注意。6.缺乏监控支持虽然一些用户代理、服务器和信誉良好的网站支持HTTP3/QUIC,但许多网络设备(如反向/正向代理、负载均衡器、Web应用防火墙和安全事件监控工具)并没有完全支持HTTP/3。与TCP不同,QUIC连接不需要套接字,这使得检测主机和恶意连接变得更加困难。恶意攻击者可能能够通过QUIC中继恶意负载并执行数据泄露攻击,并保持隐蔽状态,因为大多数检测工具无法检测到QUIC流量。QUIC的历史2016年,互联网工程任务组(IETF)开始对谷歌的QUIC进行标准化,并宣布IETFQUIC作为新HTTP/3版本的基础。然而,出于性能和安全方面的考虑,IETFQUIC与最初的QUIC设计有很大的偏差。传统的TCP网络流量需要三次握手。QUIC使用UDP,由于往返和发送的数据包较少,它可以加快网络流量并减少延迟。UDP除了更快之外还有其他优势,包括连接迁移、改进的延迟、拥塞控制和内置加密。据谷歌称,“与TCP+TLS的1-3次往返相比,QUIC握手通常需要零次往返来发送有效负载。”第一个连接需要一次往返,而后续连接则不需要。此外,由于QUIC用于多路复用操作,它在丢包方面比TCP做得更好,并且握手速度更快。Google的QUIC版本现在是gQUIC。HTTP/3从gQUIC演变而来,IETF工作组做出了重大改进、贡献和增强。虽然HTTP/3在技术上是一个完整的应用程序协议,但QUIC指的是底层传输协议,它不仅限于服务于网络流量。UDP是无连接的并且不是很可靠。QUIC通过在UDP之上添加类似TCP的堆栈,添加可靠连接,并在其之上重新发送流量控制来克服这些限制,同时解决了TCP的队头阻塞问题。HTTP/3使用UDP,类似于HTTP/2使用TCP的方式。每个连接都有几个并行流,用于在不影响其他流的情况下通过单个连接同时传输数据。因此,与TCP不同,丢失的数据包携带特定单个流的数据只会影响该特定流。每个流帧一到达就可以分配给该流,因此它可以在应用程序中继续重新组合而不会丢失任何流。QUIC的这种连接建立策略是通过加密和传输握手的组合来实现的。与HTTP/2的比较分析QUIC旨在通过减轻HTTP/2的丢包和延迟问题来提高性能。虽然HTTP/2每个数据源使用单个TCP连接,但这可能会导致行头阻塞问题。例如,一个请求的对象可能会卡在另一个遭受损失的对象后面,直到该对象被恢复。QUIC通过将HTTP/2的流层下推到传输层来解决这个问题,从而避免了应用层和传输层的问题。HTTP/3还支持多路复用,提供独立于其他连接请求的请求,同时直接与TLS集成。尽管HTTP/2和HTTP/3的工作方式相似,但这里有一些HTTP/2和HTTP/3之间的重要区别。从网络栈的角度来看,HTTP/2大量使用了符合HTTP标准的TLS1.2+,底层的TCP作为传输协议。但是在HTTP/3中,除了QUIC之外,默认使用TLS1.3,而UDP是传输协议。下图说明了QUIC在网络协议栈中的位置。相比之下,之前的版本使用TLS1.2并使用TCP的拥塞控制丢失恢复功能,而HTTP/2则处理多流功能。连接ID的优点TCP连接使用数据源和目标网络实体(主要是地址和端口)来标识特定连接。但是,QUIC连接使用连接ID,它是随机生成的64位客户端标识符。这种变化对当前的网络技术非常有利,主要是因为它们需要支持用户的移动性。如果用户从Wi-Fi网络移动到蜂窝网络,HTTP/2TCP协议将需要根据当前地址建立新的连接。但是,由于HTTP/3QUIC协议使用随机连接ID,HTTP/3上更改IP地址的客户端在从蜂窝网络移动到Wi-Fi连接时将继续使用现有连接ID而不会中断。从协议的角度来看,连接ID提供了其他好处。服务器和用户代理可以使用连接ID来识别原始连接和重新传输的连接,并避免TCP中普遍存在的重新传输歧义问题。结论大多数浏览器都支持QUIC。YouTube和Facebook等重要网站已启用该功能以更快地加载页面。在撰写本文时,目前只有4%的顶级网站支持QUIC。微软已经宣布他们将在内核中使用通用QUIC库MsQuic来发布Windows,以支持各种收件箱功能。QUIC和HTTP/3旨在满足当今互联网网络的性能、可靠性和安全性目标。通过对TLS1.3的强制支持,安全性得到了显着提高,解决了HTTP/2和HTTP早期版本中的弱点。在HTTP/3传输期间使用端到端加密有助于抵御来自攻击者和数据聚合者的一些隐私问题。尽管存在一些弱点,但从性能和安全角度来看,HTTP/3将继续发展,并且无论以何种标准衡量,都是对HTTP/2的重大改进。近期热点文章推荐:1.1,000+Java面试题及答案(2021最新版)2.别在满屏的if/else中,试试策略模式,真的很好吃!!3.操!Java中xx≠null的新语法是什么?4、SpringBoot2.6正式发布,一大波新特性。.5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
