The Internet has been buzzing for the last couple of weeks about a new vulnerability discovered in IPv6 and the way it is interpreted by networking devices. Firstly, head over to Sam Bowne’s excellent IPv6 site and read his assessment of the attack HERE. What is being exploited is a “feature” in IPv6.
Since IPv6 doesn’t use Address Resolution Protocol (ARP), it relies on ICMP and Neighbor Discovery messages to determine neighbors on the network. It also uses Router Advertisements (RA) to build a picture of how to get off the local network. When the Stateless Address AutoConfiguration (SLAAC) flag is set in the RA, the local host will choose an address from the announced address space and begin using it. This is a great addition to the protocol, since it allows a network admin to setup an automatic addressing protocol that isn’t reliant on a server like DHCPv6. However, from a security standpoint, it introduces some possible problems. If a host on the network were to start sending RA packets to the LAN, that man-in-the-middle could start influencing packet routing. Worse still, if the attacker isn’t really interested in rerouting packets, they could just take the anarchist’s approach and burn the whole network down with a specially-crafted DoS attack. By flooding a ton of RA messages onto the local network with different network address spaces, the attacker can cause the CPUs on Windows and FreeBSD boxes to spike to 100% and stay there indefinitely. This is because the host system continually tries to process the RAs flooding in from the network and starts trying to pick address space in every network announcement that it hears. This consumes all its resources with updating the routing table and addressing the adapters on the system. This could cause problems for your end users should an attacker get into a position to launch RAs into your LAN. Right now, there are a couple of ways to fix this:
1. Disable IPv6 – Okay, this doesn’t fix the problem it just makes it go away.
2. Disable RAs on the local network – Again, not a fix, just hiding it. Plus, this breaks SLAAC, which I see is a real advantage to IPv6.
3. Install a firewall or ACL on your host-facing ports to block RAs or filter out the ICMPv6 packets carrying them.
What I find even more interesting about this whole affair is the response of the three biggest players in the game in regards to the issue. Let me sum it all up using their words:
Microsoft – This is Working As Intended (WAI). We don’t plan on fixing this.
Juniper – We need to work with the IETF and figure out a standard solution to address this problem, and until we do we aren’t patching against it.
Cisco – We fixed this last year, and by the way have you heard of RA Guard?
Cisco has implemented a solution very similar to what they do with DHCP snooping on IPv4 switches. They call it RA Guard. As defined in RFC 6105, RA Guard can be enabled on all host-facing switchports to filter RAs from non-trusted sources. In this case, the trusted source would be a switchport you know to contain a valid router, so you wouldn’t enable RA guard on it. The RFC defines a discovery method using Secure Neighbor Discovery (SeND) that made me chuckle because the four states of the discovery are the same as 802.1w Rapid Spanning Tree. Seems we’re never going to get rid of it. When you enable SeND-based RA Guard discovery, it can dynamically scan the network for devices broadcasting RAs and block or allow them as necessary. That way, you don’t have to worry about misconfiguring a switchport and killing all the advertisements coming from it. By enabling RA guard on a Cisco switch with firmware 12.2(50)SY, you can effectively mitigate the possibility of an unauthorized attacker DoSing your entire network with what amounts to a script-kiddie style attack.
Take a vulnerability that has been known about for two years but swept under the rug, add in a dash of vendor disregard, and shake until the Internet security community is frothing at the mouth to tell you that you should turn off IPv6 on your entire network. Sounds like a recipe for overreaction to me. I’m not denying that it is a serious vulnerability. In fact, given the fact that IPv6 is enabled by default on the current Windows version, it could cause issues. That is, unless you are smart and take measures to fix the issue rather than sweeping it back under the rug. Rather than just turning off IPv6 until someone other than Microsoft releases a patch, we need to work through the issue and fix the underlying security issue. At the same time, this needs to be agreed upon by the major networking vendors sooner rather than later. The longer this issue exists in its present form, the more security sensationalists can point to it and decry one of the advantages of IPv6 on your network when in fact they should be focusing on the lack of security in the software that allows anyone to masquerade as an IPv6 router. Then, maybe we can cut IPv6 a little bit of slack.
The thing that really annoys me is that this is being billed as some horrible problem with IPv6 that IPv4 doesn’t have, when it’s really no worse in principle than rogue DHCP servers. You wouldn’t let untrusted IPv4 devices into your L2 domain without DHCP snooping; you shouldn’t let untrusted IPv6 devices into your L2 domain without RA guard. If the vendors don’t have it yet, yell at them until they do.
Speaking of which, how much more standard does Juniper want than a published RFC?
People are very creative when it comes to destruction. One can expect other features swept under the rug or just plainly discovered to appear, once IPv6 gets from few % penetration in networks and becomes big enough.
Seems analogous to ARP cache poisoning in IPv4, which remains a problem today.
RA Guard is certainly nice but works only on very recent platforms. 😦 For the thousands of 3560/3750s out there in customer facing roles there is supposedly no roadmap for RA Guard except forklift.