searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

WireGuard协议安全性分析

2023-07-07 08:49:25
586
0

概述

wireguard是⼀种新型的、⾼性能的VPN协议,具有⾼效的加密和认证机制,轻量化的协议设计,快速的传输速度,被设计为简单易⽤、安全可靠。基于wireguard⽩⽪书,对wireguard协议安全性进⾏简单分析。

wireguard协议安全性

1. 防止放大攻击

放⼤攻击是指攻击者通过发送⼩型请求来导致⼤规模响应,达到四两拨千⽄的效果,⻅放⼤攻击⽅式为DNS 放⼤攻击。

针对 wireguard 协议,⼀种可能的攻击⽅式是攻击者从⽹络链路中获取到攻击⽬标发送给 wireguard server的 Handshake Initiation 数据包。不断地给多个 wireguard server 重放这个数据包,wireguard server 会根据 wireguard 协议⽣成 Handshake Response 并发送给攻击⽬标,从⽽消耗掉攻击⽬标的⽹络流量。

在 wireguard 协议中, Handshake Response 包⽐ Handshake Initiation 数据包⼩,这意味着攻击者要消耗掉⽬标 1 G 的流量,必须消耗掉⼤于 1 G 的流量,这从根本上杜绝了放⼤攻击。

总结

由于wireguard 协议的响应包⽐请求包⼩,从⽽防⽌了放⼤攻击。

2. 缓解DOS攻击

wireguard 协议有两种交互流程,第⼀种是发起⽅向接收⽅发起握⼿请求,接收⽅向发起⽅发送握⼿响应,之后协议双⽅就可以相互传输数据。第⼆种是在协议双⽅中的任意⼀⽅负载过⼤的时候,在握⼿流程中引⼊了⼀个 cookie reply 数据包,⽤于防⽌ DOS 攻击。

在收到 handshake initiation 包之后,responder 为了确定握⼿包是否合法,⾄少需要做⼀次 Curve25519乘法操作。⽽计算 Curve25519 乘法是 CPU 密集型的操作,这意味着攻击者可以不断地向某个 peer 发送handshake initiation 包,直到耗尽该 peer 的CPU,导致其⽆法和其他 peer 正常建⽴隧道。

wireguard 协议规定,为了缓解 DoS 攻击,当 responder 过载时,可以选择不处理 Handshake Initiation数据包,⽽是返回⼀个 Cookie Reply Message,initiator 需要保存下这个 Cookie,并根据这个 Cookie 中的信息决定什么时机重发Handshake Initiation 数据包。

wireguard 的⼀个设计⽬标是在完成对数据包的认证之前不存储任何的状态,也不回复这个数据包,这样做的好处是该节点对于⾮法的 peers和 ⽹络扫描器是不可⻅的,避免了DOS攻击。

总结

由于wireguard 协议在responder 过载时会返回Cookie Reply Message,告诉initiator重发HandshakeInitiation包的时机,限制了攻击者发包速率,从⽽缓解决了DOS攻击。

3. 防止重放攻击

截获到 Handshake Initiation 数据包的攻击者,可以将这个包重放给 responder;收到这个包之后,responder 会认为 initiator 希望重新建⽴隧道,因此重新⽣成⼀个加密 session,该加密session包含临时公钥、临时密钥、KDF 状态等,由于 initiator 不知道 responder 已经修改了加密 session,所以其之后发送的所有的包都会被认为是⾮法的,⽽此时 initiator 和 responder 之前建⽴隧道事实上已经断开了。

为了解决这个问题,initiator 在 Handshake Initiation 包中加⼊了时间戳,responder 会记录收到的最⼤时间戳。并丢弃所有 initiator 发来的、时间戳⼩于等于最⼤时间戳的所有的 Handshake Initiation 数据包。即使responder 重启,由于之前和 initiator 建⽴的隧道已经断开了,此时攻击者重放的 Handshake Initiation包是会被 responder 接受的,但攻击者也只能做到这⼀步了,它⽆法发送数据给 responder。等到 initiator感知到隧道已经断开之后,会尝试重新建⽴隧道,所以在这种情况下,攻击者也是⽆法进⾏重放攻击的。

总结

wireguard 协议在Handshake Initiation 包中加⼊了时间戳,会丢弃时间戳⼩于等于最⼤时间戳的所有的Handshake Initiation 数据包,从⽽防⽌了重放攻击。

4. 保障数据安全

WireGuard 使⽤更先进,⾏标安全的加密算法来保障数据安全:

  • 使⽤ ChaCha20 进⾏对称加密,使⽤ Poly1305 进⾏数据验证。

  • 利⽤ Curve25519 进⾏密钥交换。

  • 使⽤ BLAKE2 作为哈希函数。

  • 使⽤ HKDF 进⾏解密。

5. 降低潜在安全风险

wireguard的代码小巧简洁,有助于减少潜在的安全漏洞,并使代码更易于审计和验证。相比之下,传统的VPN协议通常包含大量复杂的代码,容易引入漏洞和安全问题。

wireguard的设计遵循最小权限原则,仅实现了VPN协议必需的功能,避免了许多冗余和不必要的功能,这样可以减少攻击面,降低潜在安全风险。

参考

wireguard白皮书

wireguard白皮书带读

0条评论
0 / 1000
张****羽
6文章数
0粉丝数
张****羽
6 文章 | 0 粉丝
原创

WireGuard协议安全性分析

2023-07-07 08:49:25
586
0

概述

wireguard是⼀种新型的、⾼性能的VPN协议,具有⾼效的加密和认证机制,轻量化的协议设计,快速的传输速度,被设计为简单易⽤、安全可靠。基于wireguard⽩⽪书,对wireguard协议安全性进⾏简单分析。

wireguard协议安全性

1. 防止放大攻击

放⼤攻击是指攻击者通过发送⼩型请求来导致⼤规模响应,达到四两拨千⽄的效果,⻅放⼤攻击⽅式为DNS 放⼤攻击。

针对 wireguard 协议,⼀种可能的攻击⽅式是攻击者从⽹络链路中获取到攻击⽬标发送给 wireguard server的 Handshake Initiation 数据包。不断地给多个 wireguard server 重放这个数据包,wireguard server 会根据 wireguard 协议⽣成 Handshake Response 并发送给攻击⽬标,从⽽消耗掉攻击⽬标的⽹络流量。

在 wireguard 协议中, Handshake Response 包⽐ Handshake Initiation 数据包⼩,这意味着攻击者要消耗掉⽬标 1 G 的流量,必须消耗掉⼤于 1 G 的流量,这从根本上杜绝了放⼤攻击。

总结

由于wireguard 协议的响应包⽐请求包⼩,从⽽防⽌了放⼤攻击。

2. 缓解DOS攻击

wireguard 协议有两种交互流程,第⼀种是发起⽅向接收⽅发起握⼿请求,接收⽅向发起⽅发送握⼿响应,之后协议双⽅就可以相互传输数据。第⼆种是在协议双⽅中的任意⼀⽅负载过⼤的时候,在握⼿流程中引⼊了⼀个 cookie reply 数据包,⽤于防⽌ DOS 攻击。

在收到 handshake initiation 包之后,responder 为了确定握⼿包是否合法,⾄少需要做⼀次 Curve25519乘法操作。⽽计算 Curve25519 乘法是 CPU 密集型的操作,这意味着攻击者可以不断地向某个 peer 发送handshake initiation 包,直到耗尽该 peer 的CPU,导致其⽆法和其他 peer 正常建⽴隧道。

wireguard 协议规定,为了缓解 DoS 攻击,当 responder 过载时,可以选择不处理 Handshake Initiation数据包,⽽是返回⼀个 Cookie Reply Message,initiator 需要保存下这个 Cookie,并根据这个 Cookie 中的信息决定什么时机重发Handshake Initiation 数据包。

wireguard 的⼀个设计⽬标是在完成对数据包的认证之前不存储任何的状态,也不回复这个数据包,这样做的好处是该节点对于⾮法的 peers和 ⽹络扫描器是不可⻅的,避免了DOS攻击。

总结

由于wireguard 协议在responder 过载时会返回Cookie Reply Message,告诉initiator重发HandshakeInitiation包的时机,限制了攻击者发包速率,从⽽缓解决了DOS攻击。

3. 防止重放攻击

截获到 Handshake Initiation 数据包的攻击者,可以将这个包重放给 responder;收到这个包之后,responder 会认为 initiator 希望重新建⽴隧道,因此重新⽣成⼀个加密 session,该加密session包含临时公钥、临时密钥、KDF 状态等,由于 initiator 不知道 responder 已经修改了加密 session,所以其之后发送的所有的包都会被认为是⾮法的,⽽此时 initiator 和 responder 之前建⽴隧道事实上已经断开了。

为了解决这个问题,initiator 在 Handshake Initiation 包中加⼊了时间戳,responder 会记录收到的最⼤时间戳。并丢弃所有 initiator 发来的、时间戳⼩于等于最⼤时间戳的所有的 Handshake Initiation 数据包。即使responder 重启,由于之前和 initiator 建⽴的隧道已经断开了,此时攻击者重放的 Handshake Initiation包是会被 responder 接受的,但攻击者也只能做到这⼀步了,它⽆法发送数据给 responder。等到 initiator感知到隧道已经断开之后,会尝试重新建⽴隧道,所以在这种情况下,攻击者也是⽆法进⾏重放攻击的。

总结

wireguard 协议在Handshake Initiation 包中加⼊了时间戳,会丢弃时间戳⼩于等于最⼤时间戳的所有的Handshake Initiation 数据包,从⽽防⽌了重放攻击。

4. 保障数据安全

WireGuard 使⽤更先进,⾏标安全的加密算法来保障数据安全:

  • 使⽤ ChaCha20 进⾏对称加密,使⽤ Poly1305 进⾏数据验证。

  • 利⽤ Curve25519 进⾏密钥交换。

  • 使⽤ BLAKE2 作为哈希函数。

  • 使⽤ HKDF 进⾏解密。

5. 降低潜在安全风险

wireguard的代码小巧简洁,有助于减少潜在的安全漏洞,并使代码更易于审计和验证。相比之下,传统的VPN协议通常包含大量复杂的代码,容易引入漏洞和安全问题。

wireguard的设计遵循最小权限原则,仅实现了VPN协议必需的功能,避免了许多冗余和不必要的功能,这样可以减少攻击面,降低潜在安全风险。

参考

wireguard白皮书

wireguard白皮书带读

文章来自个人专栏
安全研究
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0