| < draft-ietf-dots-signal-channel-31.txt | draft-ietf-dots-signal-channel-32.txt > | |||
|---|---|---|---|---|
| DOTS T. Reddy, Ed. | DOTS T. Reddy, Ed. | |||
| Internet-Draft McAfee | Internet-Draft McAfee | |||
| Intended status: Standards Track M. Boucadair, Ed. | Intended status: Standards Track M. Boucadair, Ed. | |||
| Expires: September 29, 2019 Orange | Expires: November 10, 2019 Orange | |||
| P. Patil | P. Patil | |||
| Cisco | Cisco | |||
| A. Mortensen | A. Mortensen | |||
| Arbor Networks, Inc. | Arbor Networks, Inc. | |||
| N. Teague | N. Teague | |||
| Verisign, Inc. | Verisign, Inc. | |||
| March 28, 2019 | May 9, 2019 | |||
| Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal | Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal | |||
| Channel Specification | Channel Specification | |||
| draft-ietf-dots-signal-channel-31 | draft-ietf-dots-signal-channel-32 | |||
| Abstract | Abstract | |||
| This document specifies the DOTS signal channel, a protocol for | This document specifies the DOTS signal channel, a protocol for | |||
| signaling the need for protection against Distributed Denial-of- | signaling the need for protection against Distributed Denial-of- | |||
| Service (DDoS) attacks to a server capable of enabling network | Service (DDoS) attacks to a server capable of enabling network | |||
| traffic mitigation on behalf of the requesting client. | traffic mitigation on behalf of the requesting client. | |||
| A companion document defines the DOTS data channel, a separate | A companion document defines the DOTS data channel, a separate | |||
| reliable communication layer for DOTS management and configuration | reliable communication layer for DOTS management and configuration | |||
| skipping to change at page 2, line 25 ¶ | skipping to change at page 2, line 25 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on September 29, 2019. | This Internet-Draft will expire on November 10, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| skipping to change at page 2, line 51 ¶ | skipping to change at page 2, line 51 ¶ | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 4. DOTS Signal Channel: Messages & Behaviors . . . . . . . . . . 9 | 4. DOTS Signal Channel: Messages & Behaviors . . . . . . . . . . 9 | |||
| 4.1. DOTS Server(s) Discovery . . . . . . . . . . . . . . . . 9 | 4.1. DOTS Server(s) Discovery . . . . . . . . . . . . . . . . 9 | |||
| 4.2. CoAP URIs . . . . . . . . . . . . . . . . . . . . . . . . 9 | 4.2. CoAP URIs . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 4.3. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . 10 | 4.3. Happy Eyeballs for DOTS Signal Channel . . . . . . . . . 10 | |||
| 4.4. DOTS Mitigation Methods . . . . . . . . . . . . . . . . . 11 | 4.4. DOTS Mitigation Methods . . . . . . . . . . . . . . . . . 12 | |||
| 4.4.1. Request Mitigation . . . . . . . . . . . . . . . . . 12 | 4.4.1. Request Mitigation . . . . . . . . . . . . . . . . . 13 | |||
| 4.4.2. Retrieve Information Related to a Mitigation . . . . 27 | 4.4.2. Retrieve Information Related to a Mitigation . . . . 29 | |||
| 4.4.2.1. DOTS Servers Sending Mitigation Status . . . . . 32 | 4.4.2.1. DOTS Servers Sending Mitigation Status . . . . . 34 | |||
| 4.4.2.2. DOTS Clients Polling for Mitigation Status . . . 35 | 4.4.2.2. DOTS Clients Polling for Mitigation Status . . . 37 | |||
| 4.4.3. Efficacy Update from DOTS Clients . . . . . . . . . . 36 | 4.4.3. Efficacy Update from DOTS Clients . . . . . . . . . . 38 | |||
| 4.4.4. Withdraw a Mitigation . . . . . . . . . . . . . . . . 38 | 4.4.4. Withdraw a Mitigation . . . . . . . . . . . . . . . . 40 | |||
| 4.5. DOTS Signal Channel Session Configuration . . . . . . . . 39 | 4.5. DOTS Signal Channel Session Configuration . . . . . . . . 41 | |||
| 4.5.1. Discover Configuration Parameters . . . . . . . . . . 41 | 4.5.1. Discover Configuration Parameters . . . . . . . . . . 43 | |||
| 4.5.2. Convey DOTS Signal Channel Session Configuration . . 45 | 4.5.2. Convey DOTS Signal Channel Session Configuration . . 47 | |||
| 4.5.3. Configuration Freshness and Notifications . . . . . . 50 | 4.5.3. Configuration Freshness and Notifications . . . . . . 52 | |||
| 4.5.4. Delete DOTS Signal Channel Session Configuration . . 51 | 4.5.4. Delete DOTS Signal Channel Session Configuration . . 53 | |||
| 4.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 52 | 4.6. Redirected Signaling . . . . . . . . . . . . . . . . . . 54 | |||
| 4.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 54 | 4.7. Heartbeat Mechanism . . . . . . . . . . . . . . . . . . . 56 | |||
| 5. DOTS Signal Channel YANG Modules . . . . . . . . . . . . . . 55 | 5. DOTS Signal Channel YANG Modules . . . . . . . . . . . . . . 57 | |||
| 5.1. Tree Structure . . . . . . . . . . . . . . . . . . . . . 55 | 5.1. Tree Structure . . . . . . . . . . . . . . . . . . . . . 57 | |||
| 5.2. IANA DOTS Signal Channel YANG Module . . . . . . . . . . 57 | 5.2. IANA DOTS Signal Channel YANG Module . . . . . . . . . . 59 | |||
| 5.3. IETF DOTS Signal Channel YANG Module . . . . . . . . . . 61 | 5.3. IETF DOTS Signal Channel YANG Module . . . . . . . . . . 63 | |||
| 6. YANG/JSON Mapping Parameters to CBOR . . . . . . . . . . . . 71 | 6. YANG/JSON Mapping Parameters to CBOR . . . . . . . . . . . . 74 | |||
| 7. (D)TLS Protocol Profile and Performance Considerations . . . 74 | 7. (D)TLS Protocol Profile and Performance Considerations . . . 76 | |||
| 7.1. (D)TLS Protocol Profile . . . . . . . . . . . . . . . . . 74 | 7.1. (D)TLS Protocol Profile . . . . . . . . . . . . . . . . . 76 | |||
| 7.2. (D)TLS 1.3 Considerations . . . . . . . . . . . . . . . . 75 | 7.2. (D)TLS 1.3 Considerations . . . . . . . . . . . . . . . . 77 | |||
| 7.3. DTLS MTU and Fragmentation . . . . . . . . . . . . . . . 77 | 7.3. DTLS MTU and Fragmentation . . . . . . . . . . . . . . . 79 | |||
| 8. Mutual Authentication of DOTS Agents & Authorization of DOTS | 8. Mutual Authentication of DOTS Agents & Authorization of DOTS | |||
| Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 | Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 | |||
| 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 79 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 82 | |||
| 9.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . . 79 | 9.1. DOTS Signal Channel UDP and TCP Port Number . . . . . . . 82 | |||
| 9.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . . 79 | 9.2. Well-Known 'dots' URI . . . . . . . . . . . . . . . . . . 82 | |||
| 9.3. Media Type Registration . . . . . . . . . . . . . . . . . 80 | 9.3. Media Type Registration . . . . . . . . . . . . . . . . . 82 | |||
| 9.4. CoAP Content-Formats Registration . . . . . . . . . . . . 80 | 9.4. CoAP Content-Formats Registration . . . . . . . . . . . . 83 | |||
| 9.5. CBOR Tag Registration . . . . . . . . . . . . . . . . . . 80 | 9.5. CBOR Tag Registration . . . . . . . . . . . . . . . . . . 83 | |||
| 9.6. DOTS Signal Channel Protocol Registry . . . . . . . . . . 81 | 9.6. DOTS Signal Channel Protocol Registry . . . . . . . . . . 84 | |||
| 9.6.1. DOTS Signal Channel CBOR Key Values Sub-Registry . . 81 | 9.6.1. DOTS Signal Channel CBOR Key Values Sub-Registry . . 84 | |||
| 9.6.1.1. Registration Template . . . . . . . . . . . . . . 81 | 9.6.1.1. Registration Template . . . . . . . . . . . . . . 84 | |||
| 9.6.1.2. Initial Sub-Registry Content . . . . . . . . . . 83 | 9.6.1.2. Initial Sub-Registry Content . . . . . . . . . . 85 | |||
| 9.6.2. Status Codes Sub-Registry . . . . . . . . . . . . . . 84 | 9.6.2. Status Codes Sub-Registry . . . . . . . . . . . . . . 87 | |||
| 9.6.3. Conflict Status Codes Sub-Registry . . . . . . . . . 86 | 9.6.3. Conflict Status Codes Sub-Registry . . . . . . . . . 88 | |||
| 9.6.4. Conflict Cause Codes Sub-Registry . . . . . . . . . . 88 | 9.6.4. Conflict Cause Codes Sub-Registry . . . . . . . . . . 90 | |||
| 9.6.5. Attack Status Codes Sub-Registry . . . . . . . . . . 88 | 9.6.5. Attack Status Codes Sub-Registry . . . . . . . . . . 90 | |||
| 9.7. DOTS Signal Channel YANG Modules . . . . . . . . . . . . 89 | 9.7. DOTS Signal Channel YANG Modules . . . . . . . . . . . . 91 | |||
| 10. Security Considerations . . . . . . . . . . . . . . . . . . . 90 | 10. Security Considerations . . . . . . . . . . . . . . . . . . . 92 | |||
| 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 92 | 11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 94 | |||
| 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 92 | 12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 95 | |||
| 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 93 | 13. References . . . . . . . . . . . . . . . . . . . . . . . . . 95 | |||
| 13.1. Normative References . . . . . . . . . . . . . . . . . . 93 | 13.1. Normative References . . . . . . . . . . . . . . . . . . 95 | |||
| 13.2. Informative References . . . . . . . . . . . . . . . . . 95 | 13.2. Informative References . . . . . . . . . . . . . . . . . 98 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 100 | Appendix A. CUID Generation . . . . . . . . . . . . . . . . . . 103 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 103 | ||||
| 1. Introduction | 1. Introduction | |||
| A distributed denial-of-service (DDoS) attack is a distributed | A distributed denial-of-service (DDoS) attack is a distributed | |||
| attempt to make machines or network resources unavailable to their | attempt to make machines or network resources unavailable to their | |||
| intended users. In most cases, sufficient scale for an effective | intended users. In most cases, sufficient scale for an effective | |||
| attack can be achieved by compromising enough end-hosts and using | attack can be achieved by compromising enough end-hosts and using | |||
| those infected hosts to perpetrate and amplify the attack. The | those infected hosts to perpetrate and amplify the attack. The | |||
| victim in this attack can be an application server, a host, a router, | victim in this attack can be an application server, a host, a router, | |||
| a firewall, or an entire network. | a firewall, or an entire network. | |||
| skipping to change at page 7, line 5 ¶ | skipping to change at page 7, line 5 ¶ | |||
| | TLS | DTLS | | | TLS | DTLS | | |||
| +----------+----------+ | +----------+----------+ | |||
| | TCP | UDP | | | TCP | UDP | | |||
| +----------+----------+ | +----------+----------+ | |||
| | IP | | | IP | | |||
| +---------------------+ | +---------------------+ | |||
| Figure 3: Abstract Layering of DOTS Signal Channel over CoAP over | Figure 3: Abstract Layering of DOTS Signal Channel over CoAP over | |||
| (D)TLS | (D)TLS | |||
| By default, a DOTS signal channel MUST run over port number TBD as | In some cases, a DOTS client and server may have mutual agreement to | |||
| defined in Section 9.1, for both UDP and TCP, unless the DOTS server | use a specific port number, such as by explicit configuration or | |||
| has a mutual agreement with its DOTS clients to use a different port | dynamic discovery [I-D.ietf-dots-server-discovery]. Absent such | |||
| number. DOTS clients MAY alternatively support means to dynamically | mutual agreement, the DOTS signal channel MUST run over port number | |||
| discover the ports used by their DOTS servers (e.g., | TBD as defined in Section 9.1, for both UDP and TCP. In order to use | |||
| [I-D.boucadair-dots-server-discovery]). In order to use a distinct | a distinct port number (as opposed to TBD), DOTS clients and servers | |||
| port number (as opposed to TBD), DOTS clients and servers SHOULD | SHOULD support a configurable parameter to supply the port number to | |||
| support a configurable parameter to supply the port number to use. | use. The rationale for not using the default port number 5684 | |||
| The rationale for not using the default port number 5684 ((D)TLS | ((D)TLS CoAP) is to allow for differentiated behaviors in | |||
| CoAP) is to allow for differentiated behaviors in environments where | environments where both a DOTS gateway and an IoT gateway (e.g., | |||
| both a DOTS gateway and an IoT gateway (e.g., Figure 3 of [RFC7452]) | Figure 3 of [RFC7452]) are present. | |||
| are present. | ||||
| The signal channel uses the "coaps" URI scheme defined in Section 6 | The signal channel uses the "coaps" URI scheme defined in Section 6 | |||
| of [RFC7252] and the "coaps+tcp" URI scheme defined in Section 8.2 of | of [RFC7252] and the "coaps+tcp" URI scheme defined in Section 8.2 of | |||
| [RFC8323] to identify DOTS server resources accessible using CoAP | [RFC8323] to identify DOTS server resources accessible using CoAP | |||
| over UDP secured with DTLS and CoAP over TCP secured with TLS, | over UDP secured with DTLS and CoAP over TCP secured with TLS, | |||
| respectively. | respectively. | |||
| The signal channel is initiated by the DOTS client (Section 4.4). | The DOTS signal channel can be established between two DOTS agents | |||
| Once the signal channel is established, the DOTS agents periodically | prior or during an attack. The DOTS signal channel is initiated by | |||
| send heartbeats to keep the channel active (Section 4.7). At any | the DOTS client. The DOTS client can then negotiate, configure, and | |||
| time, the DOTS client may send a mitigation request message to a DOTS | retrieve the DOTS signal channel session behavior with its DOTS peer | |||
| server over the active channel. While mitigation is active (because | (Section 4.5). Once the signal channel is established, the DOTS | |||
| of the higher likelihood of packet loss during a DDoS attack), the | agents periodically send heartbeats to keep the channel active | |||
| DOTS server periodically sends status messages to the client, | (Section 4.7). At any time, the DOTS client may send a mitigation | |||
| including basic mitigation feedback details. Mitigation remains | request message (Section 4.4) to a DOTS server over the active signal | |||
| active until the DOTS client explicitly terminates mitigation, or the | channel. While mitigation is active (because of the higher | |||
| mitigation lifetime expires. | likelihood of packet loss during a DDoS attack), the DOTS server | |||
| periodically sends status messages to the client, including basic | ||||
| mitigation feedback details. Mitigation remains active until the | ||||
| DOTS client explicitly terminates mitigation, or the mitigation | ||||
| lifetime expires. Also, the DOTS server may rely on the signal | ||||
| channel session loss to trigger mitigation for pre-configured | ||||
| mitigation requests (if any). | ||||
| DOTS signaling can happen with DTLS over UDP and TLS over TCP. | DOTS signaling can happen with DTLS over UDP and TLS over TCP. | |||
| Likewise, DOTS requests may be sent using IPv4 or IPv6 transfer | Likewise, DOTS requests may be sent using IPv4 or IPv6 transfer | |||
| capabilities. A Happy Eyeballs procedure for DOTS signal channel is | capabilities. A Happy Eyeballs procedure for DOTS signal channel is | |||
| specified in Section 4.3. | specified in Section 4.3. | |||
| A DOTS client is entitled to access only to resources it creates. In | A DOTS client is entitled to access only to resources it creates. In | |||
| particular, a DOTS client can not retrieve data related to mitigation | particular, a DOTS client can not retrieve data related to mitigation | |||
| requests created by other DOTS clients of the same DOTS client | requests created by other DOTS clients of the same DOTS client | |||
| domain. | domain. | |||
| skipping to change at page 8, line 7 ¶ | skipping to change at page 8, line 11 ¶ | |||
| Messages exchanged between DOTS agents are serialized using Concise | Messages exchanged between DOTS agents are serialized using Concise | |||
| Binary Object Representation (CBOR) [RFC7049], a binary encoding | Binary Object Representation (CBOR) [RFC7049], a binary encoding | |||
| scheme designed for small code and message size. CBOR-encoded | scheme designed for small code and message size. CBOR-encoded | |||
| payloads are used to carry signal channel-specific payload messages | payloads are used to carry signal channel-specific payload messages | |||
| which convey request parameters and response information such as | which convey request parameters and response information such as | |||
| errors. In order to allow reusing data models across protocols, | errors. In order to allow reusing data models across protocols, | |||
| [RFC7951] specifies the JavaScript Object Notation (JSON) encoding of | [RFC7951] specifies the JavaScript Object Notation (JSON) encoding of | |||
| YANG-modeled data. A similar effort for CBOR is defined in | YANG-modeled data. A similar effort for CBOR is defined in | |||
| [I-D.ietf-core-yang-cbor]. | [I-D.ietf-core-yang-cbor]. | |||
| DOTS agents primarily determine that a CBOR data structure is a DOTS | DOTS agents determine that a CBOR data structure is a DOTS signal | |||
| signal channel object from the application context, such as from the | channel object from the application context, such as from the port | |||
| port number assigned to the DOTS signal channel. The other method | number assigned to the DOTS signal channel. The other method DOTS | |||
| DOTS agents use to indicate that a CBOR data structure is a DOTS | agents use to indicate that a CBOR data structure is a DOTS signal | |||
| signal channel object is the use of the "application/dots+cbor" | channel object is the use of the "application/dots+cbor" content type | |||
| content type (Section 9.3). | (Section 9.3). | |||
| This document specifies a YANG module for representing DOTS | This document specifies a YANG module for representing DOTS | |||
| mitigation scopes, DOTS signal channel session configuration data, | mitigation scopes, DOTS signal channel session configuration data, | |||
| and DOTS redirected signalling (Section 5). Representing these data | and DOTS redirected signaling (Section 5). All parameters in the | |||
| as CBOR data can either follow the rules in [I-D.ietf-core-yang-cbor] | payload of the DOTS signal channel are mapped to CBOR types as | |||
| or those in [RFC7951] combined with JSON/CBOR conversion rules in | specified in Table 4 (Section 6). | |||
| [RFC7049]; both approaches produce a valid encoding. All parameters | ||||
| in the payload of the DOTS signal channel are mapped to CBOR types as | ||||
| specified in Section 6. | ||||
| In order to prevent fragmentation, DOTS agents must follow the | In order to prevent fragmentation, DOTS agents must follow the | |||
| recommendations documented in Section 4.6 of [RFC7252]. Refer to | recommendations documented in Section 4.6 of [RFC7252]. Refer to | |||
| Section 7.3 for more details. | Section 7.3 for more details. | |||
| DOTS agents MUST support GET, PUT, and DELETE CoAP methods. The | DOTS agents MUST support GET, PUT, and DELETE CoAP methods. The | |||
| payload included in CoAP responses with 2.xx Response Codes MUST be | payload included in CoAP responses with 2.xx Response Codes MUST be | |||
| of content type "application/dots+cbor". CoAP responses with 4.xx | of content type "application/dots+cbor". CoAP responses with 4.xx | |||
| and 5.xx error Response Codes MUST include a diagnostic payload | and 5.xx error Response Codes MUST include a diagnostic payload | |||
| (Section 5.5.2 of [RFC7252]). The Diagnostic Payload may contain | (Section 5.5.2 of [RFC7252]). The Diagnostic Payload may contain | |||
| skipping to change at page 9, line 25 ¶ | skipping to change at page 9, line 26 ¶ | |||
| gateway will need to update the DOTS messages, based upon the | gateway will need to update the DOTS messages, based upon the | |||
| local translator's binding table. | local translator's binding table. | |||
| 4. DOTS Signal Channel: Messages & Behaviors | 4. DOTS Signal Channel: Messages & Behaviors | |||
| 4.1. DOTS Server(s) Discovery | 4.1. DOTS Server(s) Discovery | |||
| This document assumes that DOTS clients are provisioned with the | This document assumes that DOTS clients are provisioned with the | |||
| reachability information of their DOTS server(s) using any of a | reachability information of their DOTS server(s) using any of a | |||
| variety of means (e.g., local configuration, or dynamic means such as | variety of means (e.g., local configuration, or dynamic means such as | |||
| DHCP). The description of such means is out of scope of this | DHCP [I-D.ietf-dots-server-discovery]). The description of such | |||
| document. | means is out of scope of this document. | |||
| Likewise, it is out of scope of this document to specify the behavior | Likewise, it is out of scope of this document to specify the behavior | |||
| to be followed by a DOTS client to send DOTS requests when multiple | to be followed by a DOTS client to send DOTS requests when multiple | |||
| DOTS servers are provisioned (e.g., contact all DOTS servers, select | DOTS servers are provisioned (e.g., contact all DOTS servers, select | |||
| one DOTS server among the list). | one DOTS server among the list). Such behavior is specified in other | |||
| documents (e.g. [I-D.ietf-dots-multihoming]). | ||||
| 4.2. CoAP URIs | 4.2. CoAP URIs | |||
| The DOTS server MUST support the use of the path-prefix of "/.well- | The DOTS server MUST support the use of the path-prefix of "/.well- | |||
| known/" as defined in [RFC5785] and the registered name of "dots". | known/" as defined in [RFC5785] and the registered name of "dots". | |||
| Each DOTS operation is indicated by a path-suffix that indicates the | Each DOTS operation is indicated by a path-suffix that indicates the | |||
| intended operation. The operation path (Table 1) is appended to the | intended operation. The operation path (Table 1) is appended to the | |||
| path-prefix to form the URI used with a CoAP request to perform the | path-prefix to form the URI used with a CoAP request to perform the | |||
| desired DOTS operation. | desired DOTS operation. | |||
| skipping to change at page 10, line 29 ¶ | skipping to change at page 10, line 39 ¶ | |||
| dual-stack DOTS client may experience a significant connection delay | dual-stack DOTS client may experience a significant connection delay | |||
| compared to an IPv4-only DOTS client, in the same network conditions. | compared to an IPv4-only DOTS client, in the same network conditions. | |||
| The other problem is that if a middlebox between the DOTS client and | The other problem is that if a middlebox between the DOTS client and | |||
| DOTS server is configured to block UDP traffic, the DOTS client will | DOTS server is configured to block UDP traffic, the DOTS client will | |||
| fail to establish a DTLS association with the DOTS server and, as a | fail to establish a DTLS association with the DOTS server and, as a | |||
| consequence, will have to fall back to TLS over TCP, thereby | consequence, will have to fall back to TLS over TCP, thereby | |||
| incurring significant connection delays. | incurring significant connection delays. | |||
| To overcome these connection setup problems, the DOTS client attempts | To overcome these connection setup problems, the DOTS client attempts | |||
| to connect to its DOTS server(s) using both IPv6 and IPv4, and tries | to connect to its DOTS server(s) using both IPv6 and IPv4, and tries | |||
| both DTLS over UDP and TLS over TCP in a manner similar to the Happy | both DTLS over UDP and TLS over TCP following a DOTS Happy Eyeballs | |||
| Eyeballs mechanism [RFC8305]. These connection attempts are | approach. To some extent, this approach is similar to the Happy | |||
| Eyeballs mechanism defined in [RFC8305]. The connection attempts are | ||||
| performed by the DOTS client when it initializes, or in general when | performed by the DOTS client when it initializes, or in general when | |||
| it has to select an address family and transport to contact its DOTS | it has to select an address family and transport to contact its DOTS | |||
| server. The results of the Happy Eyeballs procedure are used by the | server. The results of the Happy Eyeballs procedure are used by the | |||
| DOTS client for sending its subsequent messages to the DOTS server. | DOTS client for sending its subsequent messages to the DOTS server. | |||
| Note that the DOTS client after successfully establishing a | The difference in behavior with respect to the Happy Eyeballs | |||
| connection MUST cache information regarding the outcome of each | mechanism [RFC8305] are listed below: | |||
| connection attempt for a specific time period, and it uses that | ||||
| information to avoid thrashing the network with subsequent attempts. | ||||
| The order of preference of the DOTS signal channel address family and | o The order of preference of the DOTS signal channel address family | |||
| transport protocol (most preferred first) is: UDP over IPv6, UDP over | and transport protocol (most preferred first) is: UDP over IPv6, | |||
| IPv4, TCP over IPv6, and finally TCP over IPv4. This order adheres | UDP over IPv4, TCP over IPv6, and finally TCP over IPv4. This | |||
| to the address preference order specified in [RFC6724] and the DOTS | order adheres to the address preference order specified in | |||
| signal channel preference which privileges the use of UDP over TCP | ||||
| (to avoid TCP's head of line blocking). | ||||
| In reference to Figure 4, the DOTS client sends two TCP SYNs and two | [RFC6724] and the DOTS signal channel preference which privileges | |||
| DTLS ClientHello messages at the same time over IPv6 and IPv4. In | the use of UDP over TCP (to avoid TCP's head of line blocking). | |||
| this example, it is assumed that the IPv6 path is broken and UDP | ||||
| traffic is dropped by a middlebox but has little impact to the DOTS | ||||
| client because there is no long delay before using IPv4 and TCP. The | ||||
| DOTS client periodically repeats the mechanism to discover whether | ||||
| DOTS signal channel messages with DTLS over UDP becomes available | ||||
| from the DOTS server, so the DOTS client can migrate the DOTS signal | ||||
| channel from TCP to UDP. Such probing SHOULD NOT be done more | ||||
| frequently than every 24 hours and MUST NOT be done more frequently | ||||
| than every 5 minutes. | ||||
| A single DOTS signal channel between DOTS agents can be used to | o The DOTS client after successfully establishing a connection MUST | |||
| exchange multiple DOTS signal messages. To reduce DOTS client and | cache information regarding the outcome of each connection attempt | |||
| DOTS server workload, DOTS clients SHOULD re-use the (D)TLS session. | for a specific time period, and it uses that information to avoid | |||
| thrashing the network with subsequent attempts. The cached | ||||
| information is flushed when its age exceeds a specific time period | ||||
| on the order of few minutes (e.g., 10 mn). Typically, if the DOTS | ||||
| client has to re-establish the connection with the same DOTS | ||||
| server within few seconds after the Happy Eyeballs mechanism is | ||||
| completed, caching avoids trashing the network especially in the | ||||
| presence of DDoS attack traffic. | ||||
| o If DOTS signal channel session is established with TLS (but DTLS | ||||
| failed), the DOTS client periodically repeats the mechanism to | ||||
| discover whether DOTS signal channel messages with DTLS over UDP | ||||
| becomes available from the DOTS server, so the DOTS client can | ||||
| migrate the DOTS signal channel from TCP to UDP. Such probing | ||||
| SHOULD NOT be done more frequently than every 24 hours and MUST | ||||
| NOT be done more frequently than every 5 minutes. | ||||
| When connection attempts are made during an attack, the DOTS client | ||||
| SHOULD use a "Connection Attempt Delay" [RFC8305] set to 100 ms. | ||||
| In reference to Figure 4, the DOTS client proceeds with the | ||||
| connection attempts following the rules in [RFC8305]. In this | ||||
| example, it is assumed that the IPv6 path is broken and UDP traffic | ||||
| is dropped by a middlebox but has little impact to the DOTS client | ||||
| because there is no long delay before using IPv4 and TCP. | ||||
| +-----------+ +-----------+ | +-----------+ +-----------+ | |||
| |DOTS client| |DOTS server| | |DOTS client| |DOTS server| | |||
| +-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | | | | | | |||
| |--DTLS ClientHello, IPv6 ---->X | | T0 |--DTLS ClientHello, IPv6 ---->X | | |||
| |--TCP SYN, IPv6-------------->X | | T1 |--DTLS ClientHello, IPv4 ---->X | | |||
| |--DTLS ClientHello, IPv4 ---->X | | T2 |--TCP SYN, IPv6-------------->X | | |||
| |--TCP SYN, IPv4--------------------------------------->| | T3 |--TCP SYN, IPv4--------------------------------------->| | |||
| |--DTLS ClientHello, IPv6 ---->X | | ||||
| |--TCP SYN, IPv6-------------->X | | ||||
| |<-TCP SYNACK-------------------------------------------| | |<-TCP SYNACK-------------------------------------------| | |||
| |--DTLS ClientHello, IPv4 ---->X | | ||||
| |--TCP ACK--------------------------------------------->| | |--TCP ACK--------------------------------------------->| | |||
| |<------------Establish TLS Session-------------------->| | |<------------Establish TLS Session-------------------->| | |||
| |----------------DOTS signal--------------------------->| | |----------------DOTS signal--------------------------->| | |||
| | | | | | | |||
| Note: | ||||
| * Retransmission messages are not shown. | ||||
| * T1-T0=T2-T1=T3-T2= Connection Attempt Delay. | ||||
| Figure 4: DOTS Happy Eyeballs (Sample Flow) | Figure 4: DOTS Happy Eyeballs (Sample Flow) | |||
| A single DOTS signal channel between DOTS agents can be used to | ||||
| exchange multiple DOTS signal messages. To reduce DOTS client and | ||||
| DOTS server workload, DOTS clients SHOULD re-use the (D)TLS session. | ||||
| 4.4. DOTS Mitigation Methods | 4.4. DOTS Mitigation Methods | |||
| The following methods are used by a DOTS client to request, withdraw, | The following methods are used by a DOTS client to request, withdraw, | |||
| or retrieve the status of mitigation requests: | or retrieve the status of mitigation requests: | |||
| PUT: DOTS clients use the PUT method to request mitigation from a | PUT: DOTS clients use the PUT method to request mitigation from a | |||
| DOTS server (Section 4.4.1). During active mitigation, DOTS | DOTS server (Section 4.4.1). During active mitigation, DOTS | |||
| clients may use PUT requests to carry mitigation efficacy | clients may use PUT requests to carry mitigation efficacy | |||
| updates to the DOTS server (Section 4.4.3). | updates to the DOTS server (Section 4.4.3). | |||
| GET: DOTS clients may use the GET method to subscribe to DOTS | GET: DOTS clients may use the GET method to subscribe to DOTS | |||
| server status messages, or to retrieve the list of its | server status messages, or to retrieve the list of its | |||
| mitigations maintained by a DOTS server (Section 4.4.2). | mitigations maintained by a DOTS server (Section 4.4.2). | |||
| DELETE: DOTS clients use the DELETE method to withdraw a request for | DELETE: DOTS clients use the DELETE method to withdraw a request for | |||
| mitigation from a DOTS server (Section 4.4.4). | mitigation from a DOTS server (Section 4.4.4). | |||
| Mitigation request and response messages are marked as Non- | Mitigation request and response messages are marked as Non- | |||
| confirmable messages (Section 2.2 of [RFC7252]). | confirmable messages (Section 2.2 of [RFC7252]). | |||
| DOTS agents SHOULD follow the data transmission guidelines discussed | DOTS agents MUST follow the data transmission guidelines discussed in | |||
| in Section 3.1.3 of [RFC8085] and control transmission behavior by | Section 3.1.3 of [RFC8085] and control transmission behavior by not | |||
| not sending more than one UDP datagram per round-trip time (RTT) to | sending more than one UDP datagram per round-trip time (RTT) to the | |||
| the peer DOTS agent on average. | peer DOTS agent on average. | |||
| Requests marked by the DOTS client as Non-confirmable messages are | Requests marked by the DOTS client as Non-confirmable messages are | |||
| sent at regular intervals until a response is received from the DOTS | sent at regular intervals until a response is received from the DOTS | |||
| server. If the DOTS client cannot maintain an RTT estimate, it | server. If the DOTS client cannot maintain an RTT estimate, it MUST | |||
| SHOULD NOT send more than one Non-confirmable request every 3 | NOT send more than one Non-confirmable request every 3 seconds, and | |||
| seconds, and SHOULD use an even less aggressive rate whenever | SHOULD use an even less aggressive rate whenever possible (case 2 in | |||
| possible (case 2 in Section 3.1.3 of [RFC8085]). | Section 3.1.3 of [RFC8085]). | |||
| JSON diagnostic notation is used to illustrate the various methods | JSON encoding is used to illustrate the various methods defined in | |||
| defined in the following sub-sections. Also, the examples use the | the following sub-sections. Also, the examples use the Labels | |||
| Labels defined in Sections 9.6.2, 9.6.3, 9.6.4, and 9.6.5. | defined in Sections 9.6.2, 9.6.3, 9.6.4, and 9.6.5. | |||
| 4.4.1. Request Mitigation | 4.4.1. Request Mitigation | |||
| When a DOTS client requires mitigation for some reason, the DOTS | When a DOTS client requires mitigation for some reason, the DOTS | |||
| client uses the CoAP PUT method to send a mitigation request to its | client uses the CoAP PUT method to send a mitigation request to its | |||
| DOTS server(s) (Figures 5 and 6). | DOTS server(s) (Figures 5 and 6). | |||
| If a DOTS client is entitled to solicit the DOTS service, the DOTS | If a DOTS client is entitled to solicit the DOTS service, the DOTS | |||
| server enables mitigation on behalf of the DOTS client by | server enables mitigation on behalf of the DOTS client by | |||
| communicating the DOTS client's request to a mitigator (which may be | communicating the DOTS client's request to a mitigator (which may be | |||
| colocated with the DOTS server) and relaying the feedback of the | co-located with the DOTS server) and relaying the feedback of the | |||
| thus-selected mitigator to the requesting DOTS client. | thus-selected mitigator to the requesting DOTS client. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
| Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
| Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| { | { | |||
| ... | ... | |||
| } | } | |||
| Figure 5: PUT to Convey DOTS Mitigation Requests | Figure 5: PUT to Convey DOTS Mitigation Requests | |||
| The order of the Uri-Path options is important as it defines the CoAP | The order of the Uri-Path options is important as it defines the CoAP | |||
| resource. In particular, 'mid' MUST follow 'cuid'. | resource. In particular, 'mid' MUST follow 'cuid'. | |||
| The additional Uri-Path parameters to those defined in Section 4.2 | The additional Uri-Path parameters to those defined in Section 4.2 | |||
| are as follows: | are as follows: | |||
| cuid: Stands for Client Unique Identifier. A globally unique | cuid: Stands for Client Unique Identifier. A globally unique | |||
| identifier that is meant to prevent collisions among DOTS clients, | identifier that is meant to prevent collisions among DOTS clients, | |||
| especially those from the same domain. It MUST be generated by | especially those from the same domain. It MUST be generated by | |||
| DOTS clients. | DOTS clients. | |||
| Implementations SHOULD set 'cuid' to the output of a cryptographic | For the reasons discussed in Appendix A, implementations SHOULD | |||
| hash algorithm whose input is the Distinguished Encoding Rules | set 'cuid' to the output of a cryptographic hash algorithm whose | |||
| (DER)-encoded Abstract Syntax Notation One (ASN.1) representation | input is the Distinguished Encoding Rules (DER)-encoded Abstract | |||
| of the Subject Public Key Info (SPKI) of the DOTS client X.509 | Syntax Notation One (ASN.1) representation of the Subject Public | |||
| certificate [RFC5280], the DOTS client raw public key [RFC7250], | Key Info (SPKI) of the DOTS client X.509 certificate [RFC5280], | |||
| or the "Pre-Shared Key (PSK) identity" used by the DOTS client in | the DOTS client raw public key [RFC7250], or the "Pre-Shared Key | |||
| the TLS ClientKeyExchange message. In this version of the | (PSK) identity" used by the DOTS client in the TLS | |||
| specification, the cryptographic hash algorithm used is SHA-256 | ClientKeyExchange message. In this version of the specification, | |||
| [RFC6234]. The output of the cryptographic hash algorithm is | the cryptographic hash algorithm used is SHA-256 [RFC6234]. The | |||
| truncated to 16 bytes; truncation is done by stripping off the | output of the cryptographic hash algorithm is truncated to 16 | |||
| final 16 bytes. The truncated output is base64url encoded. | bytes; truncation is done by stripping off the final 16 bytes. | |||
| The truncated output is base64url encoded (Section 5 of [RFC4648]) | ||||
| with the trailing "=" removed from the encoding. | ||||
| The 'cuid' is intended to be stable when communicating with a | The 'cuid' is intended to be stable when communicating with a | |||
| given DOTS server, i.e., the 'cuid' used by a DOTS client SHOULD | given DOTS server, i.e., the 'cuid' used by a DOTS client SHOULD | |||
| NOT change over time. Distinct 'cuid' values MAY be used by a | NOT change over time. Distinct 'cuid' values MAY be used by a | |||
| single DOTS client per DOTS server. | single DOTS client per DOTS server. | |||
| If a DOTS client has to change its 'cuid' for some reason, it MUST | If a DOTS client has to change its 'cuid' for some reason, it MUST | |||
| NOT do so when mitigations are still active for the old 'cuid'. | NOT do so when mitigations are still active for the old 'cuid'. | |||
| The 'cuid' SHOULD be 22 characters to avoid DOTS signal message | The 'cuid' SHOULD be 22 characters to avoid DOTS signal message | |||
| fragmentation over UDP. Furthermore, if that DOTS client created | fragmentation over UDP. Furthermore, if that DOTS client created | |||
| skipping to change at page 14, line 22 ¶ | skipping to change at page 15, line 19 ¶ | |||
| 3221225471) and no attack is detected, the DOTS client MUST reset | 3221225471) and no attack is detected, the DOTS client MUST reset | |||
| 'mid' to 0 to handle 'mid' rollover. If the DOTS client maintains | 'mid' to 0 to handle 'mid' rollover. If the DOTS client maintains | |||
| mitigation requests with pre-configured scopes, it MUST re-create | mitigation requests with pre-configured scopes, it MUST re-create | |||
| them with the 'mid' restarting at 0. | them with the 'mid' restarting at 0. | |||
| This identifier MUST be generated by the DOTS client. | This identifier MUST be generated by the DOTS client. | |||
| This is a mandatory Uri-Path parameter. | This is a mandatory Uri-Path parameter. | |||
| 'cuid' and 'mid' MUST NOT appear in the PUT request message body | 'cuid' and 'mid' MUST NOT appear in the PUT request message body | |||
| (Figure 6). | (Figure 6). The schema in Figure 6 uses the types defined in | |||
| Section 6. Note that this figure (and other similar figures | ||||
| depicting a schema) are non-normative sketches of the structure of | ||||
| the message. | ||||
| Content-Format: "application/dots+cbor" | ||||
| { | { | |||
| "ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "target-prefix": [ | "target-prefix": [ | |||
| "string" | "string" | |||
| ], | ], | |||
| "target-port-range": [ | "target-port-range": [ | |||
| { | { | |||
| "lower-port": number, | "lower-port": number, | |||
| skipping to change at page 15, line 48 ¶ | skipping to change at page 16, line 47 ¶ | |||
| Figure 6: PUT to Convey DOTS Mitigation Requests (Message Body | Figure 6: PUT to Convey DOTS Mitigation Requests (Message Body | |||
| Schema) | Schema) | |||
| The parameters in the CBOR body (Figure 6) of the PUT request are | The parameters in the CBOR body (Figure 6) of the PUT request are | |||
| described below: | described below: | |||
| target-prefix: A list of prefixes identifying resources under | target-prefix: A list of prefixes identifying resources under | |||
| attack. Prefixes are represented using Classless Inter-Domain | attack. Prefixes are represented using Classless Inter-Domain | |||
| Routing (CIDR) notation [RFC4632]. | Routing (CIDR) notation [RFC4632]. | |||
| As a reminder, the prefix length must be less than or equal to 32 | As a reminder, the prefix length must be less than or equal to 32 | |||
| (resp. 128) for IPv4 (resp. IPv6). | (or 128) for IPv4 (or IPv6). | |||
| The prefix list MUST NOT include broadcast, loopback, or multicast | The prefix list MUST NOT include broadcast, loopback, or multicast | |||
| addresses. These addresses are considered as invalid values. In | addresses. These addresses are considered as invalid values. In | |||
| addition, the DOTS server MUST validate that target prefixes are | addition, the DOTS server MUST validate that target prefixes are | |||
| within the scope of the DOTS client domain. Other validation | within the scope of the DOTS client domain. Other validation | |||
| checks may be supported by DOTS servers. | checks may be supported by DOTS servers. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| target-port-range: A list of port numbers bound to resources under | target-port-range: A list of port numbers bound to resources under | |||
| skipping to change at page 18, line 13 ¶ | skipping to change at page 19, line 13 ¶ | |||
| lost. | lost. | |||
| The default value of the parameter is 'true' (that is, the | The default value of the parameter is 'true' (that is, the | |||
| mitigation starts immediately). If 'trigger-mitigation' is not | mitigation starts immediately). If 'trigger-mitigation' is not | |||
| present in a request, this is equivalent to receiving a request | present in a request, this is equivalent to receiving a request | |||
| with 'trigger-mitigation' set to 'true'. | with 'trigger-mitigation' set to 'true'. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| In deployments where server-domain DOTS gateways are enabled, | In deployments where server-domain DOTS gateways are enabled, | |||
| identity information about the origin source client domain SHOULD be | identity information about the origin source client domain ('cdid') | |||
| propagated to the DOTS server. That information is meant to assist | SHOULD be propagated to the DOTS server. That information is meant | |||
| the DOTS server to enforce some policies such as grouping DOTS | to assist the DOTS server to enforce some policies such as grouping | |||
| clients that belong to the same DOTS domain, limiting the number of | DOTS clients that belong to the same DOTS domain, limiting the number | |||
| DOTS requests, and identifying the mitigation scope. These policies | of DOTS requests, and identifying the mitigation scope. These | |||
| can be enforced per-client, per-client domain, or both. Also, the | policies can be enforced per-client, per-client domain, or both. | |||
| identity information may be used for auditing and debugging purposes. | Also, the identity information may be used for auditing and debugging | |||
| purposes. | ||||
| Figure 7 shows an example of a request relayed by a server-domain | Figure 7 shows an example of a request relayed by a server-domain | |||
| DOTS gateway. | DOTS gateway. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cdid=7eeaf349529eb55ed50113" | Uri-Path: "cdid=7eeaf349529eb55ed50113" | |||
| Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
| skipping to change at page 20, line 7 ¶ | skipping to change at page 21, line 9 ¶ | |||
| [I-D.ietf-core-hop-limit]. | [I-D.ietf-core-hop-limit]. | |||
| Because of the complexity to handle partial failure cases, this | Because of the complexity to handle partial failure cases, this | |||
| specification does not allow for including multiple mitigation | specification does not allow for including multiple mitigation | |||
| requests in the same PUT request. Concretely, a DOTS client MUST NOT | requests in the same PUT request. Concretely, a DOTS client MUST NOT | |||
| include multiple entries in the 'scope' array of the same PUT | include multiple entries in the 'scope' array of the same PUT | |||
| request. | request. | |||
| FQDN and URI mitigation scopes may be thought of as a form of scope | FQDN and URI mitigation scopes may be thought of as a form of scope | |||
| alias, in which the addresses associated with the domain name or URI | alias, in which the addresses associated with the domain name or URI | |||
| (as resolved by the DOTS server) represent the full scope of the | (as resolved by the DOTS server) represent the scope of the | |||
| mitigation. | mitigation. Particularly, the IP addresses to which the host | |||
| subcomponent of authority component of an URI resolves represent the | ||||
| 'target-prefix', the URI scheme represents the 'target-protocol', the | ||||
| port subcomponent of authority component of an URI represents the | ||||
| 'target-port-range'. If the optional port information is not present | ||||
| in the authority component, the default port defined for the URI | ||||
| scheme represents the 'target-port'. | ||||
| In the PUT request at least one of the attributes 'target-prefix', | In the PUT request at least one of the attributes 'target-prefix', | |||
| 'target-fqdn','target-uri', or 'alias-name' MUST be present. | 'target-fqdn','target-uri', or 'alias-name' MUST be present. | |||
| Attributes and Uri-Path parameters with empty values MUST NOT be | Attributes and Uri-Path parameters with empty values MUST NOT be | |||
| present in a request and render the entire request invalid. | present in a request and render the entire request invalid. | |||
| Figure 8 shows a PUT request example to signal that TCP port numbers | Figure 8 shows a PUT request example to signal that TCP port numbers | |||
| 80, 8080, and 443 used by 2001:db8:6401::1 and 2001:db8:6401::2 | 80, 8080, and 443 used by 2001:db8:6401::1 and 2001:db8:6401::2 | |||
| servers are under attack (illustrated in JSON diagnostic notation). | servers are under attack. The presence of 'cdid' indicates that a | |||
| The presence of 'cdid' indicates that a server-domain DOTS gateway | server-domain DOTS gateway has modified the initial PUT request sent | |||
| has modified the initial PUT request sent by the DOTS client. Note | by the DOTS client. Note that 'cdid' MUST NOT appear in the PUT | |||
| that 'cdid' MUST NOT appear in the PUT request message body. | request message body. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cdid=7eeaf349529eb55ed50113" | Uri-Path: "cdid=7eeaf349529eb55ed50113" | |||
| Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
| Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
| Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| { | { | |||
| "ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "target-prefix": [ | "target-prefix": [ | |||
| "2001:db8:6401::1/128", | "2001:db8:6401::1/128", | |||
| "2001:db8:6401::2/128" | "2001:db8:6401::2/128" | |||
| ], | ], | |||
| "target-port-range": [ | "target-port-range": [ | |||
| { | { | |||
| skipping to change at page 23, line 41 ¶ | skipping to change at page 24, line 41 ¶ | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 10: 2.xx Response Body | Figure 10: 2.xx Response Body | |||
| If the request is missing a mandatory attribute, does not include | If the request is missing a mandatory attribute, does not include | |||
| 'cuid' or 'mid' Uri-Path options, includes multiple 'scope' | 'cuid' or 'mid' Uri-Path options, includes multiple 'scope' | |||
| parameters, or contains invalid or unknown parameters, the DOTS | parameters, or contains invalid or unknown parameters, the DOTS | |||
| server MUST reply with 4.00 (Bad Request). DOTS agents can safely | server MUST reply with 4.00 (Bad Request). DOTS agents can safely | |||
| ignore comprehension-optional parameters they don't understand. | ignore comprehension-optional parameters they don't understand | |||
| (Section 9.6.1.1). | ||||
| A DOTS server that receives a mitigation request with a lifetime set | A DOTS server that receives a mitigation request with a lifetime set | |||
| to '0' MUST reply with a 4.00 (Bad Request). | to '0' MUST reply with a 4.00 (Bad Request). | |||
| If the DOTS server does not find the 'mid' parameter value conveyed | If the DOTS server does not find the 'mid' parameter value conveyed | |||
| in the PUT request in its configuration data, it MAY accept the | in the PUT request in its configuration data, it MAY accept the | |||
| mitigation request by sending back a 2.01 (Created) response to the | mitigation request by sending back a 2.01 (Created) response to the | |||
| DOTS client; the DOTS server will consequently try to mitigate the | DOTS client; the DOTS server will consequently try to mitigate the | |||
| attack. A DOTS server could reject mitigation requests when it is | attack. A DOTS server could reject mitigation requests when it is | |||
| near capacity or needs to rate-limit a particular client, for | near capacity or needs to rate-limit a particular client, for | |||
| example. | example. | |||
| If the DOTS server finds the 'mid' parameter value conveyed in the | ||||
| PUT request in its configuration data bound to that DOTS client, it | ||||
| MAY update the mitigation request, and a 2.04 (Changed) response is | ||||
| returned to indicate a successful update of the mitigation request. | ||||
| The relative order of two mitigation requests, having the same | The relative order of two mitigation requests, having the same | |||
| 'trigger-mitigation' type, from a DOTS client is determined by | 'trigger-mitigation' type, from a DOTS client is determined by | |||
| comparing their respective 'mid' values. If two mitigation requests | comparing their respective 'mid' values. If two mitigation requests | |||
| with the same 'trigger-mitigation' type have overlapping mitigation | with the same 'trigger-mitigation' type have overlapping mitigation | |||
| scopes, the mitigation request with the highest numeric 'mid' value | scopes, the mitigation request with the highest numeric 'mid' value | |||
| will override the other mitigation request. Two mitigation requests | will override the other mitigation request. Two mitigation requests | |||
| from a DOTS client have overlapping scopes if there is a common IP | from a DOTS client have overlapping scopes if there is a common IP | |||
| address, IP prefix, FQDN, URI, or alias-name. To avoid maintaining a | address, IP prefix, FQDN, URI, or alias-name. To avoid maintaining a | |||
| long list of overlapping mitigation requests (i.e., requests with the | long list of overlapping mitigation requests (i.e., requests with the | |||
| same 'trigger-mitigation' type and overlapping scopes) from a DOTS | same 'trigger-mitigation' type and overlapping scopes) from a DOTS | |||
| skipping to change at page 24, line 50 ¶ | skipping to change at page 25, line 45 ¶ | |||
| 1: Overlapping targets. 'conflict-scope' provides more details | 1: Overlapping targets. 'conflict-scope' provides more details | |||
| about the conflicting target clauses. | about the conflicting target clauses. | |||
| conflict-scope: Characterizes the exact conflict scope. It may | conflict-scope: Characterizes the exact conflict scope. It may | |||
| include a list of IP addresses, a list of prefixes, a list of | include a list of IP addresses, a list of prefixes, a list of | |||
| port numbers, a list of target protocols, a list of FQDNs, a | port numbers, a list of target protocols, a list of FQDNs, a | |||
| list of URIs, a list of alias-names, or a 'mid'. | list of URIs, a list of alias-names, or a 'mid'. | |||
| If the DOTS server receives a mitigation request which overlaps with | If the DOTS server receives a mitigation request which overlaps with | |||
| an active mitigation request, but both having distinct 'trigger- | an active mitigation request, but both having distinct 'trigger- | |||
| mitigation' types, the DOTS server MUST deactivate (absent explicit | mitigation' types, the DOTS server SHOULD deactivate (absent explicit | |||
| policy/configuration otherwise) the mitigation request with 'trigger- | policy/configuration otherwise) the mitigation request with 'trigger- | |||
| mitigation' set to false. Particularly, if the mitigation request | mitigation' set to false. Particularly, if the mitigation request | |||
| with 'trigger-mitigation' set to false is active, the DOTS server | with 'trigger-mitigation' set to false is active, the DOTS server | |||
| withdraws the mitigation request (i.e., status code is set to '7' as | withdraws the mitigation request (i.e., status code is set to '7' as | |||
| defined in Table 2) and transitions the status of the mitigation | defined in Table 2) and transitions the status of the mitigation | |||
| request to '8'. | request to '8'. | |||
| Upon DOTS signal channel session loss with a peer DOTS client, the | Upon DOTS signal channel session loss with a peer DOTS client, the | |||
| DOTS server MUST withdraw (absent explicit policy/configuration | DOTS server MUST withdraw (absent explicit policy/configuration | |||
| otherwise) any active mitigation requests overlapping with mitigation | otherwise) any active mitigation requests overlapping with mitigation | |||
| skipping to change at page 26, line 49 ¶ | skipping to change at page 27, line 45 ¶ | |||
| retry-timer: Indicates, in seconds, the time after which the DOTS | retry-timer: Indicates, in seconds, the time after which the DOTS | |||
| client may re-issue the same request. The DOTS server returns | client may re-issue the same request. The DOTS server returns | |||
| 'retry-timer' only to DOTS client(s) for which a mitigation | 'retry-timer' only to DOTS client(s) for which a mitigation | |||
| request is deactivated. Any retransmission of the same | request is deactivated. Any retransmission of the same | |||
| mitigation request before the expiry of this timer is likely to | mitigation request before the expiry of this timer is likely to | |||
| be rejected by the DOTS server for the same reasons. | be rejected by the DOTS server for the same reasons. | |||
| The retry-timer SHOULD be equal to the lifetime of the active | The retry-timer SHOULD be equal to the lifetime of the active | |||
| mitigation request resulting in the deactivation of the | mitigation request resulting in the deactivation of the | |||
| conflicting mitigation request. The lifetime of the | conflicting mitigation request. | |||
| deactivated mitigation request will be updated to (retry-timer | ||||
| + 45 seconds), so the DOTS client can refresh the deactivated | If the DOTS server decides to maintain a state for the | |||
| mitigation request after retry-timer seconds before expiry of | deactivated mitigation request, the DOTS server updates the | |||
| lifetime and check if the conflict is resolved. | lifetime of the deactivated mitigation request to (retry-timer | |||
| + 45 seconds), so that the DOTS client can refresh the | ||||
| deactivated mitigation request after 'retry-timer' seconds, but | ||||
| before the expiry of the lifetime, and check if the conflict is | ||||
| resolved. | ||||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cuid=7eeaf349529eb55ed50113" | Uri-Path: "cuid=7eeaf349529eb55ed50113" | |||
| Uri-Path: "mid=12" | Uri-Path: "mid=12" | |||
| (1) Request with a conflicting 'cuid' | (1) Request with a conflicting 'cuid' | |||
| { | ||||
| "ietf-dots-signal-channel:mitigation-scope": { | ||||
| "scope": [ | ||||
| { | ||||
| "conflict-information": { | ||||
| "conflict-cause": "cuid-collision" | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| (2) Message body of the 4.09 (Conflict) response | ||||
| from the DOTS server | ||||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cuid=f30d281ce6b64fc5a0b91e" | Uri-Path: "cuid=f30d281ce6b64fc5a0b91e" | |||
| Uri-Path: "mid=12" | Uri-Path: "mid=12" | |||
| (2) Request with a new 'cuid' | (3) Request with a new 'cuid' | |||
| Figure 11: Example of Generating a New 'cuid' | Figure 11: Example of Generating a New 'cuid' | |||
| As an active attack evolves, DOTS clients can adjust the scope of | As an active attack evolves, DOTS clients can adjust the scope of | |||
| requested mitigation as necessary, by refining the scope of resources | requested mitigation as necessary, by refining the scope of resources | |||
| requiring mitigation. This can be achieved by sending a PUT request | requiring mitigation. This can be achieved by sending a PUT request | |||
| with a new 'mid' value that will override the existing one with | with a new 'mid' value that will override the existing one with | |||
| overlapping mitigation scopes. | overlapping mitigation scopes. | |||
| For a mitigation request to continue beyond the initial negotiated | For a mitigation request to continue beyond the initial negotiated | |||
| lifetime, the DOTS client has to refresh the current mitigation | lifetime, the DOTS client has to refresh the current mitigation | |||
| request by sending a new PUT request. This PUT request MUST use the | request by sending a new PUT request. This PUT request MUST use the | |||
| same 'mid' value, and MUST repeat all the other parameters as sent in | same 'mid' value, and MUST repeat all the other parameters as sent in | |||
| the original mitigation request apart from a possible change to the | the original mitigation request apart from a possible change to the | |||
| lifetime parameter value. | lifetime parameter value. In such case, the DOTS server MAY update | |||
| the mitigation request, and a 2.04 (Changed) response is returned to | ||||
| indicate a successful update of the mitigation request. If this is | ||||
| not the case, the DOTS server MUST reject the request with a 4.00 | ||||
| (Bad Request). | ||||
| 4.4.2. Retrieve Information Related to a Mitigation | 4.4.2. Retrieve Information Related to a Mitigation | |||
| A GET request is used by a DOTS client to retrieve information | A GET request is used by a DOTS client to retrieve information | |||
| (including status) of DOTS mitigations from a DOTS server. | (including status) of DOTS mitigations from a DOTS server. | |||
| 'cuid' is a mandatory Uri-Path parameter for GET requests. | 'cuid' is a mandatory Uri-Path parameter for GET requests. | |||
| Uri-Path parameters with empty values MUST NOT be present in a | Uri-Path parameters with empty values MUST NOT be present in a | |||
| request. | request. | |||
| The same considerations for manipulating 'cdid' parameter by server- | The same considerations for manipulating 'cdid' parameter by server- | |||
| domain DOTS gateways specified in Section 4.4.1 MUST be followed for | domain DOTS gateways specified in Section 4.4.1 MUST be followed for | |||
| GET requests. | GET requests. | |||
| The 'c' (content) parameter and its permitted values defined in | The 'c' Uri-Query option is used to control selection of | |||
| [I-D.ietf-core-comi] can be used to retrieve non-configuration data | configuration and non-configuration data nodes. Concretely, the 'c' | |||
| (attack mitigation status), configuration data, or both. The DOTS | (content) parameter and its permitted values defined in the following | |||
| server MAY support this optional filtering capability. It can safely | table [I-D.ietf-core-comi] can be used to retrieve non-configuration | |||
| ignore it if not supported. If the DOTS client supports the optional | data (attack mitigation status), configuration data, or both. The | |||
| filtering capability, it SHOULD use "c=n" query (to get back only the | DOTS server MAY support this optional filtering capability. It can | |||
| dynamically changing data) or "c=c" query (to get back the static | safely ignore it if not supported. If the DOTS client supports the | |||
| configuration values) when the DDoS attack is active to limit the | optional filtering capability, it SHOULD use "c=n" query (to get back | |||
| size of the response. | only the dynamically changing data) or "c=c" query (to get back the | |||
| static configuration values) when the DDoS attack is active to limit | ||||
| the size of the response. | ||||
| +-------+-----------------------------------------------------+ | ||||
| | Value | Description | | ||||
| +-------+-----------------------------------------------------+ | ||||
| | c | Return only configuration descendant data nodes | | ||||
| | n | Return only non-configuration descendant data nodes | | ||||
| | a | Return all descendant data nodes | | ||||
| +-------+-----------------------------------------------------+ | ||||
| The DOTS client can use Block-wise transfer [RFC7959] to get the list | The DOTS client can use Block-wise transfer [RFC7959] to get the list | |||
| of all its mitigations maintained by a DOTS server, it can send | of all its mitigations maintained by a DOTS server, it can send | |||
| Block2 Option in a GET request with NUM = 0 to aid in limiting the | Block2 Option in a GET request with NUM = 0 to aid in limiting the | |||
| size of the response. If the representation of all the active | size of the response. If the representation of all the active | |||
| mitigation requests associated with the DOTS client does not fit | mitigation requests associated with the DOTS client does not fit | |||
| within a single datagram, the DOTS server MUST use the Block2 Option | within a single datagram, the DOTS server MUST use the Block2 Option | |||
| with NUM = 0 in the GET response. The Size2 Option may be conveyed | with NUM = 0 in the GET response. The Size2 Option may be conveyed | |||
| in the response to indicate the total size of the resource | in the response to indicate the total size of the resource | |||
| representation. The DOTS client retrieves the rest of the | representation. The DOTS client retrieves the rest of the | |||
| skipping to change at page 31, line 30 ¶ | skipping to change at page 33, line 30 ¶ | |||
| This is a mandatory attribute. | This is a mandatory attribute. | |||
| bytes-dropped: The total dropped byte count for the mitigation | bytes-dropped: The total dropped byte count for the mitigation | |||
| request since the attack mitigation is triggered. The count wraps | request since the attack mitigation is triggered. The count wraps | |||
| around when it reaches the maximum value of unsigned integer64. | around when it reaches the maximum value of unsigned integer64. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| bps-dropped: The average number of dropped bytes per second for the | bps-dropped: The average number of dropped bytes per second for the | |||
| mitigation request since the attack mitigation is triggered. This | mitigation request since the attack mitigation is triggered. This | |||
| average SHOULD be over five-minute intervals. | average SHOULD be over five-minute intervals (that is, measuring | |||
| bytes into five-minute buckets and then averaging these buckets | ||||
| over the time since the mitigation was triggered). | ||||
| This is an optional attribute. | This is an optional attribute. | |||
| pkts-dropped: The total number of dropped packet count for the | pkts-dropped: The total number of dropped packet count for the | |||
| mitigation request since the attack mitigation is triggered. The | mitigation request since the attack mitigation is triggered. The | |||
| count wraps around when it reaches the maximum value of unsigned | count wraps around when it reaches the maximum value of unsigned | |||
| integer64. | integer64. | |||
| This is an optional attribute. | This is an optional attribute. | |||
| pps-dropped: The average number of dropped packets per second for | pps-dropped: The average number of dropped packets per second for | |||
| the mitigation request since the attack mitigation is triggered. | the mitigation request since the attack mitigation is triggered. | |||
| This average SHOULD be over five-minute intervals. | This average SHOULD be over five-minute intervals (that is, | |||
| measuring packets into five-minute buckets and then averaging | ||||
| these buckets over the time since the mitigation was triggered). | ||||
| This is an optional attribute. | This is an optional attribute. | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | Parameter | Description | | | Parameter | Description | | |||
| | Value | | | | Value | | | |||
| +-----------+-------------------------------------------------------+ | +-----------+-------------------------------------------------------+ | |||
| | 1 | Attack mitigation setup is in progress (e.g., | | | 1 | Attack mitigation setup is in progress (e.g., | | |||
| | | changing the network path to redirect the inbound | | | | changing the network path to redirect the inbound | | |||
| | | traffic to a DOTS mitigator). | | | | traffic to a DOTS mitigator). | | |||
| skipping to change at page 33, line 17 ¶ | skipping to change at page 35, line 17 ¶ | |||
| 'config' (Section 4.2). | 'config' (Section 4.2). | |||
| A DOTS client conveys the Observe Option set to '0' in the GET | A DOTS client conveys the Observe Option set to '0' in the GET | |||
| request to receive asynchronous notifications of attack mitigation | request to receive asynchronous notifications of attack mitigation | |||
| status from the DOTS server. | status from the DOTS server. | |||
| Unidirectional mitigation notifications within the bidirectional | Unidirectional mitigation notifications within the bidirectional | |||
| signal channel enables asynchronous notifications between the agents. | signal channel enables asynchronous notifications between the agents. | |||
| [RFC7641] indicates that (1) a notification can be sent in a | [RFC7641] indicates that (1) a notification can be sent in a | |||
| Confirmable or a Non-confirmable message, and (2) the message type | Confirmable or a Non-confirmable message, and (2) the message type | |||
| used is typically application dependent and may be determined by the | used is typically application-dependent and may be determined by the | |||
| server for each notification individually. For DOTS server | server for each notification individually. For DOTS server | |||
| application, the message type MUST always be set to Non-confirmable | application, the message type MUST always be set to Non-confirmable | |||
| even if the underlying COAP library elects a notification to be sent | even if the underlying COAP library elects a notification to be sent | |||
| in a Confirmable message. | in a Confirmable message. | |||
| Due to the higher likelihood of packet loss during a DDoS attack, the | Due to the higher likelihood of packet loss during a DDoS attack, the | |||
| DOTS server periodically sends attack mitigation status to the DOTS | DOTS server periodically sends attack mitigation status to the DOTS | |||
| client and also notifies the DOTS client whenever the status of the | client and also notifies the DOTS client whenever the status of the | |||
| attack mitigation changes. If the DOTS server cannot maintain an RTT | attack mitigation changes. If the DOTS server cannot maintain an RTT | |||
| estimate, it SHOULD NOT send more than one asynchronous notification | estimate, it MUST NOT send more than one asynchronous notification | |||
| every 3 seconds, and SHOULD use an even less aggressive rate whenever | every 3 seconds, and SHOULD use an even less aggressive rate whenever | |||
| possible (case 2 in Section 3.1.3 of [RFC8085]). | possible (case 2 in Section 3.1.3 of [RFC8085]). | |||
| When conflicting requests are detected, the DOTS server enforces the | When conflicting requests are detected, the DOTS server enforces the | |||
| corresponding policy (e.g., accept all requests, reject all requests, | corresponding policy (e.g., accept all requests, reject all requests, | |||
| accept only one request but reject all the others, ...). It is | accept only one request but reject all the others, ...). It is | |||
| assumed that this policy is supplied by the DOTS server administrator | assumed that this policy is supplied by the DOTS server administrator | |||
| or it is a default behavior of the DOTS server implementation. Then, | or it is a default behavior of the DOTS server implementation. Then, | |||
| the DOTS server sends notification message(s) to the DOTS client(s) | the DOTS server sends notification message(s) to the DOTS client(s) | |||
| at the origin of the conflict (refer to the conflict parameters | at the origin of the conflict (refer to the conflict parameters | |||
| skipping to change at page 35, line 41 ¶ | skipping to change at page 37, line 41 ¶ | |||
| | | | | | | |||
| ... | ... | |||
| Figure 15: Notifications of Attack Mitigation Status | Figure 15: Notifications of Attack Mitigation Status | |||
| 4.4.2.2. DOTS Clients Polling for Mitigation Status | 4.4.2.2. DOTS Clients Polling for Mitigation Status | |||
| The DOTS client can send the GET request at frequent intervals | The DOTS client can send the GET request at frequent intervals | |||
| without the Observe Option to retrieve the configuration data of the | without the Observe Option to retrieve the configuration data of the | |||
| mitigation request and non-configuration data (i.e., the attack | mitigation request and non-configuration data (i.e., the attack | |||
| status). The frequency of polling the DOTS server to get the | status). DOTS clients MAY be configured with a policy indicating the | |||
| mitigation status SHOULD follow the transmission guidelines in | frequency of polling DOTS servers to get the mitigation status. | |||
| Absent such policy, the frequency of polling the DOTS server to get | ||||
| the mitigation status SHOULD follow the transmission guidelines in | ||||
| Section 3.1.3 of [RFC8085]. | Section 3.1.3 of [RFC8085]. | |||
| If the DOTS server has been able to mitigate the attack and the | If the DOTS server has been able to mitigate the attack and the | |||
| attack has stopped, the DOTS server indicates as such in the status. | attack has stopped, the DOTS server indicates as such in the status. | |||
| In such case, the DOTS client recalls the mitigation request by | In such case, the DOTS client recalls the mitigation request by | |||
| issuing a DELETE request for this mitigation request (Section 4.4.4). | issuing a DELETE request for this mitigation request (Section 4.4.4). | |||
| A DOTS client SHOULD react to the status of the attack as per the | A DOTS client SHOULD react to the status of the attack as per the | |||
| information sent by the DOTS server rather than performing its own | information sent by the DOTS server rather than performing its own | |||
| detection that the attack has been mitigated. This ensures that the | detection that the attack has been mitigated. This ensures that the | |||
| skipping to change at page 37, line 11 ¶ | skipping to change at page 39, line 11 ¶ | |||
| An example of an efficacy update message, which includes an If-Match | An example of an efficacy update message, which includes an If-Match | |||
| Option with an empty value, is depicted in Figure 16. | Option with an empty value, is depicted in Figure 16. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "mitigate" | Uri-Path: "mitigate" | |||
| Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | Uri-Path: "cuid=dz6pHjaADkaFTbjr0JGBpw" | |||
| Uri-Path: "mid=123" | Uri-Path: "mid=123" | |||
| Content-Format: "application/dots+cbor" | ||||
| If-Match: | If-Match: | |||
| Content-Format: "application/dots+cbor" | ||||
| { | { | |||
| "ietf-dots-signal-channel:mitigation-scope": { | "ietf-dots-signal-channel:mitigation-scope": { | |||
| "scope": [ | "scope": [ | |||
| { | { | |||
| "target-prefix": [ | "target-prefix": [ | |||
| "2001:db8:6401::1/128", | "2001:db8:6401::1/128", | |||
| "2001:db8:6401::2/128" | "2001:db8:6401::2/128" | |||
| ], | ], | |||
| "target-port-range": [ | "target-port-range": [ | |||
| { | { | |||
| skipping to change at page 39, line 32 ¶ | skipping to change at page 41, line 32 ¶ | |||
| The initial active-but-terminating period SHOULD be sufficiently long | The initial active-but-terminating period SHOULD be sufficiently long | |||
| to absorb latency incurred by route propagation. The active-but- | to absorb latency incurred by route propagation. The active-but- | |||
| terminating period SHOULD be set by default to 120 seconds. If the | terminating period SHOULD be set by default to 120 seconds. If the | |||
| client requests mitigation again before the initial active-but- | client requests mitigation again before the initial active-but- | |||
| terminating period elapses, the DOTS server MAY exponentially | terminating period elapses, the DOTS server MAY exponentially | |||
| increase (the base of the exponent is 2) the active-but-terminating | increase (the base of the exponent is 2) the active-but-terminating | |||
| period up to a maximum of 300 seconds (5 minutes). | period up to a maximum of 300 seconds (5 minutes). | |||
| Once the active-but-terminating period elapses, the DOTS server MUST | Once the active-but-terminating period elapses, the DOTS server MUST | |||
| treat the mitigation as terminated, as the DOTS client is no longer | treat the mitigation as terminated, as the DOTS client is no longer | |||
| responsible for the mitigation. For example, if there is a financial | responsible for the mitigation. | |||
| relationship between the DOTS client and server domains, the DOTS | ||||
| client stops incurring cost at this point. | ||||
| If a mitigation is triggered due to a signal channel loss, the DOTS | If a mitigation is triggered due to a signal channel loss, the DOTS | |||
| server relies upon normal triggers to stop that mitigation | server relies upon normal triggers to stop that mitigation | |||
| (typically, receipt of a valid DELETE request, expiry of the | (typically, receipt of a valid DELETE request, expiry of the | |||
| mitigation lifetime, or scrubbing the traffic to the attack target). | mitigation lifetime, or scrubbing the traffic to the attack target). | |||
| In particular, the DOTS server MUST NOT consider the signal channel | In particular, the DOTS server MUST NOT consider the signal channel | |||
| recovery as a trigger to stop the mitigation. | recovery as a trigger to stop the mitigation. | |||
| 4.5. DOTS Signal Channel Session Configuration | 4.5. DOTS Signal Channel Session Configuration | |||
| A DOTS client can negotiate, configure, and retrieve the DOTS signal | A DOTS client can negotiate, configure, and retrieve the DOTS signal | |||
| channel session behavior with its DOTS peers. The DOTS signal | channel session behavior with its DOTS peers. The DOTS signal | |||
| channel can be used, for example, to configure the following: | channel can be used, for example, to configure the following: | |||
| a. Heartbeat interval (heartbeat-interval): DOTS agents regularly | a. Heartbeat interval (heartbeat-interval): DOTS agents regularly | |||
| send heartbeats (CoAP Ping/Pong) to each other after mutual | send heartbeats to each other after mutual authentication is | |||
| authentication is successfully completed in order to keep the | successfully completed in order to keep the DOTS signal channel | |||
| DOTS signal channel open. Heartbeat messages are exchanged | open. Heartbeat messages are exchanged between DOTS agents every | |||
| between DOTS agents every 'heartbeat-interval' seconds to detect | 'heartbeat-interval' seconds to detect the current status of the | |||
| the current status of the DOTS signal channel session. | DOTS signal channel session. | |||
| b. Missing heartbeats allowed (missing-hb-allowed): This variable | b. Missing heartbeats allowed (missing-hb-allowed): This variable | |||
| indicates the maximum number of consecutive heartbeat messages | indicates the maximum number of consecutive heartbeat messages | |||
| for which a DOTS agent did not receive a response before | for which a DOTS agent did not receive a response before | |||
| concluding that the session is disconnected or defunct. | concluding that the session is disconnected or defunct. | |||
| c. Acceptable signal loss ratio: Maximum retransmissions, | c. Acceptable signal loss ratio: Maximum retransmissions, | |||
| retransmission timeout value, and other message transmission | retransmission timeout value, and other message transmission | |||
| parameters for the DOTS signal channel. | parameters for the DOTS signal channel. | |||
| skipping to change at page 41, line 38 ¶ | skipping to change at page 43, line 35 ¶ | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Figure 18: GET to Retrieve Configuration | Figure 18: GET to Retrieve Configuration | |||
| The DOTS server in the 2.05 (Content) response conveys the current, | The DOTS server in the 2.05 (Content) response conveys the current, | |||
| minimum, and maximum attribute values acceptable by the DOTS server | minimum, and maximum attribute values acceptable by the DOTS server | |||
| (Figure 19). | (Figure 19). | |||
| Content-Format: "application/dots+cbor" | ||||
| { | { | |||
| "ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
| "mitigating-config": { | "mitigating-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "max-value": number, | "max-value": number, | |||
| "min-value": number, | "min-value": number, | |||
| "current-value": number | "current-value": number | |||
| }, | }, | |||
| "missing-hb-allowed": { | "missing-hb-allowed": { | |||
| "max-value": number, | "max-value": number, | |||
| skipping to change at page 43, line 47 ¶ | skipping to change at page 45, line 44 ¶ | |||
| idle-config: Set of configuration parameters to use when no | idle-config: Set of configuration parameters to use when no | |||
| mitigation is active. This attribute has the same structure as | mitigation is active. This attribute has the same structure as | |||
| 'mitigating-config'. | 'mitigating-config'. | |||
| Figure 20 shows an example of acceptable and current configuration | Figure 20 shows an example of acceptable and current configuration | |||
| parameters on a DOTS server for DOTS signal channel session | parameters on a DOTS server for DOTS signal channel session | |||
| configuration. The same acceptable configuration is used during | configuration. The same acceptable configuration is used during | |||
| mitigation and idle times. | mitigation and idle times. | |||
| Content-Format: "application/dots+cbor" | ||||
| { | { | |||
| "ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
| "mitigating-config": { | "mitigating-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "max-value": 240, | "max-value": 240, | |||
| "min-value": 15, | "min-value": 15, | |||
| "current-value": 30 | "current-value": 30 | |||
| }, | }, | |||
| "missing-hb-allowed": { | "missing-hb-allowed": { | |||
| "max-value": 9, | "max-value": 9, | |||
| skipping to change at page 45, line 33 ¶ | skipping to change at page 47, line 30 ¶ | |||
| Note: heartbeat-interval should be tweaked to also assist DOTS | Note: heartbeat-interval should be tweaked to also assist DOTS | |||
| messages for NAT traversal (SIG-011 of | messages for NAT traversal (SIG-011 of | |||
| [I-D.ietf-dots-requirements]). According to [RFC8085], keepalive | [I-D.ietf-dots-requirements]). According to [RFC8085], keepalive | |||
| messages must not be sent more frequently than once every 15 | messages must not be sent more frequently than once every 15 | |||
| seconds and should use longer intervals when possible. | seconds and should use longer intervals when possible. | |||
| Furthermore, [RFC4787] recommends NATs to use a state timeout of 2 | Furthermore, [RFC4787] recommends NATs to use a state timeout of 2 | |||
| minutes or longer, but experience shows that sending packets every | minutes or longer, but experience shows that sending packets every | |||
| 15 to 30 seconds is necessary to prevent the majority of | 15 to 30 seconds is necessary to prevent the majority of | |||
| middleboxes from losing state for UDP flows. From that | middleboxes from losing state for UDP flows. From that | |||
| standpoint, this specification recommends a minimum heartbeat- | standpoint, the RECOMMENDED minimum heartbeat-interval is 15 | |||
| interval of 15 seconds and a maximum heartbeat-interval of 240 | seconds and the RECOMMENDED maximum heartbeat-interval is 240 | |||
| seconds. The recommended value of 30 seconds is selected to | seconds. The recommended value of 30 seconds is selected to | |||
| anticipate the expiry of NAT state. | anticipate the expiry of NAT state. | |||
| A heartbeat-interval of 30 seconds may be considered as too chatty | A heartbeat-interval of 30 seconds may be considered as too chatty | |||
| in some deployments. For such deployments, DOTS agents may | in some deployments. For such deployments, DOTS agents may | |||
| negotiate longer heartbeat-interval values to prevent any network | negotiate longer heartbeat-interval values to prevent any network | |||
| overload with too frequent keepalives. | overload with too frequent keepalives. | |||
| Different heartbeat intervals can be defined for 'mitigating- | Different heartbeat intervals can be defined for 'mitigating- | |||
| config' and 'idle-config' to reduce being too chatty during idle | config' and 'idle-config' to reduce being too chatty during idle | |||
| times. If there is an on-path translator between the DOTS client | times. If there is an on-path translator between the DOTS client | |||
| (standalone or part of a DOTS gateway) and the DOTS server, the | (standalone or part of a DOTS gateway) and the DOTS server, the | |||
| 'mitigating-config' heartbeat-interval has to be smaller than the | 'mitigating-config' heartbeat-interval has to be smaller than the | |||
| translator session timeout. It is recommended that the 'idle- | translator session timeout. It is recommended that the 'idle- | |||
| config' heartbeat-interval is also smaller than the translator | config' heartbeat-interval is also smaller than the translator | |||
| session timeout to prevent translator traversal issues, or | session timeout to prevent translator traversal issues, or | |||
| disabled entirely. Means to discover the lifetime assigned by a | disabled entirely. Means to discover the lifetime assigned by a | |||
| translator are out of scope. | translator are out of scope. | |||
| Section 4.2 of [RFC7252] defines a "CoAP Ping" mechanism. | ||||
| Concretely, the DOTS agent sends an Empty Confirmable message and the | ||||
| peer DOTS agent will respond by sending a Reset message. | ||||
| When a Confirmable "CoAP Ping" is sent, and if there is no response, | When a Confirmable "CoAP Ping" is sent, and if there is no response, | |||
| the "CoAP Ping" is retransmitted max-retransmit number of times by | the "CoAP Ping" is retransmitted max-retransmit number of times by | |||
| the CoAP layer using an initial timeout set to a random duration | the CoAP layer using an initial timeout set to a random duration | |||
| between ack-timeout and (ack-timeout*ack-random-factor) and | between ack-timeout and (ack-timeout*ack-random-factor) and | |||
| exponential back-off between retransmissions. By choosing the | exponential back-off between retransmissions. By choosing the | |||
| recommended transmission parameters, the "CoAP Ping" will timeout | recommended transmission parameters, the "CoAP Ping" will timeout | |||
| after 45 seconds. If the DOTS agent does not receive any response | after 45 seconds. If the DOTS agent does not receive any response | |||
| from the peer DOTS agent for 'missing-hb-allowed' number of | from the peer DOTS agent for 'missing-hb-allowed' number of | |||
| consecutive "CoAP Ping" Confirmable messages, it concludes that the | consecutive "CoAP Ping" Confirmable messages, it concludes that the | |||
| DOTS signal channel session is disconnected. A DOTS client MUST NOT | DOTS signal channel session is disconnected. A DOTS client MUST NOT | |||
| skipping to change at page 46, line 36 ¶ | skipping to change at page 48, line 38 ¶ | |||
| The signal channel session configuration is applicable to a single | The signal channel session configuration is applicable to a single | |||
| DOTS signal channel session between DOTS agents, so the 'cuid' Uri- | DOTS signal channel session between DOTS agents, so the 'cuid' Uri- | |||
| Path MUST NOT be used. | Path MUST NOT be used. | |||
| Header: PUT (Code=0.03) | Header: PUT (Code=0.03) | |||
| Uri-Path: ".well-known" | Uri-Path: ".well-known" | |||
| Uri-Path: "dots" | Uri-Path: "dots" | |||
| Uri-Path: "config" | Uri-Path: "config" | |||
| Uri-Path: "sid=123" | Uri-Path: "sid=123" | |||
| Content-Format: "application/dots+cbor" | Content-Format: "application/dots+cbor" | |||
| { | { | |||
| ... | ... | |||
| } | } | |||
| Figure 21: PUT to Convey the DOTS Signal Channel Session | Figure 21: PUT to Convey the DOTS Signal Channel Session | |||
| Configuration Data | Configuration Data | |||
| The additional Uri-Path parameter to those defined in Table 1 is as | The additional Uri-Path parameter to those defined in Table 1 is as | |||
| follows: | follows: | |||
| sid: Session Identifier is an identifier for the DOTS signal channel | sid: Session Identifier is an identifier for the DOTS signal channel | |||
| session configuration data represented as an integer. This | session configuration data represented as an integer. This | |||
| identifier MUST be generated by DOTS clients. 'sid' values MUST | identifier MUST be generated by DOTS clients. 'sid' values MUST | |||
| increase monotonically (when a new PUT is generated by a DOTS | increase monotonically (when a new PUT is generated by a DOTS | |||
| client to convey the configuration parameters for the signal | client to convey the configuration parameters for the signal | |||
| channel). | channel). | |||
| This is a mandatory attribute. | This is a mandatory attribute. | |||
| Content-Format: "application/dots+cbor" | ||||
| { | { | |||
| "ietf-dots-signal-channel:signal-config": { | "ietf-dots-signal-channel:signal-config": { | |||
| "mitigating-config": { | "mitigating-config": { | |||
| "heartbeat-interval": { | "heartbeat-interval": { | |||
| "current-value": number | "current-value": number | |||
| }, | }, | |||
| "missing-hb-allowed": { | "missing-hb-allowed": { | |||
| "current-value": number | "current-value": number | |||
| }, | }, | |||
| "max-retransmit": { | "max-retransmit": { | |||
| skipping to change at page 54, line 4 ¶ | skipping to change at page 55, line 52 ¶ | |||
| information. The DOTS client can then try to establish a UDP or a | information. The DOTS client can then try to establish a UDP or a | |||
| TCP session with the alternate DOTS server. The DOTS client MAY | TCP session with the alternate DOTS server. The DOTS client MAY | |||
| implement a method to construct IPv4-embedded IPv6 addresses | implement a method to construct IPv4-embedded IPv6 addresses | |||
| [RFC6052]; this is required to handle the scenario where an IPv6-only | [RFC6052]; this is required to handle the scenario where an IPv6-only | |||
| DOTS client communicates with an IPv4-only alternate DOTS server. | DOTS client communicates with an IPv4-only alternate DOTS server. | |||
| If the DOTS client has been redirected to a DOTS server to which it | If the DOTS client has been redirected to a DOTS server to which it | |||
| has already communicated with within the last five (5) minutes, it | has already communicated with within the last five (5) minutes, it | |||
| MUST ignore the redirection and try to contact other DOTS servers | MUST ignore the redirection and try to contact other DOTS servers | |||
| listed in the local configuration or discovered using dynamic means | listed in the local configuration or discovered using dynamic means | |||
| such as DHCP or SRV procedures. It is RECOMMENDED that DOTS clients | such as DHCP or SRV procedures [I-D.ietf-dots-server-discovery]. It | |||
| support means to alert administrators about redirect loops. | is RECOMMENDED that DOTS clients support means to alert | |||
| administrators about redirect loops. | ||||
| 4.7. Heartbeat Mechanism | 4.7. Heartbeat Mechanism | |||
| To provide an indication of signal health and distinguish an 'idle' | To provide an indication of signal health and distinguish an 'idle' | |||
| signal channel from a 'disconnected' or 'defunct' session, the DOTS | signal channel from a 'disconnected' or 'defunct' session, the DOTS | |||
| agent sends a heartbeat over the signal channel to maintain its half | agent sends a heartbeat over the signal channel to maintain its half | |||
| of the channel. The DOTS agent similarly expects a heartbeat from | of the channel. The DOTS agent similarly expects a heartbeat from | |||
| its peer DOTS agent, and may consider a session terminated in the | its peer DOTS agent, and may consider a session terminated in the | |||
| prolonged absence of a peer agent heartbeat. Concretely, while the | prolonged absence of a peer agent heartbeat. Concretely, while the | |||
| communication between the DOTS agents is otherwise quiescent, the | communication between the DOTS agents is otherwise quiescent, the | |||
| skipping to change at page 55, line 18 ¶ | skipping to change at page 57, line 18 ¶ | |||
| resumption or if (D)TLS session resumption is successful then | resumption or if (D)TLS session resumption is successful then | |||
| disconnect the current DOTS signal channel session. | disconnect the current DOTS signal channel session. | |||
| o If the DOTS server does not receive any traffic from the peer DOTS | o If the DOTS server does not receive any traffic from the peer DOTS | |||
| client, then the DOTS server sends heartbeat requests to the DOTS | client, then the DOTS server sends heartbeat requests to the DOTS | |||
| client and after maximum 'missing-hb-allowed' threshold is | client and after maximum 'missing-hb-allowed' threshold is | |||
| reached, the DOTS server concludes the session is disconnected. | reached, the DOTS server concludes the session is disconnected. | |||
| In DOTS over UDP, heartbeat messages MUST be exchanged between the | In DOTS over UDP, heartbeat messages MUST be exchanged between the | |||
| DOTS agents using the "CoAP Ping" mechanism defined in Section 4.2 of | DOTS agents using the "CoAP Ping" mechanism defined in Section 4.2 of | |||
| [RFC7252]. Concretely, the DOTS agent sends an Empty Confirmable | [RFC7252]. | |||
| message and the peer DOTS agent will respond by sending a Reset | ||||
| message. | ||||
| In DOTS over TCP, heartbeat messages MUST be exchanged between the | In DOTS over TCP, heartbeat messages MUST be exchanged between the | |||
| DOTS agents using the Ping and Pong messages specified in Section 5.4 | DOTS agents using the Ping and Pong messages specified in Section 5.4 | |||
| of [RFC8323]. That is, the DOTS agent sends a Ping message and the | of [RFC8323]. That is, the DOTS agent sends a Ping message and the | |||
| peer DOTS agent would respond by sending a single Pong message. | peer DOTS agent would respond by sending a single Pong message. | |||
| 5. DOTS Signal Channel YANG Modules | 5. DOTS Signal Channel YANG Modules | |||
| This document defines a YANG [RFC7950] module for DOTS mitigation | This document defines a YANG [RFC7950] module for DOTS mitigation | |||
| scope, DOTS signal channel session configuration data, and DOTS | scope, DOTS signal channel session configuration data, and DOTS | |||
| redirection signalling. | redirection signaling. | |||
| This YANG module (ietf-dots-signal-channel) defines the DOTS client | This YANG module (ietf-dots-signal-channel) defines the DOTS client | |||
| interaction with the DOTS server as seen by the DOTS client. A DOTS | interaction with the DOTS server as seen by the DOTS client. A DOTS | |||
| server is allowed to update the non-configurable 'ro' entities in the | server is allowed to update the non-configurable 'ro' entities in the | |||
| responses. This YANG module is not intended to be used via NETCONF/ | responses. This YANG module is not intended to be used via NETCONF/ | |||
| RESTCONF for DOTS server management purposes; such module is out of | RESTCONF for DOTS server management purposes; such module is out of | |||
| the scope of this document. It serves only to provide a data model | the scope of this document. It serves only to provide a data model | |||
| and encoding, but not a management data model. | and encoding, but not a management data model. | |||
| A companion YANG module is defined to include a collection of types | A companion YANG module is defined to include a collection of types | |||
| defined by IANA: "iana-dots-signal-channel" (Section 5.2). | defined by IANA: "iana-dots-signal-channel" (Section 5.2). | |||
| 5.1. Tree Structure | 5.1. Tree Structure | |||
| This document defines the YANG module "ietf-dots-signal-channel" | This document defines the YANG module "ietf-dots-signal-channel" | |||
| (Section 5.3), which has the following tree structure. A DOTS signal | (Section 5.3), which has the following tree structure. A DOTS signal | |||
| message can either be a mitigation or a configuration message. | message can be a mitigation, a configuration, or a redirect message. | |||
| module: ietf-dots-signal-channel | module: ietf-dots-signal-channel | |||
| +--rw dots-signal | +--rw dots-signal | |||
| +--rw (message-type)? | +--rw (message-type)? | |||
| +--:(mitigation-scope) | +--:(mitigation-scope) | |||
| | +--rw scope* [cuid mid] | | +--rw scope* [cuid mid] | |||
| | +--rw cdid? string | | +--rw cdid? string | |||
| | +--rw cuid string | | +--rw cuid string | |||
| | +--rw mid uint32 | | +--rw mid uint32 | |||
| | +--rw target-prefix* inet:ip-prefix | | +--rw target-prefix* inet:ip-prefix | |||
| skipping to change at page 56, line 43 ¶ | skipping to change at page 58, line 41 ¶ | |||
| | | +--ro alias-name* string | | | +--ro alias-name* string | |||
| | | +--ro acl-list* [acl-name] | | | +--ro acl-list* [acl-name] | |||
| | | | +--ro acl-name | | | | +--ro acl-name | |||
| | | | | -> /ietf-data:dots-data/dots-client/acls/ | | | | | -> /ietf-data:dots-data/dots-client/acls/ | |||
| | | | | acl/name | | | | | acl/name | |||
| | | | +--ro acl-type? | | | | +--ro acl-type? | |||
| | | | -> /ietf-data:dots-data/dots-client/acls/ | | | | -> /ietf-data:dots-data/dots-client/acls/ | |||
| | | | acl/type | | | | acl/type | |||
| | | +--ro mid? -> ../../../mid | | | +--ro mid? -> ../../../mid | |||
| | +--ro bytes-dropped? yang:zero-based-counter64 | | +--ro bytes-dropped? yang:zero-based-counter64 | |||
| | +--ro bps-dropped? yang:zero-based-counter64 | | +--ro bps-dropped? yang:gauge64 | |||
| | +--ro pkts-dropped? yang:zero-based-counter64 | | +--ro pkts-dropped? yang:zero-based-counter64 | |||
| | +--ro pps-dropped? yang:zero-based-counter64 | | +--ro pps-dropped? yang:gauge64 | |||
| | +--rw attack-status? iana-signal:attack-status | | +--rw attack-status? iana-signal:attack-status | |||
| +--:(signal-config) | +--:(signal-config) | |||
| | +--rw sid uint32 | | +--rw sid uint32 | |||
| | +--rw mitigating-config | | +--rw mitigating-config | |||
| | | +--rw heartbeat-interval | | | +--rw heartbeat-interval | |||
| | | | +--ro max-value? uint16 | | | | +--ro max-value? uint16 | |||
| | | | +--ro min-value? uint16 | | | | +--ro min-value? uint16 | |||
| | | | +--rw current-value? uint16 | | | | +--rw current-value? uint16 | |||
| | | +--rw missing-hb-allowed | | | +--rw missing-hb-allowed | |||
| | | | +--ro max-value? uint16 | | | | +--ro max-value? uint16 | |||
| skipping to change at page 66, line 35 ¶ | skipping to change at page 68, line 33 ¶ | |||
| type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
| units "bytes"; | units "bytes"; | |||
| config false; | config false; | |||
| description | description | |||
| "The total dropped byte count for the mitigation | "The total dropped byte count for the mitigation | |||
| request since the attack mitigation is triggered. | request since the attack mitigation is triggered. | |||
| The count wraps around when it reaches the maximum value | The count wraps around when it reaches the maximum value | |||
| of counter64 for dropped bytes."; | of counter64 for dropped bytes."; | |||
| } | } | |||
| leaf bps-dropped { | leaf bps-dropped { | |||
| type yang:zero-based-counter64; | type yang:gauge64; | |||
| config false; | config false; | |||
| description | description | |||
| "The average number of dropped bits per second for | "The average number of dropped bits per second for | |||
| the mitigation request since the attack | the mitigation request since the attack | |||
| mitigation is triggered. This should be a | mitigation is triggered. This should be over | |||
| five-minute average."; | five-minute intervals (that is, measuring bytes | |||
| into five-minute buckets and then averaging these | ||||
| buckets over the time since the mitigation was | ||||
| triggered)."; | ||||
| } | } | |||
| leaf pkts-dropped { | leaf pkts-dropped { | |||
| type yang:zero-based-counter64; | type yang:zero-based-counter64; | |||
| config false; | config false; | |||
| description | description | |||
| "The total number of dropped packet count for the | "The total number of dropped packet count for the | |||
| mitigation request since the attack mitigation is | mitigation request since the attack mitigation is | |||
| triggered. The count wraps around when it reaches | triggered. The count wraps around when it reaches | |||
| the maximum value of counter64 for dropped packets."; | the maximum value of counter64 for dropped packets."; | |||
| } | } | |||
| leaf pps-dropped { | leaf pps-dropped { | |||
| type yang:zero-based-counter64; | type yang:gauge64; | |||
| config false; | config false; | |||
| description | description | |||
| "The average number of dropped packets per second | "The average number of dropped packets per second | |||
| for the mitigation request since the attack | for the mitigation request since the attack | |||
| mitigation is triggered. This should be a | mitigation is triggered. This should be over | |||
| five-minute average."; | five-minute intervals (that is, measuring packets | |||
| into five-minute buckets and then averaging these | ||||
| buckets over the time since the mitigation was | ||||
| triggered)."; | ||||
| } | } | |||
| leaf attack-status { | leaf attack-status { | |||
| type iana-signal:attack-status; | type iana-signal:attack-status; | |||
| description | description | |||
| "Indicates the status of an attack as seen by the | "Indicates the status of an attack as seen by the | |||
| DOTS client."; | DOTS client."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| skipping to change at page 71, line 50 ¶ | skipping to change at page 74, line 9 ¶ | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 6. YANG/JSON Mapping Parameters to CBOR | 6. YANG/JSON Mapping Parameters to CBOR | |||
| All parameters in the payload of the DOTS signal channel MUST be | All parameters in the payload of the DOTS signal channel MUST be | |||
| mapped to CBOR types as shown in Table 4 and are assigned an integer | mapped to CBOR types as shown in Table 4 and are assigned an integer | |||
| key to save space. The CBOR key values are divided into two types: | key to save space. | |||
| comprehension-required and comprehension-optional. DOTS agents can | ||||
| safely ignore comprehension-optional values they don't understand, | o Note: Implementers must check that the mapping output provided by | |||
| but cannot successfully process a request if it contains | their YANG-to-CBOR encoding schemes is aligned with the content of | |||
| comprehension-required values that are not understood. The 4.00 | Table 4. | |||
| response SHOULD include a diagnostic payload describing the unknown | ||||
| comprehension-required CBOR key values. The initial set of CBOR key | The CBOR key values are divided into two types: comprehension- | |||
| values defined in this specification are of type comprehension- | required and comprehension-optional. DOTS agents can safely ignore | |||
| required. | comprehension-optional values they don't understand, but cannot | |||
| successfully process a request if it contains comprehension-required | ||||
| values that are not understood. The 4.00 response SHOULD include a | ||||
| diagnostic payload describing the unknown comprehension-required CBOR | ||||
| key values. The initial set of CBOR key values defined in this | ||||
| specification are of type comprehension-required. | ||||
| +----------------------+-------------+-----+---------------+--------+ | +----------------------+-------------+-----+---------------+--------+ | |||
| | Parameter Name | YANG | CBOR| CBOR Major | JSON | | | Parameter Name | YANG | CBOR| CBOR Major | JSON | | |||
| | | Type | Key | Type & | Type | | | | Type | Key | Type & | Type | | |||
| | | | | Information | | | | | | | Information | | | |||
| +----------------------+-------------+-----+---------------+--------+ | +----------------------+-------------+-----+---------------+--------+ | |||
| | ietf-dots-signal-cha | | | | | | | ietf-dots-signal-cha | | | | | | |||
| | nnel:mitigation-scope| container | 1 | 5 map | Object | | | nnel:mitigation-scope| container | 1 | 5 map | Object | | |||
| | scope | list | 2 | 4 array | Array | | | scope | list | 2 | 4 array | Array | | |||
| | cdid | string | 3 | 3 text string | String | | | cdid | string | 3 | 3 text string | String | | |||
| skipping to change at page 73, line 7 ¶ | skipping to change at page 75, line 18 ¶ | |||
| | conflict-status | enumeration | 18 | 0 unsigned | String | | | conflict-status | enumeration | 18 | 0 unsigned | String | | |||
| | conflict-cause | enumeration | 19 | 0 unsigned | String | | | conflict-cause | enumeration | 19 | 0 unsigned | String | | |||
| | retry-timer | uint32 | 20 | 0 unsigned | Number | | | retry-timer | uint32 | 20 | 0 unsigned | Number | | |||
| | conflict-scope | container | 21 | 5 map | Object | | | conflict-scope | container | 21 | 5 map | Object | | |||
| | acl-list | list | 22 | 4 array | Array | | | acl-list | list | 22 | 4 array | Array | | |||
| | acl-name | leafref | 23 | 3 text string | String | | | acl-name | leafref | 23 | 3 text string | String | | |||
| | acl-type | leafref | 24 | 3 text string | String | | | acl-type | leafref | 24 | 3 text string | String | | |||
| | bytes-dropped | yang:zero- | | | | | | bytes-dropped | yang:zero- | | | | | |||
| | | based- | | | | | | | based- | | | | | |||
| | | counter64 | 25 | 0 unsigned | String | | | | counter64 | 25 | 0 unsigned | String | | |||
| | bps-dropped | yang:zero- | | | | | | bps-dropped | yang:gauge64| 26 | 0 unsigned | String | | |||
| | | based- | | | | | ||||
| | | counter64 | 26 | 0 unsigned | String | | ||||
| | pkts-dropped | yang:zero- | | | | | | pkts-dropped | yang:zero- | | | | | |||
| | | based- | | | | | | | based- | | | | | |||
| | | counter64 | 27 | 0 unsigned | String | | | | counter64 | 27 | 0 unsigned | String | | |||
| | pps-dropped | yang:zero- | | | | | | pps-dropped | yang:gauge64| 28 | 0 unsigned | String | | |||
| | | based- | | | | | ||||
| | | counter64 | 28 | 0 unsigned | String | | ||||
| | attack-status | enumeration | 29 | 0 unsigned | String | | | attack-status | enumeration | 29 | 0 unsigned | String | | |||
| | ietf-dots-signal- | | | | | | | ietf-dots-signal- | | | | | | |||
| | channel:signal-config| container | 30 | 5 map | Object | | | channel:signal-config| container | 30 | 5 map | Object | | |||
| | sid | uint32 | 31 | 0 unsigned | Number | | | sid | uint32 | 31 | 0 unsigned | Number | | |||
| | mitigating-config | container | 32 | 5 map | Object | | | mitigating-config | container | 32 | 5 map | Object | | |||
| | heartbeat-interval | container | 33 | 5 map | Object | | | heartbeat-interval | container | 33 | 5 map | Object | | |||
| | max-value | uint16 | 34 | 0 unsigned | Number | | | max-value | uint16 | 34 | 0 unsigned | Number | | |||
| | min-value | uint16 | 35 | 0 unsigned | Number | | | min-value | uint16 | 35 | 0 unsigned | Number | | |||
| | current-value | uint16 | 36 | 0 unsigned | Number | | | current-value | uint16 | 36 | 0 unsigned | Number | | |||
| | missing-hb-allowed | container | 37 | 5 map | Object | | | missing-hb-allowed | container | 37 | 5 map | Object | | |||
| skipping to change at page 74, line 26 ¶ | skipping to change at page 76, line 28 ¶ | |||
| MUST adhere to the (D)TLS implementation recommendations and security | MUST adhere to the (D)TLS implementation recommendations and security | |||
| considerations of [RFC7525] except with respect to (D)TLS version. | considerations of [RFC7525] except with respect to (D)TLS version. | |||
| Since DOTS signal channel encryption relying upon (D)TLS is virtually | Since DOTS signal channel encryption relying upon (D)TLS is virtually | |||
| a green-field deployment, DOTS agents MUST implement only (D)TLS 1.2 | a green-field deployment, DOTS agents MUST implement only (D)TLS 1.2 | |||
| or later. | or later. | |||
| When a DOTS client is configured with a domain name of the DOTS | When a DOTS client is configured with a domain name of the DOTS | |||
| server, and connects to its configured DOTS server, the server may | server, and connects to its configured DOTS server, the server may | |||
| present it with a PKIX certificate. In order to ensure proper | present it with a PKIX certificate. In order to ensure proper | |||
| authentication, a DOTS client MUST verify the entire certification | authentication, a DOTS client MUST verify the entire certification | |||
| path per [RFC5280]. The DOTS client additionally uses [RFC6125] | path per [RFC5280]. Additionally, the DOTS client MUST use [RFC6125] | |||
| validation techniques to compare the domain name with the certificate | validation techniques to compare the domain name with the certificate | |||
| provided. | provided. Certification authorities that issue DOTS server | |||
| certificates SHOULD support the DNS-ID and SRV-ID identifier types. | ||||
| DOTS server SHOULD prefer the use of DNS-ID and SRV-ID over CN-ID | ||||
| identifier types in certificate requests (as described in Section 2.3 | ||||
| of [RFC6125]) and the wildcard character '*' SHOULD NOT be included | ||||
| in the presented identifier. DOTS doesn't use URI-IDs for server | ||||
| identity verification. | ||||
| A key challenge to deploying DOTS is the provisioning of DOTS | A key challenge to deploying DOTS is the provisioning of DOTS | |||
| clients, including the distribution of keying material to DOTS | clients, including the distribution of keying material to DOTS | |||
| clients to enable the required mutual authentication of DOTS agents. | clients to enable the required mutual authentication of DOTS agents. | |||
| Enrollment over Secure Transport (EST) [RFC7030] defines a method of | Enrollment over Secure Transport (EST) [RFC7030] defines a method of | |||
| certificate enrollment by which domains operating DOTS servers may | certificate enrollment by which domains operating DOTS servers may | |||
| provide DOTS clients with all the necessary cryptographic keying | provide DOTS clients with all the necessary cryptographic keying | |||
| material, including a private key and a certificate to authenticate | material, including a private key and a certificate to authenticate | |||
| themselves. One deployment option is DOTS clients behave as EST | themselves. One deployment option is DOTS clients behave as EST | |||
| clients for certificate enrollment from an EST server provisioned by | clients for certificate enrollment from an EST server provisioned by | |||
| skipping to change at page 77, line 29 ¶ | skipping to change at page 79, line 39 ¶ | |||
| () Indicates messages protected 0-RTT keys | () Indicates messages protected 0-RTT keys | |||
| {} Indicates messages protected using handshake keys | {} Indicates messages protected using handshake keys | |||
| [] Indicates messages protected using 1-RTT keys | [] Indicates messages protected using 1-RTT keys | |||
| Figure 27: A Simplified TLS 1.3 Handshake with 0-RTT | Figure 27: A Simplified TLS 1.3 Handshake with 0-RTT | |||
| 7.3. DTLS MTU and Fragmentation | 7.3. DTLS MTU and Fragmentation | |||
| To avoid DOTS signal message fragmentation and the subsequent | To avoid DOTS signal message fragmentation and the subsequent | |||
| decreased probability of message delivery, DOTS agents MUST ensure | decreased probability of message delivery, DOTS agents MUST ensure | |||
| that the DTLS record MUST fit within a single datagram. If the path | that the DTLS record fit within a single datagram. If the PMTU | |||
| MTU is not known to the DOTS server, an IP MTU of 1280 bytes SHOULD | cannot be discovered, DOTS agents MUST assume a PMTU of 1280 bytes, | |||
| be assumed. The DOTS client must consider the amount of record | as IPv6 requires that every link in the Internet have an MTU of 1280 | |||
| expansion expected by the DTLS processing when calculating the size | octets or greater as specified in [RFC8200]. If IPv4 support on | |||
| of CoAP message that fits within the path MTU. Path MTU MUST be | legacy or otherwise unusual networks is a consideration and the PMTU | |||
| greater than or equal to [CoAP message size + DTLS 1.2 overhead of 13 | is unknown, DOTS implementations MAY assume on a PMTU of 576 bytes | |||
| octets + authentication overhead of the negotiated DTLS cipher suite | for IPv4 datagrams, as every IPv4 host must be capable of receiving a | |||
| + block padding] (Section 4.1.1.1 of [RFC6347]). If the total | packet whose length is equal to 576 bytes as discussed in [RFC0791] | |||
| request size exceeds the path MTU then the DOTS client MUST split the | and [RFC1122]. | |||
| DOTS signal into separate messages; for example, the list of | ||||
| addresses in the 'target-prefix' parameter could be split into | The DOTS client must consider the amount of record expansion expected | |||
| multiple lists and each list conveyed in a new PUT request. | by the DTLS processing when calculating the size of CoAP message that | |||
| fits within the path MTU. Path MTU MUST be greater than or equal to | ||||
| [CoAP message size + DTLS 1.2 overhead of 13 octets + authentication | ||||
| overhead of the negotiated DTLS cipher suite + block padding] | ||||
| (Section 4.1.1.1 of [RFC6347]). If the total request size exceeds | ||||
| the path MTU then the DOTS client MUST split the DOTS signal into | ||||
| separate messages; for example, the list of addresses in the 'target- | ||||
| prefix' parameter could be split into multiple lists and each list | ||||
| conveyed in a new PUT request. | ||||
| Implementation Note: DOTS choice of message size parameters works | Implementation Note: DOTS choice of message size parameters works | |||
| well with IPv6 and with most of today's IPv4 paths. However, with | well with IPv6 and with most of today's IPv4 paths. However, with | |||
| IPv4, it is harder to safely make sure that there is no IP | IPv4, it is harder to safely make sure that there is no IP | |||
| fragmentation. If the IPv4 path MTU is unknown, implementations may | fragmentation. If the IPv4 path MTU is unknown, implementations may | |||
| want to limit themselves to more conservative IPv4 datagram sizes | want to limit themselves to more conservative IPv4 datagram sizes | |||
| such as 576 bytes, as per [RFC0791]. IP packets whose size does not | such as 576 bytes, as per [RFC0791]. | |||
| exceed 576 bytes should never need to be fragmented: therefore, | ||||
| sending a maximum of 500 bytes of DOTS signal over a UDP datagram | ||||
| will generally avoid IP fragmentation. | ||||
| 8. Mutual Authentication of DOTS Agents & Authorization of DOTS Clients | 8. Mutual Authentication of DOTS Agents & Authorization of DOTS Clients | |||
| (D)TLS based upon client certificate can be used for mutual | (D)TLS based upon client certificate can be used for mutual | |||
| authentication between DOTS agents. If, for example, a DOTS gateway | authentication between DOTS agents. If, for example, a DOTS gateway | |||
| is involved, DOTS clients and DOTS gateways must perform mutual | is involved, DOTS clients and DOTS gateways must perform mutual | |||
| authentication; only authorized DOTS clients are allowed to send DOTS | authentication; only authorized DOTS clients are allowed to send DOTS | |||
| signals to a DOTS gateway. The DOTS gateway and the DOTS server must | signals to a DOTS gateway. The DOTS gateway and the DOTS server must | |||
| perform mutual authentication; a DOTS server only allows DOTS signal | perform mutual authentication; a DOTS server only allows DOTS signal | |||
| channel messages from an authorized DOTS gateway, thereby creating a | channel messages from an authorized DOTS gateway, thereby creating a | |||
| skipping to change at page 91, line 13 ¶ | skipping to change at page 93, line 13 ¶ | |||
| (TLS) with a cipher suite offering confidentiality protection, and | (TLS) with a cipher suite offering confidentiality protection, and | |||
| the guidance given in [RFC7525] MUST be followed to avoid attacks on | the guidance given in [RFC7525] MUST be followed to avoid attacks on | |||
| (D)TLS. The (D)TLS protocol profile used for the DOTS signal channel | (D)TLS. The (D)TLS protocol profile used for the DOTS signal channel | |||
| is specified in Section 7. | is specified in Section 7. | |||
| If TCP is used between DOTS agents, an attacker may be able to inject | If TCP is used between DOTS agents, an attacker may be able to inject | |||
| RST packets, bogus application segments, etc., regardless of whether | RST packets, bogus application segments, etc., regardless of whether | |||
| TLS authentication is used. Because the application data is TLS | TLS authentication is used. Because the application data is TLS | |||
| protected, this will not result in the application receiving bogus | protected, this will not result in the application receiving bogus | |||
| data, but it will constitute a DoS on the connection. This attack | data, but it will constitute a DoS on the connection. This attack | |||
| can be countered by using TCP-AO [RFC5925]. If TCP-AO is used, then | can be countered by using TCP-AO [RFC5925]. Although not widely | |||
| any bogus packets injected by an attacker will be rejected by the | adopted, if TCP-AO is used, then any bogus packets injected by an | |||
| TCP-AO integrity check and therefore will never reach the TLS layer. | attacker will be rejected by the TCP-AO integrity check and therefore | |||
| will never reach the TLS layer. | ||||
| An attack vector that can be achieved if the 'cuid' is guessable is a | An attack vector that can be achieved if the 'cuid' is guessable is a | |||
| misbehaving DOTS client from within the client's domain which uses | misbehaving DOTS client from within the client's domain which uses | |||
| the 'cuid' of another DOTS client of the domain to delete or alter | the 'cuid' of another DOTS client of the domain to delete or alter | |||
| active mitigations. For this attack vector to happen, the | active mitigations. For this attack vector to happen, the | |||
| misbehaving client needs to pass the security validation checks by | misbehaving client needs to pass the security validation checks by | |||
| the DOTS server, and eventually the checks of a client-domain DOTS | the DOTS server, and eventually the checks of a client-domain DOTS | |||
| gateway. | gateway. | |||
| A similar attack can be achieved by a compromised DOTS client which | A similar attack can be achieved by a compromised DOTS client which | |||
| can sniff the TLS 1.2 handshake, use the client certificate to | can sniff the TLS 1.2 handshake, use the client certificate to | |||
| identify the 'cuid' used by another DOTS client. This attack is not | identify the 'cuid' used by another DOTS client. This attack is not | |||
| possible if algorithms such as [RFC4122] are used to generate the | possible if algorithms such as version 4 Universally Unique | |||
| 'cuid'. Likewise, this attack is not possible with TLS 1.3 because | IDentifiers (UUIDs) in Section 4.4 of [RFC4122] are used to generate | |||
| most of the TLS handshake is encrypted and the client certificate is | the 'cuid' because such UUIDs are not a deterministic function of the | |||
| not visible to eavesdroppers. | client certificate. Likewise, this attack is not possible with TLS | |||
| 1.3 because most of the TLS handshake is encrypted and the client | ||||
| certificate is not visible to eavesdroppers. | ||||
| A compromised DOTS client can collude with a DDoS attacker to send | ||||
| mitigation request for a target resource, gets the mitigation | ||||
| efficacy from the DOTS server, and conveys the mitigation efficacy to | ||||
| the DDoS attacker to possibly change the DDoS attack strategy. | ||||
| Obviously, signaling an attack by the compromised DOTS client to the | ||||
| DOTS server will trigger attack mitigation. This attack can be | ||||
| prevented by monitoring and auditing DOTS clients to detect | ||||
| misbehavior and to deter misuse, and by only authorizing the DOTS | ||||
| client to request mitigation for specific target resources (e.g., an | ||||
| application server is authorized to request mitigation for its IP | ||||
| addresses but a DDoS mitigator can request mitigation for any target | ||||
| resource in the network). Furthermore, DOTS clients are typically | ||||
| co-located on network security services (e.g., firewall) and a | ||||
| compromised security service potentially can do a lot more damage to | ||||
| the network. | ||||
| Rate-limiting DOTS requests, including those with new 'cuid' values, | Rate-limiting DOTS requests, including those with new 'cuid' values, | |||
| from the same DOTS client defends against DoS attacks that would | from the same DOTS client defends against DoS attacks that would | |||
| result in varying the 'cuid' to exhaust DOTS server resources. Rate- | result in varying the 'cuid' to exhaust DOTS server resources. Rate- | |||
| limit policies SHOULD be enforced on DOTS gateways (if deployed) and | limit policies SHOULD be enforced on DOTS gateways (if deployed) and | |||
| DOTS servers. | DOTS servers. | |||
| In order to prevent leaking internal information outside a client- | In order to prevent leaking internal information outside a client- | |||
| domain, DOTS gateways located in the client-domain SHOULD NOT reveal | domain, DOTS gateways located in the client-domain SHOULD NOT reveal | |||
| the identification information that pertains to internal DOTS clients | the identification information that pertains to internal DOTS clients | |||
| skipping to change at page 92, line 10 ¶ | skipping to change at page 94, line 29 ¶ | |||
| resources that belong to the DOTS client' domain MUST be authorized | resources that belong to the DOTS client' domain MUST be authorized | |||
| by a DOTS server. The exact mechanism for the DOTS servers to | by a DOTS server. The exact mechanism for the DOTS servers to | |||
| validate that the target prefixes are within the scope of the DOTS | validate that the target prefixes are within the scope of the DOTS | |||
| client domain is deployment-specific. | client domain is deployment-specific. | |||
| The presence of DOTS gateways may lead to infinite forwarding loops, | The presence of DOTS gateways may lead to infinite forwarding loops, | |||
| which is undesirable. To prevent and detect such loops, this | which is undesirable. To prevent and detect such loops, this | |||
| document uses the Hop-Limit Option. | document uses the Hop-Limit Option. | |||
| When FQDNs are used as targets, the DOTS server MUST rely upon DNS | When FQDNs are used as targets, the DOTS server MUST rely upon DNS | |||
| privacy enabling protocols (e.g., DNS over TLS [RFC7858], DoH | privacy enabling protocols (e.g., DNS over TLS [RFC7858] or DoH | |||
| [RFC8484]) to prevent eavesdroppers from possibly identifying the | [RFC8484]) to prevent eavesdroppers from possibly identifying the | |||
| target resources protected by the DDoS mitigation service and means | target resources protected by the DDoS mitigation service, and means | |||
| to ensure the target FQDN resolution is authentic (e.g., DNSSEC | to ensure the target FQDN resolution is authentic (e.g., DNSSEC | |||
| [RFC4034]). | [RFC4034]). | |||
| CoAP-specific security considerations are discussed in Section 11 of | CoAP-specific security considerations are discussed in Section 11 of | |||
| [RFC7252], while CBOR-related security considerations are discussed | [RFC7252], while CBOR-related security considerations are discussed | |||
| in Section 8 of [RFC7049]. | in Section 8 of [RFC7049]. | |||
| 11. Contributors | 11. Contributors | |||
| The following individuals have contributed to this document: | The following individuals have contributed to this document: | |||
| skipping to change at page 92, line 36 ¶ | skipping to change at page 95, line 7 ¶ | |||
| o Mike Geller, Cisco Systems, Inc. 3250 Florida 33309 USA, Email: | o Mike Geller, Cisco Systems, Inc. 3250 Florida 33309 USA, Email: | |||
| mgeller@cisco.com | mgeller@cisco.com | |||
| o Robert Moskowitz, HTT Consulting Oak Park, MI 42837 United States, | o Robert Moskowitz, HTT Consulting Oak Park, MI 42837 United States, | |||
| Email: rgm@htt-consult.com | Email: rgm@htt-consult.com | |||
| o Dan Wing, Email: dwing-ietf@fuggles.com | o Dan Wing, Email: dwing-ietf@fuggles.com | |||
| 12. Acknowledgements | 12. Acknowledgements | |||
| Thanks to Christian Jacquenet, Roland Dobbins, Roman D. Danyliw, | Thanks to Christian Jacquenet, Roland Dobbins, Roman Danyliw, Michael | |||
| Michael Richardson, Ehud Doron, Kaname Nishizuka, Dave Dolson, Liang | Richardson, Ehud Doron, Kaname Nishizuka, Dave Dolson, Liang Xia, | |||
| Xia, Gilbert Clark, Xialiang Frank, Jim Schaad, Klaus Hartke, | Gilbert Clark, Xialiang Frank, Jim Schaad, Klaus Hartke, Nesredien | |||
| Nesredien Suleiman, and Stephen Farrell for the discussion and | Suleiman, Stephen Farrell, and Yoshifumi Nishida for the discussion | |||
| comments. | and comments. | |||
| The authors would like to give special thanks to Kaname Nishizuka and | The authors would like to give special thanks to Kaname Nishizuka and | |||
| Jon Shallow for their efforts in implementing the protocol and | Jon Shallow for their efforts in implementing the protocol and | |||
| performing interop testing at IETF Hackathons. | performing interop testing at IETF Hackathons. | |||
| Thanks to the core WG for the recommendations on Hop-Limit and | Thanks to the core WG for the recommendations on Hop-Limit and | |||
| redirect signaling. | redirect signaling. | |||
| Special thanks to Benjamin Kaduk for the detailed AD review. | Special thanks to Benjamin Kaduk for the detailed AD review. | |||
| Thanks to Alexey Melnikov, Adam Roach, Suresh Krishnan, Mirja | ||||
| Kuehlewind, and Alissa Cooper for the review. | ||||
| 13. References | 13. References | |||
| 13.1. Normative References | 13.1. Normative References | |||
| [I-D.ietf-core-hop-limit] | ||||
| Boucadair, M., K, R., and J. Shallow, "Constrained | ||||
| Application Protocol (CoAP) Hop Limit Option", draft-ietf- | ||||
| core-hop-limit-03 (work in progress), February 2019. | ||||
| [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | ||||
| DOI 10.17487/RFC0791, September 1981, | ||||
| <https://www.rfc-editor.org/info/rfc791>. | ||||
| [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | ||||
| Communication Layers", STD 3, RFC 1122, | ||||
| DOI 10.17487/RFC1122, October 1989, | ||||
| <https://www.rfc-editor.org/info/rfc1122>. | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
| Resource Identifier (URI): Generic Syntax", STD 66, | ||||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | ||||
| <https://www.rfc-editor.org/info/rfc3986>. | ||||
| [RFC4279] Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key | [RFC4279] Eronen, P., Ed. and H. Tschofenig, Ed., "Pre-Shared Key | |||
| Ciphersuites for Transport Layer Security (TLS)", | Ciphersuites for Transport Layer Security (TLS)", | |||
| RFC 4279, DOI 10.17487/RFC4279, December 2005, | RFC 4279, DOI 10.17487/RFC4279, December 2005, | |||
| <https://www.rfc-editor.org/info/rfc4279>. | <https://www.rfc-editor.org/info/rfc4279>. | |||
| [RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | [RFC4632] Fuller, V. and T. Li, "Classless Inter-domain Routing | |||
| (CIDR): The Internet Address Assignment and Aggregation | (CIDR): The Internet Address Assignment and Aggregation | |||
| Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, August | Plan", BCP 122, RFC 4632, DOI 10.17487/RFC4632, August | |||
| 2006, <https://www.rfc-editor.org/info/rfc4632>. | 2006, <https://www.rfc-editor.org/info/rfc4632>. | |||
| [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | ||||
| Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | ||||
| <https://www.rfc-editor.org/info/rfc4648>. | ||||
| [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | [RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security | |||
| (TLS) Protocol Version 1.2", RFC 5246, | (TLS) Protocol Version 1.2", RFC 5246, | |||
| DOI 10.17487/RFC5246, August 2008, | DOI 10.17487/RFC5246, August 2008, | |||
| <https://www.rfc-editor.org/info/rfc5246>. | <https://www.rfc-editor.org/info/rfc5246>. | |||
| [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
| Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
| Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
| (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
| <https://www.rfc-editor.org/info/rfc5280>. | <https://www.rfc-editor.org/info/rfc5280>. | |||
| skipping to change at page 95, line 36 ¶ | skipping to change at page 98, line 27 ¶ | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
| Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
| <https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | ||||
| (IPv6) Specification", STD 86, RFC 8200, | ||||
| DOI 10.17487/RFC8200, July 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8200>. | ||||
| [RFC8323] Bormann, C., Lemay, S., Tschofenig, H., Hartke, K., | [RFC8323] Bormann, C., Lemay, S., Tschofenig, H., Hartke, K., | |||
| Silverajan, B., and B. Raymor, Ed., "CoAP (Constrained | Silverajan, B., and B. Raymor, Ed., "CoAP (Constrained | |||
| Application Protocol) over TCP, TLS, and WebSockets", | Application Protocol) over TCP, TLS, and WebSockets", | |||
| RFC 8323, DOI 10.17487/RFC8323, February 2018, | RFC 8323, DOI 10.17487/RFC8323, February 2018, | |||
| <https://www.rfc-editor.org/info/rfc8323>. | <https://www.rfc-editor.org/info/rfc8323>. | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| 13.2. Informative References | 13.2. Informative References | |||
| [I-D.boucadair-dots-earlydata] | [I-D.boucadair-dots-earlydata] | |||
| Boucadair, M. and R. K, "Using Early Data in DOTS", draft- | Boucadair, M. and R. K, "Using Early Data in DOTS", draft- | |||
| boucadair-dots-earlydata-00 (work in progress), January | boucadair-dots-earlydata-00 (work in progress), January | |||
| 2019. | 2019. | |||
| [I-D.boucadair-dots-server-discovery] | ||||
| Boucadair, M., K, R., and P. Patil, "Distributed-Denial- | ||||
| of-Service Open Threat Signaling (DOTS) Server Discovery", | ||||
| draft-boucadair-dots-server-discovery-05 (work in | ||||
| progress), October 2018. | ||||
| [I-D.ietf-core-comi] | [I-D.ietf-core-comi] | |||
| Veillette, M., Stok, P., Pelov, A., and A. Bierman, "CoAP | Veillette, M., Stok, P., Pelov, A., and A. Bierman, "CoAP | |||
| Management Interface", draft-ietf-core-comi-04 (work in | Management Interface", draft-ietf-core-comi-04 (work in | |||
| progress), November 2018. | progress), November 2018. | |||
| [I-D.ietf-core-hop-limit] | ||||
| Boucadair, M., K, R., and J. Shallow, "Constrained | ||||
| Application Protocol (CoAP) Hop Limit Option", draft-ietf- | ||||
| core-hop-limit-03 (work in progress), February 2019. | ||||
| [I-D.ietf-core-yang-cbor] | [I-D.ietf-core-yang-cbor] | |||
| Veillette, M., Pelov, A., Somaraju, A., Turner, R., and A. | Veillette, M., Petrov, I., and A. Pelov, "CBOR Encoding of | |||
| Minaburo, "CBOR Encoding of Data Modeled with YANG", | Data Modeled with YANG", draft-ietf-core-yang-cbor-10 | |||
| draft-ietf-core-yang-cbor-07 (work in progress), September | (work in progress), April 2019. | |||
| 2018. | ||||
| [I-D.ietf-dots-architecture] | [I-D.ietf-dots-architecture] | |||
| Mortensen, A., Andreasen, F., K, R., Teague, N., Compton, | Mortensen, A., K, R., Andreasen, F., Teague, N., and R. | |||
| R., and c. christopher_gray3@cable.comcast.com, | Compton, "Distributed-Denial-of-Service Open Threat | |||
| "Distributed-Denial-of-Service Open Threat Signaling | Signaling (DOTS) Architecture", draft-ietf-dots- | |||
| (DOTS) Architecture", draft-ietf-dots-architecture-12 | architecture-13 (work in progress), April 2019. | |||
| (work in progress), February 2019. | ||||
| [I-D.ietf-dots-data-channel] | [I-D.ietf-dots-data-channel] | |||
| Boucadair, M. and R. K, "Distributed Denial-of-Service | Boucadair, M. and R. K, "Distributed Denial-of-Service | |||
| Open Threat Signaling (DOTS) Data Channel Specification", | Open Threat Signaling (DOTS) Data Channel Specification", | |||
| draft-ietf-dots-data-channel-27 (work in progress), | draft-ietf-dots-data-channel-28 (work in progress), March | |||
| February 2019. | 2019. | |||
| [I-D.ietf-dots-multihoming] | ||||
| Boucadair, M. and R. K, "Multi-homing Deployment | ||||
| Considerations for Distributed-Denial-of-Service Open | ||||
| Threat Signaling (DOTS)", draft-ietf-dots-multihoming-01 | ||||
| (work in progress), January 2019. | ||||
| [I-D.ietf-dots-requirements] | [I-D.ietf-dots-requirements] | |||
| Mortensen, A., K, R., and R. Moskowitz, "Distributed | Mortensen, A., K, R., and R. Moskowitz, "Distributed | |||
| Denial of Service (DDoS) Open Threat Signaling | Denial of Service (DDoS) Open Threat Signaling | |||
| Requirements", draft-ietf-dots-requirements-22 (work in | Requirements", draft-ietf-dots-requirements-22 (work in | |||
| progress), March 2019. | progress), March 2019. | |||
| [I-D.ietf-dots-server-discovery] | ||||
| Boucadair, M., K, R., and P. Patil, "Distributed-Denial- | ||||
| of-Service Open Threat Signaling (DOTS) Server Discovery", | ||||
| draft-ietf-dots-server-discovery-02 (work in progress), | ||||
| May 2019. | ||||
| [I-D.ietf-dots-use-cases] | [I-D.ietf-dots-use-cases] | |||
| Dobbins, R., Migault, D., Fouant, S., Moskowitz, R., | Dobbins, R., Migault, D., Fouant, S., Moskowitz, R., | |||
| Teague, N., Xia, L., and K. Nishizuka, "Use cases for DDoS | Teague, N., Xia, L., and K. Nishizuka, "Use cases for DDoS | |||
| Open Threat Signaling", draft-ietf-dots-use-cases-17 (work | Open Threat Signaling", draft-ietf-dots-use-cases-17 (work | |||
| in progress), January 2019. | in progress), January 2019. | |||
| [I-D.ietf-tls-dtls13] | [I-D.ietf-tls-dtls13] | |||
| Rescorla, E., Tschofenig, H., and N. Modadugu, "The | Rescorla, E., Tschofenig, H., and N. Modadugu, "The | |||
| Datagram Transport Layer Security (DTLS) Protocol Version | Datagram Transport Layer Security (DTLS) Protocol Version | |||
| 1.3", draft-ietf-tls-dtls13-31 (work in progress), March | 1.3", draft-ietf-tls-dtls13-31 (work in progress), March | |||
| skipping to change at page 97, line 29 ¶ | skipping to change at page 100, line 23 ¶ | |||
| core-parameters.xhtml#content-formats>. | core-parameters.xhtml#content-formats>. | |||
| [IANA.MediaTypes] | [IANA.MediaTypes] | |||
| IANA, "Media Types", | IANA, "Media Types", | |||
| <http://www.iana.org/assignments/media-types>. | <http://www.iana.org/assignments/media-types>. | |||
| [proto_numbers] | [proto_numbers] | |||
| "IANA, "Protocol Numbers"", 2011, | "IANA, "Protocol Numbers"", 2011, | |||
| <http://www.iana.org/assignments/protocol-numbers>. | <http://www.iana.org/assignments/protocol-numbers>. | |||
| [RFC0791] Postel, J., "Internet Protocol", STD 5, RFC 791, | ||||
| DOI 10.17487/RFC0791, September 1981, | ||||
| <https://www.rfc-editor.org/info/rfc791>. | ||||
| [RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network | [RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network | |||
| Address Translator (Traditional NAT)", RFC 3022, | Address Translator (Traditional NAT)", RFC 3022, | |||
| DOI 10.17487/RFC3022, January 2001, | DOI 10.17487/RFC3022, January 2001, | |||
| <https://www.rfc-editor.org/info/rfc3022>. | <https://www.rfc-editor.org/info/rfc3022>. | |||
| [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | ||||
| Resource Identifier (URI): Generic Syntax", STD 66, | ||||
| RFC 3986, DOI 10.17487/RFC3986, January 2005, | ||||
| <https://www.rfc-editor.org/info/rfc3986>. | ||||
| [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | [RFC4034] Arends, R., Austein, R., Larson, M., Massey, D., and S. | |||
| Rose, "Resource Records for the DNS Security Extensions", | Rose, "Resource Records for the DNS Security Extensions", | |||
| RFC 4034, DOI 10.17487/RFC4034, March 2005, | RFC 4034, DOI 10.17487/RFC4034, March 2005, | |||
| <https://www.rfc-editor.org/info/rfc4034>. | <https://www.rfc-editor.org/info/rfc4034>. | |||
| [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | |||
| Unique IDentifier (UUID) URN Namespace", RFC 4122, | Unique IDentifier (UUID) URN Namespace", RFC 4122, | |||
| DOI 10.17487/RFC4122, July 2005, | DOI 10.17487/RFC4122, July 2005, | |||
| <https://www.rfc-editor.org/info/rfc4122>. | <https://www.rfc-editor.org/info/rfc4122>. | |||
| skipping to change at page 100, line 22 ¶ | skipping to change at page 103, line 9 ¶ | |||
| <https://www.rfc-editor.org/info/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
| [RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | [RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | |||
| (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | |||
| <https://www.rfc-editor.org/info/rfc8484>. | <https://www.rfc-editor.org/info/rfc8484>. | |||
| [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | [RFC8499] Hoffman, P., Sullivan, A., and K. Fujiwara, "DNS | |||
| Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | Terminology", BCP 219, RFC 8499, DOI 10.17487/RFC8499, | |||
| January 2019, <https://www.rfc-editor.org/info/rfc8499>. | January 2019, <https://www.rfc-editor.org/info/rfc8499>. | |||
| Appendix A. CUID Generation | ||||
| The document recommends the use of SPKI to generate the 'cuid'. This | ||||
| design choice is motivated by the following reasons: | ||||
| o SPKI is globally unique. | ||||
| o It is deterministic. | ||||
| o It allows to avoid extra cycles that may be induced by 'cuid' | ||||
| collision. | ||||
| o DOTS clients do not need to store the 'cuid' in a persistent | ||||
| storage. | ||||
| o It allows to detect compromised DOTS clients that do not adhere to | ||||
| the 'cuid' generation algorithm. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Tirumaleswar Reddy (editor) | Tirumaleswar Reddy (editor) | |||
| McAfee, Inc. | McAfee, Inc. | |||
| Embassy Golf Link Business Park | Embassy Golf Link Business Park | |||
| Bangalore, Karnataka 560071 | Bangalore, Karnataka 560071 | |||
| India | India | |||
| Email: kondtir@gmail.com | Email: kondtir@gmail.com | |||
| End of changes. 93 change blocks. | ||||
| 295 lines changed or deleted | 441 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||