RFC 7844
Anonymity Profiles for DHCP Clients
RFC 7844: Anonymity Profiles for DHCP Clients ๐
okay so bestie, this is the part 1 of 5 for RFC 7844, and it's giving privacy protection energy ๐ you're gonna love it, i promise โจ
Here's the title block tea โ: this one was written by C. Huitema (Microsoft), T. Mrugalski (ISC), S. Krishnan (Ericsson), and it's from May 2016. It's a Standards Track doc, so it's an actual official Internet standard, not just a suggestion ๐ซถ It doesn't obsolete or update any other RFCs, so it's a fresh start, no cap ๐ธ
Internet Engineering Task Force (IETF) C. Huitema Request for Comments: 7844 Microsoft Category: Standards Track T. Mrugalski ISSN: 2070-1721 ISC S. Krishnan Ericsson May 2016
Abstract โจ
okay so the abstract is literally the whole vibe ๐ฆ some DHCP options carry unique identifiers, and those can let someone track your device even if you've already randomized your link-layer addresses or IPv6 addresses. so the anonymity profiles are made for clients who want to stay anonymous to the network they're visiting. they give guidelines for how DHCP and DHCPv6 messages should be put together so that as little identifying info as possible leaks out ๐ฅ
Status of This Memo ๐
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc7844.
Copyright Notice ๐
Copyright (c) 2016 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
Table of Contents ๐
1. Introduction ....................................................4
1.1. Requirements ...............................................4
2. Application Domain ..............................................4
2.1. MAC Address Randomization Hypotheses .......................5
2.2. MAC Address Randomization and DHCP .........................6
2.3. Radio Fingerprinting .......................................6
2.4. Operating System Fingerprinting ............................7
2.5. No Anonymity Profile Identification ........................7
2.6. Using the Anonymity Profiles ...............................8
2.7. What about privacy for DHCP servers? .......................9
3. Anonymity Profile for DHCPv4 ....................................9
3.1. Avoiding Fingerprinting ...................................10
3.2. Client IP Address Field ...................................10
3.3. Requested IP Address Option ...............................11
3.4. Client Hardware Address Field .............................12
3.5. Client Identifier Option ..................................12
3.6. Parameter Request List Option .............................13
3.7. Host Name Option ..........................................13
3.8. Client FQDN Option ........................................14
3.9. UUID/GUID-Based Client Machine Identifier Option ..........15
3.10. User and Vendor Class DHCP Options .......................15
4. Anonymity Profile for DHCPv6 ...................................15
4.1. Avoiding Fingerprinting ...................................16
4.2. Do not send Confirm messages, unless really sure about
the location ..............................................17
4.3. Client Identifier DHCPv6 Option ...........................17
4.3.1. Anonymous Information-request ......................18
4.4. Server Identifier Option ..................................18
4.5. Address Assignment Options ................................18
4.5.1. Obtain Temporary Addresses .........................19
4.5.2. Prefix Delegation ..................................20
4.6. Option Request Option .....................................20
4.6.1. Previous Option Values .............................20
4.7. Authentication Option .....................................21
4.8. User and Vendor Class DHCPv6 Options ......................21
4.9. Client FQDN DHCPv6 Option .................................21
5. Operational Considerations .....................................21
6. Security Considerations ........................................22
7. References .....................................................22
7.1. Normative References ......................................22
7.2. Informative References ....................................23
Acknowledgments ...................................................26
Authors' Addresses ................................................26
1. Introduction ๐ง
okay so picture this: there were reports of systems that monitored the wireless connections of passengers at Canadian airports [CNBC]. we can assume those are either fragments or trial runs of a bigger system that would try to track internet users as they roam through wifi access points and other temporary network attachments ๐ we can also assume privacy-conscious users will try to dodge this, like by making sure low-level identifiers such as link-layer addresses are "randomized", so devices don't broadcast the same unique identifier everywhere they go ๐
and obviously link-layer MAC (Media Access Control) addresses aren't the only way to identify a device ๐ the second a device connects to a remote network, it may use DHCP and DHCPv6 to get network parameters. the analysis of DHCP and DHCPv6 options shows those parameters can reveal identifiers of the device, which means the benefits of link-layer address randomization get cancelled out ๐ญ this is documented in detail in [RFC7819] and [RFC7824]. the natural reaction is to restrict the number and values of those parameters so less gets disclosed ๐ซถ
without a common standard, different system developers will probably do this minimization in different ways. monitoring entities could then use those differences to figure out the software version running on the device ๐ so the proposed anonymity profiles give everyone one common standard that minimizes information disclosure, including the disclosure of implementation identifiers ๐
1.1. Requirements ๐
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].
2. Application Domain ๐ธ
okay so mobile nodes can be tracked using multiple identifiers, and the most prominent one is the link-layer address, a.k.a. MAC address ๐ฅ for example, when devices use Wi-Fi, they put the MAC address in the header of every packet they send. standard Wi-Fi uses unique 48-bit link-layer addresses, assigned to devices under procedures defined by IEEE 802. even when Wi-Fi packets are encrypted, the part of the header with the addresses gets sent in cleartext ๐ณ tracking devices can literally "listen to the airwaves" to see what devices are transmitting near them ๐
we can easily imagine MAC addresses being correlated with other data, e.g., cleartext names and cookies, to build a registry linking MAC addresses to the identity of device owners ๐ once that correlation is done, tracking the MAC address is enough to track individual people, even when all the app data from the devices is encrypted. link-layer addresses can also be correlated with device IP addresses, which cancels out the privacy perks of IPv6 "privacy" addresses ๐ privacy advocates have every reason to be worried ๐ค
the obvious fix is to "randomize" the MAC address. before connecting to a particular network, the device swaps its MAC address for a randomly drawn 48-bit value ๐ฒ link-layer address randomization was successfully tried at the IETF meeting in Honolulu in November 2014 [IETFMACRandom] and at subsequent meetings [IETFTrialsAndMore], and it's being studied by the IEEE 802 EC Privacy Recommendation Study Group [IEEE802PRSG]. but we still have to think about the linkage between link-layer addresses, DHCP identifiers, and IP addresses ๐ง
2.1. MAC Address Randomization Hypotheses ๐ฆ
there isn't an established standard for randomizing link-layer addresses yet. various prototypes have tried different strategies, such as:
- Per connection: configure a random link-layer address when connecting to a network, e.g., to a specific Wi-Fi SSID (Service Set Identifier), and keep it for the whole connection ๐
- Per network: same as "per connection", but always use the same link-layer address for the same network, which is of course different from the addresses used on other networks ๐
- Time interval: change the link-layer address at regular time intervals โฐ
in practice, there are lots of reasons to keep the link-layer address constant for the duration of a link-layer connection, like in the "per connection" or "per network" variants ๐ in Wi-Fi networks, changing the link-layer address means dropping the existing Wi-Fi connection and then re-establishing it, which means repeating the connection process and its procedures. the IP addresses will change too, which means all required TCP connections have to be re-established ๐ฉ if network access goes through a NAT, changing IP addresses also means the NAT traversal procedures have to restart. that's a LOT of disruption. and at the same time, an observer on the network will easily notice that one station left, another showed up right after, and the new one seems to be talking to the same set of IP addresses as the old one. that makes correlation super easy ๐ต๏ธโโ๏ธ
the anonymity profiles pretty much assume that link-layer address randomization follows the "per connection" or "per network" strategies, or a variant of the "time interval" strategy where the interval is about the same length as the average connection ๐
to be continued in part 2... don't go anywhere bestie ๐ซถโจ
2.2. MAC Address Randomization and DHCP
okay bestie, from a privacy point of view, the link-layer address, the IP address, and the DHCP identifier shall evolve in synchrony ๐ like, if your link-layer address changes but your DHCP identifier stays the same, it's sooo easy to connect the old and new addresses ๐ญ. You can spot it by watching DHCP traffic, or by noticing the IP address never changes, since it's tied to the DHCP identifier ๐. And if it's the other way around (the DHCP identifier changes but the link-layer address doesn't), you can still match old and new identifiers by listening to L2 traffic ๐ . The procedures in the next sections build DHCP identifiers from the current link-layer address, so the two stay in sync automatically โจ
the anonymity profiles fix this sync problem by deriving most identifiers from the link-layer address and by making sure DHCP parameter values don't stay constant after an address change ๐ฆ
2.3. Radio Fingerprinting
MAC address randomization handles the basic problem, where someone just runs a Wi-Fi scanner and writes down the MAC addresses floating around in the air ๐ก. DHCP anonymity handles the fancier version, where someone watches link-layer addresses and DHCP identities at the access point or the DHCP server ๐ต๏ธโโ๏ธ. But those aren't the only ways to track a mobile device, bestie ๐ฌ
radio fingerprinting identifies a radio transmitter by the unique "fingerprint" of its signal, meaning the tiny differences caused by minor imperfections in the radio hardware ๐ฅ. It works on lots of kinds of radios, including Wi-Fi, as described in [WiFiRadioFingerprinting] for example. No amount of link-layer address randomization will protect against this ๐ Protections might exist, but they're outside the scope of this document, so we're not getting into them here ๐
BUT (and this is important) we should not give up on randomization just because radio fingerprinting exists ๐ซถ Radio fingerprinting is way harder to pull off than just recording link-layer addresses with a scanner. It also can only track devices whose fingerprints are already known, so its scope is narrower than mass monitoring of addresses and DHCP parameters ๐
2.4. Operating System Fingerprinting
when a standard like DHCP allows for multiple options, different implementers will make different choices about which options they support or which values they pick for them ๐ง And if you monitor the options and values in DHCP messages, you can spot those differences and do "operating system fingerprinting," which means figuring out the type and version of software a device is running ๐ Those versions say a lot about the device's identity, so this goes directly against the whole goal of anonymity ๐ค
the design of the anonymity profiles tries to minimize the number of options and the choice of values, so there's way less to fingerprint ๐
2.5. No Anonymity Profile Identification
reviewers of the anonymity profiles have sometimes suggested adding an option that explicitly marks the profiles as "using the anonymity option" ๐ค One idea is for the client to tell the server it wants to stay anonymous, so a willing server could cooperate and protect the client's privacy. Another option would be a privacy-oriented construct, like a new type of DHCP Unique Identifier (DUID) for a temporary DUID that changes over time ๐ธ
but this isn't workable in a lot of cases ๐ฉ The network operator (or anyone with access to the operator's network) might be actively taking part in surveillance and anti-privacy stuff, willingly or not. Announcing that you want anonymity is basically walking around in a Guy Fawkes mask ๐ญ (See [GuyFawkesMask] for an explanation of this usage.) When you need anonymity, it's generally not a good idea to stick out of the crowd ๐ Simply revealing the desire for privacy could make an attacker trigger extra surveillance or monitoring mechanisms. So we feel it's better not to disclose your desire for privacy at all ๐คซ
this leads to some important implications. In particular, we make an effort to make the mitigation techniques hard to tell apart from regular client behavior, if at all possible ๐ฆ
2.6. Using the Anonymity Profiles
randomizing link-layer addresses and DHCP identifiers has downsides, no cap ๐ฌ By definition, randomization breaks management procedures that rely on tracking link-layer addresses. Even if that isn't a huge concern, we have to watch how often link-layer address randomization happens. Say lots of devices got new random link-layer addresses at short intervals, like every few minutes. That would generate new DHCP requests in rapid succession, with a high risk of exhausting DHCPv4 address pools ๐ Even with IPv6, there would still be a risk of more neighbor discovery traffic and bloated address tables. So implementers need to be cautious when programming devices to use randomized MAC addresses โ ๏ธ They'll have to carefully choose how often those addresses get renewed ๐
this document only gives guidelines for using DHCP when clients care about privacy. We assume the request for anonymity is made real by assigning a randomized link-layer address to the network interface ๐ Once that decision is made, the following guidelines help avoid leaking identity through DHCP parameters or assigned addresses โจ
there may be rare situations where clients want to stay anonymous to attackers but not to the DHCP server ๐ง These clients should still use link-layer address randomization to hide from observers, plus some form of encrypted communication to the DHCP server. That scenario is out of scope for this document ๐ โโ๏ธ
to preserve anonymity, clients need to avoid using stable values for client identifiers ๐ This is clearly a trade-off, because a stable client identifier guarantees the client gets consistent parameters over time. [RFC7618] has an example, where the client identifier guarantees the same client always gets the same combination of IP address and port range ๐ Static clients benefit the most from stable parameters, and they can often already be identified by physical-connection-layer parameters anyway. So static clients normally won't use the anonymity profiles. Mobile clients, on the other hand, can use the anonymity profiles together with [RFC7618] if they care more about privacy than stable parameters ๐ฆ
2.7. What about privacy for DHCP servers?
this document only has recommendations for DHCP clients ๐ง The main targets are DHCP clients in mobile devices, which are super tempting targets for all kinds of monitoring systems, so there's an urgent need for a simple anonymity solution for them ๐จ Some mobile devices also embed DHCP servers, and providing solutions for those is pretty important too. Two plausible examples are a DHCP server for a car network and a DHCP server for a mobile hot spot ๐ However, mobile servers already get a lot of privacy protection from access control and link-layer encryption ๐ Servers may disclose information to clients through DHCP, but they normally only do that for clients that passed link-layer access control and were authorized to use the network services. Arguably, that makes solving the server problem less urgent than solving the client problem ๐
server privacy issues are covered in [RFC7819] and [RFC7824]. Mitigation of these issues is left for further study ๐
3. Anonymity Profile for DHCPv4 โจ
clients using the DHCPv4 anonymity profile limit the disclosure of information by controlling header parameters and by limiting the number and values of options ๐ How many options you can include depends on the specific DHCP message:
DHCPDISCOVER: The anonymizedDHCPDISCOVERmessages MUST contain the Message Type option, MAY contain the Client Identifier option, and MAY contain the Parameter Request List option. They SHOULD NOT contain any other option.DHCPREQUEST: The anonymizedDHCPREQUESTmessages MUST contain the Message Type option, MAY contain the Client Identifier option, and MAY contain the Parameter Request List option. If the message is in response to aDHCPOFFER, it MUST contain the corresponding Server Identifier option and the Requested IP address option. If the message is not in response to aDHCPOFFER, it MAY contain a Requested IP address option, as explained in Section 3.3. It SHOULD NOT contain any other option.DHCPDECLINE: The anonymizedDHCPDECLINEmessages MUST contain the Message Type option, the Server Identifier option, and the Requested IP address option, and MAY contain the Client Identifier option.DHCPRELEASE: The anonymizedDHCPRELEASEmessages MUST contain the Message Type option and the Server Identifier option, and MAY contain the Client Identifier option.DHCPINFORM: The anonymizedDHCPINFORMmessages MUST contain the Message Type option, MAY contain the Client Identifier option, and MAY contain the Parameter Request List option. They SHOULD NOT contain any other option.
header fields and option values SHOULD be set in line with the DHCP specification, but some header fields and option values SHOULD be built using the following guidelines ๐ง
the inclusion of the Host Name and Fully Qualified Domain Name (FQDN) options in DHCPDISCOVER, DHCPREQUEST, or DHCPINFORM messages is discussed in Sections 3.7 and 3.8 ๐
3.1. Avoiding Fingerprinting
there are sooo many ways to implement DHCPv4 messages ๐ตโ๐ซ Clients can choose to send a specific set of options, pick a particular encoding for those options, and send options in different orders. And all of those choices can be used to fingerprint the client ๐
the following sections give guidance on encoding options and fields within the packets. However, this guidance alone may not be enough to stop fingerprinting from revealing the device type, the vendor name, or the OS type and specific version ๐ฌ Fingerprinting may also reveal whether the client is using the anonymity profile ๐
a client that wants to protect its privacy SHOULD limit the subset of options it sends in messages to the subset listed in the remaining subsections ๐
a client that wants to protect its privacy SHOULD randomize the ordering of options before sending any DHCPv4 message ๐ If this random ordering can't be implemented, the client MAY order the options by option code number (lowest to highest) ๐ฆ
3.2. Client IP Address Field ๐ธ
Okay so four octets in the DHCP header carry the "Client IP address" (ciaddr), as defined in [RFC2131] ๐ซถ Clients use this field to basically say "hey, this is the address I had last time!" so the server can hand the same one back whenever it can ๐
The privacy vibes here are mostly chill, except when you hop onto a different network than the last one you were on ๐ If a client accidentally repeats an address from a previous network attachment, monitoring services could use it to tie the two network locations together. Not cute. So DHCP clients SHOULD ensure that the field is cleared when they know the network attachment has changed, especially if a device's administrator resets the link-layer address ๐งนโจ
Clients using the anonymity profile MUST NOT include in the message a Client IP address that has been obtained with a different link-layer address. No exceptions, bestie ๐
3.3. Requested IP Address Option ๐ฆ
The Requested IP address option is defined in [RFC2132] with code 50 ๐ It lets the client ask that a particular IP address be assigned. It's mandatory in some protocol messages per [RFC2131], like when a client picks an address a server offered it. BUT it is not mandatory in the DHCPDISCOVER message ๐ It's really just a convenience, an attempt to regain the same IP address that was used in a previous connection.
Here's the catch: doing that risks disclosing an IP address used at a previous location or with a different link-layer address. And this risk exists for ALL forms of IP addresses, public or private, because some private addresses may be used in a wide scope, e.g., when an Internet Service Provider is using NAT ๐ญ
When using the anonymity profile, clients SHOULD NOT use the Requested IP address option in DHCPDISCOVER messages. They MUST use the option when DHCP mandates it, for example in DHCPREQUEST messages ๐
Now the INIT-REBOOT state is a whole thing ๐ง There are scenarios where a client connecting to a network remembers a previously allocated address, i.e., when it is in the INIT-REBOOT state. In that state, any client that cares about privacy SHOULD perform a complete four-way handshake, starting with a DHCPDISCOVER, to obtain a new address lease. If the client can ascertain that this is exactly the same network it was previously connected to, AND the link-layer address did not change, the client MAY issue a DHCPREQUEST to try to reclaim the current address ๐ฅ
3.4. Client Hardware Address Field ๐
Sixteen octets in the DHCP header carry the "Client hardware address" (chaddr), as defined in [RFC2131] ๐ This address is necessary for the proper operation of the DHCP service, so it's not optional fluff.
Hardware addresses, which many RFCs call "link-layer addresses," can be used to uniquely identify a device, especially if they follow the IEEE 802 recommendations ๐ So, if the hardware address gets reset to a new randomized value, the DHCP client SHOULD use the new randomized value in the DHCP messages. Main character glow-up ๐ฆโจ
3.5. Client Identifier Option ๐
The Client Identifier option is defined in [RFC2132] with option code 61, and it's discussed in detail in [RFC4361] ๐ซถ Its whole purpose is to identify the client in a way that's independent of the link-layer address. This is super useful if the DHCP server is expected to give the same address to the client after the network attachment is swapped and the link-layer address changes. It's also handy when the same node sends requests through several interfaces and expects the DHCP server to provide consistent configuration data across all of them ๐ธ
Okay, the tea โ The considerations for hardware independence and strong client identity have an adverse effect on the privacy of mobile clients, because a hardware-independent unique identifier obviously makes tracking a client's movements very efficient ๐ฉ One option would be to not transmit this option at all, but that may affect interoperability AND will definitely mark the client as requesting anonymity, which exposes it to the risks mentioned in Section 2.5 ๐
The recommendations in [RFC4361] are very strong. For example, they say: "DHCPv4 clients MUST NOT use client identifiers based solely on layer two addresses that are hard-wired to the layer two device (e.g., the Ethernet MAC address)." Honestly, these strong recommendations are a trade-off between ease of management and privacy, and the trade-off should depend on the circumstances โ๏ธ
Plot twist: when using the anonymity profile, this goes against [RFC4361]. DHCP clients MUST use client identifiers based solely on the link-layer address that will be used in the underlying connection ๐ This makes sure the DHCP client identifier doesn't leak anything that isn't already available to entities monitoring the network connection. It also makes sure that a strategy of randomizing the link-layer address won't get nullified by the Client Identifier option ๐
Now, some DHCP setups use a point-to-point link, where there is no link-layer address available to build a non-revealing identifier ๐ญ If anonymity is desired in those networks, the client SHOULD pick a random identifier that is highly likely to be unique to the current link. For example, it could use a combination of a local secret and an identifier of the connection. The algorithm for combining secrets and identifiers, as described in Section 5 of [RFC7217], solves a similar problem โจ And the criteria for generating random numbers are stated in [RFC4086] ๐ง
3.6. Parameter Request List Option ๐
The Parameter Request List (PRL) option is defined in [RFC2132] with option code 55, and it lists the parameters the client requests from the server ๐ Different implementations request different parameters. [RFC2132] even says "the client MAY list the options in order of preference." In practice, that means different client implementations request different parameters, in different orders. Every app has its own vibe ๐
Here's the fingerprinting problem ๐ต๏ธโโ๏ธ The choice of option numbers, and the specific ordering of them in the PRL, can be used to fingerprint the client. That may not reveal who the client is, but it can give extra info like the device type, the vendor name, or the OS type and specific version. Rude of it, honestly ๐
The client intending to protect its privacy SHOULD only request a minimal number of options in the PRL, AND SHOULD also randomly shuffle the ordering of option codes in the PRL ๐ If that random ordering can't be implemented, the client MAY order the option codes in the PRL by option code number, from lowest to highest ๐ง
3.7. Host Name Option ๐
The Host Name option is defined in [RFC2132] with option code 12 ๐ Depending on the implementation, the option value can carry either an FQDN, such as "node1984.example.com", or a simple host name, such as "node1984". The DHCP server commonly uses the host name to identify the host and to automatically update the host's address in local name services ๐
Okay, so FQDNs are obviously unique identifiers, but even simple host names can reveal a lot about who owns a device ๐ณ They're typically chosen to be unique in the context where the device is most often used. In a place with lots of devices, like a big company or a big university, the host name will be a pretty good identifier of the device, because it has to be specific enough to stay unique. Monitoring services could use that alongside traffic analysis and quickly figure out who owns the device ๐
When using the anonymity profile, DHCP clients SHOULD NOT send the Host Name option. If they do choose to send it, DHCP clients MUST always send a non-qualified host name instead of an FQDN, and MUST obfuscate the host name value ๐ซฃ
There are many ways to obfuscate a host name โจ The construction rules SHOULD guarantee that a different host name is generated each time the link-layer address changes, and that the obfuscated host name will not reveal the underlying link-layer address. The construction SHOULD generate names that are unique enough to minimize collisions on the local link. Clients MAY use the following algorithm: compute a secure hash of a local secret and of the link-layer address that will be used in the underlying connection, then use the hexadecimal representation of the first 6 octets of the hash as the obfuscated host name ๐
Heads up: the algorithm in the previous paragraph generates an easily recognizable pattern. There's a potential downside to having such a specific name pattern for hosts that need anonymity, the "sticking out of the crowd" principle, as explained in Section 2.5. That's why the above algorithm is just a suggestion ๐
3.8. Client FQDN Option ๐
The Client FQDN option is defined in [RFC4702] with option code 81 ๐ธ It lets DHCP clients advertise their FQDN to the DHCP server, such as "mobile.example.com". This allows the DHCP server to update the PTR record in the DNS for the IP address allocated to the client. Depending on the circumstances, either the DHCP client or the DHCP server could update the A record for the client's FQDN in the DNS ๐งพ
Obviously, this option uniquely identifies the client, exposing it to the DHCP server or to anyone listening to DHCP traffic ๐ฑ And if the DNS record gets updated, the location of the client becomes visible to anyone with DNS lookup capabilities. Iconic behavior, not the good kind ๐
When using the anonymity profile, DHCP clients SHOULD NOT include the Client FQDN option in their DHCP requests. Alternatively, they MAY include a special-purpose FQDN that uses the same host name as in the Host Name option, with a suffix matching the connection-specific DNS suffix advertised by that DHCP server ๐ฆ Why bother? Having a name in the DNS lets you work with legacy systems that require one to be there, e.g., by verifying that a forward and reverse lookup succeeds with the same result ๐ง
3.9. UUID/GUID-Based Client Machine Identifier Option ๐ค
The UUID/GUID-based Client Machine Identifier option is defined in [RFC4578] with option code 97 ๐ซ (Quick decoder ring: "UUID" means "Universally Unique Identifier" and "GUID" means "Globally Unique Identifier.") This option is part of a set of options for the Intel Preboot eXecution Environment (PXE). The purpose of PXE is to perform management functions on a device before its main OS is operational. The Client Machine Identifier carries a 16-octet GUID that uniquely identifies the device ๐
PXE is clearly designed for devices in a controlled environment ๐ข Its main use is installing a new version of the operating system through a high-speed Ethernet connection, and the process is typically controlled from the user interface during the boot process. Common sense seems to dictate that getting a new operating system from an unauthenticated server at an untrusted location is a really bad idea, and that even if the option were available, users would not activate it ๐ฌ In any case, the option is only used in the "pre-boot" environment, and there's no reason to use it once the system is up and running ๐ค
Nodes visiting untrusted networks MUST NOT send or use the PXE options. Protect yourself, bestie ๐ซ๐ซถ
3.10. User and Vendor Class DHCP Options ๐
okay so vendor-identifying options are defined in [RFC2132] and [RFC3925]. when you're using the anonymity profile, DHCPv4 clients SHOULD NOT use the Vendor-Specific Information option (code 43), the Vendor Class Identifier option (code 60), the V-I Vendor Class option (code 124), or the V-I Vendor-Specific Information option (code 125), because these options can potentially reveal identifying information ๐
4. Anonymity Profile for DHCPv6 โจ
okay, DHCPv6 is usually used by clients in one of two scenarios: stateful or stateless configuration ๐ง In the stateful scenario, clients use a mix of Solicit, Request, Confirm, Renew, Rebind, Release, and Decline messages to get addresses and manage them.
in the stateless scenario, clients set up addresses using a mix of client-managed identifiers and router-advertised prefixes, without involving the DHCPv6 services. how these prefixes get built has different privacy implications, which are discussed in [DEFAULT-IIDs] and [RFC7721]. also in the stateless scenario, clients use DHCPv6 to get network configuration parameters through the Information-request message.
the choice between stateful and stateless depends on the flag and prefix options published by Router Advertisement messages from local routers, as specified in [RFC4861]. when those options enable stateless address configuration, hosts using the anonymity profile SHOULD use stateless address configuration instead of stateful address configuration, because stateless configuration requires fewer information disclosures than stateful configuration ๐
when using the anonymity profile, DHCPv6 clients carefully pick the DHCPv6 options they put in each message they send. the list of options that are mandatory or optional for each message is specified in [RFC3315]. some of these options have specific implications on anonymity, so the following sections give guidance on choosing option values when using the anonymity profile โจ
4.1. Avoiding Fingerprinting ๐
there are so many ways to implement DHCPv6 messages. as explained in Section 3.1, these choices can be used to fingerprint the client ๐
the following sections give guidance on encoding options. however, this guidance alone may not be enough to stop fingerprinting from revealing the device type, the vendor name, or the OS type and specific version. fingerprinting may also reveal whether the client is using the anonymity profile ๐ต๏ธ
the client intending to protect its privacy SHOULD limit the subset of options sent in messages to the subset listed in the following sections ๐
the client intending to protect its privacy SHOULD randomize the ordering of options before sending any DHCPv6 message. if that random ordering can't be implemented, the client MAY order the options by option code number, from lowest to highest ๐
4.2. Do not send Confirm messages, unless really sure about the location ๐ซ
[RFC3315] requires clients to send a Confirm message when they attach to a new link, so they can check whether the addressing and configuration info they got before is still valid. this requirement was relaxed in [DHCPv6bis]. when these clients send Confirm messages, they include any Identity Associations (IAs) assigned to the interface that may have moved to a new link, along with the addresses associated with those IAs. by looking at the addresses in the Confirm message, an attacker can trivially identify the previous point(s) of attachment ๐ญ
clients who care about their privacy SHOULD NOT send Confirm messages, and instead SHOULD directly try to acquire addresses on the new link ๐ซถ
not sending Confirm messages can cause connectivity hiatus in some situations, e.g., roaming between two access points in the same wireless network. DHCPv6 clients that can verify that the previous link and the current link are part of the same network MAY send Confirm messages while still protecting their privacy. this link identification should happen before DHCPv6 is used, so it can't depend on the DHCPv6 information used in [RFC6059]. honestly, the most reliable detection of network attachment is through link-layer security, e.g., [IEEE8021X] ๐
4.3. Client Identifier DHCPv6 Option ๐ชช
the DHCPv6 Client Identifier option is defined in [RFC3315] with option code 1. its purpose is to identify the client to the server. the content of the option is a DHCP Unique Identifier (DUID). one of the big privacy worries is that a client is disclosing a stable identifier (the DUID) that can be used for tracking and profiling ๐ three DUID formats are specified in [RFC3315]: link-layer address plus time (DUID-LLT), Vendor-assigned unique ID based on Enterprise Number, and link-layer address. a fourth type, DUID-UUID, is defined in [RFC6355].
when using the anonymity profile together with randomized link-layer addresses, DHCPv6 clients MUST use DUID format number 3 -- link-layer address. the value of the link-layer address should be the value currently assigned to the interface ๐ธ
when using the anonymity profile without randomized link-layer addresses, clients that want to protect their privacy SHOULD generate a new randomized DUID-LLT every time they attach to a new link or detect a possible link change event. syntactically, this identifier will conform to [RFC3315], but its content is meaningless ๐ญ the exact details are left up to implementers, but there are several factors that should be taken into consideration. the DUID type SHOULD be set to 1 (DUID-LLT). Hardware type SHOULD be set appropriately to the hardware type in question. the link address embedded in the LLT SHOULD be set to a randomized value. Time SHOULD be set to a random timestamp from the previous year. Time MAY be set to current time, but this will reveal the fact that the DUID is newly generated, and thus could provide information for device fingerprinting ๐ฌ the criteria for generating highly unique random numbers are listed in [RFC4086] โจ
4.3.1. Anonymous Information-request ๐
according to [RFC3315], a DHCPv6 client includes its client identifier in most of the messages it sends. there is one exception, though: the client is allowed to leave its client identifier out when sending Information-request messages ๐ซ
when using stateless DHCPv6, clients wanting to protect their privacy SHOULD NOT include client identifiers in their Information-request messages. this will stop the server from specifying client-specific options if it is configured to do so, but the need for anonymity rules out those options anyway ๐
4.4. Server Identifier Option ๐ซถ
when using the anonymity profile, DHCPv6 clients SHOULD use the Server Identifier option (code 2) as specified in [RFC3315]. clients MUST only include server identifier values that were received with the current link-layer address, because reusing old values discloses information that can be used to identify the client ๐จ
4.5. Address Assignment Options ๐
when using the anonymity profile, DHCPv6 clients might have to use Solicit or Request messages to get IPv6 addresses through the DHCPv6 server. in DHCPv6, the collection of addresses assigned to a client is identified by an IA. clients interested in privacy SHOULD request addresses using the IA for the Non-temporary Addresses option (IA_NA, code 3) [RFC3315] ๐
the IA_NA option includes an IAID parameter that identifies a unique IA for the interface the address is requested for. clients interested in protecting their privacy MUST ensure that the IAID does not enable client identification. they also need to follow the requirement of [RFC3315] that the IAID for that IA MUST be consistent across restarts of the DHCPv6 client. we read that as requiring that the IAID MUST be constant for the association, as long as the link-layer address stays constant ๐
clients MAY meet the privacy, uniqueness, and stability requirements of the IAID by building it as the combination of 1 octet encoding the interface number in the system, and the first 3 octets of the link-layer address ๐งฉ
the clients MAY use the IA Address option (code 5) [RFC3315], but they need to balance the potential advantage of "address continuity" against the potential risk of "previous address disclosure" โ๏ธ one possible solution is to remove all stored addresses when a link-layer address changes, and to only use the IA Address option with addresses that have been explicitly assigned through the current link-layer address ๐
4.5.1. Obtain Temporary Addresses ๐ฆ
[RFC3315] defines a special container (IA_TA, code 4) for requesting temporary addresses. this is a good mechanism in principle, but it comes with a few issues. first, it isn't a widely used feature, so clients depending only on temporary addresses may lock themselves out of service. second, [RFC3315] doesn't specify any lifetime or lease length for temporary addresses, so support for renewing them may vary between client implementations, including no support at all. finally, by requesting temporary addresses, a client reveals its desire for privacy, and potentially risks countermeasures as described in Section 2.5 ๐ณ
because of these issues, clients interested in their privacy SHOULD NOT use IA_TA ๐ โโ๏ธ
the addresses obtained according to Section 4.5 are meant to be non-temporary, but the anonymity profile uses them as temporary, and they will be discarded when the link-layer address changes. so they meet most of the use cases of the temporary addresses defined in [RFC4941]. clients interested in their privacy should not publish their IPv6 addresses in the DNS or otherwise associate them with name services, and so they don't normally need two classes of addresses -- one public, one temporary ๐
using mechanisms to allocate several IPv6 addresses to a client while preserving privacy is left for further study ๐ฎ
4.5.2. Prefix Delegation ๐
the DHCPv6 address assignment option for Prefix Delegation (PD) is defined in [RFC3633]. because current host OS implementations don't typically request prefixes, clients that want to use DHCPv6 PD -- just like clients that want to use any DHCP or DHCPv6 option that isn't widely used yet -- should recognize that doing so will act as a form of fingerprinting, unless or until DHCPv6 PD use by clients becomes more widespread ๐
the anonymity properties of DHCPv6 PD, which uses IA_PD IAs, are similar to those of DHCPv6 address assignment using IA_NA IAs. the IAID could potentially be used to identify the client, and a prefix hint sent in the IA_PD Prefix option could be used to track the client's previous location ๐ clients that desire anonymity and never request more than one prefix SHOULD set the IAID value to zero, as authorized in Section 6 of [RFC3633], and SHOULD NOT document any previously assigned prefix in the IA_PD Prefix option ๐ซง
4.6. Option Request Option ๐
okay so the Option Request Option (ORO) is defined in [RFC3315] with option code 6 ๐ it's basically the client's wishlist, the options it wants the server to send back. ngl the picks on that list, and the order they're written in, can be used to fingerprint the client ๐ it's like ordering a latte and somehow everyone knows exactly who you are
the client that's trying to protect its privacy SHOULD only request a minimal subset of options and SHOULD randomly shuffle the ordering of option codes in the ORO โจ if that random ordering can't be implemented, the client MAY order the option codes in the ORO by option code number (lowest to highest) ๐ข
4.6.1. Previous Option Values ๐ฐ๏ธ
according to [RFC3315], the client that includes an ORO in a Solicit or Request message MAY additionally include instances of those options that are identified in the ORO, with data values as hints to the server about parameter values the client would like to have returned ๐ญ
when using the anonymity profile, clients SHOULD NOT include such instances of options, because old values might be used to identify the client ๐ โโ๏ธ no leftover breadcrumbs, bestie ๐
4.7. Authentication Option ๐
the purpose of the Authentication option (code 11) [RFC3315] is to authenticate the identity of clients and servers and the contents of DHCPv6 messages. the option can be used to identify the client, so it's incompatible with the stated goal of "client anonymity" ๐ฌ DHCPv6 clients that use the anonymity profile SHOULD NOT use the Authentication option. they MAY use it if they recognize that they are operating in a trusted environment, e.g., in a workplace network ๐ข that's the one exception, and it's a big "only if you're sure" ๐ผ
4.8. User and Vendor Class DHCPv6 Options ๐ท๏ธ
when using the anonymity profile, DHCPv6 clients SHOULD NOT use the User Class option (code 15) or the Vendor Class option (code 16) [RFC3315], as these options potentially reveal identifying information ๐ these are the labels that can spill the tea about who you are, so keep them off the guest list ๐๏ธ
4.9. Client FQDN DHCPv6 Option ๐
the DHCPv6 Client FQDN option is defined in [RFC4704] with option code 39 ๐ it lets DHCPv6 clients tell the server their FQDN, such as mobile.example.com. when using the anonymity profile, DHCPv6 clients SHOULD NOT include the Client FQDN option in their DHCPv6 messages, because it identifies the client ๐ซ as explained in Section 3.8, they MAY use a local-only FQDN by combining a host name derived from the link-layer address and a suffix advertised by the local DHCPv6 server ๐ง a little disguise that still gets the job done โจ
5. Operational Considerations ๐ง
the anonymity profiles have the effect of hiding the client identity from the DHCP server. this isn't always desirable ๐ฅบ some DHCP servers provide facilities like publishing names and addresses in the DNS, or ensuring that returning clients get reassigned the same address. so going incognito can cost you a few perks ๐
clients using an anonymity profile may be consuming more resources. for example, when a client changes its link-layer address and requests a new IP address, the old IP address is still marked as leased by the server ๐ฆ so the server is literally holding a seat for someone who already left the party ๐
some DHCP servers will only give addresses to pre-registered MAC addresses, forcing clients to choose between remaining anonymous and obtaining connectivity ๐ค the absolute worst kind of velvet rope.
Implementers SHOULD provide a way for clients to control when the anonymity profiles are used and when standard behavior is preferred ๐๏ธ choice is everything, periodt ๐
Implementers MAY implement this control by tying the use of the anonymity profiles to that of link-layer address randomization ๐ a neat little bundle deal ๐
6. Security Considerations ๐ก๏ธ
okay this one's short but it's giving serious ๐ค the use of the anonymity profiles does not change the security considerations of the DHCPv4 or DHCPv6 protocols [RFC2131] [RFC3315]. so read those two specs for the real security picture, no shortcuts ๐
7. References ๐
7.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC2131] Droms, R., "Dynamic Host Configuration Protocol",
RFC 2131, DOI 10.17487/RFC2131, March 1997,
<http://www.rfc-editor.org/info/rfc2131>.
[RFC3315] Droms, R., Ed., Bound, J., Volz, B., Lemon, T., Perkins,
C., and M. Carney, "Dynamic Host Configuration Protocol
for IPv6 (DHCPv6)", RFC 3315, DOI 10.17487/RFC3315,
July 2003, <http://www.rfc-editor.org/info/rfc3315>.
[RFC3633] Troan, O. and R. Droms, "IPv6 Prefix Options for Dynamic
Host Configuration Protocol (DHCP) version 6", RFC 3633,
DOI 10.17487/RFC3633, December 2003,
<http://www.rfc-editor.org/info/rfc3633>.
[RFC4702] Stapp, M., Volz, B., and Y. Rekhter, "The Dynamic Host
Configuration Protocol (DHCP) Client Fully Qualified
Domain Name (FQDN) Option", RFC 4702,
DOI 10.17487/RFC4702, October 2006,
<http://www.rfc-editor.org/info/rfc4702>.
[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman,
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861,
DOI 10.17487/RFC4861, September 2007,
<http://www.rfc-editor.org/info/rfc4861>.
[RFC4941] Narten, T., Draves, R., and S. Krishnan, "Privacy
Extensions for Stateless Address Autoconfiguration in
IPv6", RFC 4941, DOI 10.17487/RFC4941, September 2007,
<http://www.rfc-editor.org/info/rfc4941>.
7.2. Informative References
[CNBC] Weston, G., Greenwald, G., and R. Gallagher, "CBC News:
CSEC used airport Wi-Fi to track Canadian travellers:
Edward Snowden documents", January 2014,
<http://www.cbc.ca/news/politics/
csec-used-airport-wi-fi-to-track-canadian-travellers-
edward-snowden-documents-1.2517881>.
[DEFAULT-IIDs]
Gont, F., Cooper, A., Thaler, D., and W. Liu,
"Recommendation on Stable IPv6 Interface Identifiers",
Work in Progress, draft-ietf-6man-default-iids-11,
April 2016.
[DHCPv6bis]
Mrugalski, T., Ed., Siodelski, M., Volz, B., Yourtchenko,
A., Richardson, M., Jiang, S., and T. Lemon, "Dynamic Host
Configuration Protocol for IPv6 (DHCPv6) bis", Work in
Progress, draft-ietf-dhc-rfc3315bis-04, March 2016.
[GuyFawkesMask]
Nickelsburg, M., "A brief history of the Guy Fawkes mask",
July 2013, <http://theweek.com/articles/463151/
brief-history-guy-fawkes-mask>.
[IEEE8021X]
IEEE, "IEEE Standard for Local and metropolitan area
networks - Port-Based Network Access Control",
IEEE 802.1X-2010, DOI 10.1109/ieeestd.2010.5409813,
<http://ieeexplore.ieee.org/servlet/
opac?punumber=5409757>.
[IEEE802PRSG]
IEEE 802 EC PRSG, "IEEE 802 EC Privacy Recommendation
Study Group", February 2016,
<http://www.ieee802.org/PrivRecsg/>.
[IETFMACRandom]
Zuniga, JC., "MAC Privacy", November 2014,
<http://www.ietf.org/blog/2014/11/mac-privacy/>.
[IETFTrialsAndMore]
Bernardos, CJ., Zuniga, JC., and P. O'Hanlon, "Wi-Fi
Internet connectivity and privacy: hiding your tracks on
the wireless Internet", October 2015,
<http://www.it.uc3m.es/cjbc/papers/
pdf/2015_bernardos_cscn_privacy.pdf>.
[RFC2132] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor
Extensions", RFC 2132, DOI 10.17487/RFC2132, March 1997,
<http://www.rfc-editor.org/info/rfc2132>.
[RFC3925] Littlefield, J., "Vendor-Identifying Vendor Options for
Dynamic Host Configuration Protocol version 4 (DHCPv4)",
RFC 3925, DOI 10.17487/RFC3925, October 2004,
<http://www.rfc-editor.org/info/rfc3925>.
[RFC4086] Eastlake 3rd, D., Schiller, J., and S. Crocker,
"Randomness Requirements for Security", BCP 106, RFC 4086,
DOI 10.17487/RFC4086, June 2005,
<http://www.rfc-editor.org/info/rfc4086>.
[RFC4361] Lemon, T. and B. Sommerfeld, "Node-specific Client
Identifiers for Dynamic Host Configuration Protocol
Version Four (DHCPv4)", RFC 4361, DOI 10.17487/RFC4361,
February 2006, <http://www.rfc-editor.org/info/rfc4361>.
[RFC4578] Johnston, M. and S. Venaas, Ed., "Dynamic Host
Configuration Protocol (DHCP) Options for the Intel
Preboot eXecution Environment (PXE)", RFC 4578,
DOI 10.17487/RFC4578, November 2006,
<http://www.rfc-editor.org/info/rfc4578>.
[RFC4704] Volz, B., "The Dynamic Host Configuration Protocol for
IPv6 (DHCPv6) Client Fully Qualified Domain Name (FQDN)
Option", RFC 4704, DOI 10.17487/RFC4704, October 2006,
<http://www.rfc-editor.org/info/rfc4704>.
[RFC6059] Krishnan, S. and G. Daley, "Simple Procedures for
Detecting Network Attachment in IPv6", RFC 6059,
DOI 10.17487/RFC6059, November 2010,
<http://www.rfc-editor.org/info/rfc6059>.
[RFC6355] Narten, T. and J. Johnson, "Definition of the UUID-Based
DHCPv6 Unique Identifier (DUID-UUID)", RFC 6355,
DOI 10.17487/RFC6355, August 2011,
<http://www.rfc-editor.org/info/rfc6355>.
[RFC7217] Gont, F., "A Method for Generating Semantically Opaque
Interface Identifiers with IPv6 Stateless Address
Autoconfiguration (SLAAC)", RFC 7217,
DOI 10.17487/RFC7217, April 2014,
<http://www.rfc-editor.org/info/rfc7217>.
[RFC7618] Cui, Y., Sun, Q., Farrer, I., Lee, Y., Sun, Q., and M.
Boucadair, "Dynamic Allocation of Shared IPv4 Addresses",
RFC 7618, DOI 10.17487/RFC7618, August 2015,
<http://www.rfc-editor.org/info/rfc7618>.
[RFC7721] Cooper, A., Gont, F., and D. Thaler, "Security and Privacy
Considerations for IPv6 Address Generation Mechanisms",
RFC 7721, DOI 10.17487/RFC7721, March 2016,
<http://www.rfc-editor.org/info/rfc7721>.
[RFC7819] Jiang, S., Krishnan, S., and T. Mrugalski, "Privacy
Considerations for DHCP", RFC 7819, DOI 10.17487/RFC7819,
April 2016, <http://www.rfc-editor.org/info/rfc7819>.
[RFC7824] Krishnan, S., Mrugalski, T., and S. Jiang, "Privacy
Considerations for DHCPv6", RFC 7824,
DOI 10.17487/RFC7824, May 2016,
<http://www.rfc-editor.org/info/rfc7824>.
[WiFiRadioFingerprinting]
Brik, V., Banerjee, S., Gruteser, M., and S. Oh, "Wireless
Device Identification with Radiometric Signatures",
DOI 10.1.1.145.8873, September 2008,
<http://citeseerx.ist.psu.edu/viewdoc/
summary?doi=10.1.1.145.8873>.
Acknowledgments ๐ซถ
the inspiration for this document came from discussions in the Perpass mailing list ๐ several people gave feedback on it, and the big shoutouts go to Noel Anderson, Brian Carpenter, Lorenzo Colitti, Stephen Farrell, Nick Grifka, Tushar Gupta, Brian Haberman, Gabriel Montenegro, Marcin Siodelski, Dave Thaler, Bernie Volz, and Jun Wu ๐ absolute legends, all of them ๐
Authors' Addresses ๐ฎ
Christian Huitema
Microsoft
Redmond, WA 98052
United States
Email: huitema@microsoft.com
Tomek Mrugalski
Internet Systems Consortium, Inc.
950 Charter Street
Redwood City, CA 94063
United States
Email: tomasz.mrugalski@gmail.com
Suresh Krishnan
Ericsson
8400 Decarie Blvd.
Town of Mount Royal, QC
Canada
Phone: +1 514 345 7900 x42871
Email: suresh.krishnan@ericsson.com
๐ฆ where this page comes from
- ietf: rfc7844 2016-05
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms