draft-ietf-6man-stable-privacy-addresses-06.txt | draft-ietf-6man-stable-privacy-addresses-07.txt | |||
---|---|---|---|---|
IPv6 maintenance Working Group (6man) F. Gont | IPv6 maintenance Working Group (6man) F. Gont | |||
Internet-Draft SI6 Networks / UTN-FRH | Internet-Draft SI6 Networks / UTN-FRH | |||
Intended status: Standards Track April 12, 2013 | Intended status: Standards Track May 19, 2013 | |||
Expires: October 14, 2013 | Expires: November 20, 2013 | |||
A method for Generating Stable Privacy-Enhanced Addresses with IPv6 | A method for Generating Stable Privacy-Enhanced Addresses with IPv6 | |||
Stateless Address Autoconfiguration (SLAAC) | Stateless Address Autoconfiguration (SLAAC) | |||
draft-ietf-6man-stable-privacy-addresses-06 | draft-ietf-6man-stable-privacy-addresses-07 | |||
Abstract | Abstract | |||
This document specifies a method for generating IPv6 Interface | This document specifies a method for generating IPv6 Interface | |||
Identifiers to be used with IPv6 Stateless Address Autoconfiguration | Identifiers to be used with IPv6 Stateless Address Autoconfiguration | |||
(SLAAC), such that addresses configured using this method are stable | (SLAAC), such that addresses configured using this method are stable | |||
within each subnet, but the Interface Identifier changes when hosts | within each subnet, but the Interface Identifier changes when hosts | |||
move from one network to another. The aforementioned method is meant | move from one network to another. This method is meant to be an | |||
to be an alternative to generating Interface Identifiers based on | alternative to generating Interface Identifiers based on IEEE | |||
IEEE identifiers, such that the benefits of stable addresses can be | identifiers, such that the benefits of stable addresses can be | |||
achieved without sacrificing the privacy of users. | achieved without sacrificing the privacy of users. | |||
Status of this Memo | Status of this Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on October 14, 2013. | This Internet-Draft will expire on November 20, 2013. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 14 | skipping to change at page 2, line 14 | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2. Design goals . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Design goals . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
3. Algorithm specification . . . . . . . . . . . . . . . . . . . 7 | 3. Algorithm specification . . . . . . . . . . . . . . . . . . . 7 | |||
4. Resolving Duplicate Address Detection (DAD) conflicts . . . . 10 | 4. Resolving Duplicate Address Detection (DAD) conflicts . . . . 12 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 | 5. Specified Constants . . . . . . . . . . . . . . . . . . . . . 13 | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 14 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 13 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . . 14 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . . 14 | 9.1. Normative References . . . . . . . . . . . . . . . . . . . 18 | |||
Appendix A. Privacy issues still present with RFC 4941 . . . . . 16 | 9.2. Informative References . . . . . . . . . . . . . . . . . . 18 | |||
A.1. Host tracking . . . . . . . . . . . . . . . . . . . . . . 16 | Appendix A. Possible sources for the Net_Iface parameter . . . . 21 | |||
A.1.1. Tracking hosts across networks #1 . . . . . . . . . . 16 | A.1. Interface Index . . . . . . . . . . . . . . . . . . . . . 21 | |||
A.1.2. Tracking hosts across networks #2 . . . . . . . . . . 16 | A.2. Interface Name . . . . . . . . . . . . . . . . . . . . . . 21 | |||
A.1.3. Revealing the identity of devices performing | A.3. Link-layer Addresses . . . . . . . . . . . . . . . . . . . 21 | |||
server-like functions . . . . . . . . . . . . . . . . 17 | Appendix B. Privacy issues still present when temporary | |||
A.2. Address scanning attacks . . . . . . . . . . . . . . . . . 17 | addresses are employed . . . . . . . . . . . . . . . 23 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 18 | B.1. Host tracking . . . . . . . . . . . . . . . . . . . . . . 23 | |||
B.1.1. Tracking hosts across networks #1 . . . . . . . . . . 23 | ||||
B.1.2. Tracking hosts across networks #2 . . . . . . . . . . 24 | ||||
B.1.3. Revealing the identity of devices performing | ||||
server-like functions . . . . . . . . . . . . . . . . 24 | ||||
B.2. Address-scanning attacks . . . . . . . . . . . . . . . . . 24 | ||||
B.3. Information Leakage . . . . . . . . . . . . . . . . . . . 25 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
1. Introduction | 1. Introduction | |||
[RFC4862] specifies the Stateless Address Autoconfiguration (SLAAC) | [RFC4862] specifies Stateless Address Autoconfiguration (SLAAC) for | |||
for IPv6 [RFC2460], which typically results in hosts configuring one | IPv6 [RFC2460], which typically results in hosts configuring one or | |||
or more "stable" addresses composed of a network prefix advertised by | more "stable" addresses composed of a network prefix advertised by a | |||
a local router, and an Interface Identifier (IID) that typically | local router, and an Interface Identifier (IID) that typically embeds | |||
embeds a hardware address (e.g., using IEEE identifiers) [RFC4291]. | a hardware address (e.g., using IEEE identifiers) [RFC4291]. | |||
Generally, stable addresses are thought to simplify network | Cryptograhically Generated Addresses (CGAs) [RFC3972] are yet | |||
management, since they simplify Access Control Lists (ACLs) and | another method for generating Interface Identifiers, which bind a | |||
logging. However, since IEEE identifiers are typically globally | public signature key to an IPv6 address in the SEcure Neighbor | |||
unique, the resulting IPv6 addresses can be leveraged to track and | Discovery (SEND) [RFC3971] protocol. | |||
correlate the activity of a node over time and across multiple | ||||
subnets and networks, thus negatively affecting the privacy of users. | Generally, the traditional SLAAC addresses are thought to simplify | |||
network management, since they simplify Access Control Lists (ACLs) | ||||
and logging. However, they have a number of drawbacks: | ||||
o since the resulting Interface Identifiers do not vary over time, | ||||
they allow correlation of node activities within the same network, | ||||
thus negatively affecting the privacy of users. | ||||
o since the resulting Interface Identifiers are constant across | ||||
networks, the resulting IPv6 addresses can be leveraged to track | ||||
and correlate the activity of a node across multiple networks | ||||
(e.g. track and correlate the activities of a typical client | ||||
connecting to the public Internet from different locations), thus | ||||
negatively affecting the privacy of users. | ||||
o since embedding the underlying link-layer address in the Interface | ||||
Identifier results in specific address patterns, such patterns may | ||||
be leveraged by attackers to reduce the search space when | ||||
performing address scanning attacks. | ||||
o embedding the underlying link-layer address in the Interface | ||||
Identifier means that changing the interface hardware results in a | ||||
different Interface Identifier (and hence different IPv6 address). | ||||
The "Privacy Extensions for Stateless Address Autoconfiguration in | The "Privacy Extensions for Stateless Address Autoconfiguration in | |||
IPv6" [RFC4941] were introduced to complicate the task of | IPv6" [RFC4941] (henceforth referred to as "temporary addresses") | |||
eavesdroppers and other information collectors to correlate the | were introduced to complicate the task of eavesdroppers and other | |||
activities of a node, and basically result in temporary (and random) | information collectors to correlate the activities of a node, and | |||
Interface Identifiers that are typically more difficult to leverage | basically result in temporary (and random) Interface Identifiers. | |||
than those based on IEEE identifiers. When privacy extensions are | These temporary addresses are generated *in addition* to the | |||
enabled, "privacy addresses" are employed for "outgoing | traditional IPv6 addresses based on IEEE identifiers, with the | |||
communications", while the traditional IPv6 addresses based on IEEE | "temporary addresses" being employed for "outgoing communications", | |||
identifiers are still used for "server" functions (i.e., receiving | and the traditional SLAAC addresses being employed for "server" | |||
incoming connections). | functions (i.e., receiving incoming connections). | |||
As noted in [RFC4941], "anytime a fixed identifier is used in | However, even with "temporary addresses" in place, a number of issues | |||
multiple contexts, it becomes possible to correlate seemingly | remain to be mitigated. Namely, | |||
unrelated activity using this identifier". Therefore, since | ||||
"privacy addresses" [RFC4941] do not eliminate the use of fixed | ||||
identifiers for server-like functions, they only *partially* | ||||
mitigate the correlation of host activities (see Appendix A for | ||||
some example attacks that are still possible with privacy | ||||
addresses). Therefore, it is vital that the privacy | ||||
characteristics of "stable" addresses are improved such that the | ||||
ability of an attacker correlating host activities across networks | ||||
is reduced. | ||||
Another important aspect not mitigated by "Privacy Addresses" | o since "temporary addresses" [RFC4941] do not eliminate the use of | |||
[RFC4941] is that of IPv6 address scanning. Since IPv6 addresses | fixed identifiers for server-like functions, they only *partially* | |||
that embed IEEE identifiers have specific patterns, an attacker | mitigate host-tracking and activity correlation across networks | |||
could leverage such patterns to greatly reduce the search space | (see Appendix B.1 for some example attacks that are still possible | |||
for "live" hosts. Since "privacy addresses" do not eliminate the | with temporary addresses). | |||
use of IPv6 addresses that embed IEEE identifiers, address | ||||
scanning attacks are still feasible even if "privacy extensions" | ||||
are employed [Gont-DEEPSEC2011] [CPNI-IPv6]. This is yet another | ||||
motivation to improve the privacy characteristics of "stable" | ||||
addresses (currently embedding IEEE identifiers). | ||||
Privacy/temporary addresses can be challenging in a number of areas. | o since "temporary addresses" [RFC4941] do not replace the | |||
For example, from a network-management point of view, they tend to | traditional SLAAC addresses, an attacker can still leverage | |||
increase the complexity of event logging, trouble-shooting, and | patterns in those addresses to greatly reduce the search space for | |||
enforcing access controls and quality of service, etc. As a result, | "alive" nodes [Gont-DEEPSEC2011] [CPNI-IPv6] | |||
some organizations disable the use of privacy addresses even at the | [I-D.ietf-opsec-ipv6-host-scanning]. | |||
expense of reduced privacy [Broersma]. Also, they result in | ||||
increased complexity, which might not be possible or desirable in | ||||
some implementations (e.g., some embedded devices). | ||||
In scenarios in which "Privacy Extensions" are deliberately not used | Hence, there is a motivation to improve the properties of "stable" | |||
addresses regardless of whether temporary addresses are employed or | ||||
not. | ||||
Additionally, it should be noted that temporary addresses can be | ||||
challenging in a number of areas. For example, from a network- | ||||
management point of view, they tend to increase the complexity of | ||||
event logging, trouble-shooting, enforcement of access controls and | ||||
quality of service, etc. As a result, some organizations disable the | ||||
use of temporary addresses even at the expense of reduced privacy | ||||
[Broersma]. Temporary addresses may also result in increased | ||||
implementation complexity, which might not be possible or desirable | ||||
in some implementations (e.g., some embedded devices). | ||||
In scenarios in which temporary addresses are deliberately not used | ||||
(possibly for any of the aforementioned reasons), all a host is left | (possibly for any of the aforementioned reasons), all a host is left | |||
with is the addresses that have been generated using e.g. IEEE | with is the stable addresses that have been generated using e.g. | |||
identifiers, and this is yet another case in which it is also vital | IEEE identifiers. In such scenarios, it may still be desirable to | |||
that the privacy characteristics of these stable addresses are | have addresses that mitigate address scanning attacks, and that at | |||
improved. | the very least do not reveal the node's identity when roaming from | |||
one network to another -- without complicating the operation of the | ||||
corresponding networks. | ||||
We note that in most (if not all) of those scenarios in which | However, even with temporary addresses [RFC4941] in place, | |||
"Privacy Extensions" are disabled, there is usually no actual desire | preventing correlation of activities of a node within a network | |||
to negatively affect user privacy, but rather a desire to simplify | may be difficult (if at all possible) to achieve. As a trivial | |||
operation of the network (simplify the use of ACLs, logging, etc.). | example, consider a scenario where there is a single node (or a | |||
reduced number of nodes) connected to a specific network. An | ||||
attacker could detect new addresses in use at that network, an | ||||
infer which addresses are being employed by which hosts. This | ||||
task is made particularly easier by the fact that use of | ||||
"temporary addresses" can be easily inferred (since the follow | ||||
different patterns from that of traditional SLAAC addresses), and | ||||
since they are re-generated periodically (i.e., after a specific | ||||
amount of time has elapsed). | ||||
This document specifies a method to generate interface identifiers | This document specifies a method to generate Interface Identifiers | |||
that are stable/constant for each network interface within each | that are stable/constant for each network interface within each | |||
subnet, but that change as hosts move from one network to another, | subnet, but that change as hosts move from one network to another, | |||
thus keeping the "stability" properties of the interface identifiers | thus keeping the "stability" properties of the Interface Identifiers | |||
specified in [RFC4291], while still mitigating address-scanning | specified in [RFC4291], while still mitigating address-scanning | |||
attacks and preventing correlation of the activities of a node as it | attacks and preventing correlation of the activities of a node as it | |||
moves from one network to another. | moves from one network to another. | |||
We note that this method is incrementally deployable, since it does | For nodes that currently disable "temporary addresses" [RFC4941] for | |||
not pose any interoperability implications when deployed on networks | ||||
where other nodes do not implement or employ it. | ||||
This document does not update or modify IPv6 StateLess Address Auto- | ||||
Configuration (SLAAC) [RFC4862] itself, but rather only specifies an | ||||
alternative algorithm to generate Interface IDs. Therefore, the | ||||
usual address lifetime properties (as specified in the corresponding | ||||
Prefix Information Options) apply when IPv6 addresses are generated | ||||
as a result of employing the algorithm specified in this document | ||||
with SLAAC [RFC4862]. Additionally, from the point of view of | ||||
renumbering, we note that these addresses behave like the traditional | ||||
IPv6 addresses (that embed a hardware address) resulting from SLAAC | ||||
[RFC4862]. | ||||
For nodes that currently disable "Privacy extensions" [RFC4941] for | ||||
some of the reasons stated above, this mechanism provides stable | some of the reasons stated above, this mechanism provides stable | |||
privacy-enhanced addresses which may already address most of the | privacy-enhanced addresses which address some of the concerns related | |||
privacy concerns related to addresses that embed IEEE identifiers | to addresses that embed IEEE identifiers [RFC4291]. On the other | |||
hand, in scenarios in which "temporary addresses" are employed | ||||
together with stable addresses such as those based on IEEE | ||||
identifiers, implementation of the mechanism described in this | ||||
document would mitigate address-scanning attacks and also mitigate | ||||
some vectors for correlating host activities that are not mitigated | ||||
by the use of temporary addresses. | ||||
[RFC4291]. On the other hand, in scenarios in which "Privacy | We note that this method is incrementally deployable, since it does | |||
Extensions" are employed, implementation of the mechanism described | not pose any interoperability implications when deployed on networks | |||
in this document would mitigate host-scanning attacks and also | where other nodes do not implement or employ it. Additionally, we | |||
mitigate correlation of host activities. | note that this document does not update or modify IPv6 StateLess | |||
Address Auto-Configuration (SLAAC) [RFC4862] itself, but rather only | ||||
specifies an alternative algorithm to generate Interface Identifiers. | ||||
Therefore, the usual address lifetime properties (as specified in the | ||||
corresponding Prefix Information Options) apply when IPv6 addresses | ||||
are generated as a result of employing the algorithm specified in | ||||
this document with SLAAC [RFC4862]. Additionally, from the point of | ||||
view of renumbering, we note that these addresses behave like the | ||||
traditional IPv6 addresses (that embed a hardware address) resulting | ||||
from SLAAC [RFC4862]. | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [RFC2119]. | document are to be interpreted as described in RFC 2119 [RFC2119]. | |||
2. Design goals | 2. Design goals | |||
This document specifies a method for selecting interface identifiers | This document specifies a method for selecting Interface Identifiers | |||
to be used with IPv6 SLAAC, with the following goals: | to be used with IPv6 SLAAC, with the following goals: | |||
o The resulting interface identifiers remain constant/stable for | o The resulting Interface Identifiers remain constant/stable for | |||
each prefix used with SLAAC within each subnet. That is, the | each prefix used with SLAAC within each subnet. That is, the | |||
algorithm generates the same interface identifier when configuring | algorithm generates the same Interface Identifier when configuring | |||
an address belonging to the same prefix within the same subnet. | an address (for the same interface) belonging to the same prefix | |||
within the same subnet. | ||||
o The resulting interface identifiers do not depend on the | ||||
underlying hardware (e.g. link-layer address). This means that | ||||
e.g. replacing a Network Interface Card (NIC) will not have the | ||||
(generally undesirable) effect of changing the IPv6 addresses used | ||||
for that network interface. | ||||
o The resulting interface identifiers do change when addresses are | o The resulting Interface Identifiers do change when addresses are | |||
configured for different prefixes. That is, if different | configured for different prefixes. That is, if different | |||
autoconfiguration prefixes are used to configure addresses for the | autoconfiguration prefixes are used to configure addresses for the | |||
same network interface card, the resulting interface identifiers | same network interface card, the resulting Interface Identifiers | |||
must be (statistically) different. | must be (statistically) different. | |||
o It must be difficult for an outsider to predict the interface | o It must be difficult for an outsider to predict the Interface | |||
identifiers that will be generated by the algorithm, even with | Identifiers that will be generated by the algorithm, even with | |||
knowledge of the interface identifiers generated for configuring | knowledge of the Interface Identifiers generated for configuring | |||
other addresses. | other addresses. | |||
o The aforementioned interface identifiers are meant to be an | o Depending on the specific implementation approach (see Section 3 | |||
and Appendix A), the resulting Interface Identifiers may be | ||||
independent of the underlying hardware (e.g. link-layer address). | ||||
This means that e.g. replacing a Network Interface Card (NIC) will | ||||
not have the (generally undesirable) effect of changing the IPv6 | ||||
addresses used for that network interface. | ||||
o The aforementioned Interface Identifiers are meant to be an | ||||
alternative to those based on e.g. IEEE identifiers, such as | alternative to those based on e.g. IEEE identifiers, such as | |||
those specified in [RFC2464]. | those specified in [RFC2464]. | |||
We note that of use of the algorithm specified in this document is | We note that of use of the algorithm specified in this document is | |||
(to a large extent) orthogonal to the use of "Privacy Extensions" | (to a large extent) orthogonal to the use of "temporary addresses" | |||
[RFC4941]. Hosts that do not implement/use "Privacy Extensions" | [RFC4941]. Hosts that do not implement/use "temporary addresses" | |||
would have the benefit that they would not be subject to the host- | would have the benefit that they would not be subject to the host- | |||
tracking and address scanning issues discussed in the previous | tracking and address scanning issues discussed in the previous | |||
section. On the other hand, in the case of hosts employing "Privacy | section. On the other hand, in the case of hosts employing | |||
Extensions", the method specified in this document would prevent | "temporary addresses", the method specified in this document would | |||
address scanning attacks and correlation of node activities across | mitigate address-scanning attacks and correlation of node activities | |||
networks (see Appendix A). | across networks (see Appendix B and [IAB-PRIVACY]). | |||
3. Algorithm specification | 3. Algorithm specification | |||
IPv6 implementations conforming to this specification MUST generate | IPv6 implementations conforming to this specification MUST generate | |||
interface identifiers using the algorithm specified in this section | Interface Identifiers using the algorithm specified in this section | |||
in replacement of any other algorithms used for generating "stable" | in replacement of any other algorithms used for generating "stable" | |||
addresses (such as that specified in [RFC2464]). The aforementioned | addresses (such as that specified in [RFC2464]). The aforementioned | |||
algorithm MUST be employed for generating the interface identifiers | algorithm MUST be employed for generating the Interface Identifiers | |||
for all of the IPv6 addresses configured with SLAAC for a given | for all of the IPv6 addresses configured with SLAAC for a given | |||
interface, including IPv6 link-local addresses. | interface, including IPv6 link-local addresses. | |||
This means that this document does not formally obsolete or | This means that this document does not formally obsolete or | |||
deprecate any of the existing algorithms to generate Interface IDs | deprecate any of the existing algorithms to generate Interface | |||
(e.g. such as that specified in [RFC2464]). However, those IPv6 | Identifiers (e.g. such as that specified in [RFC2464]). However, | |||
implementations that employ this specification must generate all | those IPv6 implementations that employ this specification MUST | |||
of their "stable" addresses as specified in this document. | generate all of their "stable" addresses as specified in this | |||
document. | ||||
Implementations conforming to this specification SHOULD provide the | Implementations conforming to this specification SHOULD provide the | |||
means for a system administrator to enable or disable the use of this | means for a system administrator to enable or disable the use of this | |||
algorithm for generating Interface Identifiers. Implementations | algorithm for generating Interface Identifiers. Implementations | |||
conforming to this specification MAY employ the algorithm specified | conforming to this specification MAY employ the algorithm specified | |||
in [RFC4941] to generate temporary addresses in addition to the | in [RFC4941] to generate temporary addresses in addition to the | |||
addresses generated with the algorithm specified in this document. | addresses generated with the algorithm specified in this document. | |||
Unless otherwise noted, all of the parameters included in the | Unless otherwise noted, all of the parameters included in the | |||
expression below MUST be included when generating an Interface ID. | expression below MUST be included when generating an Interface | |||
Identifier. | ||||
1. Compute a random (but stable) identifier with the expression: | 1. Compute a random (but stable) identifier with the expression: | |||
RID = F(Prefix, Interface_Index, Network_ID, DAD_Counter, | RID = F(Prefix, Net_Iface, Network_ID, DAD_Counter, secret_key) | |||
secret_key) | ||||
Where: | Where: | |||
RID: | RID: | |||
Random (but stable) Interface Identifier | Random (but stable) Interface Identifier | |||
F(): | F(): | |||
A pseudorandom function (PRF) that is not computable from the | A pseudorandom function (PRF) that is not computable from the | |||
outside (without knowledge of the secret key). The PRF could | outside (without knowledge of the secret key), which | |||
be implemented as a cryptographic hash of the concatenation of | shouldproduce an output of at least 64 bits.The PRF could be | |||
implemented as a cryptographic hash of the concatenation of | ||||
each of the function parameters. | each of the function parameters. | |||
Prefix: | Prefix: | |||
The prefix to be used for SLAAC, as learned from an ICMPv6 | The prefix to be used for SLAAC, as learned from an ICMPv6 | |||
Router Advertisement message. | Router Advertisement message. | |||
Interface_Index: | Net_Iface: | |||
The interface index [RFC3493] [RFC3542] corresponding to this | An implementation-dependent stable identifier associated with | |||
network interface. | the network interface for which the RID is being generated. | |||
An implementation MAY provide a configuration option to select | ||||
the source of the identifier to be used for the Net_Iface | ||||
parameter. A discussion of possible sources for this value | ||||
(along with the corresponding trade-offs) can be found in | ||||
Appendix A. | ||||
Network_ID: | Network_ID: | |||
Some network specific data that identifies the subnet to which | Some network specific data that identifies the subnet to which | |||
this interface is attached. For example the IEEE 802.11 | this interface is attached. For example the IEEE 802.11 | |||
Service Set Identifier (SSID) corresponding to the network to | Service Set Identifier (SSID) corresponding to the network to | |||
which this interface is associated. This parameter is | which this interface is associated. This parameter is | |||
OPTIONAL. | OPTIONAL. | |||
DAD_Counter: | DAD_Counter: | |||
A counter that is employed to resolve Duplicate Address | A counter that is employed to resolve Duplicate Address | |||
Detection (DAD) conflicts. It MUST be initialized to 0, and | Detection (DAD) conflicts. It MUST be initialized to 0, and | |||
incremented by 1 for each new tentative address that is | incremented by 1 for each new tentative address that is | |||
configured as a result of a DAD conflict. Implementations | configured as a result of a DAD conflict. Implementations | |||
that record DAD_Counter in non-volatile memory for each | that record DAD_Counter in non-volatile memory for each | |||
{Prefix, Interface_Index, Network_ID} tuple MUST initialize | {Prefix, Net_Iface, Network_ID} tuple MUST initialize | |||
DAD_Counter to the recorded value if such an entry exists in | DAD_Counter to the recorded value if such an entry exists in | |||
non-volatile memory). See Section 4 for additional details. | non-volatile memory). See Section 4 for additional details. | |||
secret_key: | secret_key: | |||
A secret key that is not known by the attacker. The secret | A secret key that is not known by the attacker. The secret | |||
key MUST be initialized at system installation time to a | key MUST be initialized at operating system installation time | |||
pseudo-random number (see [RFC4086] for randomness | to a pseudo-random number (see [RFC4086] for randomness | |||
requirements for security). An implementation MAY provide the | requirements for security). An implementation MAY provide the | |||
means for the user to change the secret key. | means for the the system administrator to change or display | |||
the secret key. | ||||
2. The Interface Identifier is finally obtained by taking as many | ||||
bits from the RID value (computed in the previous step) as | ||||
necessary, starting from the rightmost bit. | ||||
We note that [RFC4291] requires that, the Interface IDs of all | ||||
unicast addresses (except those that start with the binary | ||||
value 000) be 64-bit long. However, the method discussed in | ||||
this document could be employed for generating Interface IDs | ||||
of any arbitrary length, albeit at the expense of reduced | ||||
entropy (when employing Interface IDs smaller than 64 bits). | ||||
2. The Interface Identifier is finally obtained by taking the | ||||
leftmost 64 bits of the RID value computed in the previous step. | ||||
The resulting Interface Identifier should be compared against the | The resulting Interface Identifier should be compared against the | |||
Subnet-Router Anycast [RFC4291] and the Reserved Subnet Anycast | Subnet-Router Anycast [RFC4291] and the Reserved Subnet Anycast | |||
Addresses [RFC2526], and against those interface identifiers | Addresses [RFC2526], and against those Interface Identifiers | |||
already employed in an address of the same network interface and | already employed in an address of the same network interface and | |||
the same network prefix. In the event that an unacceptable | the same network prefix. In the event that an unacceptable | |||
identifier has been generated, this situation should be handled | identifier has been generated, this situation should be handled | |||
in the same way as the case of duplicate addresses (see | in the same way as the case of duplicate addresses (see | |||
Section 4). | Section 4). | |||
This document does not require the use of any specific PRF for the | This document does not require the use of any specific PRF for the | |||
function F() above, since the choice of such PRF is usually a trade- | function F() above, since the choice of such PRF is usually a trade- | |||
off between a number of properties (processing requirements, ease of | off between a number of properties (processing requirements, ease of | |||
implementation, possible intellectual property rights, etc.), and | implementation, possible intellectual property rights, etc.), and | |||
skipping to change at page 9, line 15 | skipping to change at page 9, line 30 | |||
being used by the victim (which we should expect), and the attacker | being used by the victim (which we should expect), and the attacker | |||
can obtain enough material (i.e. addresses configured by the victim), | can obtain enough material (i.e. addresses configured by the victim), | |||
the attacker may simply search the entire secret-key space to find | the attacker may simply search the entire secret-key space to find | |||
matches. To protect against this, the secret key should be of a | matches. To protect against this, the secret key should be of a | |||
reasonable length. Key lengths of at least 128 bits should be | reasonable length. Key lengths of at least 128 bits should be | |||
adequate. The secret key is initialized at system installation time | adequate. The secret key is initialized at system installation time | |||
to a pseudo-random number, thus allowing this mechanism to be | to a pseudo-random number, thus allowing this mechanism to be | |||
enabled/used automatically, without user intervention. | enabled/used automatically, without user intervention. | |||
Including the SLAAC prefix in the PRF computation causes the | Including the SLAAC prefix in the PRF computation causes the | |||
Interface ID to vary across networks that employ different prefixes, | Interface Identifier to vary across networks that employ different | |||
thus mitigating host-tracking attacks and any other attacks that | prefixes, thus mitigating host-tracking attacks and any other attacks | |||
benefit from predictable Interface IDs (such as address scanning). | that benefit from predictable Interface Identifiers (such as address | |||
scanning attacks). | ||||
The Interface Index is expected to remain constant across system | The Net_Iface is a value that identifies the network interface for | |||
reboots and other events. However, we note that it might change upon | which an IPv6 address is being generated. The following properties | |||
removal or installation of a network interface (typically one with a | are desirable for the Net_Iface: | |||
smaller value for the Interface Index, when such a naming scheme is | ||||
used). When such change occurs, the IPv6 addresses resulting from | o it MUST be constant across system bootstrap sequences and other | |||
this algorithm for the corresponding interface will change, thus | network events (e.g., bringing another interface up or down) | |||
affecting the stability property of this method. We note that we | ||||
expect these scenarios to be unusual. Some implementations are known | o it MUST be different for each network interface | |||
to provide configuration knobs to set the Interface Index for a given | ||||
interface. Such configuration knobs could be employed to prevent the | Since the stability of the addresses generated with this method | |||
Interface Index from changing (e.g. as a result of the removal of a | relies on the stability of all arguments of F(), it is key that the | |||
network interface). | Net_Iface be constant across system bootstrap sequences and other | |||
network events. Additionally, the Net_Iface must uniquely identify | ||||
an interface within the node, such that two interfaces connecting to | ||||
the same network do not result in duplicate addresses. Different | ||||
types of operating systems might benefit from different stability | ||||
properties of the Net_Iface parameter. For example, a client- | ||||
oriented operating system might want to employ Net_Iface identifiers | ||||
that are attached to the underlying network interface card (NIC), | ||||
such that a removable NIC always gets the same IPv6 address, | ||||
irrespective of the system communications port to which it is | ||||
attached. On the other hand, a server-oriented operating system | ||||
might prefer Net_Iface identifers that are attached to system slots/ | ||||
ports, such that replacement of a network interface card does not | ||||
result in an IPv6 address change. Appendix A discusses possible | ||||
sources for the Net_Iface, along with their pros and cons. | ||||
Including the optional Network_ID parameter when computing the RID | Including the optional Network_ID parameter when computing the RID | |||
value above would cause the algorithm to produce a different | value above would cause the algorithm to produce a different | |||
Interface Identifier when connecting to different networks, even when | Interface Identifier when connecting to different networks, even when | |||
configuring addresses belonging to the same prefix. This means that | configuring addresses belonging to the same prefix. This means that | |||
a host would employ a different Interface ID as it moves from one | a host would employ a different Interface Identifier as it moves from | |||
network to another even for IPv6 link-local addresses or Unique Local | one network to another even for IPv6 link-local addresses or Unique | |||
Addresses (ULAs). | Local Addresses (ULAs). In those scenarios where the Network_ID is | |||
unknown to the attacker, including this parameter might help mitigate | ||||
attacks where a victim node connects to the same subnet as the | ||||
attacker, and the attacker tries to learn the Interface Identifier | ||||
used by the victim node for a remote network (see Section 7 for | ||||
further details). | ||||
The DAD_Counter parameter provides the means to intentionally cause | The DAD_Counter parameter provides the means to intentionally cause | |||
this algorithm produce a different IPv6 addresses (all other | this algorithm produce a different IPv6 addresses (all other | |||
parameters being the same). This could be necessary to resolve | parameters being the same). This could be necessary to resolve | |||
Duplicate Address Detection (DAD) conflicts, as discussed in detail | Duplicate Address Detection (DAD) conflicts, as discussed in detail | |||
in Section 4. | in Section 4. | |||
Finally, we note that all of the bits in the resulting Interface IDs | ||||
are treated as "opaque" bits. For example, the universal/local bit | ||||
of Modified EUI-64 format identifiers is treated as any other bit of | ||||
such identifier. In theory, this might result in Duplicate Address | ||||
Detection (DAD) failures that would otherwise not be encountered. | ||||
However, this is not deemed as a real issue, because of the following | ||||
considerations: | ||||
o The interface IDs of all addresses (except those of addresses that | ||||
that start with the binary value 000) are 64-bit long. Since the | ||||
method specified in this document results in random Interface IDs, | ||||
the probability of DAD failures is very small. | ||||
o Real world data indicates that MAC address reuse is far more | ||||
common than assumed [HDMoore]. This means that even IPv6 | ||||
addresses that employ (allegedly) unique identifiers (such as IEEE | ||||
identifiers) might result in DAD failures, and hence | ||||
implementations should be prepared to gracefully handle such | ||||
occurrences. | ||||
Finally, we note that some popular and widely-deployed operating | ||||
systems (such as Microsoft Windows) do not employ unique identifiers | ||||
for the Interface IDs of their stable addresses. Therefore, such | ||||
implementations would not be affected by the method specified in this | ||||
document. | ||||
4. Resolving Duplicate Address Detection (DAD) conflicts | 4. Resolving Duplicate Address Detection (DAD) conflicts | |||
If as a result of performing Duplicate Address Detection (DAD) | If as a result of performing Duplicate Address Detection (DAD) | |||
[RFC4862] a host finds that the tentative address generated with the | [RFC4862] a host finds that the tentative address generated with the | |||
algorithm specified in Section 3 is a duplicate address, it SHOULD | algorithm specified in Section 3 is a duplicate address, it SHOULD | |||
resolve the address conflict by trying a new tentative address as | resolve the address conflict by trying a new tentative address as | |||
follows: | follows: | |||
o DAD_Counter is incremented by 1. | o DAD_Counter is incremented by 1. | |||
o A new Interface ID is generated with the algorithm specified in | o A new Interface Identifier is generated with the algorithm | |||
Section 3, using the incremented DAD_Counter value. | specified in Section 3, using the incremented DAD_Counter value. | |||
This procedure may be repeated a number of times until the address | This procedure may be repeated a number of times until the address | |||
conflict is resolved. We RECOMMEND hosts to try at least | conflict is resolved. Hosts SHOULD try at least IDGEN_RETRIES (see | |||
IDGEN_RETRIES (hereby specified as "3") tentative addresses if DAD | Section 5) tentative addresses if DAD fails for successive generated | |||
fails for successive generated addresses, in the hopes of resolving | addresses, in the hopes of resolving the address conflict. We also | |||
the address conflict. We also note that hosts MUST limit the number | note that hosts MUST limit the number of tentative addresses that are | |||
of tentative addresses that are tried (rather than indefinitely try a | tried (rather than indefinitely try a new tentative address until the | |||
new tentative address until the conflict is resolved). | conflict is resolved). | |||
In those (unlikely) scenarios in which duplicate addresses are | In those (unlikely) scenarios in which duplicate addresses are | |||
detected and in which the order in which the conflicting nodes | detected and in which the order in which the conflicting nodes | |||
configure their addresses may vary (e.g., because they may be | configure their addresses may vary (e.g., because they may be | |||
bootstrapped in different order), the algorithm specified in this | bootstrapped in different order), the algorithm specified in this | |||
section for resolving DAD conflicts could lead to addresses that are | section for resolving DAD conflicts could lead to addresses that are | |||
not stable within the same subnet. In order to mitigate this | not stable within the same subnet. In order to mitigate this | |||
potential problem, nodes MAY record the DAD_Counter value employed | potential problem, nodes MAY record the DAD_Counter value employed | |||
for a specific {Prefix, Interface_Index, Network_ID} tuple in non- | for a specific {Prefix, Net_Iface, Network_ID} tuple in non-volatile | |||
volatile memory, such that the same DAD_Counter value is employed | memory, such that the same DAD_Counter value is employed when | |||
when configuring an address for the same Prefix and subnet at any | configuring an address for the same Prefix and subnet at any other | |||
other point in time. | point in time. | |||
In the event that a DAD conflict cannot be solved (possibly after | In the event that a DAD conflict cannot be solved (possibly after | |||
trying a number of different addresses), address configuration would | trying a number of different addresses), address configuration would | |||
fail. In those scenarios, nodes MUST NOT automatically fall back to | fail. In those scenarios, nodes MUST NOT automatically fall back to | |||
employing other algorithms for generating interface identifiers. | employing other algorithms for generating Interface Identifiers. | |||
5. IANA Considerations | 5. Specified Constants | |||
This document specifies the following constant: | ||||
IDGEN_RETRIES: | ||||
defaults to 3. | ||||
6. IANA Considerations | ||||
There are no IANA registries within this document. The RFC-Editor | There are no IANA registries within this document. The RFC-Editor | |||
can remove this section before publication of this document as an | can remove this section before publication of this document as an | |||
RFC. | RFC. | |||
6. Security Considerations | 7. Security Considerations | |||
This document specifies an algorithm for generating interface | This document specifies an algorithm for generating Interface | |||
identifiers to be used with IPv6 Stateless Address Autoconfiguration | Identifiers to be used with IPv6 Stateless Address Autoconfiguration | |||
(SLAAC), as an alternative to e.g. interface identifiers that embed | (SLAAC), as an alternative to e.g. Interface Identifiers that embed | |||
IEEE identifiers (such as those specified in [RFC2464]). When | IEEE identifiers (such as those specified in [RFC2464]). When | |||
compared to such identifiers, the identifiers specified in this | compared to such identifiers, the identifiers specified in this | |||
document have a number of advantages: | document have a number of advantages: | |||
o They prevent trivial host-tracking, since when a host moves from | o They prevent trivial host-tracking, since when a host moves from | |||
one network to another the network prefix used for | one network to another the network prefix used for | |||
autoconfiguration and/or the Network ID (e.g., IEEE 802.11 SSID) | autoconfiguration and/or the Network ID (e.g., IEEE 802.11 SSID) | |||
will typically change, and hence the resulting interface | will typically change, and hence the resulting Interface | |||
identifier will also change (see Appendix A. | Identifier will also change (see Appendix B.1). | |||
o They mitigate address-scanning techniques which leverage | o They mitigate address-scanning techniques which leverage | |||
predictable interface identifiers (e.g., known Organizational | predictable Interface Identifiers (e.g., known Organizationally | |||
Unique Identifiers) [I-D.ietf-opsec-ipv6-host-scanning]. | Unique Identifiers) [I-D.ietf-opsec-ipv6-host-scanning]. | |||
o They result in IPv6 addresses that are independent of the | o They may result in IPv6 addresses that are independent of the | |||
underlying hardware (i.e. the resulting IPv6 addresses do not | underlying hardware (i.e. the resulting IPv6 addresses do not | |||
change if a network interface card is replaced). | change if a network interface card is replaced) if an appropriate | |||
source for Net_Iface (Section 3) is employed. | ||||
In scenarios in which an attacker can connect to the same subnet as a | ||||
victim node, the attacker might be able to learn the Interface | ||||
Identifier employed by the victim node for an arbitrary prefix, by | ||||
simply sending a forged Router Advertisement [RFC4861] for that | ||||
prefix, and subsequently learning the corresponding address | ||||
configured by the victim node (either listening to the Duplicate | ||||
Address Detection packets, or to any other traffic that employs the | ||||
newly configued address). We note that a number of factors might | ||||
limit the ability of an attaker from successfully performing such | ||||
attack: | ||||
o First-Hop security mechanisms such as RA-Guard [RFC6105] | ||||
[I-D.ietf-v6ops-ra-guard-implementation] could prevent the forged | ||||
Router Advertisement from reaching the victim node | ||||
o If the victim implementation includes the (optional) Network_ID | ||||
parameter for computing F() (see Section 3), and the Network_ID | ||||
employed by the victim for a remote network is unknown to the | ||||
attacker, the Interface Identifier learned by the attacker would | ||||
differ from the one used by the victim when connecting to the | ||||
legitimate network. | ||||
In any case, we note that at the point in which this kind of attack | ||||
becomes a concern, a host should consider employing Secure Neighbor | ||||
Discovery (SEND) [RFC3971] to prevent an attacker from illegitimately | ||||
claiming authority for a network prefix. | ||||
We note that this algorithm is meant to be an alternative to | We note that this algorithm is meant to be an alternative to | |||
interface identifiers such as those specified in [RFC2464], but is | Interface Identifiers such as those specified in [RFC2464], but is | |||
not meant as an alternative to temporary Interface IDs (such as those | not meant as an alternative to temporary Interface Identifiers (such | |||
specified in [RFC4941]). Clearly, temporary addresses may help to | as those specified in [RFC4941]). Clearly, temporary addresses may | |||
mitigate the correlation of activities of a node within the same | help to mitigate the correlation of activities of a node within the | |||
network, and may also reduce the attack exposure window (since | same network, and may also reduce the attack exposure window (since | |||
privacy/temporary addresses are short-lived when compared to the | temporary addresses are short-lived when compared to the addresses | |||
addresses generated with the method specified in this document). We | generated with the method specified in this document). We note that | |||
note that implementation of this algorithm would still benefit those | implementation of this algorithm would still benefit those hosts | |||
hosts employing "Privacy Addresses", since it would mitigate host- | employing "temporary addresses", since it would mitigate host- | |||
tracking vectors still present when privacy addresses are used (see | tracking vectors still present when such addresses are used (see | |||
Appendix A), and would also mitigate host-scanning techniques that | Appendix B.1), and would also mitigate address-scanning techniques | |||
leverage patterns in IPv6 addresses that embed IEEE identifiers. | that leverage patterns in IPv6 addresses that embed IEEE identifiers. | |||
Finally, we note that the method described in this document may | Finally, we note that the method described in this document addresses | |||
mitigate most of the privacy concerns arising from the use of IPv6 | some of the privacy concerns arising from the use of IPv6 addresses | |||
addresses that embed IEEE identifiers, without the use of temporary | that embed IEEE identifiers, without the use of temporary addresses, | |||
addresses, thus possibly offering an interesting trade-off for those | thus possibly offering an interesting trade-off for those scenarios | |||
scenarios in which the use of temporary addresses is not feasible. | in which the use of temporary addresses is not feasible. | |||
7. Acknowledgements | 8. Acknowledgements | |||
The algorithm specified in this document has been inspired by Steven | The algorithm specified in this document has been inspired by Steven | |||
Bellovin's work ([RFC1948]) in the area of TCP sequence numbers. | Bellovin's work ([RFC1948]) in the area of TCP sequence numbers. | |||
The author would like to thank (in alphabetical order) Karl Auer, | The author would like to thank (in alphabetical order) Ran Atkinson, | |||
Steven Bellovin, Matthias Bethke, Brian Carpenter, Tassos | Karl Auer, Steven Bellovin, Matthias Bethke, Ben Campbell, Brian | |||
Chatzithomaoglou, Dominik Elsbroek, Brian Haberman, Bob Hinden, | Carpenter, Tassos Chatzithomaoglou, Alissa Cooper, Dominik Elsbroek, | |||
Christian Huitema, Ray Hunter, Jong-Hyouk Lee, Michael Richardson, | Brian Haberman, Bob Hinden, Christian Huitema, Ray Hunter, Jouni | |||
Mark Smith, and Ole Troan, for providing valuable comments on earlier | Korhonen, Eliot Lear, Jong-Hyouk Lee, Andrew McGregor, Tom Petch, | |||
versions of this document. | Michael Richardson, Mark Smith, Ole Troan, and He Xuan, for providing | |||
valuable comments on earlier versions of this document. | ||||
This document is based on the technical report "Security Assessment | This document is based on the technical report "Security Assessment | |||
of the Internet Protocol version 6 (IPv6)" [CPNI-IPv6] authored by | of the Internet Protocol version 6 (IPv6)" [CPNI-IPv6] authored by | |||
Fernando Gont on behalf of the UK Centre for the Protection of | Fernando Gont on behalf of the UK Centre for the Protection of | |||
National Infrastructure (CPNI). | National Infrastructure (CPNI). | |||
Fernando Gont would like to thank CPNI (http://www.cpni.gov.uk) for | Fernando Gont would like to thank CPNI (http://www.cpni.gov.uk) for | |||
their continued support. | their continued support. | |||
8. References | 9. References | |||
8.1. Normative References | 9.1. Normative References | |||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
(IPv6) Specification", RFC 2460, December 1998. | (IPv6) Specification", RFC 2460, December 1998. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC2526] Johnson, D. and S. Deering, "Reserved IPv6 Subnet Anycast | [RFC2526] Johnson, D. and S. Deering, "Reserved IPv6 Subnet Anycast | |||
Addresses", RFC 2526, March 1999. | Addresses", RFC 2526, March 1999. | |||
[RFC3971] Arkko, J., Kempf, J., Zill, B., and P. Nikander, "SEcure | ||||
Neighbor Discovery (SEND)", RFC 3971, March 2005. | ||||
[RFC3972] Aura, T., "Cryptographically Generated Addresses (CGA)", | ||||
RFC 3972, March 2005. | ||||
[RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness | [RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness | |||
Requirements for Security", BCP 106, RFC 4086, June 2005. | Requirements for Security", BCP 106, RFC 4086, June 2005. | |||
[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing | [RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing | |||
Architecture", RFC 4291, February 2006. | Architecture", RFC 4291, February 2006. | |||
[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | ||||
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | ||||
September 2007. | ||||
[RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | |||
Address Autoconfiguration", RFC 4862, September 2007. | Address Autoconfiguration", RFC 4862, September 2007. | |||
[RFC4941] Narten, T., Draves, R., and S. Krishnan, "Privacy | [RFC4941] Narten, T., Draves, R., and S. Krishnan, "Privacy | |||
Extensions for Stateless Address Autoconfiguration in | Extensions for Stateless Address Autoconfiguration in | |||
IPv6", RFC 4941, September 2007. | IPv6", RFC 4941, September 2007. | |||
8.2. Informative References | [RFC6105] Levy-Abegnoli, E., Van de Velde, G., Popoviciu, C., and J. | |||
Mohacsi, "IPv6 Router Advertisement Guard", RFC 6105, | ||||
February 2011. | ||||
9.2. Informative References | ||||
[RFC1948] Bellovin, S., "Defending Against Sequence Number Attacks", | [RFC1948] Bellovin, S., "Defending Against Sequence Number Attacks", | |||
RFC 1948, May 1996. | RFC 1948, May 1996. | |||
[RFC2464] Crawford, M., "Transmission of IPv6 Packets over Ethernet | [RFC2464] Crawford, M., "Transmission of IPv6 Packets over Ethernet | |||
Networks", RFC 2464, December 1998. | Networks", RFC 2464, December 1998. | |||
[RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. | [RFC3493] Gilligan, R., Thomson, S., Bound, J., McCann, J., and W. | |||
Stevens, "Basic Socket Interface Extensions for IPv6", | Stevens, "Basic Socket Interface Extensions for IPv6", | |||
RFC 3493, February 2003. | RFC 3493, February 2003. | |||
[RFC3542] Stevens, W., Thomas, M., Nordmark, E., and T. Jinmei, | [RFC3542] Stevens, W., Thomas, M., Nordmark, E., and T. Jinmei, | |||
"Advanced Sockets Application Program Interface (API) for | "Advanced Sockets Application Program Interface (API) for | |||
IPv6", RFC 3542, May 2003. | IPv6", RFC 3542, May 2003. | |||
[I-D.ietf-opsec-ipv6-host-scanning] | [I-D.ietf-opsec-ipv6-host-scanning] | |||
Gont, F. and T. Chown, "Network Reconnaissance in IPv6 | Gont, F. and T. Chown, "Network Reconnaissance in IPv6 | |||
Networks", draft-ietf-opsec-ipv6-host-scanning-00 (work in | Networks", draft-ietf-opsec-ipv6-host-scanning-01 (work in | |||
progress), December 2012. | progress), April 2013. | |||
[I-D.ietf-v6ops-ra-guard-implementation] | ||||
Gont, F., "Implementation Advice for IPv6 Router | ||||
Advertisement Guard (RA-Guard)", | ||||
draft-ietf-v6ops-ra-guard-implementation-07 (work in | ||||
progress), November 2012. | ||||
[HDMoore] HD Moore, "The Wild West", Louisville, Kentucky, U.S.A. | ||||
September 25-29, 2012., September 2012, | ||||
<https://speakerdeck.com/hdm/derbycon-2012-the-wild-west>. | ||||
[Gont-DEEPSEC2011] | [Gont-DEEPSEC2011] | |||
Gont, "Results of a Security Assessment of the Internet | Gont, "Results of a Security Assessment of the Internet | |||
Protocol version 6 (IPv6)", DEEPSEC 2011 Conference, | Protocol version 6 (IPv6)", DEEPSEC 2011 Conference, | |||
Vienna, Austria, November 2011, <http:// | Vienna, Austria, November 2011, <http:// | |||
www.si6networks.com/presentations/deepsec2011/ | www.si6networks.com/presentations/deepsec2011/ | |||
fgont-deepsec2011-ipv6-security.pdf>. | fgont-deepsec2011-ipv6-security.pdf>. | |||
[Gont-BRUCON2012] | [Gont-BRUCON2012] | |||
Gont, "Recent Advances in IPv6 Security", BRUCON 2012 | Gont, "Recent Advances in IPv6 Security", BRUCON 2012 | |||
Conference, Ghent, Belgium, September 2012, <http:// | Conference, Ghent, Belgium, September 2012, <http:// | |||
www.si6networks.com/presentations/brucon2012/ | www.si6networks.com/presentations/brucon2012/ | |||
fgont-brucon2012-recent-advances-in-ipv6-security.pdf>. | fgont-brucon2012-recent-advances-in-ipv6-security.pdf>. | |||
[Broersma] | [Broersma] | |||
Broersma, R., "IPv6 Everywhere: Living with a Fully IPv6- | Broersma, R., "IPv6 Everywhere: Living with a Fully IPv6- | |||
enabled environment", Australian IPv6 Summit 2010, | enabled environment", Australian IPv6 Summit 2010, | |||
Melbourne, VIC Australia, October 2010, | Melbourne, VIC Australia, October 2010, <http:// | |||
<http://www.ipv6.org.au/summit/talks/Ron_Broersma.pdf>. | www.ipv6.org.au/10ipv6summit/talks/Ron_Broersma.pdf>. | |||
[IAB-PRIVACY] | ||||
IAB, "Privacy and IPv6 Addresses", July 2011, <http:// | ||||
www.iab.org/wp-content/IAB-uploads/2011/07/ | ||||
IPv6-addresses-privacy-review.txt>. | ||||
[CPNI-IPv6] | [CPNI-IPv6] | |||
Gont, F., "Security Assessment of the Internet Protocol | Gont, F., "Security Assessment of the Internet Protocol | |||
version 6 (IPv6)", UK Centre for the Protection of | version 6 (IPv6)", UK Centre for the Protection of | |||
National Infrastructure, (available on request). | National Infrastructure, (available on request). | |||
Appendix A. Privacy issues still present with RFC 4941 | Appendix A. Possible sources for the Net_Iface parameter | |||
This section aims to clarify the motivation of using the method | The following subsections describe a number of possible sources for | |||
specified in this document even when privacy/temporary addresses | the Net_Iface parameter employed by the F() function in Section 3. | |||
[RFC4941] are employed. It discusses a (non-exaustive) number of | The choice of a specific source for this value represents a number of | |||
scenarios in which host privacy is still sacrificed even when | trade-offs, which may vary from one implementation to another. | |||
privacy/temporary addresses [RFC4941] are employed, as a result of | ||||
employing interface identifiers that are constant across networks | ||||
(e.g., those resulting from embedding IEEE identifiers). | ||||
A.1. Host tracking | A.1. Interface Index | |||
The Interface Index [RFC3493] [RFC3542] of an interface uniquely | ||||
identifies an interface within a node. However, these identifiers | ||||
might or might not have the stability properties required for the | ||||
Net_Iface value employed by this method. For example, the Interface | ||||
Index might change upon removal or installation of a network | ||||
interface (typically one with a smaller value for the Interface | ||||
Index, when such a naming scheme is used), or when network interface | ||||
happen to be initialized in a different order. We note that some | ||||
implementations are known to provide configuration knobs to set the | ||||
Interface Index for a given interface. Such configuration knobs | ||||
could be employed to prevent the Interface Index from changing (e.g. | ||||
as a result of the removal of a network interface). | ||||
A.2. Interface Name | ||||
The Interface Name (e.g., "eth0", "em0", etc) tends to be more stable | ||||
than the underlying Interface Index, since such stability is | ||||
required/desired when interface names are employed in network | ||||
configuration (firewall rules, etc.). The stability properties of | ||||
Interface Names depend on implementation details, such as what is the | ||||
namespace used for Interface Names. For example, "generic" interface | ||||
names such as "eth0" or "wlan0" will generally be invariant with | ||||
respect to network interface card replacements. On the other hand, | ||||
vendor-dependent interface names such as "rtk0" or the like will | ||||
generally change when a network interface card is replaced with one | ||||
from a different vendor. | ||||
We note that Interface Names might still change when network | ||||
interfaces are added or removed once the system has been bootstrapped | ||||
(for example, consider Universal Serial Bus-based network interface | ||||
cards which might be added or removed once the system has been | ||||
bootstrapped). | ||||
A.3. Link-layer Addresses | ||||
Link-layer addresses typically provide for unique identfiers for | ||||
network interfaces; although, for obvious reasons, they generally | ||||
change when a network interface card is replaced. In scenarios where | ||||
neither Interface Indexes nor Interface Names have the stability | ||||
properties specified in Section 3 for Net_Iface, an implementation | ||||
might want to employ the link-layer address of the interface for the | ||||
Net_Iface parameter, albeit at the expense of making the | ||||
corresponding IPv6 addresses dependent on the underlying network | ||||
interface card (i.e., the corresponding IPv6 address would typically | ||||
change upon replacement of the underlying network interface card). | ||||
Appendix B. Privacy issues still present when temporary addresses are | ||||
employed | ||||
It is not unusual for people to assume or expect that all the | ||||
security/privacy implications of traditional SLAAC addresses to me | ||||
mitigated when "temporary addresses" [RFC4941] are employed. | ||||
However, as noted in Section 1 of this document and [IAB-PRIVACY], | ||||
since temporary addresses are employed in addition to (rather than in | ||||
replacement of) traditional SLAAC addresses, many of the security/ | ||||
privacy implications of traditional SLAAC addresses are not mitigated | ||||
by the use of temporary addresses. | ||||
This section discusses a (non-exhaustive) number of scenarios in | ||||
which host security/privacy is still negatively affected as a result | ||||
of employing Interface Identifiers that are constant across networks | ||||
(e.g., those resulting from embedding IEEE identifiers), even when | ||||
temporary addresses [RFC4941] are employed. It aims to clarify the | ||||
motivation of employing the method specified in this document in | ||||
replacement of the traditional SLAAC addresses even when privacy/ | ||||
temporary addresses [RFC4941] are employed. | ||||
B.1. Host tracking | ||||
This section describes one possible attack scenario that illustrates | This section describes one possible attack scenario that illustrates | |||
that host-tracking may still be possible when privacy/temporary | that host-tracking may still be possible when privacy/temporary | |||
addresses [RFC4941] are employed. | addresses [RFC4941] are employed. | |||
A.1.1. Tracking hosts across networks #1 | B.1.1. Tracking hosts across networks #1 | |||
A host configures its stable addresses with the constant | A host configures its stable addresses with the constant Interface | |||
Interface-ID, and runs any application that needs to perform a | Identifier, and runs any application that needs to perform a server- | |||
server-like function (e.g. a peer-to-peer application). As a result | like function (e.g. a peer-to-peer application). As a result of | |||
of that, an attacker/user participating in the same application | that, an attacker/user participating in the same application (e.g., | |||
(e.g., P2P) would learn the constant Interface-ID used by the host | P2P) would learn the constant Interface Identifier used by the host | |||
for that network interface. | for that network interface. | |||
Some time later, the same host moves to a completely different | Some time later, the same host moves to a completely different | |||
network, and employs the same P2P application, probably even with a | network, and employs the same P2P application, probably even with a | |||
different username. The attacker now interacts with the same host | different username. The attacker now interacts with the same host | |||
again, and hence can learn its newly-configured stable address. | again, and hence can learn its newly-configured stable address. | |||
Since the interface ID is the same as the one used before, the | Since the Interface Identifier is the same as the one used before, | |||
attacker can infer that it is communicating with the same device as | the attacker can infer that it is communicating with the same device | |||
before. | as before. | |||
This is just *one* possible attack scenario, which should remind us | This is just *one* possible attack scenario, which should remind us | |||
that one should not disclose more than it is really needed for | that one should not disclose more than it is really needed for | |||
achieving a specific goal (and an Interface-ID that is constant | achieving a specific goal (and an Interface Identifier that is | |||
across different networks does exactly that: it discloses more | constant across different networks does exactly that: it discloses | |||
information than is needed for providing a stable address). | more information than is needed for providing a stable address). | |||
A.1.2. Tracking hosts across networks #2 | B.1.2. Tracking hosts across networks #2 | |||
Once an attacker learns the constant Interface-ID employed by the | Once an attacker learns the constant Interface Identifier employed by | |||
victim host for its stable address, the attacker is able to "probe" a | the victim host for its stable address, the attacker is able to | |||
network for the presence of such host at any given network. | "probe" a network for the presence of such host at any given network. | |||
See Appendix A.1.1 for just one example of how an attacker could | See Appendix B.1.1 for just one example of how an attacker could | |||
learn such value. Other examples include being able to share the | learn such value. Other examples include being able to share the | |||
same network segment at some point in time (e.g. a conference | same network segment at some point in time (e.g. a conference | |||
network or any public network), etc. | network or any public network), etc. | |||
For example, if an attacker learns that in one network the victim | For example, if an attacker learns that in one network the victim | |||
used the Interface-ID 1111:2222:3333:4444 for its stable addresses, | used the Interface Identifier 1111:2222:3333:4444 for its stable | |||
then he could subsequently probe for the presence of such device in | addresses, then he could subsequently probe for the presence of such | |||
the network 2011:db8::/64 by sending a probe packet (ICMPv6 Echo | device in the network 2011:db8::/64 by sending a probe packet (ICMPv6 | |||
Request, or any other probe packet) to the address 2001:db8::1111: | Echo Request, or any other probe packet) to the address 2001:db8:: | |||
2222:3333:4444. | 1111:2222:3333:4444. | |||
A.1.3. Revealing the identity of devices performing server-like | B.1.3. Revealing the identity of devices performing server-like | |||
functions | functions | |||
Some devices, such as storage devices or printers, may typically | Some devices, such as storage devices, may typically perform server- | |||
perform server-like functions and may be usually moved from one | like functions and may be usually moved from one network to another. | |||
network to another. Such devices are likely to simply disable (or | Such devices are likely to simply disable (or not even implement) | |||
not even implement) privacy/temporary addresses [RFC4941]. If the | privacy/temporary addresses [RFC4941]. If the aforementioned devices | |||
aforementioned devices employ Interface-IDs that are constant across | employ Interface Identifiers that are constant across networks, it | |||
networks, it would be trivial for an attacker to tell whether the | would be trivial for an attacker to tell whether the same device is | |||
same device is being used across networks by simply looking at the | being used across networks by simply looking at the Interface | |||
Interface ID. Clearly, performing server-like functions should not | Identifier. Clearly, performing server-like functions should not | |||
imply that a device discloses its identity (i.e., that the attacker | imply that a device discloses its identity (i.e., that the attacker | |||
can tell whether it is the same device providing some function in two | can tell whether it is the same device providing some function in two | |||
different networks, at two different points in time). | different networks, at two different points in time). | |||
The scheme proposed in this document prevents such information | The scheme proposed in this document prevents such information | |||
leakage by causing nodes to generate different Interface-IDs when | leakage by causing nodes to generate different Interface Identifiers | |||
moving to one network to another, thus mitigating this kind of | when moving from one network to another, thus mitigating this kind of | |||
privacy attack. | privacy attack. | |||
A.2. Address scanning attacks | B.2. Address-scanning attacks | |||
While it is usually assumed that IPv6 address-scanning attacks are | While it is usually assumed that IPv6 address-scanning attacks are | |||
unfeasible, an attacker could leverage patterns in IPv6 addresses to | unfeasible, an attacker can leverage address patterns in IPv6 | |||
greatly reduce the search space [I-D.ietf-opsec-ipv6-host-scanning] | addresses to greatly reduce the search space | |||
[Gont-BRUCON2012]. | [I-D.ietf-opsec-ipv6-host-scanning] [Gont-BRUCON2012]. Addresses | |||
that embed IEEE identifiers result in one of such patterns that could | ||||
be leveraged to reduce the search space when other nodes employ the | ||||
same IEEE OUI (Organizationally Unique Identifier). | ||||
As noted earlier in this document, privacy/temporary addresses do not | As noted earlier in this document, temporary addresses [RFC4941] do | |||
eliminate the use of IPv6 addresses that embed IEEE identifiers, and | not replace/eliminate the use of IPv6 addresses that embed IEEE | |||
hence such hosts would still be vulnerable to address-scanning | identifiers (they are employed *in addition* to those), and hence | |||
attacks. The method specified in this document eliminates such | hosts implementing [RFC4941] would still be vulnerable to address- | |||
patterns and would thus mitigate the aforementioned address-scanning | scanning attacks. The method specified in this document is meant as | |||
attacks. | an alternative to addresses that embed IEEE identifiers, and hence | |||
eliminates such patterns (thus mitigating the aforementioned address- | ||||
scanning attacks). | ||||
B.3. Information Leakage | ||||
IPv6 addresses embedding IEEE identifiers leak information about the | ||||
device (Network Interface Card vendor, or even Operating System | ||||
and/or software type), which could be leveraged by an attacker with | ||||
device/software-specific vulnerabilities knowledge to quickly find | ||||
possible targets. Since temporary addresses do not replace the | ||||
traditional SLAAC addresses that typically embedd IEEE identifiers, | ||||
employing temporary addresses does not eliminate this possible | ||||
information leakage. | ||||
Author's Address | Author's Address | |||
Fernando Gont | Fernando Gont | |||
SI6 Networks / UTN-FRH | SI6 Networks / UTN-FRH | |||
Evaristo Carriego 2644 | Evaristo Carriego 2644 | |||
Haedo, Provincia de Buenos Aires 1706 | Haedo, Provincia de Buenos Aires 1706 | |||
Argentina | Argentina | |||
Phone: +54 11 4650 8472 | Phone: +54 11 4650 8472 | |||
End of changes. 83 change blocks. | ||||
271 lines changed or deleted | 519 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |