日期 Aug. 26, 2023
简介 身份认证:TCP-MD5和TCP-AO
[TOC]
对于需要保存状态的协议的验证,如BGP、LDP(标签分发协议)或者其他基于TCP的协议,之前一直在用的是MD5的身份验证方式,TCP Authentication Option(TCP-AO)是用来替换MD5的。
在RFC2385中,设计了使用TCP-MD5签名选项来验证保护BGP会话。最早是用来保护BGP会话,抵御RST攻击的。但是过了太久总是需要翻新下过往协议中设计不合理的地方。
TCP安全
首先明确,BGP是运行在TCP上面的,虽然它是一个3层协议。
一个场景,RA、RB、RC三个路由器,RA和RB维持了BGP会话连接,RC的运营者是RA和RB运营者的竞争对手,且存在恶意企图,试图中断RA和RB的连接。
RC可以故意给接口分配错误的IP地址(伪造源地址)。不是所有的劫持都有明确的目的,这种无意的攻击在IXP之间很常见,称之为"fat-finger"。
RC选择向RB发起TCP RST攻击。它发送一个伪造报文,伪造了RA的源地址,使用了TCP 179端口(BGP的端口),并设置了TCP RST标志位,猜测了序列号。如果猜错了RB就会丢弃报文,如果猜对了RB就会错误地断开和RA的BGP会话连接。这个例子中,RC on-path还是off-path都不太重要。
TCP MD5会话认证
针对上述问题,RFC 2385 提出的解决办法,就是使用TCP-MD5认证,其kind值19可以从上述网站查询。即对每个发出去的TCP段,都要使用16字节(128bits)的MD5 摘要抵御源伪造。
摘要输入内容顺序:
- TCP伪头部(src ip, dst ip, 0填充的协议号和分段长度)
- TCP头部,不包括选项并假定checksum为0
- TCP分段数据
- 独立对称密钥或者密码,通信双方都知道,且可以是特定于连接的(翻译的不是人话,简单理解就是不同的TCP通信可以使用不同的密钥,应该是防止一个泄露其他都遭殃)
Upon receiving a signed segment, the receiver must validate it by calculating its own digest from the same data (using its own key) and comparing the two digests. A failing comparison must result in the segment being dropped and must not produce any response back to the sender.
一旦收到一个签名的TCP段,接收者必须使用自己的密钥,生成摘要来验证这个报文,验证方式就是比对两个摘要内容。验证失败就丢弃报文段,且不会发送任何回应给发送者。身份认证都失败了,还发啥呀,肯定有问题嘛!
TCP Authentication Option (TCP-AO)
但是有了新的需求,事情有了变化,TCP-MD5已经被废止(deprecated)了。这个新的需求就是:对于任何基于预共享密钥的安全机制,运营者总会不时变更密钥。MD5不支持滚动更新密钥,这样子变更密钥的话TCP会话就会断开。所以实际中,密钥总是不能变更,因为使用这些密钥的BGP会话非常重要。
另外就是,TCP-MD5选项不支持多种加密算法计算MAC(消息认证码)信息,当然这是废话,指定的用的是MD5选项,你还想咋用其他算法呢?
TCP-AO是在NANOG 37(2006)提出的,Ron Bonica 展示了Authentication for TCP-based Routing and Management Protocols。大约6年后,IETF发布了RFC 5925 'The TCP Authentication Option,专门用于替代TCP-MD5(RFC 2385)。
TCP-AO和TCP-MD5很相像,只是做了一些些修改:
-
Each node is configured with one (as in MD5) or multiple (new in TCP-AO) Master Key Tuples (MKTs),就是有了多个主密钥对。
-
Each node derives traffic keys from each MKT --- The traffic keys and an authentication algorithm (multiple supported in TCP-AO) are used to calculate the Message Authentication Code (MAC),支持了多种认证算法。
-
The MAC is included in each TCP segment --- The TCP-AO Signature Option includes MAC, KeyID (key for the current package) and RNextKeyID (the key used for the next packet, this allows for hitless key-rollover)多了指定keyID,用于平滑滚动密钥。
-
The receiving node calculates the MAC for each received TCP segment using the configuration specified algorithm and traffic key associated with the received KeyID,需要配合指定的keyID来计算本地摘要,用于和TCP段中的摘要对比。
-
The receiving node discards the packet if the calculated MAC does not match the received MAC,同TCP-MD5一样,比对不成功就丢包处理。
TCP-AO的使用肯定是需要硬件的支持的。所以才有了这篇文章:It's time to replace MD5 with TCP-AO。
RFC6518: Keying and Authentication for Routing Protocols (KARP) Guidelines设计了,RFC6952: Analysis of BGP, LDP, PCEP, and MSDP Issues According to the Keying and Authentication for Routing Protocols (KARP) Design Guide分析。不过我还没有细看,先插个眼,有空再看吧。