RFC 8027
DNSSEC Roadblock Avoidance
DNSSEC Roadblock Avoidance π¦
okay bestie, so this is RFC 8027 π It's a Best Current Practice (that's BCP 207) from November 2016, published on the IETF stream with ISSN 2070-1721. The authors are W. Hardaker (USC/ISI), O. Gudmundsson (CloudFlare), and S. Krishnaswamy (Parsons). The header doesn't list any Obsoletes or Updates entries, so this one isn't replacing or patching anything else. π
Abstract π
okay so this doc is about the problems a validating DNS resolver, a stub-resolver, or an application can run into when the network around it is non-compliant π It walks through ways to detect those problems and some mitigation techniques. The big goal is a shared approach for spotting and getting around network issues that DNSSEC software or systems might hit. it's giving teamwork π«Ά
Status of This Memo πΈ
This memo documents an Internet Best Current Practice.
This doc is a product of the Internet Engineering Task Force (IETF), and it represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more info on BCPs, check Section 2 of RFC 7841 π§
For the current status, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc8027 π
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) as they stood on the publication date. Please actually read these, bestie, because they spell out your rights and restrictions for this document. Code Components pulled out of this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come without warranty as described in the Simplified BSD License π
Table of Contents π§Ύ
1. Introduction ....................................................3
1.1. Notation ...................................................3
1.2. Background .................................................3
1.3. Implementation Experiences .................................4
1.3.1. Test Zone Implementation ............................4
2. Goals ...........................................................4
3. Detecting DNSSEC Non-compliance .................................5
3.1. Determining DNSSEC Support in Recursive Resolvers ..........5
3.1.1. Supports UDP Answers ................................6
3.1.2. Supports TCP Answers ................................6
3.1.3. Supports EDNS0 ......................................6
3.1.4. Supports the DO Bit .................................7
3.1.5. Supports the AD Bit DNSKEY Algorithms 5 and/or 8 ....7
3.1.6. Returns RRSIG for Signed Answer .....................7
3.1.7. Supports Querying for DNSKEY Records ................8
3.1.8. Supports Querying for DS Records ....................8
3.1.9. Supports Negative Answers with NSEC Records .........8
3.1.10. Supports Negative Answers with NSEC3 Records .......9
3.1.11. Supports Queries Where DNAME Records Lead
to an Answer .......................................9
3.1.12. Permissive DNSSEC .................................10
3.1.13. Supports Unknown RRtypes ..........................10
3.2. Direct Network Queries ....................................10
3.2.1. Support for Remote UDP over Port 53 ................10
3.2.2. Support for Remote UDP with Fragmentation ..........11
3.2.3. Support for Outbound TCP over Port 53 ..............11
3.3. Support for DNSKEY and DS Combinations ....................11
4. Aggregating the Results ........................................12
4.1. Resolver Capability Description ...........................12
5. Roadblock Avoidance ............................................13
5.1. Partial Resolver Usage ....................................16
5.1.1. Known Insecure Lookups .............................16
5.1.2. Partial NSEC/NSEC3 Support .........................16
6. Start-Up and Network Connectivity Issues .......................16
6.1. What to Do ................................................17
7. Quick Test .....................................................17
7.1. Test Negative Answers Algorithm 5 .........................17
7.2. Test Algorithm 8 ..........................................18
7.3. Test Algorithm 13 .........................................18
7.4. Fails When DNSSEC Does Not Validate .......................18
8. Security Considerations ........................................18
9. Normative References ...........................................18
Acknowledgments ...................................................19
Authors' Addresses ................................................19
1. Introduction β¨
okay so this doc describes the problems you can notice while deploying DNSSEC ([RFC4034] [RFC4035]) that come from non-compliant infrastructure π€ It also suggests possible ways to detect those problems and mitigate them π¦
1.1. Notation π
So in this doc, a "Host Validator" can be either a validating stub-resolver (like a library an app has linked in) or a validating resolver daemon running on the same machine. It may or may not be using upstream caching resolvers during its own resolution, and both cases are covered by the tests in this document π
There's also a sub-variant called a "Validating Forwarding Resolver". That's a resolver configured to use upstream resolvers when it can. A Validating Forwarding Resolver also needs to run the tests in this document before it uses an upstream recursive resolver π§
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]. π
1.2. Background πΈ
DNSSEC validation deployment keeps getting blocked by network components that make it hard, or sometimes impossible, for validating resolvers to actually get the DNSSEC data they need π There are a bunch of reasons this can happen, including (but not limited to) these:
- Recursive resolvers and DNS proxies [RFC5625] that aren't fully DNSSEC compliant
- Resolvers that aren't DNSSEC aware
- "Middleboxes" that block, modify, and/or restrict outbound traffic to the DNS port (53), either UDP and/or TCP
- In-path network components that don't allow UDP fragments
This doc talks about how a Host Validator can check the state of the network it's attached to, and about ways to hopefully get around the problems tied to whatever network defects it finds π₯ The tests here can be run against any validating resolver to spot and prevent problems. These recommendations are mainly aimed at Host Validators, but it's prudent to run these tests from regular validating resolvers too, just to make sure everything works π
Sometimes a host can't talk directly to a resolver. The tests below can't tell you how to fix that, and you might see inconsistent results in those cases. For example, this can happen when there are DNS proxies or forwarders sitting between the user and the actual resolvers π
1.3. Implementation Experiences π
Lots of lessons learned from different implementations went into this doc. In alphabetical order, they include DNSSEC-Tools' DNSSEC-Check, DNSSEC_Resolver_Check, dnssec-trigger, and FCC_Grade π
Detecting lack of support for specified Domain Name System Key (DNSKEY) algorithms and Delegation Signer (DS) digest algorithms is outside this doc's scope, but the doc does give info on how to do it anyway. There's a sample test tool here: https://github.com/ogud/DNSSEC_ALG_Check π§ͺ
This document does describe compliance tests for algorithms 5, 7, and 13 with DS digest algorithms 1 and 2 β¨
1.3.1. Test Zone Implementation π
In this doc, the test.example.com domain is used to point at DNS records with known DNSSEC properties. For example, badsign-a.test.example.com is used below to refer to a DNS A record whose published signatures are invalid. (They're "bad signatures" that should cause a validation failure π)
At the time of this publication, the test.dnssec-tools.org domain implements all of these test records. So when you're doing real-world tests, you can swap test.example.com in this doc for test.dnssec-tools.org π¦
2. Goals π
This doc is meant to show how a Host Validator can detect what a recursive resolver is capable of, and how it can work around any problems that could affect DNSSEC resolution. That lets the Host Validator use the recursive resolver's caching, which is great because it cuts down network traffic and speeds up response times β
A Host Validator has two choices. It can wait until it runs into problems with a recursive resolver, based on the results it gets from real-world queries sent to it. Or it can proactively test for problems (Section 3) to build a workaround list ahead of time (Section 5). Both paths have pros and cons that depend on the application, and this doc doesn't try to say whether proactive tests should or shouldn't be used. Either way, DNSSEC roadblock avoidance techniques ought to be used when needed and when possible π
Note: Besides being useful for Host Validators, the same tests can be used by a recursive resolver to check whether its upstream connections are getting in the way of DNSSEC validation π«Ά
3. Detecting DNSSEC Non-compliance π
This section outlines the tests a validator should run to check certain features of the network around it. A resolver should perform these tests when it first starts up, but it MAY also perform them when it detects network changes (for example, address changes, network reattachment, or etc.) πΈ
Note: When running these tests against an address, we assume the address is either a unicast address or an anycast [RFC4786] cluster where all servers have identical configuration and connectivity π§
Note: When running these tests, we also assume the path is clear of "DNS-interfering" middleboxes, like firewalls, proxies, or forwarders. Having that kind of infrastructure around can easily make a recursive resolver look like it's misbehaving. How to work around that kind of interference is beyond this doc's scope, although the tests defined here may point out when misbehaving middleware is causing the trouble π€
Note: This document specifies two sets of tests: a comprehensive one and a fast one. The fast one will catch most common problems, so if the fast one passes, the comprehensive one MAY be considered passed as well β
3.1. Determining DNSSEC Support in Recursive Resolvers β¨
Okay so, ideally a Host Validator can borrow the caching that lives in recursive resolvers π This section goes through the tests a recursive resolver MUST pass before it's fully usable as a DNS cache π«Ά
Unless stated otherwise, bestie:
- all of the following tests SHOULD have the Recursion Desired (RD) flag set when sending out a query, and queries SHOULD be sent over UDP π¦
- the tests MUST NOT have the DNSSEC OK (DO) bit set or use any of the other DNSSEC-related requirements, like Extension Mechanisms for DNS (EDNS0) π
The tests are designed to check for support of one feature at a time, so each one is laser-focused π₯
3.1.1. Supports UDP Answers
Purpose: This tests basic DNS-over-UDP functionality to a resolver πΈ
Test: A DNS request is sent to the resolver under test for an A record for a known existing domain, such as good-a.test.example.com.
SUCCESS: A DNS response was received that contains an A record in the answer section. (The data itself does not need to be checked.) β¨
Note: An implementation MAY chose not to perform the rest of the tests if this test fails, as it is highly unlikely that the resolver under test will pass any of the remaining tests. π
3.1.2. Supports TCP Answers
Purpose: This tests basic TCP functionality to a resolver π§
Test: A DNS request is sent over TCP to the resolver under test for an A record for a known existing domain, such as good-a.test.example.com.
SUCCESS: A DNS response was received that contains an A record in the answer section. (The data itself does not need to be checked.) π
3.1.3. Supports EDNS0
Purpose: Test whether a resolver properly supports the EDNS0 extension option π
Prerequisite: Supports UDP or TCP.
Test: Send a request to the resolver under test for an A record for a known existing domain, such as good-a.test.example.com, with an EDNS0 OPT record in the additional section.
SUCCESS: A DNS response was received that contains an EDNS0 option with version number 0. π
3.1.4. Supports the DO Bit
Purpose: This tests whether a resolver has minimal support of the DO bit π
Prerequisite: Supports EDNS0.
Test: Send a request to the resolver under test for an A record for a known existing domain, such as good-a.test.example.com. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains the DO bit set.
Note: This only tests that the resolver set the DO bit in the response. Later tests will determine if the DO bit was actually made use of. Some resolvers successfully pass this test because they simply copy the unknown flags into the response. These resolvers will fail the later tests. π not the vibe
3.1.5. Supports the AD Bit DNSKEY Algorithms 5 and/or 8
Purpose: This tests whether the resolver is a validating resolver π‘οΈβ¨
Prerequisite: Supports the DO bit.
Test: Send requests to the resolver under test for an A record for a known existing domain in a DNSSEC-signed zone that is verifiable to a configured trust anchor, such as good-a.test.example.com using the root's published DNSKEY or DS record as a trust anchor. Set the DO bit in the outgoing query. This test should be done twice: once for a zone that contains algorithm 5 (RSASHA1) and again for algorithm 8 (RSASHA256). π¦
SUCCESS: A DNS response was received that contains the Authentic Data (AD) bit set for algorithm 5 (RSASHA1).
BONUS: The AD bit is set for a resolver that supports algorithm 8 (RSASHA256). ooh bonus points π
3.1.6. Returns RRSIG for Signed Answer
Purpose: This tests whether a resolver will properly return Resource Record Signature (RRSIG) records when the DO bit is set π
Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for an A record for a known existing domain in a DNSSEC-signed zone, such as good-a.test.example.com. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains at least one RRSIG record. π
3.1.7. Supports Querying for DNSKEY Records
Purpose: This tests whether a resolver can query for and receive a DNSKEY record from a signed zone ποΈ
Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for a DNSKEY record that is known to exist in a signed zone, such as test.example.com/DNSKEY. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains a DNSKEY record in the answer section.
Note: Some DNSKEY Resource Record Sets (RRsets) are large and, if the network path has problems with large answers, this query may result in either a false positive or a false negative. In general, the DNSKEY queried for should be small enough to fit into a 1220-byte answer to avoid a false negative result when TCP is disabled. However, querying many zones will result in answers greater than 1220 bytes, so DNS over TCP MUST be available for DNSSEC use in general. π this one is a whole saga, babe
3.1.8. Supports Querying for DS Records
Purpose: This tests whether a resolver can query for and receive a DS record from a signed zone π§
Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for a DS record that is known to exist in a signed zone, such as test.example.com/DS. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains a DS record in the answer section. π«§
3.1.9. Supports Negative Answers with NSEC Records
Purpose: This tests whether a resolver properly returns NextSECure (NSEC) records for a nonexisting domain in a DNSSEC-signed zone π
Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for an A record that is known to not exist in an NSEC-signed zone, such as nonexistent.test.example.com. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains an NSEC record.
Note: The query issued in this test MUST be sent to an NSEC-signed zone. Getting back appropriate NSEC3 records does not indicate a failure, but a bad test. π ββοΈ
3.1.10. Supports Negative Answers with NSEC3 Records
Purpose: This tests whether a resolver properly returns NSEC3 records ([RFC5155]) for a nonexisting domain in a DNSSEC-signed zone π·
Prerequisite: Supports the DO bit.
Test: Send a request to the resolver under test for an A record that is known to be nonexistent in a zone signed using NSEC3, such as nonexistent.nsec3-ns.test.example.com. Set the DO bit in the outgoing query.
SUCCESS: A DNS response was received that contains an NSEC3 record.
Bonus: If the AD bit is set, this validator supports algorithm 7 (RSASHA1-NSEC3-SHA1). π
Note: The query issued in this test MUST be sent to an NSEC3-signed zone. Getting back appropriate NSEC records does not indicate a failure, but a bad test. π
3.1.11. Supports Queries Where DNAME Records Lead to an Answer
Purpose: This tests whether a resolver can query for an A record in a zone with a known DNAME referral for the record's parent πͺ
Test: Send a request to the resolver under test for an A record that is known to exist in a signed zone within a DNAME-referral child zone, such as good-a.dname-good-ns.test.example.com.
SUCCESS: A DNS response was received that contains a DNAME in the answer section. An RRSIG MUST also be received in the answer section that covers the DNAME record. π
3.1.12. Permissive DNSSEC
Purpose: To see if a validating resolver is ignoring DNSSEC validation failures π
Prerequisite: Supports the AD bit.
Test: Ask for data from a broken DNSSEC delegation, such as badsign-a.test.example.com.
SUCCESS: A reply was received with the Rcode set to SERVFAIL.
Ngl, this is the one that catches the resolvers pretending to be validators. Read it twice. π
3.1.13. Supports Unknown RRtypes
Purpose: Some DNS Resolvers/gateways only support some Resource Record Types (RRtypes). This causes problems for applications that need recently defined types. π¦
Prerequisite: Supports UDP or TCP.
Test: Send a request for a recently defined type or an unknown type in the 20000-22000 range, that resolves to a server that will return an answer for all types, such as alltypes.example.com (a server today that supports this is alltypes.res.dnssecready.org).
SUCCESS: A DNS response was retrieved that contains the type requested in the answer section. π
3.2. Direct Network Queries
If needed, a Host Validator may need to make direct queries to authoritative servers or known Open Recursive Resolvers in order to collect data. To do that, a number of key network features MUST be functional. π°οΈβ¨
3.2.1. Support for Remote UDP over Port 53
Purpose: This tests basic UDP functionality to outside the local network π
Test: A DNS request is sent to a known distant authoritative server for a record known to be within that server's authoritative data. Example: send a query to the address of ns1.test.example.com for the good-a.test.example.com/A record.
SUCCESS: A DNS response was received that contains an A record in the answer section.
Note: An implementation can use the local resolvers for determining the address of the name server that is authoritative for the given zone. The recursive bit MAY be set for this request, but it does not need to be. π«Ά
3.2.2. Support for Remote UDP with Fragmentation
Purpose: This tests if the local network can receive fragmented UDP answers π§©
Prerequisite: Local UDP traffic > 1500 bytes in size is possible.
Test: A DNS request is sent over UDP to a known distant DNS address asking for a record that has an answer larger than 2000 bytes. For example, send a query for the test.example.com/DNSKEY record with the DO bit set in the outgoing query.
SUCCESS: A DNS response was received that contains the large answer.
Note: A failure in getting large answers over UDP is not a serious problem if TCP is working. π
3.2.3. Support for Outbound TCP over Port 53
Purpose: This tests basic TCP functionality to outside the local network π
Test: A DNS request is sent over TCP to a known distant authoritative server for a record known to be within that server's authoritative data. Example: send a query to the address of ns1.test.example.com for the good-a.test.example.com/A record.
SUCCESS: A DNS response was received that contains an A record in the answer section.
Note: An implementation can use the local resolvers for determining the address of the name server that is authoritative for the given zone. The recursive bit MAY be set for this request, but it does not need to be. π
3.3. Support for DNSKEY and DS Combinations
Purpose: This test can check what algorithm combinations are supported π§ͺ
Prerequisite: Supports the AD bit for Algorithms 5 and/or 8.
Test: A DNS request is sent over UDP to the resolver under test for a known combination of the DS algorithm number (N) and DNSKEY algorithm number (M) of the example form ds-N.alg-M-nsec.test.example.com. Examples:
ds-2.alg-13-nsec.test.example.com TXT
or
ds-4.alg-13-nsec3.test.example.com TXT
SUCCESS: A DNS response is received with the AD bit set and with a matching record type in the answer section. π
Note: For algorithms 6 and 7, NSEC is not defined; thus, a query for alg-M-nsec3 is required. Similarly, NSEC3 is not defined for algorithms 1, 3, and 5. Furthermore, algorithms 2, 4, 9, and 11 do not currently have definitions for signed zones. π
4. Aggregating the Results
Some conclusions can be drawn from the results of the above tests in an "aggregated" form. This section defines some labels to assign to a resolver under test given the results of the tests run against them. Labels incoming, bestie π§π
4.1. Resolver Capability Description β¨
okay so this section is where we group and label the common results π·οΈπ
Resolvers get sorted into a few broad behaviors:
Validator π: The resolver passes all the DNSSEC tests and has the AD bit set correctly π
DNSSEC-Aware π: The resolver passes all the DNSSEC tests, but it doesn't set the AD bit on answers the way it should, which means it isn't validating. A Host Validator is totally fine using this resolver as a forwarder β¨
Non-DNSSEC-Capable π: The resolver isn't DNSSEC-aware, and it's going to make life really hard for a Host Validator sitting behind it. It MAY be usable for querying data in known insecure sections of the DNS tree πΈ
Not a DNS Resolver π: This one is improperly behaving, so don't use it at all, bestie π«
Okay, but real talk, not every resolver fits neatly into one of those boxes π So we add a more descriptive result by putting the word "Partial" in front of the Validator or DNSSEC-aware labels, followed by sub-descriptors saying what's not working π§©
Unknown π¦: Failed the unknown test
DNAME π: Failed the DNAME test
NSEC3 π: Failed the NSEC3 test
TCP π§: TCP not available
SlowBig π’: UDP is size limited, but TCP fallback works
NoBig π: TCP not available and UDP is size limited
Permissive π«Ά: Passes data known to fail validation
5. Roadblock Avoidance π§
The whole goal here is to tie the tests and aggregations from above to avoidance practices. Lowkey though, this document doesn't spell out exactly how to do that π€·ββοΈ
Once we know what level of support the network has, we can figure out what needs to happen so we can effectively act as a validating resolver. This section walks through some options based on the results from the earlier sections β¨
The general fallback approach goes like this:
If the resolver is labeled as "Validator" or "DNSSEC-aware":
Send queries through this resolver and perform local
validation on the results.
If validation fails, try the next resolver.
Else, if the resolver is labeled "Not a DNS Resolver" or
"Non-DNSSEC-capable":
Mark it as unusable and try the next resolver.
Else if no more resolvers are configured and if direct queries
are supported:
1. Try iterating from the Root.
2. If the answer is SECURE/BOGUS:
Return the result of the iteration.
3. If the answer is INSECURE:
Re-query "Non-DNSSEC-capable" servers and return
answers from them without the AD bit set to the client.
This will increase the likelihood that split-view unsigned
answers are found.
Else:
Return an error code and log a failure.
So while you're resolving through a particular recursive name server using a transport method that worked, you MUST remember any transport-specific parameters so you don't waste time on unnecessary fallback attempts π§ π
You MUST also remember transport-specific parameters for each authoritative name server you query during an iterative mode lookup π
Any transport settings you remember for a particular name server MUST be refreshed periodically π They should also be refreshed when an error shows up, as described below π«Ά
For a stub resolver, name server problems can show up under these error conditions π¬
- No Response, error response, or missing DNSSEC metadata
- Illegal Response: An illegal response is received, which stops the validator from fetching all the records it needs to build an authentication chain. This could happen when referral loops are hit, when any of the antecedent zone delegations are lame, when aliases get followed incorrectly for certain RRtypes (like Start of Authority (SOA), DNSKEYs, or DS records), or when resource records for certain types (e.g., DS) come back from a zone that isn't authoritative for them π
- Bogus Response: A Bogus Response is received when the cryptographic assertions in the authentication chain don't validate properly π
For each of the error conditions above, a validator MAY adopt the dynamic fallback technique below, preferring whichever approach has already worked for that name server or zone in earlier attempts π
- No response, error response, or missing DNSSEC metadata:
- Retry with different EDNS0 sizes (4096, 1492, or None).
- Retry with TCP only.
- Perform an iterative query starting from the Root if the previous error came from a lookup that had recursion enabled.
- Retry using an alternative transport method, if this alternative method is known (configured) to be supported by the name server in question.
- Illegal Response
- Perform an iterative query starting from the Root if the previous error came from a lookup that had recursion enabled.
- Check if any of the antecedent zones up to the closest configured trust anchor are Insecure.
- Bogus Response
- Perform an iterative query starting from the Root if the previous error came from a lookup that had recursion enabled.
For every fallback technique, attempts to reach multiple potential name servers should be spread out, so the next name server gets tried when the previous one returns an error or hits a timeout πββοΈπ¨
The validator SHOULD remember any broken behavior it identifies for a particular zone in its zone-specific fallback cache, for as long as that zone's SOA-negative TTL lasts ποΈ
The validator MAY put name servers that show broken behavior on a blacklist, and bypass them for all the zones they're authoritative for π« The validator MUST time out entries on this name server blacklist periodically, and that interval could be set to match the DNSSEC BAD cache default TTL β°
5.1. Partial Resolver Usage π
It may be possible to use Non-DNSSEC-Capable caching resolvers in careful ways if you really want maximum optimization π€ This section covers some advanced techniques you could implement to use a resolver in at least a minimal way. Most of the time this is unnecessary π ββοΈ The exception is when none of the resolvers are fully compliant, so the choice is either to use them minimally or not at all (and then you get no caching benefits) π
5.1.1. Known Insecure Lookups π
If a resolver is Non-DNSSEC-Capable but a section of the DNS tree has been determined to be Insecure [RFC4035], then queries to that section of the tree MAY be sent through the Non-DNSSEC-Capable caching resolver π¦
5.1.2. Partial NSEC/NSEC3 Support π§©
Resolvers that understand DNSSEC in general, and understand NSEC but not NSEC3, are partially usable π₯² These resolvers usually lack support for unknown types too, so they're basically mostly useless and best avoided π ββοΈ
6. Start-Up and Network Connectivity Issues πΆ
A bunch of scenarios can cause short-term or long-term connectivity issues with DNSSEC validation π΅βπ« Here are the cases to think about:
- Time Synchronization: Time sync problems can happen when a device has been off for a while and its clock is no longer close to "real time", or when a device always sets its clock to the same time during start-up β° This causes problems when the device needs to resolve its source of time synchronization, like
ntp.example.com. - Changing Network Properties: A newly connected network may change state right after someone uses an HTTP-based paywall authentication system π³ This is super common in hotel, airport, and coffee-shop networks, where DNSSEC, validation, and even DNS don't work until you click through a series of forced web pages to enable the network π The tests in Section 3 will give very different results before and after the network authorization succeeds π APIs exist on many operating systems to detect initial network device status changes, like right after DHCP finishes, but few (none?) exist to detect that paywall authentication has succeeded π€
Honestly, there are only two choices when situations like this happen π€
- Keep performing DNSSEC processing, which will likely make all DNS requests fail. This is the most secure route, but it causes the most operational grief for users π©
- Turn off DNSSEC support until the network proves to be usable. This lets the user keep using the network, but at the cost of security π It also opens the door to a denial-of-service attack if a man-in-the-middle can convince a device that DNSSEC is impossible π
6.1. What to Do π
If the Host Validator detects that DNSSEC resolution isn't possible, it SHOULD log the event and/or SHOULD report an error to the user π£ If there's no user, nothing can be reported, so the device MAY have a policy of action, like continue or fail π€ Until middleboxes let DNSSEC-protected information travel through them consistently, software implementations may need to offer this choice so users can pick the security level they need ποΈ Note that continuing without DNSSEC protection, with no notification or report, could lead to situations where users assume a level of security that doesn't actually exist π«£
Bestie, please don't let your app silently keep going without DNSSEC and let people think they're safe. That's the sneaky part π¨
7. Quick Test β‘
The quick tests below assume the questions are being asked of a real resolver, and the only real question is "How complete is the DNSSEC support?" π This quick test was implemented in a few programs built at IETF hackathons at IETF 93 and IETF 94 π The programs all use a common grading method: for each question that returns the expected answer, the resolver gets a point, and if the AD bit is set as expected, it gets a second point π
7.1. Test Negative Answers Algorithm 5 π
Query: realy-doesnotexist.test.example.com. A
Answer: RCODE= NXDOMAIN, Empty Answer, Authority: NSEC-proof
7.2. Test Algorithm 8 πΈ
Query: alg-8-nsec3.test.example.com. SOA
Answer: RCODE= 0, Answer: SOA record
7.3. Test Algorithm 13 π
Query: alg-13-nsec.test.example.com. SOA
Answer: RCODE= 0, Answer: SOA record
7.4. Fails When DNSSEC Does Not Validate π
Query: dnssec-failed.test.example.com. SOA
Answer: RCODE= SERVFAIL, empty answer, and authority, AD=0
8. Security Considerations π
This document talks about problems that can come up while deploying the DNSSEC protocol π¨ It describes what might be possible to help detect and mitigate these problems π‘οΈ Following the outlined suggestions will result in a much more secure DNSSEC-operational environment than if DNSSEC was just turned off πβ¨
9. Normative References π
okay bestie, these are the references the spec leans on, so they're the ones you'd actually need to read. the bracketed labels are the ones the text cites, so keep them exact π«Ά
[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>.
[RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "Resource Records for the DNS Security Extensions",
RFC 4034, DOI 10.17487/RFC4034, March 2005,
<http://www.rfc-editor.org/info/rfc4034>.
[RFC4035] Arends, R., Austein, R., Larson, M., Massey, D., and S.
Rose, "Protocol Modifications for the DNS Security
Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005,
<http://www.rfc-editor.org/info/rfc4035>.
[RFC4786] Abley, J. and K. Lindqvist, "Operation of Anycast
Services", BCP 126, RFC 4786, DOI 10.17487/RFC4786,
December 2006, <http://www.rfc-editor.org/info/rfc4786>.
[RFC5155] Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS
Security (DNSSEC) Hashed Authenticated Denial of
Existence", RFC 5155, DOI 10.17487/RFC5155, March 2008,
<http://www.rfc-editor.org/info/rfc5155>.
[RFC5625] Bellis, R., "DNS Proxy Implementation Guidelines",
BCP 152, RFC 5625, DOI 10.17487/RFC5625, August 2009,
<http://www.rfc-editor.org/info/rfc5625>.
Acknowledgments π
big thank-you to the IESG and the DNSOP working group members πΈ they gave loads of extensive comments and suggestions, and honestly the doc is better because of them β¨
Authors' Addresses π
these are the people who wrote it, so here's where you can find them π§
Wes Hardaker
USC/ISI
P.O. Box 382
Davis, CA 95617
United States of America
Email: ietf@hardakers.net
Olafur Gudmundsson
CloudFlare
San Francisco, CA 94107
United States of America
Email: olafur+ietf@cloudflare.com
Suresh Krishnaswamy
Parsons
7110 Samuel Morse Dr
Columbia, MD 21046
United States of America
Email: suresh@tislabs.com
that's the whole thing, we made it through!! ππ
π¦ where this page comes from
- ietf: rfc8027 2016-11
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms