1012 lines
37 KiB
Plaintext
1012 lines
37 KiB
Plaintext
|
|
|
|
|
|
|
|
|
|
|
|
Network Working Group A. Hubert
|
|
Request for Comments: 5452 Netherlabs Computer Consulting BV.
|
|
Updates: 2181 R. van Mook
|
|
Category: Standards Track Equinix
|
|
January 2009
|
|
|
|
|
|
Measures for Making DNS More Resilient against Forged Answers
|
|
|
|
Status of This Memo
|
|
|
|
This document specifies an Internet standards track protocol for the
|
|
Internet community, and requests discussion and suggestions for
|
|
improvements. Please refer to the current edition of the "Internet
|
|
Official Protocol Standards" (STD 1) for the standardization state
|
|
and status of this protocol. Distribution of this memo is unlimited.
|
|
|
|
Copyright Notice
|
|
|
|
Copyright (c) 2009 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.
|
|
|
|
Abstract
|
|
|
|
The current Internet climate poses serious threats to the Domain Name
|
|
System. In the interim period before the DNS protocol can be secured
|
|
more fully, measures can already be taken to harden the DNS to make
|
|
'spoofing' a recursing nameserver many orders of magnitude harder.
|
|
|
|
Even a cryptographically secured DNS benefits from having the ability
|
|
to discard bogus responses quickly, as this potentially saves large
|
|
amounts of computation.
|
|
|
|
By describing certain behavior that has previously not been
|
|
standardized, this document sets out how to make the DNS more
|
|
resilient against accepting incorrect responses. This document
|
|
updates RFC 2181.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 1]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
Table of Contents
|
|
|
|
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
|
|
2. Requirements and Definitions . . . . . . . . . . . . . . . . . 4
|
|
2.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 4
|
|
2.2. Key Words . . . . . . . . . . . . . . . . . . . . . . . . 5
|
|
3. Description of DNS Spoofing . . . . . . . . . . . . . . . . . 5
|
|
4. Detailed Description of Spoofing Scenarios . . . . . . . . . . 6
|
|
4.1. Forcing a Query . . . . . . . . . . . . . . . . . . . . . 6
|
|
4.2. Matching the Question Section . . . . . . . . . . . . . . 7
|
|
4.3. Matching the ID Field . . . . . . . . . . . . . . . . . . 7
|
|
4.4. Matching the Source Address of the Authentic Response . . 7
|
|
4.5. Matching the Destination Address and Port of the
|
|
Authentic Response . . . . . . . . . . . . . . . . . . . . 8
|
|
4.6. Have the Response Arrive before the Authentic Response . . 8
|
|
5. Birthday Attacks . . . . . . . . . . . . . . . . . . . . . . . 9
|
|
6. Accepting Only In-Domain Records . . . . . . . . . . . . . . . 9
|
|
7. Combined Difficulty . . . . . . . . . . . . . . . . . . . . . 10
|
|
7.1. Symbols Used in Calculation . . . . . . . . . . . . . . . 10
|
|
7.2. Calculation . . . . . . . . . . . . . . . . . . . . . . . 11
|
|
8. Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . 12
|
|
8.1. Repetitive Spoofing Attempts for a Single Domain Name . . 13
|
|
9. Forgery Countermeasures . . . . . . . . . . . . . . . . . . . 13
|
|
9.1. Query Matching Rules . . . . . . . . . . . . . . . . . . . 13
|
|
9.2. Extending the Q-ID Space by Using Ports and Addresses . . 14
|
|
9.2.1. Justification and Discussion . . . . . . . . . . . . . 14
|
|
9.3. Spoof Detection and Countermeasure . . . . . . . . . . . . 15
|
|
10. Security Considerations . . . . . . . . . . . . . . . . . . . 15
|
|
11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 16
|
|
12. References . . . . . . . . . . . . . . . . . . . . . . . . . . 16
|
|
12.1. Normative References . . . . . . . . . . . . . . . . . . . 16
|
|
12.2. Informative References . . . . . . . . . . . . . . . . . . 17
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 2]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
1. Introduction
|
|
|
|
This document describes several common problems in DNS
|
|
implementations, which, although previously recognized, remain
|
|
largely unsolved. Besides briefly recapping these problems, this
|
|
document contains rules that, if implemented, make complying
|
|
resolvers vastly more resistant to the attacks described. The goal
|
|
is to make the existing DNS as secure as possible within the current
|
|
protocol boundaries.
|
|
|
|
The words below are aimed at authors of resolvers: it is up to
|
|
operators to decide which nameserver implementation to use, or which
|
|
options to enable. Operational constraints may override the security
|
|
concerns described below. However, implementations are expected to
|
|
allow an operator to enable functionality described in this document.
|
|
|
|
Almost every transaction on the Internet involves the Domain Name
|
|
System, which is described in [RFC1034], [RFC1035], and beyond.
|
|
|
|
Additionally, it has recently become possible to acquire Secure
|
|
Socket Layer/Transport Layer Security (SSL/TLS) certificates with no
|
|
other confirmation of identity than the ability to respond to a
|
|
verification email sent via SMTP ([RFC5321]) -- which generally uses
|
|
DNS for its routing.
|
|
|
|
In other words, any party that (temporarily) controls the Domain Name
|
|
System is in a position to reroute most kinds of Internet
|
|
transactions, including the verification steps in acquiring an SSL/
|
|
TLS certificate for a domain. This in turn means that even
|
|
transactions protected by SSL/TLS could be diverted.
|
|
|
|
It is entirely conceivable that such rerouted traffic could be used
|
|
to the disadvantage of Internet users.
|
|
|
|
These and other developments have made the security and
|
|
trustworthiness of DNS of renewed importance. Although the DNS
|
|
community is working hard on finalizing and implementing a
|
|
cryptographically enhanced DNS protocol, steps should be taken to
|
|
make sure that the existing use of DNS is as secure as possible
|
|
within the bounds of the relevant standards.
|
|
|
|
It should be noted that the most commonly used resolvers currently do
|
|
not perform as well as possible in this respect, making this document
|
|
of urgent importance.
|
|
|
|
A thorough analysis of risks facing DNS can be found in [RFC3833].
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 3]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
This document expands on some of the risks mentioned in RFC 3833,
|
|
especially those outlined in the sections on "ID Guessing and Query
|
|
Prediction" and "Name Chaining". Furthermore, it emphasizes a number
|
|
of existing rules and guidelines embodied in the relevant DNS
|
|
protocol specifications. The following also specifies new
|
|
requirements to make sure the Domain Name System can be relied upon
|
|
until a more secure protocol has been standardized and deployed.
|
|
|
|
It should be noted that even when all measures suggested below are
|
|
implemented, protocol users are not protected against third parties
|
|
with the ability to observe, modify, or inject packets in the traffic
|
|
of a resolver.
|
|
|
|
For protocol extensions that offer protection against these
|
|
scenarios, see [RFC4033] and beyond.
|
|
|
|
2. Requirements and Definitions
|
|
|
|
2.1. Definitions
|
|
|
|
This document uses the following definitions:
|
|
|
|
Client: typically a 'stub-resolver' on an end-user's computer.
|
|
|
|
Resolver: a nameserver performing recursive service for clients,
|
|
also known as a caching server, or a full service resolver
|
|
([RFC1123], Section 6.1.3.1).
|
|
|
|
Stub resolver: a very limited resolver on a client computer, that
|
|
leaves the recursing work to a full resolver.
|
|
|
|
Query: a question sent out by a resolver, typically in a UDP
|
|
packet
|
|
|
|
Response: the answer sent back by an authoritative nameserver,
|
|
typically in a UDP packet.
|
|
|
|
Third party: any entity other than the resolver or the intended
|
|
recipient of a question. The third party may have access to an
|
|
arbitrary authoritative nameserver, but has no access to packets
|
|
transmitted by the resolver or authoritative server.
|
|
|
|
Attacker: malicious third party.
|
|
|
|
Spoof: the activity of attempting to subvert the DNS process by
|
|
getting a chosen answer accepted.
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 4]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
Authentic response: the correct answer that comes from the right
|
|
authoritative server.
|
|
|
|
Target domain name: domain for which the attacker wishes to spoof
|
|
in an answer
|
|
|
|
Fake data: response chosen by the attacker.
|
|
|
|
2.2. Key Words
|
|
|
|
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].
|
|
|
|
3. Description of DNS Spoofing
|
|
|
|
When certain steps are taken, it is feasible to "spoof" the current
|
|
deployed majority of resolvers with carefully crafted and timed DNS
|
|
packets. Once spoofed, a caching server will repeat the data it
|
|
wrongfully accepted, and make its clients contact the wrong, and
|
|
possibly malicious, servers.
|
|
|
|
To understand how this process works it is important to know what
|
|
makes a resolver accept a response.
|
|
|
|
The following sentence in Section 5.3.3 of [RFC1034] presaged the
|
|
present problem:
|
|
|
|
The resolver should be highly paranoid in its parsing of responses.
|
|
It should also check that the response matches the query it sent
|
|
using the ID field in the response.
|
|
|
|
DNS data is to be accepted by a resolver if and only if:
|
|
|
|
1. The question section of the reply packet is equivalent to that of
|
|
a question packet currently waiting for a response.
|
|
|
|
2. The ID field of the reply packet matches that of the question
|
|
packet.
|
|
|
|
3. The response comes from the same network address to which the
|
|
question was sent.
|
|
|
|
4. The response comes in on the same network address, including port
|
|
number, from which the question was sent.
|
|
|
|
In general, the first response matching these four conditions is
|
|
accepted.
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 5]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
If a third party succeeds in meeting the four conditions before the
|
|
response from the authentic nameserver does so, it is in a position
|
|
to feed a resolver fabricated data. When it does so, we dub it an
|
|
"attacker", attempting to spoof in fake data.
|
|
|
|
All conditions mentioned above can theoretically be met by a third
|
|
party, with the difficulty being a function of the resolver
|
|
implementation and zone configuration.
|
|
|
|
4. Detailed Description of Spoofing Scenarios
|
|
|
|
The previous paragraph discussed a number of requirements an attacker
|
|
must match in order to spoof in manipulated (or fake) data. This
|
|
section discusses the relative difficulties and how implementation-
|
|
defined choices impact the amount of work an attacker has to perform
|
|
to meet said difficulties.
|
|
|
|
Some more details can be found in Section 2.2 of [RFC3833].
|
|
|
|
4.1. Forcing a Query
|
|
|
|
Formally, there is no need for a nameserver to perform service except
|
|
for its operator, its customers, or more generally its users.
|
|
Recently, open recursing nameservers have been used to amplify
|
|
denial-of-service attacks.
|
|
|
|
Providing full service enables the third party to send the target
|
|
resolver a query for the domain name it intends to spoof. On
|
|
receiving this query, and not finding the answer in its cache, the
|
|
resolver will transmit queries to relevant authoritative nameservers.
|
|
This opens up a window of opportunity for getting fake answer data
|
|
accepted.
|
|
|
|
Queries may however be forced indirectly, for example, by inducing a
|
|
mail server to perform DNS lookups.
|
|
|
|
Some operators restrict access by not recursing for unauthorized IP
|
|
addresses, but only respond with data from the cache. This makes
|
|
spoofing harder for a third party as it cannot then force the exact
|
|
moment a question will be asked. It is still possible however to
|
|
determine a time range when this will happen, because nameservers
|
|
helpfully publish the decreasing time to live (TTL) of entries in the
|
|
cache, which indicate from which absolute time onwards a new query
|
|
could be sent to refresh the expired entry.
|
|
|
|
The time to live of the target domain name's RRSets determines how
|
|
often a window of opportunity is available, which implies that a
|
|
short TTL makes spoofing far more viable.
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 6]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
Note that the attacker might very well have authorized access to the
|
|
target resolver by virtue of being a customer or employee of its
|
|
operator. In addition, access may be enabled through the use of
|
|
reflectors as outlined in [RFC5358].
|
|
|
|
4.2. Matching the Question Section
|
|
|
|
DNS packets, both queries and responses, contain a question section.
|
|
Incoming responses should be verified to have a question section that
|
|
is equivalent to that of the outgoing query.
|
|
|
|
4.3. Matching the ID Field
|
|
|
|
The DNS ID field is 16 bits wide, meaning that if full use is made of
|
|
all these bits, and if their contents are truly random, it will
|
|
require on average 32768 attempts to guess. Anecdotal evidence
|
|
suggests there are implementations utilizing only 14 bits, meaning on
|
|
average 8192 attempts will suffice.
|
|
|
|
Additionally, if the target nameserver can be forced into having
|
|
multiple identical queries outstanding, the "Birthday Attack"
|
|
phenomenon means that any fake data sent by the attacker is matched
|
|
against multiple outstanding queries, significantly raising the
|
|
chance of success. Further details in Section 5.
|
|
|
|
4.4. Matching the Source Address of the Authentic Response
|
|
|
|
It should be noted that meeting this condition entails being able to
|
|
transmit packets on behalf of the address of the authoritative
|
|
nameserver. While two Best Current Practice documents ([RFC2827] and
|
|
[RFC3013] specifically) direct Internet access providers to prevent
|
|
their customers from assuming IP addresses that are not assigned to
|
|
them, these recommendations are not universally (nor even widely)
|
|
implemented.
|
|
|
|
Many zones have two or three authoritative nameservers, which make
|
|
matching the source address of the authentic response very likely
|
|
with even a naive choice having a double digit success rate.
|
|
|
|
Most recursing nameservers store relative performance indications of
|
|
authoritative nameservers, which may make it easier to predict which
|
|
nameserver would originally be queried -- the one most likely to
|
|
respond the quickest.
|
|
|
|
Generally, this condition requires at most two or three attempts
|
|
before it is matched.
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 7]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
4.5. Matching the Destination Address and Port of the Authentic
|
|
Response
|
|
|
|
Note that the destination address of the authentic response is the
|
|
source address of the original query.
|
|
|
|
The actual address of a recursing nameserver is generally known; the
|
|
port used for asking questions is harder to determine. Most current
|
|
resolvers pick an arbitrary port at startup (possibly at random) and
|
|
use this for all outgoing queries. In quite a number of cases, the
|
|
source port of outgoing questions is fixed at the traditional DNS
|
|
assigned server port number of 53.
|
|
|
|
If the source port of the original query is random, but static, any
|
|
authoritative nameserver under observation by the attacker can be
|
|
used to determine this port. This means that matching this
|
|
conditions often requires no guess work.
|
|
|
|
If multiple ports are used for sending queries, this enlarges the
|
|
effective ID space by a factor equal to the number of ports used.
|
|
|
|
Less common resolving servers choose a random port per outgoing
|
|
query. If this strategy is followed, this port number can be
|
|
regarded as an additional ID field, again containing up to 16 bits.
|
|
|
|
If the maximum ports range is utilized, on average, around 32256
|
|
source ports would have to be tried before matching the source port
|
|
of the original query, as ports below 1024 may be unavailable for
|
|
use, leaving 64512 options.
|
|
|
|
It is in general safe for DNS to use ports in the range 1024-49152
|
|
even though some of these ports are allocated to other protocols.
|
|
DNS resolvers will not be able to use any ports that are already in
|
|
use. If a DNS resolver uses a port, it will release that port after
|
|
a short time and migrate to a different port. Only in the case of a
|
|
high-volume resolver is it possible that an application wanting a
|
|
particular UDP port suffers a long term block-out.
|
|
|
|
It should be noted that a firewall will not prevent the matching of
|
|
this address, as it will accept answers that (appear to) come from
|
|
the correct address, offering no additional security.
|
|
|
|
4.6. Have the Response Arrive before the Authentic Response
|
|
|
|
Once any packet has matched the previous four conditions (plus
|
|
possible additional conditions), no further responses are generally
|
|
accepted.
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 8]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
This means that the third party has a limited time in which to inject
|
|
its spoofed response. For calculations, we will assume a window in
|
|
order of at most 100 ms (depending on the network distance to the
|
|
authentic authoritative nameserver).
|
|
|
|
This time period can be far longer if the authentic authoritative
|
|
nameservers are (briefly) overloaded by queries, perhaps by the
|
|
attacker.
|
|
|
|
5. Birthday Attacks
|
|
|
|
The so-called "birthday paradox" implies that a group of 23 people
|
|
suffices to have a more than even chance of having two or more
|
|
members of the group share a birthday.
|
|
|
|
An attacker can benefit from this exact phenomenon if it can force
|
|
the target resolver to have multiple equivalent (identical QNAME,
|
|
QTYPE, and QCLASS) outstanding queries at any one time to the same
|
|
authoritative server.
|
|
|
|
Any packet the attacker sends then has a much higher chance of being
|
|
accepted because it only has to match any of the outstanding queries
|
|
for that single domain. Compared to the birthday analogy above, of
|
|
the group composed of queries and responses, the chance of having any
|
|
of these share an ID rises quickly.
|
|
|
|
As long as small numbers of queries are sent out, the chance of
|
|
successfully spoofing a response rises linearly with the number of
|
|
outstanding queries for the exact domain and nameserver.
|
|
|
|
For larger numbers, this effect is less pronounced.
|
|
|
|
More details are available in US-CERT [vu-457875].
|
|
|
|
6. Accepting Only In-Domain Records
|
|
|
|
Responses from authoritative nameservers often contain information
|
|
that is not part of the zone for which we deem it authoritative. As
|
|
an example, a query for the MX record of a domain might get as its
|
|
responses a mail exchanger in another domain, and additionally the IP
|
|
address of this mail exchanger.
|
|
|
|
If accepted uncritically, the resolver stands the chance of accepting
|
|
data from an untrusted source. Care must be taken to only accept
|
|
data if it is known that the originator is authoritative for the
|
|
QNAME or a parent of the QNAME.
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 9]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
One very simple way to achieve this is to only accept data if it is
|
|
part of the domain for which the query was intended.
|
|
|
|
7. Combined Difficulty
|
|
|
|
Given a known or static destination port, matching ID field, the
|
|
source and destination address requires on average in the order of 2
|
|
* 2^15 = 65000 packets, assuming a zone has 2 authoritative
|
|
nameservers.
|
|
|
|
If the window of opportunity available is around 100 ms, as assumed
|
|
above, an attacker would need to be able to briefly transmit 650000
|
|
packets/s to have a 50% chance to get spoofed data accepted on the
|
|
first attempt.
|
|
|
|
A realistic minimal DNS response consists of around 80 bytes,
|
|
including IP headers, making the packet rate above correspond to a
|
|
respectable burst of 416 Mbit/s.
|
|
|
|
As of mid-2006, this kind of bandwidth was not common but not scarce
|
|
either, especially among those in a position to control many servers.
|
|
|
|
These numbers change when a window of a full second is assumed,
|
|
possibly because the arrival of the authentic response can be
|
|
prevented by overloading the bona fide authoritative hosts with decoy
|
|
queries. This reduces the needed bandwidth to 42 Mbit/s.
|
|
|
|
If, in addition, the attacker is granted more than a single chance
|
|
and allowed up to 60 minutes of work on a domain with a time to live
|
|
of 300 seconds, a meager 4 Mbit/s suffices for a 50% chance at
|
|
getting fake data accepted. Once equipped with a longer time,
|
|
matching condition 1 mentioned above is straightforward -- any
|
|
popular domain will have been queried a number of times within this
|
|
hour, and given the short TTL, this would lead to queries to
|
|
authoritative nameservers, opening windows of opportunity.
|
|
|
|
7.1. Symbols Used in Calculation
|
|
|
|
Assume the following symbols are used:
|
|
|
|
I: Number distinct IDs available (maximum 65536)
|
|
|
|
P: Number of ports used (maximum around 64000 as ports under 1024 are
|
|
not always available, but often 1)
|
|
|
|
N: Number of authoritative nameservers for a domain (averages around
|
|
2.5)
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 10]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
F: Number of "fake" packets sent by the attacker
|
|
|
|
R: Number of packets sent per second by the attacker
|
|
|
|
W: Window of opportunity, in seconds. Bounded by the response time
|
|
of the authoritative servers (often 0.1s)
|
|
|
|
D: Average number of identical outstanding queries of a resolver
|
|
(typically 1, see Section 5)
|
|
|
|
A: Number of attempts, one for each window of opportunity
|
|
|
|
7.2. Calculation
|
|
|
|
The probability of spoofing a resolver is equal to the amount of fake
|
|
packets that arrive within the window of opportunity, divided by the
|
|
size of the problem space.
|
|
|
|
When the resolver has 'D' multiple identical outstanding queries,
|
|
each fake packet has a proportionally higher chance of matching any
|
|
of these queries. This assumption only holds for small values of
|
|
'D'.
|
|
|
|
In symbols, if the probability of being spoofed is denoted as P_s:
|
|
|
|
D * F
|
|
P_s = ---------
|
|
N * P * I
|
|
|
|
It is more useful to reason not in terms of aggregate packets but to
|
|
convert to packet rate, which can easily be converted to bandwidth if
|
|
needed.
|
|
|
|
If the window of opportunity length is 'W' and the attacker can send
|
|
'R' packets per second, the number of fake packets 'F' that are
|
|
candidates to be accepted is:
|
|
|
|
D * R * W
|
|
F = R * W -> P_s = ---------
|
|
N * P * I
|
|
|
|
Finally, to calculate the combined chance 'P_cs' of spoofing over a
|
|
chosen time period 'T', it should be realized that the attacker has a
|
|
new window of opportunity each time the TTL 'TTL' of the target
|
|
domain expires. This means that the number of attempts 'A' is equal
|
|
to 'T / TTL'.
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 11]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
To calculate the combined chance of at least one success, the
|
|
following formula holds:
|
|
|
|
(T / TTL)
|
|
A ( D * R * W )
|
|
P_cs = 1 - ( 1 - P_s ) = 1 - ( 1 - --------- )
|
|
( N * P * I )
|
|
|
|
When common numbers (as listed above) for D, W, N, P, and I are
|
|
inserted, this formula reduces to:
|
|
|
|
(T / TTL)
|
|
( R )
|
|
P_cs = 1 - ( 1 - ------- )
|
|
( 1638400 )
|
|
|
|
From this formula, it can be seen that, if the nameserver
|
|
implementation is unchanged, only raising the TTL offers protection.
|
|
Raising N, the number of authoritative nameservers, is not feasible
|
|
beyond a small number.
|
|
|
|
For the degenerate case of a zero-second TTL, a window of opportunity
|
|
opens for each query sent, making the effective TTL equal to 'W'
|
|
above, the response time of the authoritative server.
|
|
|
|
This last case also holds for spoofing techniques that do not rely on
|
|
TTL expiry, but use repeated and changing queries.
|
|
|
|
8. Discussion
|
|
|
|
The calculations above indicate the relative ease with which DNS data
|
|
can be spoofed. For example, using the formula derived earlier on an
|
|
RRSet with a 3600 second TTL, an attacker sending 7000 fake response
|
|
packets/s (a rate of 4.5 Mbit/s), stands a 10% chance of spoofing a
|
|
record in the first 24 hours, which rises to 50% after a week.
|
|
|
|
For an RRSet with a TTL of 60 seconds, the 10% level is hit after 24
|
|
minutes, 50% after less than 3 hours, 90% after around 9 hours.
|
|
|
|
For some classes of attacks, the effective TTL is near zero, as noted
|
|
above.
|
|
|
|
Note that the attacks mentioned above can be detected by watchful
|
|
server operators - an unexpected incoming stream of 4.5 Mbit/s of
|
|
packets might be noticed.
|
|
|
|
An important assumption however in these calculations is a known or
|
|
static destination port of the authentic response.
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 12]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
If that port number is unknown and needs to be guessed as well, the
|
|
problem space expands by a factor of 64000, leading the attacker to
|
|
need in excess of 285Gb/s to achieve similar success rates.
|
|
|
|
Such bandwidth is not generally available, nor is it expected to be
|
|
so in the foreseeable future.
|
|
|
|
Note that some firewalls may need reconfiguring if they are currently
|
|
set up to only allow outgoing queries from a single DNS source port.
|
|
|
|
8.1. Repetitive Spoofing Attempts for a Single Domain Name
|
|
|
|
Techniques are available to use an effectively infinite number of
|
|
queries to achieve a desired spoofing goal. In the math above, this
|
|
reduces the effective TTL to 0.
|
|
|
|
If such techniques are employed, using the same 7000 packets/s rate
|
|
mentioned above, and using 1 source port, the spoofing chance rises
|
|
to 50% within 7 seconds.
|
|
|
|
If 64000 ports are used, as recommended in this document, using the
|
|
same query rate, the 50% level is reached after around 116 hours.
|
|
|
|
9. Forgery Countermeasures
|
|
|
|
9.1. Query Matching Rules
|
|
|
|
A resolver implementation MUST match responses to all of the
|
|
following attributes of the query:
|
|
|
|
o Source address against query destination address
|
|
|
|
o Destination address against query source address
|
|
|
|
o Destination port against query source port
|
|
|
|
o Query ID
|
|
|
|
o Query name
|
|
|
|
o Query class and type
|
|
|
|
before applying DNS trustworthiness rules (see Section 5.4.1 of
|
|
[RFC2181]).
|
|
|
|
A mismatch and the response MUST be considered invalid.
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 13]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
9.2. Extending the Q-ID Space by Using Ports and Addresses
|
|
|
|
Resolver implementations MUST:
|
|
|
|
o Use an unpredictable source port for outgoing queries from the
|
|
range of available ports (53, or 1024 and above) that is as large
|
|
as possible and practicable;
|
|
|
|
o Use multiple different source ports simultaneously in case of
|
|
multiple outstanding queries;
|
|
|
|
o Use an unpredictable query ID for outgoing queries, utilizing the
|
|
full range available (0-65535).
|
|
|
|
Resolvers that have multiple IP addresses SHOULD use them in an
|
|
unpredictable manner for outgoing queries.
|
|
|
|
Resolver implementations SHOULD provide means to avoid usage of
|
|
certain ports.
|
|
|
|
Resolvers SHOULD favor authoritative nameservers with which a trust
|
|
relation has been established; stub-resolvers SHOULD be able to use
|
|
Transaction Signature (TSIG) ([RFC2845]) or IPsec ([RFC4301]) when
|
|
communicating with their recursive resolver.
|
|
|
|
In case a cryptographic verification of response validity is
|
|
available (TSIG, SIG(0)), resolver implementations MAY waive above
|
|
rules, and rely on this guarantee instead.
|
|
|
|
Proper unpredictability can be achieved by employing a high quality
|
|
(pseudo-)random generator, as described in [RFC4086].
|
|
|
|
9.2.1. Justification and Discussion
|
|
|
|
Since an attacker can force a full DNS resolver to send queries to
|
|
the attacker's own nameservers, any constant or sequential state held
|
|
by such a resolver can be measured, and it must not be trivially easy
|
|
to reverse engineer the resolver's internal state in a way that
|
|
allows low-cost, high-accuracy prediction of future state.
|
|
|
|
A full DNS resolver with only one or a small number of upstream-
|
|
facing endpoints is effectively using constants for IP source address
|
|
and UDP port number, and these are very predictable by potential
|
|
attackers, and must therefore be avoided.
|
|
|
|
A full DNS resolver that uses a simple increment to get its next DNS
|
|
query ID is likewise very predictable and so very spoofable.
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 14]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
Finally, weak random number generators have been shown to expose
|
|
their internal state, such that an attacker who witnesses several
|
|
sequential "random" values can easily predict the next ones. A
|
|
crypto-strength random number generator is one whose output cannot be
|
|
predicted no matter how many successive values are witnessed.
|
|
|
|
9.3. Spoof Detection and Countermeasure
|
|
|
|
If a resolver detects that an attempt is being made to spoof it,
|
|
perhaps by discovering that many packets fail the criteria as
|
|
outlined above, it MAY abandon the UDP query and re-issue it over
|
|
TCP. TCP, by the nature of its use of sequence numbers, is far more
|
|
resilient against forgery by third parties.
|
|
|
|
10. Security Considerations
|
|
|
|
This document provides clarification of the DNS specification to
|
|
decrease the probability that DNS responses can be successfully
|
|
forged. Recommendations found above should be considered
|
|
complementary to possible cryptographical enhancements of the domain
|
|
name system, which protect against a larger class of attacks.
|
|
|
|
This document recommends the use of UDP source port number
|
|
randomization to extend the effective DNS transaction ID beyond the
|
|
available 16 bits.
|
|
|
|
A resolver that does not implement the recommendations outlined above
|
|
can easily be forced to accept spoofed responses, which in turn are
|
|
passed on to client computers -- misdirecting (user) traffic to
|
|
possibly malicious entities.
|
|
|
|
This document directly impacts the security of the Domain Name
|
|
System, implementers are urged to follow its recommendations.
|
|
|
|
Most security considerations can be found in Sections 4 and 5, while
|
|
proposed countermeasures are described in Section 9.
|
|
|
|
For brevity's sake, in lieu of repeating the security considerations
|
|
references, the reader is referred to these sections.
|
|
|
|
Nothing in this document specifies specific algorithms for operators
|
|
to use; it does specify algorithms implementations SHOULD or MUST
|
|
support.
|
|
|
|
It should be noted that the effects of source port randomization may
|
|
be dramatically reduced by NAT devices that either serialize or limit
|
|
in volume the UDP source ports used by the querying resolver.
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 15]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
DNS recursive servers sitting behind at NAT or a statefull firewall
|
|
may consume all available NAT translation entries/ports when
|
|
operating under high query load. Port randomization will cause
|
|
translation entries to be consumed faster than with fixed query port.
|
|
|
|
To avoid this, NAT boxes and statefull firewalls can/should purge
|
|
outgoing DNS query translation entries 10-17 seconds after the last
|
|
outgoing query on that mapping was sent. [RFC4787]-compliant devices
|
|
need to treat UDP messages with port 53 differently than most other
|
|
UDP protocols.
|
|
|
|
To minimize the potential that port/state exhaustion attacks can be
|
|
staged from the outside, it is recommended that services that
|
|
generate a number of DNS queries for each connection should be rate
|
|
limited. This applies in particular to email servers.
|
|
|
|
11. Acknowledgments
|
|
|
|
Source port randomization in DNS was first implemented and possibly
|
|
invented by Dan J. Bernstein.
|
|
|
|
Although any mistakes remain our own, the authors gratefully
|
|
acknowledge the help and contributions of:
|
|
Stephane Bortzmeyer
|
|
Alfred Hoenes
|
|
Peter Koch
|
|
Sean Leach
|
|
Norbert Sendetzky
|
|
Paul Vixie
|
|
Florian Weimer
|
|
Wouter Wijngaards
|
|
Dan Wing
|
|
|
|
12. References
|
|
|
|
12.1. Normative References
|
|
|
|
[RFC1034] Mockapetris, P., "Domain names - concepts and
|
|
facilities", STD 13, RFC 1034, November 1987.
|
|
|
|
[RFC1035] Mockapetris, P., "Domain names - implementation and
|
|
specification", STD 13, RFC 1035, November 1987.
|
|
|
|
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
|
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
|
|
|
[RFC2181] Elz, R. and R. Bush, "Clarifications to the DNS
|
|
Specification", RFC 2181, July 1997.
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 16]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
[RFC2827] Ferguson, P. and D. Senie, "Network Ingress Filtering:
|
|
Defeating Denial of Service Attacks which employ IP
|
|
Source Address Spoofing", BCP 38, RFC 2827, May 2000.
|
|
|
|
[RFC2845] Vixie, P., Gudmundsson, O., Eastlake, D., and B.
|
|
Wellington, "Secret Key Transaction Authentication for
|
|
DNS (TSIG)", RFC 2845, May 2000.
|
|
|
|
[RFC3013] Killalea, T., "Recommended Internet Service Provider
|
|
Security Services and Procedures", BCP 46, RFC 3013,
|
|
November 2000.
|
|
|
|
[RFC4033] Arends, R., Austein, R., Larson, M., Massey, D., and S.
|
|
Rose, "DNS Security Introduction and Requirements",
|
|
RFC 4033, March 2005.
|
|
|
|
[RFC4086] Eastlake, D., Schiller, J., and S. Crocker, "Randomness
|
|
Requirements for Security", BCP 106, RFC 4086,
|
|
June 2005.
|
|
|
|
[RFC5321] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321,
|
|
October 2008.
|
|
|
|
12.2. Informative References
|
|
|
|
[RFC1123] Braden, R., "Requirements for Internet Hosts -
|
|
Application and Support", STD 3, RFC 1123, October 1989.
|
|
|
|
[RFC3833] Atkins, D. and R. Austein, "Threat Analysis of the
|
|
Domain Name System (DNS)", RFC 3833, August 2004.
|
|
|
|
[RFC4301] Kent, S. and K. Seo, "Security Architecture for the
|
|
Internet Protocol", RFC 4301, December 2005.
|
|
|
|
[RFC4787] Audet, F. and C. Jennings, "Network Address Translation
|
|
(NAT) Behavioral Requirements for Unicast UDP", BCP 127,
|
|
RFC 4787, January 2007.
|
|
|
|
[RFC5358] Damas, J. and F. Neves, "Preventing Use of Recursive
|
|
Nameservers in Reflector Attacks", BCP 140, RFC 5358,
|
|
October 2008.
|
|
|
|
[vu-457875] United States CERT, "Various DNS service implementations
|
|
generate multiple simultaneous queries for the same
|
|
resource record", VU 457875, November 2002.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 17]
|
|
|
|
RFC 5452 DNS Resilience against Forged Answers January 2009
|
|
|
|
|
|
Authors' Addresses
|
|
|
|
Bert Hubert
|
|
Netherlabs Computer Consulting BV.
|
|
Braillelaan 10
|
|
Rijswijk (ZH) 2289 CM
|
|
The Netherlands
|
|
|
|
EMail: bert.hubert@netherlabs.nl
|
|
|
|
|
|
Remco van Mook
|
|
Equinix
|
|
Auke Vleerstraat 1
|
|
Enschede 7521 PE
|
|
The Netherlands
|
|
|
|
EMail: remco@eu.equinix.com
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hubert & van Mook Standards Track [Page 18]
|
|
|