Itojun,
I am unwilling to give up SIIT. Changing the architecture to forbid
IPv4-mapped addresses on the wire is unacceptable in my opinion.
I'm far from convinced that there is a real problem here. Your examples are
contrived. You already agreed I was right about the first one, so let's
look at the second again:
> >> Secondly, malicious party may be able to use IPv6
> >> packets with IPv4 mapped address, to bypass access
> >> control. Consider the following scenario:
> >> o Attacker throws unencapsulated IPv6 packets, with
> >> ::ffff:127.0.0.1 as source address.
> >> o The access control code in the server thinks that
> >> this is from localhost, and grants accesses.
> >This is just broken access control code in the host.
> >If you want to protect against this, you need similar
> >checks in any decapsulator as well, right?
> >Why is this any different?
>
> no, this is not the access control code that is broken.
> the problem is, under RFC2553, you have no way to
> distinguish between native-ipv4-mapped and
> RFC2553-inbound packet, in the userland.
Nor do you need to if you (the stack writer) only allow the same set of
native-ipv4-mapped addresses to show up where you'd allow them as
RFC2553-inbound addresses.
> both of them have ::ffff:127.0.0.1 as the result of
> getpeername (or getsockname), both of them appear on
> AF_INET6 socket, if you would like to permit accesses
> from IPv4 127.0.0.1, and even if you would like to
> reject native-ipv4-mapped with ::ffff:127.0.0.1, you
> can't do that.
If an IPv4 packet arrived at your machine with a source address of
127.0.0.1, what would your kernel do? Now if an IPv6 packet arrives at your
machine with a source address of ::ffff:127.0.0.1, what does your kernel do?
If it does the same thing in both cases, why should user-land care how it
got there? If it doesn't do the same thing, why not?
> >> Lastly, malicious party can make servers generate
> >> unexpected IPv4 traffic. This can be accomplished
> >> by sending IPv6 packet with IPv4 mapped address as
> >> a source (similar to abuse of IPv4 compatible
> >> address),
That's not unexpected IPv4 traffic -- that's *expected* IPv4 traffic!
> >> or by presenting IPv4 mapped address to servers
> >> (like FTP bounce attack [Allman, 1999] from IPv6
> >> to IPv4). The problem is slightly different from
> >> the problems with IPv4 compatible addresses and
> >> 6to4 addresses, since it does not make use of
> >> tunnels. It makes use of certain behavior of
> >> userland applications.
But isn't that "certain behavior" more commonly known as "incorrect
behavior"?
> >As you note, there are similar problems with
> >IPv4-compatible addresses and 6to4 addresses.
> >Again, why is adding checks to protect against
> >one any different than adding checks to prevent
> >against the other?
>
> the problem is that people can inject malicious
> packets more easily than before. they can inject
> malicious IPv6 packet from remote places (by
> wrapping it into IPv4 packet).
What does this have to do with v4-mapped addresses?
> they can let us relay malicious packets by abusing
> normal IPv6 routers, auto-tunnel capable IPv6
> routers, and 6to4 relay routers. it will be much
> harder to track than normal IP packets we are seeing.
These are all tunnelling issues. Nobody is suggesting getting rid of
tunnels to fix them - they're suggesting appropriate security checks. I ask
again, why is adding checks to protect against v4-mapped address misuse any
different?
> SIIT requires the dual use of IPv4 mapped address
> (native-ipv4-mapped and RFC2553-inbound). this is
> a feature of SIIT, not the other documents.
No, SIIT doesn't require user-level programs to receive IPv4 packets on
AF_INET6 socekts. It only requires that IPv6 packets (with v4-mapped
addresses) are received on AF_INET6 sockets. Machines living on the v6 side
of the translator only need to speak v6!
> >> 3.2. Possible solutions
> >> o When implementing TCP or UDP stack, explicitly
> >> record the wire packet format (IPv4 or IPv6)
> >> into connection table. It is unwise to guess
> >> the wire packet format, by existence of IPv6
> >> mapped address in the address pair.
> >If an implementation decides that it really needs
> >to know whether a packet came in as a real IPv4
> >packet or as an IPv6 packet with mapped/translated/
> >compatible addresses, then it could do this.
> >Why is this a bad solution?
>
> maybe my text is rather unclear, but what part are
> you referring to by the underlined "this"?
This = recording the wire packet format in the connection table. If you
really insist that user-land needs to know the difference for some reason, I
suppose you could do this and find some way for the kernel to pass it up
(ammend scope id behavior?). I still don't see the need though. This
transparency still strikes me as a feature, not a bug.
--Brian
--------------------------------------------------------------------
IETF IPng Working Group Mailing List
IPng Home Page: http://playground.sun.com/ipng
FTP archive: ftp://playground.sun.com/pub/ipng
Direct all administrative requests to [EMAIL PROTECTED]
--------------------------------------------------------------------