配置IPv6安全邻居发现
IPv6安全邻居发现功能SEND(SEcure Neighbor Discovery)特性用来解决在邻居发现协议NDP(Neighbor Discovery Protocol)中涉及的安全问题。
应用环境
攻击方法 |
说明 |
---|---|
NS/NA欺骗 |
攻击者向合法节点(主机或者路由器)发送包含不同源链路层地址选项的NS报文,或者包含不同目标链路层地址选项的NA报文,通过NS/NA欺骗,使合法节点的报文发往其他的链路层地址达到攻击的目的。 |
邻居不可达探测(NUD)失败 |
攻击者连续不断的发送伪造的NA报文来响应NUD检测中合法节点发送的NS报文,使得合法节点无法探测到邻居节点不可达。这种攻击的后果取决于邻居节点不可达的原因,以及节点在知道邻居节点不可达后所采取的具体行为。 |
DAD攻击 |
攻击者对每个接入网络的主机所发送的重复地址检测(DAD)都进行响应,宣称拥有DAD检测的地址,使主机无法获得该地址。 |
虚假的重定向报文 |
攻击者使用当前第一跳路由器的链路本地地址向合法主机发送重定向消息,使合法主机将该重定向消息误认为是来自第一跳路由器的消息,从而接收该重定向消息。 |
重放攻击 |
攻击者通过捕获合法的消息并且不断重放这些消息来达到攻击的目的。所以,即使NDP消息受到签名或证书的保护而使得其内容不能被伪造,但还是会受到重放攻击。 |
虚假的直连前缀攻击 |
攻击者发送伪造的RA报文指定某些地址前缀是直连的,使得主机不再向路由器发送这个地址前缀的报文。相反,该主机将试图通过发送NS报文来执行地址解析,但是实际上NS报文将不会被响应,主机将会受到拒绝服务的攻击。 |
恶意的最后一跳路由器 |
攻击者向试图发现合法的最后一跳路由器的主机发送伪造的多播RA报文,或者对该主机发送的多播RS报文回应伪造的单播RA报文,使主机将攻击者误认为最后一跳路由器。一旦主机选择攻击者作为它的缺省路由器,攻击者就可以拦截通讯双方的通话并插入新的内容。 |
为应对这些威胁,标准协议中定义的SEND(Secure Neighbor Discovery)对ND协议进行了扩展。SEND定义了CGA地址和CGA选项、RSA选项,用来验证ND消息的发送者对消息源地址的合法拥有权。SEND还定义了Timestamp和Nonce选项用来防止重放攻击。
- CGA地址(Cryptographically Generated Address):IPv6地址的接口ID部分由公钥和附加参数,使用单向hash函数计算生成。
- CGA选项:包含接收方在验证发送方的CGA地址时需要的一些信息,包括发送方的公钥等。用来验证ND报文的发送者是其IPv6源地址的合法拥有者。
- RSA签名选项(Rivest Shamir Adleman):包含发送方公钥的hash值,以及根据发送方私钥和ND报文,使用RSA算法生成的数字签名。用来验证ND报文的完整性和发送者的真实性。当攻击者声称其为某地址的拥有者时(实际上此地址属于某合法节点),它必须使用合法节点的公钥进行加密,否则接收者可以通过CGA选项的校验发现其攻击行为,即使攻击者获取到了合法节点的公钥,但接收者通过对数字签名的校验,可以发现其攻击行为,因为攻击者也许并不知道消息发送者用来制作数字签名的私钥。
- 时间戳选项(Timestamp):包含一个时间戳的64位无符号整数,表示从1970年1月1号零时(UTC)以来的秒数。用来保护非请求的通告报文和重定向报文不会被重放。接收者应确保每个收到的报文其时间戳都比上一个收到的报文要新。
- 随机数选项(Nonce):包含了由请求消息的发送者所生成的一个随机数。用来在请求和回应交互中防止重放攻击,比如在NS和NA报文的交互中,NS报文中携带Nonce选项,回应的NA报文中也携带此选项,发送者根据收到的选项判断是否为合法的回应报文。
配置CGA类型的IPv6地址
当需要实现IPv6安全邻居发现功能时,需要先在接口上配置CGA类型的IPv6地址,从而该接口发送的ND报文就会携带CGA和RSA选项,对端收到报文后,通过CGA和RSA选项判断发送者的合法性、报文的完整性。
操作步骤
- 执行命令system-view,进入系统视图。
- 执行命令rsa key-pair label label-name modulus modulus-bits,创建RSA密钥。
- 执行命令interface interface-type interface-number,进入要配置CGA类型的IPv6地址的接口视图。
- 执行命令ipv6 security rsakey-pair key-label,将RSA密钥对与本接口绑定,用于生成CGA地址。
- 执行命令ipv6 security modifier sec-level sec-value [ modifier-value ],配置CGA地址的修正值和安全级别。
只有当CGA地址的安全级别是0时,才能手动配置修正值。
- 执行命令ipv6 address { ipv6-address prefix-length | ipv6-address/prefix-length } cga或ipv6 address ipv6-address link-local cga,配置CGA类型的IPv6地址。
- 执行命令commit,提交配置。
使能IPv6安全邻居发现功能
设置系统一段时间内(1s)计算或验证RSA签名的速率上限值和接口可以接受的密钥长度、ND报文的时间戳参数后,如果接收的报文不符合以上要求,则被视为非法报文。
操作步骤
- 执行命令system-view,进入系统视图。
- (可选)执行命令ipv6 nd security rate-limit ratelimit-value,设置系统一段时间内(1s)计算或验证RSA签名的速率上限值。
- 执行命令interface interface-type interface-number,进入接口视图。
- (可选)执行命令ipv6 nd security key-length { minimum keylen-value | maximum keylen-value } *,配置接口可以接受的密钥长度。
- (可选)执行命令ipv6 nd security timestamp { fuzz-factor fuzz-value | delta delta-value | drift drift-value } *,配置ND报文的时间戳参数。
- 执行命令ipv6 nd security strict,使能接口的严格安全模式功能。
- 执行命令commit,提交配置。