Structured Data for Filtered DNS
Internet-Draft
Dan Wing
Citrix Systems, Inc.
United States of America
dwing-ietf@fuggles.com
Tirumaleswar Reddy
Nokia
Bangalore
Karnataka
India
kondtir@gmail.com
Neil Cook
Open-Xchange
United Kingdom
neil.cook@noware.co.uk
Mohamed Boucadair
Orange
Rennes
35000
France
mohamed.boucadair@orange.com
DNSOP WG
DNS filtering is widely deployed for network security, but filtered DNS responses lack information for the end user to understand the reason for the filtering. Existing mechanisms to provide detail to end users cause harm especially if the blocked DNS response is to an HTTPS website.
This document updates the EXTRA-TEXT field of Extended DNS Error to provide details on the DNS filtering. This information can be parsed by the client and displayed, logged, or used for other purposes.
This document updates RFC 8914.
Introduction
DNS filters are deployed for a variety of reasons including endpoint security, parental filtering, and filtering required by law enforcement. Network-based security solutions such as firewalls and Intrusion Prevention Systems (IPS) rely upon network traffic inspection to implement perimeter-based security policies and operate by filtering DNS responses. In a home, DNS filtering is used for the same reasons as above and additionally for parental control. Internet Service Providers typically block access to some DNS domains due to a requirement imposed by an external entity (e.g., law enforcement agency) also performed using DNS-based content filtering.
Users of DNS services which perform filtering may wish to receive more information about such filtering to resolve problems with the filter -- for example to contact the administrator to allowlist a domain that was erroneously filtered or to understand the reason a particular domain was filtered. With that information, the user can choose another network, open a trouble ticket with the DNS administrator to resolve erroneous filtering, log the information, or other uses.
For both DNS filtering mechanisms described in Section 4 of, the DNS server can return extended error codes Blocked, Censored, Filtered, or Forged Answer defined in Section 4 of. However, these codes only explain that filtering occurred but lack detail for the user to diagnose erroneous filtering.
No matter which type of response is generated (forged IP address(es), NXDOMAIN or empty answer, even with an extended error code), the user who triggered the DNS query has little chance to understand which entity filtered the query, how to report a mistake in the filter, or why the entity filtered it at all. This document describes a mechanism to provide such detail.
One of the other benefits of this approach is to eliminate the need to "spoof" block pages for HTTPS resources. This is achieved since clients implementing this approach would be able to display a meaningful error message, and would not need to connect to such a block page. This approach thus avoids the need to install a local root certificate authority on those IT-managed devices.
This document describes a format for computer-parsable data in the EXTRA-TEXT field of Extended DNS Errors.
This document does not recommend DNS filtering but provides a mechanism for better transparency to explain to the users why some DNS queries are filtered.
Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119][RFC8174] when, and only when, they appear in all capitals, as shown here.
This document uses terms defined in DNS Terminology.
"Requestor" refers to the side that sends a request. "Responder" refers to an authoritative, recursive resolver or other DNS component that responds to questions. Other terminology is used here as defined in the RFCs cited by this document.
"Encrypted DNS" refers to any encrypted scheme to convey DNS messages, for example, DNS-over-HTTPS [RFC8484], DNS-over-TLS [RFC7858], or DNS-over-QUIC [RFC9250].
Limitations of Filtering techniques
DNS responses can be filtered by sending a bogus (also called, "forged") A or AAAA response, NXDOMAIN error or empty answer, or an extended DNS error (EDE) code defined in [RFC8914]. Each of these methods have advantages and disadvantages that are discussed below:
1. The DNS response is forged to provide a list of IP addresses that points to an HTTP(S) server alerting the end user about the reason for blocking access to the requested domain (e.g., malware). When an HTTP(S) enabled domain name is blocked, the network security device (e.g., CPE, firewall) presents a block page instead of the HTTP response from the content provider hosting that domain. If an HTTP enabled domain name is blocked, the network security device intercepts the HTTP request and returns a block page over HTTP. If an HTTPS enabled domain is blocked, the block page is also served over HTTPS. In order to return a block page over HTTPS, man in the middle (MITM) is enabled on endpoints by generating a local root certificate and an accompanying (local) public/private key pair. The local root certificate is installed on the endpoint while the network security device(s) stores a copy of the private key. During the TLS handshake, the network security device modifies the certificate provided by the server and (re)signs it using the private key from the local root certificate.
  - However, configuring the local root certificate on endpoints is not a viable option in several deployments like home networks, schools, Small Office/Home Office (SOHO), and Small/ Medium Enterprise (SME). In these cases, the typical behavior is that the filtered DNS response points to a server that will display the block page. If the client is using HTTPS (via web browser or another application) this results in a certificate validation error which gives no information to the end-user about the reason for the DNS filtering. Browsers will display errors such as "The security certificate presented by this website was not issued by a trusted certificate authority" (Internet Explorer/Edge"), "The site's security certificate is not trusted" (Chrome), "This Connection is Untrusted" (Firefox), "Safari can't verify the identity of the website..." (Safari on MacOS). Applications might display even more cryptic error messages.
  - Enterprise networks do not assume that all the connected devices are managed by the IT team or Mobile Device Management (MDM) devices, especially in the quite common Bring Your Own Device (BYOD) scenario. In addition, the local root certificate cannot be installed on IoT devices without a device management tool.
  - An end user does not know why the connection was prevented and, consequently, may repeatedly try to reach the domain but with no success. Frustrated, the end user may switch to an alternate network that offers no DNS filtering against malware and phishing, potentially compromising both security and privacy. Furthermore, certificate errors train users to click through certificate errors, which is a bad security practice. To eliminate the need for an end user to click through certificate errors, an end user may manually install a local root certificate on a host device. Doing so, however, is also a bad security practice as it creates a security vulnerability that may be exploited by a MITM attack. When a manually installed local root certificate expires, the user has to (again) manually install the new local root certificate.
2. The DNS response is forged to provide a NXDOMAIN response to cause the DNS lookup to terminate in failure. In this case, an end user does not know why the domain cannot be reached and may repeatedly try to reach the domain but with no success. Frustrated, the end user may use insecure connections to reach the domain, potentially compromising both security and privacy.
3. The extended error codes Blocked, Censored, and Filtered defined in Section 4 of can be returned by a DNS server to provide additional information about the cause of an DNS error. If the extended error code "Forged Answer" defined in Section 4.5 of is returned by the DNS server, the client can identify the DNS response is forged together with the reason for HTTPS certificate error.
4. These extended error codes do not suffer from the limitations discussed in bullets (1) and (2), but the user still does not know the exact reason nor he/she is aware of the exact entity blocking the access to the domain. For example, a DNS server may block access to a domain based on the content category such as "Malware" to protect the endpoint from malicious software, "Phishing" to prevent the user from revealing sensitive information to the attacker, etc. A user needs to know the contact details of the IT/InfoSec team to raise a complaint.
5. When a resolver or forwarder forwards the received EDE option, the EXTRA-TEXT field only conveys the source of the error (Section 3 of [RFC8914]) and does not provide additional textual information about the cause of the error.
I-JSON in EXTRA-TEXT field
Servers that are compliant with this specification send I-JSON data in the EXTRA-TEXT field using the Internet JSON (I-JSON) message format.
Note that [RFC7493] was based on [RFC7159], but [RFC7159] was replaced by [RFC8259].
This document defines the following JSON names:
c: (contact)
The contact details of the IT/InfoSec team to report mis-classified DNS filtering. This field is structured as an array of contact URIs (e.g., tel, sips, https). At least one contact URI MUST be included. This field is mandatory.
j: (justification)
the textual justification for this particular DNS filtering. The field should be treated only as diagnostic information for IT staff. This field is mandatory.
s: (suberror)
the suberror code for this particular DNS filtering. This field is optional.
o: (organization)
human-friendly name of the organization that filtered this particular DNS query. This field is optional.
New JSON names MUST be defined in the IANA registry, consist only of lower-case ASCII characters, digits, and hyphens (that is, Unicode characters U+0061 through 007A, U+0030 through U+0039, and U+002D). These names MUST be 63 characters or shorter and it is RECOMMENDED they be as short as possible.
To reduce packet overhead the generated JSON SHOULD be as short as possible: short domain names, concise text in the values for the "j" and "o" names, and minified JSON (that is, without spaces or line breaks between JSON elements).
The JSON data can be parsed to display to the user, logged, or otherwise used to assist the end-user or IT staff with troubleshooting and diagnosing the cause of the DNS filtering.
Protocol Operation
Client Generating Request
When generating a DNS query, the client includes the Extended DNS Error option Section 2 of in the OPT pseudo-RR to elicit the Extended DNS Error option in the DNS response.
Server Generating Response
When the DNS server filters its DNS response to an A or AAAA record query, the DNS response MAY contain an empty answer, NXDOMAIN, or a forged A or AAAA response, as desired by the DNS server. In addition, if the query contained the OPT pseudo-RR the DNS server MAY return more detail in the EXTRA-TEXT field as described in Section 5.3.
Servers may decide to return small TTL values in filtered DNS responses (e.g., 2 seconds) to handle domain category and reputation updates.
Client Processing Response
On receipt of a DNS response with an Extended DNS Error option, the following actions are performed if the EXTRA-TEXT field contains valid JSON:
- The response MUST be received over an encrypted DNS channel. If not, the requestor MUST discard data in the EXTRA-TEXT field.
- The response MUST be received from a DNS server which advertised EDE support via a trusted channel, e.g., RESINFO.
- Servers which don't support this specification might use plain text in the EXTRA-TEXT field so that requestors SHOULD properly handle both plaintext and JSON text in the EXTRA-TEXT field.
- The DNS response MUST also contain an extended error code of "Censored", "Blocked", "Filtered" or "Forged", otherwise the EXTRA-TEXT field is discarded.
- If either of the mandatory JSON names "c" and "j" are missing or have empty values in the EXTRA-TEXT field, the entire JSON is discarded.
- The JSON name "s" MUST NOT be present with the extended error code "Censored".
- If a DNS client has enabled opportunistic privacy profile (Section 5 of) for DoT, the DNS client will either fallback to an encrypted connection without authenticating the DNS server provided by the local network or fallback to clear text DNS, and cannot exchange encrypted DNS messages. Both of these fallback mechanisms adversely impacts security and privacy. If the DNS client has enabled opportunistic privacy profile for DoT, the DNS client MUST ignore the EXTRA-TEXT field of the EDE responses, but SHOULD process other parts of the response.
- If a DNS client has enabled strict privacy profile (Section 5 of) for DoT, the DNS client requires an encrypted connection and successful authentication of the DNS server; this mitigates both passive eavesdropping and client redirection (at the expense of providing no DNS service if an encrypted, authenticated connection is not available). If the DNS client has enabled strict privacy profile for DoT, the client MAY process the EXTRA-TEXT field of the DNS response. Note that the strict and opportunistic privacy profiles as defined in [RFC8310] only apply to DoT; there has been no such distinction made for DoH.
- If the DNS client determines that the encrypted DNS server does not offer DNS filtering service, it MUST discard the EXTRA-TEXT field of the EDE response. For example, the DNS client can learn whether the encrypted DNS resolver performs DNS-based content filtering or not by retrieving resolver information using the method defined in [I-D.reddy-add-resolver-info].
- When a forwarder receives an EDE option, whether or not (and how) to pass along JSON information in the EXTRA-TEXT on to their client is implementation dependent [RFC5625]. Implementations MAY choose to not forward the JSON information, or they MAY choose to create a new EDE option that conveys the information in the "c", "s" and "j" fields encoded in the JSON object.
Interoperation with RPZ Servers
This section discusses operation with an RPZ server that indicates filtering with a NXDOMAIN response with the Recursion Available bit cleared (RA=0).
When the DNS client supports this specification but the server does not, the server will continue replying when a query is RPZ filtered with NXDOMAIN and RA=0. An DNS client upgraded to support this specification can continue to accept responses with NXDOMAIN and RA=0 from the RPZ server that does not support this specification.
When the DNS client supports this specification and the server supports this specification, the client learns of the server's support via [I-D.reddy-add-resolver-info] and the client includes the EDE OPT pseudo-RR in the query. This allows the server to differentiate EDE-aware clients from EDE-unaware clients and respond appropriately.
Examples
An example showing the nameserver at 'ns.example.net' that filtered a DNS "A" record query for 'example.org' is shown in Figure 1.
JSON returned in EXTRA-TEXT field of Extended DNS Error response

  {
  "c": ["tel:+358-555-1234567", "sips:bob@bobphone.example.com",
        "https://ticket.example.com?d=example.org&t=1650560748"],
    "j": "malware present for 23 days",
    "s": 1,
    "o": "example.net Filtering Service"
  }
In Figure 2 the same content is shown with minified JSON (no whitespace, no blank lines) with '\' line wrapping per [RFC8792].
Minified response

  ============== NOTE: '\' line wrapping per RFC 8792 ===============

  {"c":["tel:+358-555-1234567","sips:bob@bobphone.example.com", \
  "https://ticket.example.com?d=example.org&t=1650560748"],"s":1, \
  "j":"malware present for 23 days","o":"example.net Filtering \
  Service"}
Security Considerations
Security considerations in Section 6 of [RFC8914] apply to this document.
To minimize impact of active on-path attacks on the DNS channel, the client validates the response as described in Section 5.3.
A client might choose to display the information in the EXTRA-TEXT field if and only if the encrypted resolver has sufficient reputation, according to some local policy (e.g. user configuration, administrative configuration, or a built-in list of respectable resolvers). This limits the ability of a malicious encrypted resolver to cause harm. If the client decides not to display the all of the information in the EXTRA-TEXT field, it can be logged for diagnostics purpose and the client can only display the resolver hostname that blocked the domain, error description for the EDE code and the suberror description for the "s'" field to the end-user.
When displaying the free-form text of "c" and "o", the browser SHOULD NOT make any of those elements into actionable (clickable) links.
An attacker might inject (or modify) the EDE EXTRA-TEXT field with an DNS proxy or DNS forwarder that is unaware of EDE. Such a DNS proxy or DNS forwarder will forward that attacker-controlled EDE option. To prevent such an attack, clients supporting this document MUST discard the EDE option if their DNS server does not signal EDE support via RESINFO [I-D.reddy-add-resolver-info]. As recommended in [I-D.reddy-add-resolver-info], RESINFO should be retrieved over an encrypted DNS channel or integrity protected with DNSSEC.
IANA Considerationsd
This document requests IANA to register the "application/json+structured-dns-error" media type in the "Media Types" registry [IANA-MediaTypes]. This registration follows the procedures specified in [RFC6838]:
   Type name: application

   Subtype name: json+structured-dns-error

   Required parameters: N/A

   Optional parameters: N/A

   Encoding considerations: as defined in Section NN of [RFCXXXX].

   Security considerations: See Section NNN of [RFCXXXX].

   Interoperability considerations: N/A

   Published specification: [RFCXXXX]

   Applications that use this media type: Section NNNN of [RFCXXXX].

   Fragment identifier considerations: N/A

   Additional information: N/A

   Person & email address to contact for further information: IETF,
      iesg@ietf.org

   Intended usage: COMMON

   Restrictions on usage: none

   Author: See Authors' Addresses section.

   Change controller: IESG

   Provisional registration?  No
New registry for SubError Codes
IANA is requested to create a new registry, entitled "SubError Codes" under "Domain Name System (DNS) Parameters, Extended DNS Error Codes" registry. A registration procedure for suberror codes MUST include the following fields:
- Number: wire format suberror code (range 0-255)
- Meaning: a short description
- Reference: pointer to the specification text
- Change Controller: Person or entity, with contact information if appropriate.
New entries in this registry are subject to an Expert Review registration policy [RFC8126]. The designated expert MUST ensure that the Reference is stable and publicly available, and that it specifies the suberror code and a short description. The Format Reference may be any individual's Internet-Draft, or a document from any other source with similar assurances of stability and availability.
Initial Sub-errors
The registry shall initially be populated with the following suberror codes. :
Number | Meaning | Reference | Change Controller
0 | Reserved | This document | IETF
1 | Malware | This document | IETF
2 | Phishing | This document | IETF
3 | Spam | This document | IETF
4 | Spyware | This document | IETF
5 | Adware | This document | IETF
6 | Network policy imposed by the operator of the network | This document | IETF
Changes
Changes from 03 to 04
- Clarified text content is for IT staff
- Introduced 'suberror' terminology and associated IANA registration
Changes from 02 to 03
- Require using RESINFO in client processing and added discussion of attack mitigation of using RESINFO.
- Removed validation of URI domain suffix, which we can't do for some URLs (e.g., tel:), is difficult/impossible for others when 3rd party is handling level one support (e.g., sips:). Instead rely on RESINFO telling us if EDE is supported by the DNS server and, if so, expect it to properly support EDE rather than blindly forward an unknown DNS option.
- Removed 'partial URI' text
Changes from 01 to 02
- repurpose Extended DNS Error's EXTRA-TEXT field to carry JSON, which also means this document updates RFC8914
- clarified DNS forwarders might forward EXTRA-TEXT without change or might rewrite "j" and "d"
Changes from 00 to 01
- removed support for multiple responsible parties
- one-character JSON names to minimize JSON length
- partial URI sent in "c" and "r" names, combined with "d" name sent in JSON to minimize attack surface and minimize JSON length
- moved EDNS(0) forgery-mitigation text, some Security Considerations text, and some other text from [I-D.reddy-dnsop-error-page] to this document
References
Normative References
Informative References
[IANA-MediaTypes]

Media Types
IANA
[RPZ]

Response policy zone
Wikipedia
[RFC2119]
[RFC8174]
[RFC8484]
[RFC7858]
[RFC9250]
[RFC8914]
[RFC7493]
[RFC7159]
[RFC8259]
[RFC8310]
[I-D.reddy-add-resolver-info]
[RFC5625]
[RFC8792]
[RFC6838]
[RFC8126]
[I-D.reddy-dnsop-error-page]