<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.29 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-t2trg-amplification-attacks-02" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.0 -->
  <front>
    <title abbrev="CoAP Amplification Attacks">Amplification Attacks Using the Constrained Application Protocol (CoAP)</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-t2trg-amplification-attacks-02"/>
    <author initials="J." surname="Preuß Mattsson" fullname="John Preuß Mattsson">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>john.mattsson@ericsson.com</email>
      </address>
    </author>
    <author initials="G." surname="Selander" fullname="Göran Selander">
      <organization abbrev="Ericsson">Ericsson AB</organization>
      <address>
        <postal>
          <street>SE-164 80 Stockholm</street>
          <country>Sweden</country>
        </postal>
        <email>goran.selander@ericsson.com</email>
      </address>
    </author>
    <author initials="C." surname="Amsüss" fullname="Christian Amsüss">
      <organization>Energy Harvesting Solutions</organization>
      <address>
        <email>c.amsuess@energyharvesting.at</email>
      </address>
    </author>
    <date year="2023" month="April" day="12"/>
    <area>IRTF</area>
    <workgroup>Thing-to-Thing</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <t>Protecting Internet of Things (IoT) devices against attacks is not enough.
IoT deployments need to make sure that they are not used for
Distributed Denial-of-Service (DDoS) attacks. DDoS attacks are
typically done with compromised devices or with amplification attacks
using a spoofed source address. This document gives examples of different
theoretical amplification attacks using the Constrained Application Protocol
(CoAP). The goal with this document is to raise awareness and
to motivate generic and protocol-specific recommendations on the usage of
CoAP. Some of the discussed attacks can be mitigated by not using
NoSec or by using the Echo option.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://t2trg.github.io/t2trg-amplification-attacks/draft-irtf-t2trg-amplification-attacks.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-irtf-t2trg-amplification-attacks/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Thing-to-Thing Research Group mailing list (<eref target="mailto:t2trg@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/search/?email_list=t2trg"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/t2trg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/t2trg/t2trg-amplification-attacks"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>One important protocol used to interact with Internet of Things (IoT)
sensors and actuators is the Constrained Application Protocol (CoAP) <xref target="RFC7252"/>.
CoAP can be used without security in the so called NoSec mode but any
Internet-of-Things (IoT) deployment valuing security and privacy would use a
security protocol such as DTLS <xref target="RFC9147"/>, TLS <xref target="RFC8446"/>, or OSCORE <xref target="RFC8613"/>
to protect CoAP, where the choice of security protocol depends on the transport
protocol and the presence of intermediaries. The use of CoAP over UDP and DTLS is
specified in <xref target="RFC7252"/> and the use of CoAP over TCP and TLS is specified in <xref target="RFC8323"/>.
OSCORE protects CoAP end-to-end with the use of COSE <xref target="RFC8152"/> and the CoAP
Object-Security option <xref target="RFC8613"/> and can therefore be used over any
transport. Group OSCORE <xref target="I-D.ietf-core-oscore-groupcomm"/> can be used to
protect CoAP Group Communication <xref target="I-D.ietf-core-groupcomm-bis"/>.</t>
      <t>Protecting Internet of Things (IoT) devices against attacks is not enough.
IoT deployments need to make sure that they are not used for
Distributed Denial-of-Service (DDoS) attacks. DDoS attacks are
typically done with compromised devices or with amplification attacks
using a spoofed source address. DDoS attacks is a huge and
growing problem for services and critical infrastructure <xref target="DDoS-Infra"/>
and mitigations are costly.</t>
      <t>The document gives examples of different theoretical amplification attacks using CoAP.
When transported over UDP, the CoAP NoSec mode is susceptible to source
IP address spoofing and as a single request can result in multiple responses
from multiple servers, CoAP can have very large amplification factors.
The goal with this document is to raise awareness and understanding of amplification
attacks and to motivate mitigations suitable for constrained devices and networks. The
intent is not to suggest that CoAP is more vulnerable to amplification attacks than
other protocols.</t>
      <t>Some of the discussed attacks can be mitigated by not using
NoSec or by using the Echo option <xref target="RFC9175"/>.</t>
    </section>
    <section anchor="dos">
      <name>Amplification Attacks using CoAP</name>
      <t>In a Denial-of-Service (DoS) attack, an attacker sends a large number of requests
or responses to a target endpoint. The denial-of-service might be caused by
the target endpoint receiving a large amount of data, sending a large amount
of data, doing heavy processing, or using too much memory, etc. In a Distributed
Denial-of-Service (DDoS) attack, the request or responses come from a large
number of sources.</t>
      <t>In an amplification attack, the amplification factor is the ratio between the
total size of the data sent to the target and the total size of the data
received from the attacker. Note that in the presence of intermediaries, the
size of the data received by the target might be different than the size of
the data sent to the target and the size of the data received from the
attacker might be different than the size of the data sent from the attacker.</t>
      <t>In the attacks described in this section, the attacker sends one or more requests,
and the target receives one or more responses. By spoofing the source IP address of
the targeted victim and requesting as much information as possible from several
servers an attacker can multiply the amount of traffic and create a distributed
denial-of-service attack on the target. When transported over UDP, the CoAP NoSec
mode is susceptible to source IP address spoofing.</t>
      <t>The amplification factor and the bandwidth depend on the layer in the protocol stack that
is used for the calculation. The amplification factor and bandwidth can e.g., be calculated
using whole IP packets, UPD payloads, or CoAP payloads. The bandwidth decreases and the
amplification factor typically increases higher up in the protocol stack. The bandwidth
should be calculated using the layer that is considered to be under attack.</t>
      <t>The following sections give examples of different theoretical amplification attacks using CoAP.</t>
      <section anchor="simple-amplification-attacks">
        <name>Simple Amplification Attacks</name>
        <t>An amplification attack using a single response is illustrated in <xref target="ampsingle"/>.
If the response is c times larger than the request, the amplification factor is c.</t>
        <figure anchor="ampsingle">
          <name>Amplification attack using a single response</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="560" viewBox="0 0 560 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 32,48 L 32,224" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,104" fill="none" stroke="black"/>
                <path d="M 88,120 L 88,224" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,224" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 40,112 L 144,112" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,112 36,106.4 36,117.6" fill="black" transform="rotate(180,40,112)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.01</text>
                  <text x="304" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="200" y="84">Uri-Path:</text>
                  <text x="268" y="84">random</text>
                  <text x="320" y="84">quote</text>
                  <text x="216" y="116">Code:</text>
                  <text x="260" y="116">2.05</text>
                  <text x="320" y="116">(Content)</text>
                  <text x="116" y="132">2.05</text>
                  <text x="204" y="132">Payload:</text>
                  <text x="264" y="132">"just</text>
                  <text x="320" y="132">because</text>
                  <text x="368" y="132">you</text>
                  <text x="400" y="132">own</text>
                  <text x="436" y="132">half</text>
                  <text x="472" y="132">the</text>
                  <text x="516" y="132">county</text>
                  <text x="280" y="148">doesn't</text>
                  <text x="332" y="148">mean</text>
                  <text x="372" y="148">that</text>
                  <text x="408" y="148">you</text>
                  <text x="444" y="148">have</text>
                  <text x="480" y="148">the</text>
                  <text x="520" y="148">power</text>
                  <text x="260" y="164">to</text>
                  <text x="288" y="164">run</text>
                  <text x="320" y="164">the</text>
                  <text x="356" y="164">rest</text>
                  <text x="388" y="164">of</text>
                  <text x="416" y="164">us.</text>
                  <text x="448" y="164">For</text>
                  <text x="496" y="164">twenty-</text>
                  <text x="272" y="180">three</text>
                  <text x="324" y="180">years,</text>
                  <text x="372" y="180">I've</text>
                  <text x="412" y="180">been</text>
                  <text x="456" y="180">dying</text>
                  <text x="492" y="180">to</text>
                  <text x="524" y="180">tell</text>
                  <text x="264" y="196">you</text>
                  <text x="300" y="196">what</text>
                  <text x="328" y="196">I</text>
                  <text x="368" y="196">thought</text>
                  <text x="412" y="196">of</text>
                  <text x="444" y="196">you!</text>
                  <text x="480" y="196">And</text>
                  <text x="524" y="196">now...</text>
                  <text x="272" y="212">well,</text>
                  <text x="320" y="212">being</text>
                  <text x="352" y="212">a</text>
                  <text x="400" y="212">Christian</text>
                  <text x="468" y="212">woman,</text>
                  <text x="504" y="212">I</text>
                  <text x="536" y="212">can't</text>
                  <text x="264" y="228">say</text>
                  <text x="300" y="228">it!"</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|      Code: 0.01 (GET)
   |      | GET  |  Uri-Path: random quote
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: "just because you own half the county
   |      |      |             doesn't mean that you have the power
   |      |      |             to run the rest of us. For twenty-
   |      |      |             three years, I've been dying to tell
   |      |      |             you what I thought of you! And now...
   |      |      |             well, being a Christian woman, I can't
   |      |      |             say it!"
]]></artwork>
          </artset>
        </figure>
        <t>An attacker can increase the bandwidth by sending several GET requests. If the server supports
PUT/POST and doesn't limit the payload size, an attacker may be able to increase the amplification factor
by creating or updating a resource. By creating new resources, an attacker may also increase the
size of /.well-known/core. An amplification attack where the attacker influences the amplification factor
is illustrated in <xref target="ampmulti_post"/>.</t>
        <figure anchor="ampmulti_post">
          <name>Amplification attack using several requests and a chosen amplification factor</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="392" viewBox="0 0 392 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 32,48 L 32,112" fill="none" stroke="black"/>
                <path d="M 32,144 L 32,320" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,112" fill="none" stroke="black"/>
                <path d="M 88,144 L 88,200" fill="none" stroke="black"/>
                <path d="M 88,216 L 88,296" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,112" fill="none" stroke="black"/>
                <path d="M 144,144 L 144,320" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 88,160 L 136,160" fill="none" stroke="black"/>
                <path d="M 40,208 L 144,208" fill="none" stroke="black"/>
                <path d="M 88,256 L 136,256" fill="none" stroke="black"/>
                <path d="M 40,304 L 144,304" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,256 132,250.4 132,261.6" fill="black" transform="rotate(0,136,256)"/>
                <polygon class="arrowhead" points="144,160 132,154.4 132,165.6" fill="black" transform="rotate(0,136,160)"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,304 36,298.4 36,309.6" fill="black" transform="rotate(180,40,304)"/>
                <polygon class="arrowhead" points="48,208 36,202.4 36,213.6" fill="black" transform="rotate(180,40,208)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="216" y="68">Code:</text>
                  <text x="260" y="68">0.02</text>
                  <text x="308" y="68">(POST)</text>
                  <text x="116" y="84">POST</text>
                  <text x="200" y="84">Uri-Path:</text>
                  <text x="268" y="84">member</text>
                  <text x="204" y="100">Payload:</text>
                  <text x="316" y="100">hampsterdance.hevc</text>
                  <text x="60" y="132">....</text>
                  <text x="116" y="132">....</text>
                  <text x="216" y="164">Code:</text>
                  <text x="260" y="164">0.02</text>
                  <text x="304" y="164">(GET)</text>
                  <text x="112" y="180">GET</text>
                  <text x="200" y="180">Uri-Path:</text>
                  <text x="268" y="180">member</text>
                  <text x="216" y="212">Code:</text>
                  <text x="260" y="212">2.05</text>
                  <text x="320" y="212">(Content)</text>
                  <text x="116" y="228">2.05</text>
                  <text x="204" y="228">Payload:</text>
                  <text x="316" y="228">hampsterdance.hevc</text>
                  <text x="216" y="260">Code:</text>
                  <text x="260" y="260">0.02</text>
                  <text x="304" y="260">(GET)</text>
                  <text x="112" y="276">GET</text>
                  <text x="200" y="276">Uri-Path:</text>
                  <text x="268" y="276">member</text>
                  <text x="216" y="308">Code:</text>
                  <text x="260" y="308">2.05</text>
                  <text x="320" y="308">(Content)</text>
                  <text x="88" y="324">|</text>
                  <text x="116" y="324">2.05</text>
                  <text x="204" y="324">Payload:</text>
                  <text x="316" y="324">hampsterdance.hevc</text>
                  <text x="60" y="340">....</text>
                  <text x="116" y="340">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|      Code: 0.02 (POST)
   |      | POST |  Uri-Path: member
   |      |      |   Payload: hampsterdance.hevc
   |      |      |
     ....   ....
   |      |      |
   |      +----->|      Code: 0.02 (GET)
   |      | GET  |  Uri-Path: member
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: hampsterdance.hevc
   |      |      |
   |      +----->|      Code: 0.02 (GET)
   |      | GET  |  Uri-Path: member
   |      |      |
   |<------------+      Code: 2.05 (Content)
   |      | 2.05 |   Payload: hampsterdance.hevc
     ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="amplification-attacks-using-observe">
        <name>Amplification Attacks using Observe</name>
        <t>Amplification factors can be significantly worse when combined with observe <xref target="RFC7641"/>. As a single request can result in multiple responses from the server, the amplification factors can be very large.</t>
        <t>An amplification attack using observe is illustrated in
<xref target="ampmulti_obs"/>. If each notification response is c times larger than the registration
request and each request results in n notifications, the amplification factor is c <contact fullname="⋅"/> n.</t>
        <figure anchor="ampmulti_obs">
          <name>Amplification attack using observe</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="368" viewBox="0 0 368 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 32,48 L 32,128" fill="none" stroke="black"/>
                <path d="M 32,160 L 32,240" fill="none" stroke="black"/>
                <path d="M 32,272 L 32,336" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,128" fill="none" stroke="black"/>
                <path d="M 88,184 L 88,240" fill="none" stroke="black"/>
                <path d="M 88,296 L 88,336" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,128" fill="none" stroke="black"/>
                <path d="M 144,160 L 144,240" fill="none" stroke="black"/>
                <path d="M 144,272 L 144,336" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 40,176 L 144,176" fill="none" stroke="black"/>
                <path d="M 40,288 L 144,288" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,288 36,282.4 36,293.6" fill="black" transform="rotate(180,40,288)"/>
                <polygon class="arrowhead" points="48,176 36,170.4 36,181.6" fill="black" transform="rotate(180,40,176)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="224" y="68">Code:</text>
                  <text x="268" y="68">0.01</text>
                  <text x="312" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="220" y="84">Token:</text>
                  <text x="268" y="84">0x83</text>
                  <text x="212" y="100">Observe:</text>
                  <text x="256" y="100">0</text>
                  <text x="208" y="116">Uri-Path:</text>
                  <text x="272" y="116">ozone</text>
                  <text x="60" y="148">....</text>
                  <text x="116" y="148">....</text>
                  <text x="88" y="164">|</text>
                  <text x="224" y="180">Code:</text>
                  <text x="268" y="180">2.05</text>
                  <text x="328" y="180">(Content)</text>
                  <text x="116" y="196">2.05</text>
                  <text x="220" y="196">Token:</text>
                  <text x="268" y="196">0x83</text>
                  <text x="212" y="212">Observe:</text>
                  <text x="272" y="212">80085</text>
                  <text x="212" y="228">Payload:</text>
                  <text x="272" y="228">"21.4</text>
                  <text x="320" y="228">ppbv"</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                  <text x="88" y="276">|</text>
                  <text x="224" y="292">Code:</text>
                  <text x="268" y="292">2.05</text>
                  <text x="328" y="292">(Content)</text>
                  <text x="116" y="308">2.05</text>
                  <text x="220" y="308">Token:</text>
                  <text x="268" y="308">0x84</text>
                  <text x="212" y="324">Observe:</text>
                  <text x="272" y="324">80086</text>
                  <text x="212" y="340">Payload:</text>
                  <text x="272" y="340">"21.5</text>
                  <text x="320" y="340">ppbv"</text>
                  <text x="60" y="356">....</text>
                  <text x="116" y="356">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x83
   |      |      |    Observe: 0
   |      |      |   Uri-Path: ozone
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 80085
   |      |      |    Payload: "21.4 ppbv"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 80086
   |      |      |    Payload: "21.5 ppbv"
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>A more advanced amplification attack using observe is illustrated in
<xref target="ampmulti_nk"/>. By registering the same client several times using different Tokens or port numbers,
the bandwidth can be increased. By updating the observed resource, the attacker
may trigger notifications and increase the size of the notifications.</t>
        <t>If the server supports the pmax conditional attribute <xref target="I-D.ietf-core-conditional-attributes"/> an attacker may
increase the frequency of notifications and therefore the amplification factor. The maximum period attribute pmax
indicates the maximum time, in seconds, between two consecutive notifications (whether or not the
resource state has changed). Servers should put limits on the pmax values they accept.</t>
        <t>If it is predictable when notifications are sent as confirmable and which Message ID
are used the acknowledgements may be spoofed.</t>
        <figure anchor="ampmulti_nk">
          <name>Amplification attack using observe, registering the same client several times, and requesting notifications at least 10 times every second</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="640" width="368" viewBox="0 0 368 640" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 32,48 L 32,240" fill="none" stroke="black"/>
                <path d="M 32,272 L 32,432" fill="none" stroke="black"/>
                <path d="M 32,464 L 32,608" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,240" fill="none" stroke="black"/>
                <path d="M 88,296 L 88,360" fill="none" stroke="black"/>
                <path d="M 88,376 L 88,432" fill="none" stroke="black"/>
                <path d="M 88,488 L 88,552" fill="none" stroke="black"/>
                <path d="M 88,568 L 88,608" fill="none" stroke="black"/>
                <path d="M 144,48 L 144,240" fill="none" stroke="black"/>
                <path d="M 144,272 L 144,432" fill="none" stroke="black"/>
                <path d="M 144,464 L 144,608" fill="none" stroke="black"/>
                <path d="M 88,64 L 136,64" fill="none" stroke="black"/>
                <path d="M 88,160 L 136,160" fill="none" stroke="black"/>
                <path d="M 40,288 L 144,288" fill="none" stroke="black"/>
                <path d="M 40,368 L 144,368" fill="none" stroke="black"/>
                <path d="M 40,480 L 144,480" fill="none" stroke="black"/>
                <path d="M 40,560 L 144,560" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="144,160 132,154.4 132,165.6" fill="black" transform="rotate(0,136,160)"/>
                <polygon class="arrowhead" points="144,64 132,58.4 132,69.6" fill="black" transform="rotate(0,136,64)"/>
                <polygon class="arrowhead" points="48,560 36,554.4 36,565.6" fill="black" transform="rotate(180,40,560)"/>
                <polygon class="arrowhead" points="48,480 36,474.4 36,485.6" fill="black" transform="rotate(180,40,480)"/>
                <polygon class="arrowhead" points="48,368 36,362.4 36,373.6" fill="black" transform="rotate(180,40,368)"/>
                <polygon class="arrowhead" points="48,288 36,282.4 36,293.6" fill="black" transform="rotate(180,40,288)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="148" y="36">Server</text>
                  <text x="224" y="68">Code:</text>
                  <text x="268" y="68">0.01</text>
                  <text x="312" y="68">(GET)</text>
                  <text x="112" y="84">GET</text>
                  <text x="220" y="84">Token:</text>
                  <text x="268" y="84">0x83</text>
                  <text x="212" y="100">Observe:</text>
                  <text x="256" y="100">0</text>
                  <text x="208" y="116">Uri-Path:</text>
                  <text x="296" y="116">temperature</text>
                  <text x="204" y="132">Uri-Query:</text>
                  <text x="292" y="132">pmax="0.1"</text>
                  <text x="224" y="164">Code:</text>
                  <text x="268" y="164">0.01</text>
                  <text x="312" y="164">(GET)</text>
                  <text x="112" y="180">GET</text>
                  <text x="220" y="180">Token:</text>
                  <text x="268" y="180">0x84</text>
                  <text x="212" y="196">Observe:</text>
                  <text x="256" y="196">0</text>
                  <text x="208" y="212">Uri-Path:</text>
                  <text x="296" y="212">temperature</text>
                  <text x="204" y="228">Uri-Query:</text>
                  <text x="292" y="228">pmax="0.1"</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                  <text x="88" y="276">|</text>
                  <text x="224" y="292">Code:</text>
                  <text x="268" y="292">2.05</text>
                  <text x="328" y="292">(Content)</text>
                  <text x="116" y="308">2.05</text>
                  <text x="220" y="308">Token:</text>
                  <text x="268" y="308">0x83</text>
                  <text x="212" y="324">Observe:</text>
                  <text x="276" y="324">217362</text>
                  <text x="212" y="340">Payload:</text>
                  <text x="276" y="340">"299.7</text>
                  <text x="316" y="340">K"</text>
                  <text x="224" y="372">Code:</text>
                  <text x="268" y="372">2.05</text>
                  <text x="328" y="372">(Content)</text>
                  <text x="116" y="388">2.05</text>
                  <text x="220" y="388">Token:</text>
                  <text x="268" y="388">0x84</text>
                  <text x="212" y="404">Observe:</text>
                  <text x="276" y="404">217362</text>
                  <text x="212" y="420">Payload:</text>
                  <text x="276" y="420">"299.7</text>
                  <text x="316" y="420">K"</text>
                  <text x="60" y="452">....</text>
                  <text x="116" y="452">....</text>
                  <text x="88" y="468">|</text>
                  <text x="224" y="484">Code:</text>
                  <text x="268" y="484">2.05</text>
                  <text x="328" y="484">(Content)</text>
                  <text x="116" y="500">2.05</text>
                  <text x="220" y="500">Token:</text>
                  <text x="268" y="500">0x83</text>
                  <text x="212" y="516">Observe:</text>
                  <text x="276" y="516">217363</text>
                  <text x="212" y="532">Payload:</text>
                  <text x="276" y="532">"299.7</text>
                  <text x="316" y="532">K"</text>
                  <text x="224" y="564">Code:</text>
                  <text x="268" y="564">2.05</text>
                  <text x="328" y="564">(Content)</text>
                  <text x="116" y="580">2.05</text>
                  <text x="220" y="580">Token:</text>
                  <text x="268" y="580">0x84</text>
                  <text x="212" y="596">Observe:</text>
                  <text x="276" y="596">217363</text>
                  <text x="212" y="612">Payload:</text>
                  <text x="276" y="612">"299.7</text>
                  <text x="316" y="612">K"</text>
                  <text x="60" y="628">....</text>
                  <text x="116" y="628">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe   Server
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x83
   |      |      |    Observe: 0
   |      |      |   Uri-Path: temperature
   |      |      |  Uri-Query: pmax="0.1"
   |      |      |
   |      +----->|       Code: 0.01 (GET)
   |      | GET  |      Token: 0x84
   |      |      |    Observe: 0
   |      |      |   Uri-Path: temperature
   |      |      |  Uri-Query: pmax="0.1"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 217362
   |      |      |    Payload: "299.7 K"
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 217362
   |      |      |    Payload: "299.7 K"
   |      |      |
     ....   ....
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x83
   |      |      |    Observe: 217363
   |      |      |    Payload: "299.7 K"
   |      |      |
   |<------------+       Code: 2.05 (Content)
   |      | 2.05 |      Token: 0x84
   |      |      |    Observe: 217363
   |      |      |    Payload: "299.7 K"
     ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="amplification-attacks-using-group-requests">
        <name>Amplification Attacks using Group Requests</name>
        <t>Amplification factors can be significantly worse when combined with observe <xref target="RFC7641"/>. As a single request can result in responses from multiple servers, the amplification factors can be very large.</t>
        <t>As the group request is sent over multicast or broadcast the request has to be sent by a node on the local network. An attacker on a local network (e.g., a compromised node) might use local CoAP servers to attack targets on the Internet or on the local network. The servers might also be accessible through a gateway (GW) that transforms unicast requests into multicast request. In such architectures, amplification attacks using group requests might be possible to launch from the Internet.</t>
        <t>An amplification attack using a group request is illustrated in
<xref target="ampmulti_m"/>. A single unicast request results is transformed into
a multicast group request by the gateway and results in m responses
from m different servers. If each response is c times larger than the request,
the amplification factor is c <contact fullname="⋅"/> m. Note that the servers usually do not know
the variable m.</t>
        <figure anchor="ampmulti_m">
          <name>Amplification attack using multicast</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="272" width="440" viewBox="0 0 440 272" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 32,48 L 32,240" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,136 L 88,184" fill="none" stroke="black"/>
                <path d="M 88,200 L 88,240" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,120" fill="none" stroke="black"/>
                <path d="M 144,136 L 144,184" fill="none" stroke="black"/>
                <path d="M 144,200 L 144,240" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,72" fill="none" stroke="black"/>
                <path d="M 200,88 L 200,184" fill="none" stroke="black"/>
                <path d="M 200,200 L 200,240" fill="none" stroke="black"/>
                <path d="M 224,48 L 224,240" fill="none" stroke="black"/>
                <path d="M 88,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 176,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 40,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 40,192 L 224,192" fill="none" stroke="black"/>
                <path d="M 176,80 C 167.16936,80 160,72.83064 160,64" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="224,80 212,74.4 212,85.6" fill="black" transform="rotate(0,216,80)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="48,192 36,186.4 36,197.6" fill="black" transform="rotate(180,40,192)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">GW</text>
                  <text x="208" y="36">Servers</text>
                  <text x="144" y="52">|</text>
                  <text x="296" y="68">Code:</text>
                  <text x="340" y="68">0.01</text>
                  <text x="384" y="68">(GET)</text>
                  <text x="292" y="84">Token:</text>
                  <text x="340" y="84">0x69</text>
                  <text x="168" y="100">GET</text>
                  <text x="280" y="100">Uri-Path:</text>
                  <text x="340" y="100">&lt;/c&gt;</text>
                  <text x="296" y="132">Code:</text>
                  <text x="340" y="132">2.05</text>
                  <text x="400" y="132">(Content)</text>
                  <text x="172" y="148">2.05</text>
                  <text x="292" y="148">Token:</text>
                  <text x="340" y="148">0x69</text>
                  <text x="284" y="164">Payload:</text>
                  <text x="328" y="164">{</text>
                  <text x="356" y="164">1721</text>
                  <text x="384" y="164">:</text>
                  <text x="400" y="164">{</text>
                  <text x="424" y="164">...</text>
                  <text x="296" y="196">Code:</text>
                  <text x="340" y="196">2.05</text>
                  <text x="400" y="196">(Content)</text>
                  <text x="172" y="212">2.05</text>
                  <text x="292" y="212">Token:</text>
                  <text x="340" y="212">0x69</text>
                  <text x="284" y="228">Payload:</text>
                  <text x="328" y="228">{</text>
                  <text x="356" y="228">1721</text>
                  <text x="384" y="228">:</text>
                  <text x="400" y="228">{</text>
                  <text x="424" y="228">...</text>
                  <text x="60" y="260">....</text>
                  <text x="116" y="260">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe    GW    Servers
   |      |      |      |  |
   |      +--------+--->|  |      Code: 0.01 (GET)
   |      |      |  '----->|     Token: 0x69
   |      |      | GET  |  |  Uri-Path: </c>
   |      |      |      |  |
   |<-------------------+  |      Code: 2.05 (Content)
   |      |      | 2.05 |  |     Token: 0x69
   |      |      |      |  |   Payload: { 1721 : { ...
   |      |      |      |  |
   |<----------------------+      Code: 2.05 (Content)
   |      |      | 2.05 |  |     Token: 0x69
   |      |      |      |  |   Payload: { 1721 : { ...
   |      |      |      |  |
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>Even higher amplification factors can be achieved when combining group requests
<xref target="I-D.ietf-core-groupcomm-bis"/> and observe <xref target="RFC7641"/>. In this case a single
request can result in multiple responses from multiple servers.</t>
        <t>An amplification attack using a multicast request and observe is
illustrated in <xref target="ampmulti_mn"/>. In this case a single request results
in n responses each from m different servers giving a total of n <contact fullname="⋅"/> m
responses. If each response is c times larger than the request,
the amplification factor is c <contact fullname="⋅"/> n <contact fullname="⋅"/> m.</t>
        <figure anchor="ampmulti_mn">
          <name>Amplification attack using multicast and observe</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="448" viewBox="0 0 448 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 32,48 L 32,464" fill="none" stroke="black"/>
                <path d="M 88,48 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,136 L 88,200" fill="none" stroke="black"/>
                <path d="M 88,216 L 88,272" fill="none" stroke="black"/>
                <path d="M 88,328 L 88,392" fill="none" stroke="black"/>
                <path d="M 88,408 L 88,464" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,120" fill="none" stroke="black"/>
                <path d="M 144,136 L 144,200" fill="none" stroke="black"/>
                <path d="M 144,216 L 144,272" fill="none" stroke="black"/>
                <path d="M 144,328 L 144,392" fill="none" stroke="black"/>
                <path d="M 144,408 L 144,464" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,72" fill="none" stroke="black"/>
                <path d="M 200,88 L 200,200" fill="none" stroke="black"/>
                <path d="M 200,216 L 200,272" fill="none" stroke="black"/>
                <path d="M 200,304 L 200,392" fill="none" stroke="black"/>
                <path d="M 200,408 L 200,464" fill="none" stroke="black"/>
                <path d="M 224,48 L 224,272" fill="none" stroke="black"/>
                <path d="M 224,304 L 224,464" fill="none" stroke="black"/>
                <path d="M 88,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 176,80 L 216,80" fill="none" stroke="black"/>
                <path d="M 40,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 40,208 L 224,208" fill="none" stroke="black"/>
                <path d="M 40,320 L 200,320" fill="none" stroke="black"/>
                <path d="M 40,400 L 224,400" fill="none" stroke="black"/>
                <path d="M 176,80 C 167.16936,80 160,72.83064 160,64" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="224,80 212,74.4 212,85.6" fill="black" transform="rotate(0,216,80)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="48,400 36,394.4 36,405.6" fill="black" transform="rotate(180,40,400)"/>
                <polygon class="arrowhead" points="48,320 36,314.4 36,325.6" fill="black" transform="rotate(180,40,320)"/>
                <polygon class="arrowhead" points="48,208 36,202.4 36,213.6" fill="black" transform="rotate(180,40,208)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Victim</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">GW</text>
                  <text x="208" y="36">Servers</text>
                  <text x="144" y="52">|</text>
                  <text x="296" y="68">Code:</text>
                  <text x="340" y="68">0.01</text>
                  <text x="384" y="68">(GET)</text>
                  <text x="292" y="84">Token:</text>
                  <text x="340" y="84">0x44</text>
                  <text x="168" y="100">GET</text>
                  <text x="280" y="100">Uri-Path:</text>
                  <text x="368" y="100">temperature</text>
                  <text x="304" y="132">Code:</text>
                  <text x="348" y="132">2.05</text>
                  <text x="408" y="132">(Content)</text>
                  <text x="172" y="148">2.05</text>
                  <text x="300" y="148">Token:</text>
                  <text x="348" y="148">0x44</text>
                  <text x="292" y="164">Observe:</text>
                  <text x="344" y="164">217</text>
                  <text x="292" y="180">Payload:</text>
                  <text x="356" y="180">"301.2</text>
                  <text x="396" y="180">K"</text>
                  <text x="304" y="212">Code:</text>
                  <text x="348" y="212">2.05</text>
                  <text x="408" y="212">(Content)</text>
                  <text x="172" y="228">2.05</text>
                  <text x="300" y="228">Token:</text>
                  <text x="348" y="228">0x44</text>
                  <text x="292" y="244">Observe:</text>
                  <text x="344" y="244">363</text>
                  <text x="292" y="260">Payload:</text>
                  <text x="356" y="260">"293.4</text>
                  <text x="396" y="260">K"</text>
                  <text x="60" y="292">....</text>
                  <text x="172" y="292">....</text>
                  <text x="88" y="308">|</text>
                  <text x="144" y="308">|</text>
                  <text x="304" y="324">Code:</text>
                  <text x="348" y="324">2.05</text>
                  <text x="408" y="324">(Content)</text>
                  <text x="172" y="340">2.05</text>
                  <text x="300" y="340">Token:</text>
                  <text x="348" y="340">0x44</text>
                  <text x="292" y="356">Observe:</text>
                  <text x="344" y="356">218</text>
                  <text x="292" y="372">Payload:</text>
                  <text x="356" y="372">"301.3</text>
                  <text x="396" y="372">K"</text>
                  <text x="304" y="404">Code:</text>
                  <text x="348" y="404">2.05</text>
                  <text x="408" y="404">(Content)</text>
                  <text x="172" y="420">2.05</text>
                  <text x="300" y="420">Token:</text>
                  <text x="348" y="420">0x44</text>
                  <text x="292" y="436">Observe:</text>
                  <text x="344" y="436">364</text>
                  <text x="292" y="452">Payload:</text>
                  <text x="356" y="452">"293.3</text>
                  <text x="396" y="452">K"</text>
                  <text x="60" y="484">....</text>
                  <text x="116" y="484">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Victim   Foe    GW    Servers
   |      |      |      |  |
   |      +--------+--->|  |      Code: 0.01 (GET)
   |      |      |  '----->|     Token: 0x44
   |      |      | GET  |  |  Uri-Path: temperature
   |      |      |      |  |
   |<-------------------+  |       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 217
   |      |      |      |  |    Payload: "301.2 K"
   |      |      |      |  |
   |<----------------------+       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 363
   |      |      |      |  |    Payload: "293.4 K"
   |      |      |      |  |
   | ....          ....
   |      |      |      |  |
   |<-------------------+  |       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 218
   |      |      |      |  |    Payload: "301.3 K"
   |      |      |      |  |
   |<----------------------+       Code: 2.05 (Content)
   |      |      | 2.05 |  |      Token: 0x44
   |      |      |      |  |    Observe: 364
   |      |      |      |  |    Payload: "293.3 K"
   |      |      |      |  |
     ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>An attacker can use the same techniques as in <xref target="ampmulti_nk"/> to increase the number of notifications.</t>
      </section>
      <section anchor="mitm-amplification-attacks">
        <name>MITM Amplification Attacks</name>
        <t>TLS and DTLS without Connection ID <xref target="RFC9146"/><xref target="RFC9147"/> validate the IP address and port of the other peer, binds them to the connection, and do not allow them to change. DTLS with Connection ID allows the IP address and port to change at any time. As the source address is not protected, an MITM attacker can change the address. Note that an MITM attacker is a more capable attacker then an attacker just spoofing the source address. It can be discussed if and how much such an attack is reasonable for DDoS, but DTLS 1.3 states that "This attack is of concern when there is a large asymmetry of request/response message sizes." <xref target="RFC9147"/>.</t>
        <t>DTLS 1.2 with Connection ID <xref target="RFC9146"/> requires that "the receiver MUST NOT replace the address" unless “there is a strategy for ensuring that the new peer address is able to receive and process DTLS records” but does not give more details than that. It seems like the receiver can start using the new peer address and test that it is able to receive and process DTLS records at some later point. DTLS 1.3 with Connection ID <xref target="RFC9147"/> requires that "implementations MUST NOT update the address" unless “they first perform some reachability test” but does not give more details than that. OSCORE <xref target="RFC8613"/> does not discuss address updates, but it can be assumed that most servers send responses to the address it received the request from without any reachability test. A difference between (D)TLS and OSCORE is that in DTLS the updated address is used for all future records, while in OSCORE a new address is only used for responses to a specific request.</t>
        <t>An MITM amplification attack updating the client's source address in an observe registration is illustrated in <xref target="amp_mitm_client"/>. This attack is possible in OSCORE and DTLS with Connection ID. The server will send notifications to the Victim until it at some unspecified point requires an acknowledgement <xref target="RFC7641"/>. In DTLS 1.2 the reachability test might be done at a later point. In OSCORE a reachability test is likely not done.</t>
        <figure anchor="amp_mitm_client">
          <name>MITM Amplification attack by updating the client's source address in a observe registration request</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="336" width="416" viewBox="0 0 416 336" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 32,48 L 32,160" fill="none" stroke="black"/>
                <path d="M 32,192 L 32,304" fill="none" stroke="black"/>
                <path d="M 88,72 L 88,120" fill="none" stroke="black"/>
                <path d="M 88,192 L 88,304" fill="none" stroke="black"/>
                <path d="M 144,80 L 144,112" fill="none" stroke="black"/>
                <path d="M 144,216 L 144,264" fill="none" stroke="black"/>
                <path d="M 144,280 L 144,304" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,160" fill="none" stroke="black"/>
                <path d="M 200,192 L 200,304" fill="none" stroke="black"/>
                <path d="M 32,64 L 128,64" fill="none" stroke="black"/>
                <path d="M 152,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 40,128 L 136,128" fill="none" stroke="black"/>
                <path d="M 160,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 32,144 L 128,144" fill="none" stroke="black"/>
                <path d="M 152,144 L 192,144" fill="none" stroke="black"/>
                <path d="M 96,208 L 200,208" fill="none" stroke="black"/>
                <path d="M 96,272 L 200,272" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="200,144 188,138.4 188,149.6" fill="black" transform="rotate(0,192,144)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="168,128 156,122.4 156,133.6" fill="black" transform="rotate(180,160,128)"/>
                <polygon class="arrowhead" points="136,144 124,138.4 124,149.6" fill="black" transform="rotate(0,128,144)"/>
                <polygon class="arrowhead" points="136,64 124,58.4 124,69.6" fill="black" transform="rotate(0,128,64)"/>
                <polygon class="arrowhead" points="104,272 92,266.4 92,277.6" fill="black" transform="rotate(180,96,272)"/>
                <polygon class="arrowhead" points="104,208 92,202.4 92,213.6" fill="black" transform="rotate(180,96,208)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="92" y="36">Victim</text>
                  <text x="144" y="36">Foe</text>
                  <text x="204" y="36">Server</text>
                  <text x="88" y="52">|</text>
                  <text x="144" y="52">|</text>
                  <text x="144" y="68">S</text>
                  <text x="272" y="68">Code:</text>
                  <text x="316" y="68">0.01</text>
                  <text x="360" y="68">(GET)</text>
                  <text x="56" y="84">GET</text>
                  <text x="260" y="84">Observe:</text>
                  <text x="304" y="84">0</text>
                  <text x="256" y="100">Uri-Path:</text>
                  <text x="332" y="100">humidity</text>
                  <text x="144" y="132">D</text>
                  <text x="268" y="132">Reachability</text>
                  <text x="340" y="132">test</text>
                  <text x="388" y="132">(DTLS)</text>
                  <text x="144" y="148">S</text>
                  <text x="88" y="164">|</text>
                  <text x="144" y="164">|</text>
                  <text x="60" y="180">....</text>
                  <text x="116" y="180">....</text>
                  <text x="172" y="180">....</text>
                  <text x="144" y="196">|</text>
                  <text x="272" y="212">Code:</text>
                  <text x="316" y="212">2.05</text>
                  <text x="376" y="212">(Content)</text>
                  <text x="172" y="228">2.05</text>
                  <text x="260" y="228">Observe:</text>
                  <text x="324" y="228">263712</text>
                  <text x="260" y="244">Payload:</text>
                  <text x="312" y="244">"68</text>
                  <text x="340" y="244">%"</text>
                  <text x="272" y="276">Code:</text>
                  <text x="316" y="276">2.05</text>
                  <text x="376" y="276">(Content)</text>
                  <text x="172" y="292">2.05</text>
                  <text x="260" y="292">Observe:</text>
                  <text x="324" y="292">263713</text>
                  <text x="260" y="308">Payload:</text>
                  <text x="312" y="308">"69</text>
                  <text x="340" y="308">%"</text>
                  <text x="60" y="324">....</text>
                  <text x="116" y="324">....</text>
                  <text x="172" y="324">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Client  Victim  Foe   Server
   |      |      |      |
   +-----------> S----->|      Code: 0.01 (GET)
   | GET  |      |      |   Observe: 0
   |      |      |      |  Uri-Path: humidity
   |      |      |      |
   |<------------D <----+  Reachability test (DTLS)
   +-----------> S----->|
   |      |      |      |
     ....   ....   ....
   |      |      |      |
   |      |<------------+      Code: 2.05 (Content)
   |      |      | 2.05 |   Observe: 263712
   |      |      |      |   Payload: "68 %"
   |      |      |      |
   |      |<------------+      Code: 2.05 (Content)
   |      |      | 2.05 |   Observe: 263713
   |      |      |      |   Payload: "69 %"
     ....   ....   ....
]]></artwork>
          </artset>
        </figure>
        <t>Where 'S' means the MITM attacker is changing the source address of the message and 'D' means the MITM attacker is changing the destination address of the message.</t>
        <t>An MITM amplification attack updating the server's source address is illustrated in <xref target="amp_mitm_server"/>. This attack is possible in DTLS with Connection ID. In DTLS 1.2 the reachability test might be done at a later point.</t>
        <figure anchor="amp_mitm_server">
          <name>MITM Amplification attack by updating the server's source address in a response</name>
          <artset>
            <artwork type="svg" align="center"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="368" width="472" viewBox="0 0 472 368" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 32,48 L 32,192" fill="none" stroke="black"/>
                <path d="M 32,224 L 32,336" fill="none" stroke="black"/>
                <path d="M 88,72 L 88,96" fill="none" stroke="black"/>
                <path d="M 88,128 L 88,144" fill="none" stroke="black"/>
                <path d="M 88,248 L 88,296" fill="none" stroke="black"/>
                <path d="M 88,312 L 88,336" fill="none" stroke="black"/>
                <path d="M 144,72 L 144,104" fill="none" stroke="black"/>
                <path d="M 144,120 L 144,152" fill="none" stroke="black"/>
                <path d="M 144,224 L 144,336" fill="none" stroke="black"/>
                <path d="M 200,48 L 200,192" fill="none" stroke="black"/>
                <path d="M 200,224 L 200,336" fill="none" stroke="black"/>
                <path d="M 32,64 L 192,64" fill="none" stroke="black"/>
                <path d="M 40,112 L 80,112" fill="none" stroke="black"/>
                <path d="M 104,112 L 192,112" fill="none" stroke="black"/>
                <path d="M 32,160 L 72,160" fill="none" stroke="black"/>
                <path d="M 96,160 L 192,160" fill="none" stroke="black"/>
                <path d="M 40,176 L 80,176" fill="none" stroke="black"/>
                <path d="M 104,176 L 200,176" fill="none" stroke="black"/>
                <path d="M 32,240 L 136,240" fill="none" stroke="black"/>
                <path d="M 32,304 L 136,304" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="200,160 188,154.4 188,165.6" fill="black" transform="rotate(0,192,160)"/>
                <polygon class="arrowhead" points="200,64 188,58.4 188,69.6" fill="black" transform="rotate(0,192,64)"/>
                <polygon class="arrowhead" points="144,304 132,298.4 132,309.6" fill="black" transform="rotate(0,136,304)"/>
                <polygon class="arrowhead" points="144,240 132,234.4 132,245.6" fill="black" transform="rotate(0,136,240)"/>
                <polygon class="arrowhead" points="112,176 100,170.4 100,181.6" fill="black" transform="rotate(180,104,176)"/>
                <polygon class="arrowhead" points="112,112 100,106.4 100,117.6" fill="black" transform="rotate(180,104,112)"/>
                <polygon class="arrowhead" points="80,160 68,154.4 68,165.6" fill="black" transform="rotate(0,72,160)"/>
                <polygon class="arrowhead" points="48,176 36,170.4 36,181.6" fill="black" transform="rotate(180,40,176)"/>
                <polygon class="arrowhead" points="48,112 36,106.4 36,117.6" fill="black" transform="rotate(180,40,112)"/>
                <g class="text">
                  <text x="28" y="36">Client</text>
                  <text x="88" y="36">Foe</text>
                  <text x="140" y="36">Victim</text>
                  <text x="204" y="36">Server</text>
                  <text x="88" y="52">|</text>
                  <text x="144" y="52">|</text>
                  <text x="272" y="68">Code:</text>
                  <text x="316" y="68">0.01</text>
                  <text x="364" y="68">(POST)</text>
                  <text x="60" y="84">POST</text>
                  <text x="256" y="84">Uri-Path:</text>
                  <text x="320" y="84">video</text>
                  <text x="88" y="116">S</text>
                  <text x="272" y="116">Code:</text>
                  <text x="316" y="116">2.01</text>
                  <text x="376" y="116">(Created)</text>
                  <text x="172" y="132">2.01</text>
                  <text x="88" y="164">D</text>
                  <text x="268" y="164">Reachability</text>
                  <text x="340" y="164">test</text>
                  <text x="388" y="164">(DTLS)</text>
                  <text x="88" y="180">S</text>
                  <text x="88" y="196">|</text>
                  <text x="144" y="196">|</text>
                  <text x="60" y="212">....</text>
                  <text x="116" y="212">....</text>
                  <text x="172" y="212">....</text>
                  <text x="88" y="228">|</text>
                  <text x="272" y="244">Code:</text>
                  <text x="316" y="244">0.01</text>
                  <text x="364" y="244">(POST)</text>
                  <text x="60" y="260">POST</text>
                  <text x="256" y="260">Uri-Path:</text>
                  <text x="320" y="260">video</text>
                  <text x="260" y="276">Payload:</text>
                  <text x="384" y="276">survailance_1139.hevc</text>
                  <text x="272" y="308">Code:</text>
                  <text x="316" y="308">0.01</text>
                  <text x="364" y="308">(POST)</text>
                  <text x="60" y="324">POST</text>
                  <text x="256" y="324">Uri-Path:</text>
                  <text x="320" y="324">video</text>
                  <text x="260" y="340">Payload:</text>
                  <text x="384" y="340">survailance_1140.hevc</text>
                  <text x="60" y="356">....</text>
                  <text x="116" y="356">....</text>
                  <text x="172" y="356">....</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art" align="center"><![CDATA[
Client   Foe  Victim  Server
   |      |      |      |
   +------------------->|      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |
   |<-----S <-----------|      Code: 2.01 (Created)
   |      |      | 2.01 |
   |      |      |      |
   +----> D------------>|  Reachability test (DTLS)
   |<-----S <-----------+
   |      |      |      |
     ....   ....   ....
   |      |      |      |
   +------------>|      |      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |   Payload: survailance_1139.hevc
   |      |      |      |
   +------------>|      |      Code: 0.01 (POST)
   | POST |      |      |  Uri-Path: video
   |      |      |      |   Payload: survailance_1140.hevc
     ....   ....   ....
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="summary">
      <name>Summary</name>
      <t>CoAP has always considered amplification attacks, but most of the requirements in
<xref target="RFC7252"/>, <xref target="RFC7641"/>, <xref target="RFC9175"/>, and
<xref target="I-D.ietf-core-groupcomm-bis"/> are "SHOULD" instead of "MUST", it is
undefined what a "large amplification factor" is, <xref target="RFC7641"/> does not specify
how many notifications that can be sent before a potentially spoofable
acknowledgement must be sent, and in several cases the "SHOULD" level is
further softened by “If possible" and "generally". <xref target="I-D.ietf-core-conditional-attributes"/>
does not have any amplification attack considerations.</t>
      <t>QUIC <xref target="RFC9000"/> mandates that ”an endpoint MUST limit the amount of data it sends
to the unvalidated address to three times the amount of data received from that
address” without any exceptions. This approach should be seen as current best practice
for non-constrained devices.</t>
      <t>While it is clear when a QUIC implementation violates the requirement in <xref target="RFC9000"/>, it
is not clear when a CoAP implementation violates the requirement in <xref target="RFC7252"/>,
<xref target="RFC7641"/>, <xref target="RFC9175"/>, and <xref target="I-D.ietf-core-groupcomm-bis"/>.</t>
      <t>In CoAP, an address can be validated with a security protocol or by using the Echo Option <xref target="RFC9175"/>. Restricting the bandwidth per server is not enough as the number of servers the attacker can use is typically unknown. For multicast requests, anti-amplification limits and the Echo Option do not really work unless the number of servers sending responses is known. Even if the responses have the same size as the request, the amplification factor from m servers is m, where m is typically unknown. While DoS attacks from CoAP servers accessible over the Internet pose the largest threat, an attacker on a local network (e.g., a compromised node) might use local CoAP servers to attack targets on the Internet or on the local network.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The whole document can be seen as security considerations for CoAP.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Informative References</name>
      <reference anchor="RFC7252">
        <front>
          <title>The Constrained Application Protocol (CoAP)</title>
          <author fullname="Z. Shelby" initials="Z." surname="Shelby">
            <organization/>
          </author>
          <author fullname="K. Hartke" initials="K." surname="Hartke">
            <organization/>
          </author>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <date month="June" year="2014"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
            <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7252"/>
        <seriesInfo name="DOI" value="10.17487/RFC7252"/>
      </reference>
      <reference anchor="RFC7641">
        <front>
          <title>Observing Resources in the Constrained Application Protocol (CoAP)</title>
          <author fullname="K. Hartke" initials="K." surname="Hartke">
            <organization/>
          </author>
          <date month="September" year="2015"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP) is a RESTful application protocol for constrained nodes and networks.  The state of a resource on a CoAP server can change over time.  This document specifies a simple protocol extension for CoAP that enables CoAP clients to "observe" resources, i.e., to retrieve a representation of a resource and keep this representation updated by the server over a period of time.  The protocol follows a best-effort approach for sending new representations to clients and provides eventual consistency between the state observed by each client and the actual resource state at the server.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7641"/>
        <seriesInfo name="DOI" value="10.17487/RFC7641"/>
      </reference>
      <reference anchor="RFC8152">
        <front>
          <title>CBOR Object Signing and Encryption (COSE)</title>
          <author fullname="J. Schaad" initials="J." surname="Schaad">
            <organization/>
          </author>
          <date month="July" year="2017"/>
          <abstract>
            <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size.  There is a need for the ability to have basic security services defined for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol.  This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization.  This specification additionally describes how to represent cryptographic keys using CBOR.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8152"/>
        <seriesInfo name="DOI" value="10.17487/RFC8152"/>
      </reference>
      <reference anchor="RFC8323">
        <front>
          <title>CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets</title>
          <author fullname="C. Bormann" initials="C." surname="Bormann">
            <organization/>
          </author>
          <author fullname="S. Lemay" initials="S." surname="Lemay">
            <organization/>
          </author>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
            <organization/>
          </author>
          <author fullname="K. Hartke" initials="K." surname="Hartke">
            <organization/>
          </author>
          <author fullname="B. Silverajan" initials="B." surname="Silverajan">
            <organization/>
          </author>
          <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor">
            <organization/>
          </author>
          <date month="February" year="2018"/>
          <abstract>
            <t>The Constrained Application Protocol (CoAP), although inspired by HTTP, was designed to use UDP instead of TCP.  The message layer of CoAP over UDP includes support for reliable delivery, simple congestion control, and flow control.</t>
            <t>Some environments benefit from the availability of CoAP carried over reliable transports such as TCP or Transport Layer Security (TLS). This document outlines the changes required to use CoAP over TCP, TLS, and WebSockets transports.  It also formally updates RFC 7641 for use with these transports and RFC 7959 to enable the use of larger messages over a reliable transport.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8323"/>
        <seriesInfo name="DOI" value="10.17487/RFC8323"/>
      </reference>
      <reference anchor="RFC8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <date month="August" year="2018"/>
          <abstract>
            <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8446"/>
        <seriesInfo name="DOI" value="10.17487/RFC8446"/>
      </reference>
      <reference anchor="RFC8613">
        <front>
          <title>Object Security for Constrained RESTful Environments (OSCORE)</title>
          <author fullname="G. Selander" initials="G." surname="Selander">
            <organization/>
          </author>
          <author fullname="J. Mattsson" initials="J." surname="Mattsson">
            <organization/>
          </author>
          <author fullname="F. Palombini" initials="F." surname="Palombini">
            <organization/>
          </author>
          <author fullname="L. Seitz" initials="L." surname="Seitz">
            <organization/>
          </author>
          <date month="July" year="2019"/>
          <abstract>
            <t>This document defines Object Security for Constrained RESTful Environments (OSCORE), a method for application-layer protection of the Constrained Application Protocol (CoAP), using CBOR Object Signing and Encryption (COSE).  OSCORE provides end-to-end protection between endpoints communicating using CoAP or CoAP-mappable HTTP. OSCORE is designed for constrained nodes and networks supporting a range of proxy operations, including translation between different transport protocols.</t>
            <t>Although an optional functionality of CoAP, OSCORE alters CoAP options processing and IANA registration.  Therefore, this document updates RFC 7252.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8613"/>
        <seriesInfo name="DOI" value="10.17487/RFC8613"/>
      </reference>
      <reference anchor="RFC9000">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar">
            <organization/>
          </author>
          <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
            <organization/>
          </author>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document defines the core of the QUIC transport protocol.  QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances.  Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="RFC9146">
        <front>
          <title>Connection Identifier for DTLS 1.2</title>
          <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla">
            <organization/>
          </author>
          <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig">
            <organization/>
          </author>
          <author fullname="T. Fossati" initials="T." surname="Fossati">
            <organization/>
          </author>
          <author fullname="A. Kraus" initials="A." surname="Kraus">
            <organization/>
          </author>
          <date month="March" year="2022"/>
          <abstract>
            <t>This document specifies the Connection ID (CID) construct for the Datagram Transport Layer Security (DTLS) protocol version 1.2.</t>
            <t>A CID is an identifier carried in the record layer header that gives the recipient additional information for selecting the appropriate security association. In "classical" DTLS, selecting a security association of an incoming DTLS record is accomplished with the help of the 5-tuple. If the source IP address and/or source port changes during the lifetime of an ongoing DTLS session, then the receiver will be unable to locate the correct security context.</t>
            <t>The new ciphertext record format with the CID also provides content type encryption and record layer padding.</t>
            <t>This document updates RFC 6347.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9146"/>
        <seriesInfo name="DOI" value="10.17487/RFC9146"/>
      </reference>
      <reference anchor="RFC9147">
        <front>
          <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <author fullname="H. Tschofenig" initials="H." surname="Tschofenig">
            <organization/>
          </author>
          <author fullname="N. Modadugu" initials="N." surname="Modadugu">
            <organization/>
          </author>
          <date month="April" year="2022"/>
          <abstract>
            <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
            <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability.  Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
            <t>This document obsoletes RFC 6347.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9147"/>
        <seriesInfo name="DOI" value="10.17487/RFC9147"/>
      </reference>
      <reference anchor="RFC9175">
        <front>
          <title>Constrained Application Protocol (CoAP): Echo, Request-Tag, and Token Processing</title>
          <author fullname="C. Amsüss" initials="C." surname="Amsüss">
            <organization/>
          </author>
          <author fullname="J. Preuß Mattsson" initials="J." surname="Preuß Mattsson">
            <organization/>
          </author>
          <author fullname="G. Selander" initials="G." surname="Selander">
            <organization/>
          </author>
          <date month="February" year="2022"/>
          <abstract>
            <t>This document specifies enhancements to the Constrained Application Protocol (CoAP) that mitigate security issues in particular use cases. The Echo option enables a CoAP server to verify the freshness of a request or to force a client to demonstrate reachability at its claimed network address. The Request-Tag option allows the CoAP server to match block-wise message fragments belonging to the same request. This document updates RFC 7252 with respect to the following: processing requirements for client Tokens, forbidding non-secure reuse of Tokens to ensure response-to-request binding when CoAP is used with a security protocol, and amplification mitigation (where the use of the Echo option is now recommended).</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9175"/>
        <seriesInfo name="DOI" value="10.17487/RFC9175"/>
      </reference>
      <reference anchor="I-D.ietf-core-conditional-attributes">
        <front>
          <title>Conditional Attributes for Constrained RESTful Environments</title>
          <author fullname="Michael Koster" initials="M." surname="Koster">
            <organization>Dogtiger Labs</organization>
          </author>
          <author fullname="Alan Soloway" initials="A." surname="Soloway">
            <organization>Qualcomm Technologies, Inc.</organization>
          </author>
          <author fullname="Bill Silverajan" initials="B." surname="Silverajan">
            <organization>Tampere University</organization>
          </author>
          <date day="14" month="January" year="2023"/>
          <abstract>
            <t>   This specification defines Conditional Notification and Control
   Attributes that work with CoAP Observe (RFC7641).

Editor note

   The git repository for the draft is found at https://github.com/core-
   wg/conditional-attributes/

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-conditional-attributes-06"/>
      </reference>
      <reference anchor="I-D.ietf-core-groupcomm-bis">
        <front>
          <title>Group Communication for the Constrained Application Protocol (CoAP)</title>
          <author fullname="Esko Dijk" initials="E." surname="Dijk">
            <organization>IoTconsultancy.nl</organization>
          </author>
          <author fullname="Chonggang Wang" initials="C." surname="Wang">
            <organization>InterDigital</organization>
          </author>
          <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
            <organization>RISE AB</organization>
          </author>
          <date day="11" month="January" year="2023"/>
          <abstract>
            <t>   This document specifies the use of the Constrained Application
   Protocol (CoAP) for group communication, including the use of UDP/IP
   multicast as the default underlying data transport.  Both unsecured
   and secured CoAP group communication are specified.  Security is
   achieved by use of the Group Object Security for Constrained RESTful
   Environments (Group OSCORE) protocol.  The target application area of
   this specification is any group communication use cases that involve
   resource-constrained devices or networks that support CoAP.  This
   document replaces RFC 7390, while it updates RFC 7252 and RFC 7641.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-groupcomm-bis-08"/>
      </reference>
      <reference anchor="I-D.ietf-core-oscore-groupcomm">
        <front>
          <title>Group OSCORE - Secure Group Communication for CoAP</title>
          <author fullname="Marco Tiloca" initials="M." surname="Tiloca">
            <organization>RISE AB</organization>
          </author>
          <author fullname="Göran Selander" initials="G." surname="Selander">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="Francesca Palombini" initials="F." surname="Palombini">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="John Preuß Mattsson" initials="J. P." surname="Mattsson">
            <organization>Ericsson AB</organization>
          </author>
          <author fullname="Jiye Park" initials="J." surname="Park">
            <organization>Universitaet Duisburg-Essen</organization>
          </author>
          <date day="20" month="December" year="2022"/>
          <abstract>
            <t>   This document defines Group Object Security for Constrained RESTful
   Environments (Group OSCORE), providing end-to-end security of CoAP
   messages exchanged between members of a group, e.g., sent over IP
   multicast.  In particular, the described approach defines how OSCORE
   is used in a group communication setting to provide source
   authentication for CoAP group requests, sent by a client to multiple
   servers, and for protection of the corresponding CoAP responses.
   Group OSCORE also defines a pairwise mode where each member of the
   group can efficiently derive a symmetric pairwise key with any other
   member of the group for pairwise OSCORE communication.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-oscore-groupcomm-17"/>
      </reference>
      <reference anchor="DDoS-Infra" target="https://www.darkreading.com/attacks-breaches/critical-infrastructure-under-attack-/a/d-id/1340960">
        <front>
          <title>Critical Infrastructure Under Attack</title>
          <author>
            <organization/>
          </author>
          <date year="2021" month="November"/>
        </front>
        <seriesInfo name="Dark Reading" value=""/>
      </reference>
    </references>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to thank
<contact fullname="Sultan Alshehri"/>,
<contact fullname="Carsten Bormann"/>,
<contact fullname="Klaus Hartke"/>,
<contact fullname="Jaime Jiménez"/>,
<contact fullname="Ari Keränen"/>,
<contact fullname="Matthias Kovatsch"/>,
<contact fullname="Achim Kraus"/>,
<contact fullname="Sandeep Kumar"/>,
and
<contact fullname="András Méhes"/>
for their valuable comments and feedback.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1czZLcRnK+11PUNsNBMjiN+eWQnJBkjWYo7ohLkcseWkdF
NVDdDQ2A6kUB02pR49iLT34FOxyO8GVfwCff+CZ6Emdm/aDQjf4ZilxRDs9h
uhsoVGVmZX6ZlZWFfr/PqrTK5AnvnebTLB2lsahSVfDTqhLxleZvdFqMeTWR
/EwVuipFWsiEn06hrW35qlSVilXG752p01f3e0wMh6W8hh7xN+/stsfgtxyr
cn7C02KkGEtUXIgc6EhKMar6aVmN+tVBVY77IuygL0wH/b0DputhnmoNV6v5
FJ68eH35Ned3uMi0gtHTIpFTCf+KqrfDexenX8GHKuEbtOuxos6HsjxhCRBy
wmJgTha61ie8KmvJgPxDJkopTlz7mSqvxqWqp3DlcgJC6VeqT1967ErO4XZy
wnifF/LHio9lIUsiGC/VRRqrkr7qqSivMhRpkoI002FdgTgzmYxlya5lUQMt
nK8ah3PDae+11FKU8YQ/w5Z4IxdpBjdIZF+i9CJV0hPYDG5MqmqqT3Z3sR1e
Sq9llErTbBcv7Joed/9RYpPvMyDvc+oNOxmn1aQeuv5310wMts5ApLoKBqX2
kekkStW653e3m/9oUuVZjzFRVxMFswhyJ+35Rk1QI2X97j/4C2irNU4B6Fha
paAX0CCCn7ouTfPlliCOE/60TGP8zU+/QglafXZXsYOqlBI4HDzt7x8f8cd7
fAA2cDVRWQ53Y1UXFar2YCZB/eCKNNPzA1AX5XawL6XtL4pV7hl49u6/S1Hw
gcwEqG4ZEhtc+6hUglmKItJ2tG4yzyYlKEgKlJ7m+t3/aB0S2lwydIItjOf8
j6K8BrVA3R+orMbZ1M2gcSRyXUutv5TUfOJbR6JirFAlyA2U9oQxBIzmF+ev
vz57dPDw4MR+PT7at18f7/urjw8PDt3Xo6Nj9/V43119sre3577u+wbw9ZH/
+ughfr3on5Ph9MGkJfwrkhRZERmqpjFovdyOLBoEmPeHacdtpdutiK/zczXo
XxSjUuADYPuiHON0OquazWZRAnACKJWgnODBXQePoAsinki9G5dAXgzUpdgR
aEQdVzUMVePcWmvq74rdpJ8mu/uHR3tPjvfMaNYtnNkO+EWrA/4GO7B43qMn
NGiK1Dg7hl7Oe+dAHn9t6DONCG75t+paIvzyg72Dfcb6/T7oL3qXGOYaHYqM
SVEuikqWhay4GnHCQM3vXajL+zyR12ksNRdjcEi64pZvnmpeqIrLQtXjScSg
LTSdZmqegxuAexLQtlKAllcS9VWCZxMVurc5AKWkZ2sNbUDD2HmA0OeyAPzo
q1F/IEscmt/D6bnvBo5otjwZ0BcDqEa5ZXOeqELyGaAf2Fw+LRV4LejSsQAu
ie61cM71xGryvwIch1IjeEqruoTRRZKUYCwRSkXDAHGNDAJOg9Fw+SP2hV2P
wM2MRrKEewyYBB0zc9k5Fq+39vXM+HocXgJeQI/EQtUiBr6DqKEXDfTOQCQF
UMwBVBjOgAL7BV0wrjKN8Tqf2u77eipjpI+XEs0BvDiNDxwVRF+txVgCewzJ
iABPcvxFt8CvxrVGATu2YkCpoeQ56PFY4GQO53aigV32rRrIGCcBrjYCeBpP
FFdTHDQy+pmnSZJJxu6gUpYqATNA985ewtym+VSVlQCeHQdGi4DPFDUY1NoI
aJU+Mww+VEnS4dC6FhX+QgluH3nxt28tFN7cRCQZxzoRgwSougIzjWuw6TmQ
Rr1rxVFNoYURRa4SyUHrgZY5cwSj5i8YoLMqfi2yGuXmOzZTCdMbz/lM1VmC
BHDBfAMvJV1DDCM0P7/808CQj4h7c7PD/QWEa7wAM/RycPby9VN7GaD75gY1
aWrggiPDO3w2kWTVksMMop2CpJfHNZGhVycQbqFxCplvgTzgrSmYmSxMPzSX
uUxSgUBnlB85g1skbQC1kr85f0UPE0upZlaVQbwg72CG/AhLPVyemR5MB3y5
A3RmOMVWHlYA2nQBfGHECB/OJpshXg6c9PZbJOCD7OXwB+gF8M0Ky2h/KG1q
jypVoZABIqVXLiIcFcaLMjKxaTNpG1wedB9qa6VYOLG2szNoiNG0sKStcbIo
oP93JbdxJa1hgXvBJzWgLAI2SHaGD8OIw0zmyBO6eys41AoXJbTDDJiiJooB
c8WmFocJzlFQsdJVNofJQnPaxpPxbT0ZOQf23UQWjYU7XQUz3fG6HyIfWlyt
YwnaD6ziDBs5sYtXTlRGgiRMhGuUFI4HrUv5F4hhK9JkaFlnFRptDp/plG7D
k7DQ1GwEU9dcR1HKUu9wD9oTcS05XJvDYqrESWixOQIXAf4hYu/lfjnFfhr8
FYZlKNpW78xrXmEU3HnqcOJ0nVYC5YOaEAf+yVsTPAzWhqtmg5QM0dOQhaaB
cq3HYxQW2Q1xDvdyRJXrOsP1s5V/9xTDUwVTiEQe1kEg7KOGAs5FPXpI6HKn
O7kRaB9/eydR+oaBHwUl6bL8xvB3QGb2q0TrQv8k7PSbZAXyZTVMMyDTqxNJ
ya4P0AFMFQjb+KfEj2ntFZgfTyqUQiwIn4ZzRj6w/TRGXjK9NojhdBBXjGSK
ohI7ROLyfebvJwrvTqS4Js8LWoFyIU9upatAuzACyCVM+3yHyyqOuBFVA5hs
A2AaM3aW1xJLjMpApmZpZI0gjVWjyuCARaeWma67bM+FZpTkAWFWMynJL0JE
UoE96vSnRg1BGigsUvpA1M77dj/BzASgA0EGiBCrHBHgVWX9jQ3iVocpxANb
osf3Droe0OSVI0RbYQNF0wfbhqfV4zlumFf1LcZckOOyRGgWmysAg1KDTxqa
qImAUUuK2HdaD1o7Q68Kk0rg4yxsh/kJMrxZFhZbW2WL+FfzxjGYwJr8a+A3
rPBMf0AaKHOV5iQ0OyrZkzZW4fMcqI+aTxXYD0Eucq8leAeRMes6WtiBKGd9
y9xqsLNcgOnRyK624lIirIswFcmW8cJ060Nloj3iW3tVttar8g6vakOBTrNz
UzKEL7M0AadnQnlHXibmQIY3CrfMIA7QXliqfVRmVgkii+uMxjCAuXLYZkiU
r4zG0Y5BUdMByM6g2myiMuJrirMBesTfvDqHH/NMiUQT/JF03BUzbMgQToy2
PpQspYukJiZMC/fABCwJ2IdAuVMCCyMxPaHFWYuJwPEZWRqU0eTkU4gbTNSL
YTolgIx22CkbqSwzgaI1Nk1x3AcJ49idO3yQYjfdXpex024Q5z7udTGasVhk
Ks2yGkOXyq2uoAPTDB38xci6luaBmIPBAiPkTcoGp6z5rncYMXDxz/DHhdDX
Y/ZPxvo5/1pJ+D8gS8Yk2c8me+Y+gksP+vj3hf11BpZ1wveivX1+79nTy/ut
Z+EC/XpTpv1XopqcgK8qEkCOv9TgPFYN81k/+HsQDnMQ7T3ERANFce2h6Bb+
emVU+oT3fgCxgpJQiMHnquZqhkFtZiRKqed5Bw08/EuU1MVd8EmShAxqiB1R
ZEy6rWad4mr1gRFw7aZIEwTWYHFfowHNgJF5f2MPk1ICC1JgfH5x9xrXvAB9
ydxEMLySWbapD6R7hgxccMzBoLsDQuDqH/gpxslqFkXRpk5mMBAijlHmJgE/
U7kAr3aBsHS32tSLFgAY1R96pIjs7Qm/41XepHw/v3t6CyO6C0s4CvL7IkvH
xee9WGL00bsx5hh6JAdTC/gN8YcLJK1PI9V1XhjiQaMzxtGBF5miw9Hs1ZvL
3VcvB5eEkk5VshRCe6MdRhUpgGhH1jlIAODLrS5aZHVZLgMKyVXSYgnRNTHf
MagxXox8v29TyJm/o5fHxu3J1qg+ONuNcI77V6APxS5mNCK+CtOaNJfvG8KF
rMYYUK9mZQXkUbDwPQQYFa1rPg5IHfB7OF9t6KAZbKFUThsD3Wrs8WWCSgt6
lgjgN5rI63gFSZyDZUX2433J3gJbV1L9IVF1a65/5xy1Jy0EqkZRtwArBycO
Sky2BvPCADid9rEGze6sX+y/HBI+Aep1JWpc3kFDp3SzqDJMjZcAADMMpGGh
OqT0CeVxlOnMZouPj/bBKvnpe6SZmoWSQc/V4Yknsck5RZsiKkfmEqiwAFSg
EVIPII4bkphsaXrbLrAap9QzZqYc3ziR1J27YISgUQpFawy9ISIDGb/95V//
5ebmhhcfODrbLjzDv0t1JQto+ePjwxXu26oXtOlu0Jit+glWp78GDLss+xam
fTt2Hu/tPX64olETTB7sR0d8Oh1e9z4Vxo62Yex4G8YeNoxtgj0wpS1Qz1rl
usDMZC5Eco2om/xqEy+u0MIhAjK2KkufABE5xPpZios9B8bGyk3vzVKQJEv7
Fxjc2XSn3mHtUNFClIudEhrUh2PY1tKb+Pirne1hGH9VZTpGiGnBBEFKKxQM
M0+tpphr6gxJTdyZix95UBXCfVXI0nZVd+0IbbO1IkbWomtEmFfEcyRumYdm
a24V7pksAJCZ5nXOpzBdKgmoRAZgxAQfsqGka4tzt4MYC6t7oF3vNInPmaIE
gYxrLMtZoOse+DhK1KvS5P4h5nUThJkJGHUiAIwB88cyuR9ZsNXcJiimtY3s
/YYtSRn3nQ2FEFTHmFsyU5NSvmJaSuDBbFKQj12QVSlNLlFQamOUljk1RRnO
Jin4lhdSU5XBxTkWAtpdSZRpjAE6leyZnUC7oLDbav8nvEgl8ykWMNZlly8x
Lf9cS6wew6n4vLcX7a8C5w/G1kbQ/buy9ek504P9R4fHB5udzpMn0SP+fOV0
/V395Ieh+ROdi1WtPuW5uB3Nm0KW4mr7iGVn+/hhZ3HLZAHbwV2Av6z4/p6N
NyQta4zbev9FnqlBee12YH/Ltd7CEm+5kuCWCz3j6KmAxo9Ie2a4bYRBDo0Q
C7PDOixBFehHuPWKPtxsDdBjQ/DKMDGJ9HszCjP9tijApLZclIMq0b7P75kd
FtEqdMHu7tsNQ8wsm0doO8VthOFWuNEus1XlY4amAKhcQdGlj+m0HYNydZgs
jGn3mlKGkxIzuEAYVhDMwPffe/bdfVv8g/thuGmnqeZf0MrUJh/SAmspvBTt
ddruNlVwWJSPxUrgnFDB12yItKZJN/unfocQRspEXUCvPgHguN+4qhfLWrA6
9M9JW52qLvDcrMp1IxnqolJMBLJoD2g3pJ10jaX75X2+VEQTLCPs5DXphtts
3bBtEwV5uP9eBTpT69oWaVGYi2EidXotypSCy3xtcMiffYf/bfC7MpH/c1dc
he7BhleL6b6uAMt93A2DMu8qjp90NXZB2c9hRPXZbvzFZkpbbqzxZi1K1/iz
Bbe2FbWegNB3veX7jw72OX5Zt+Gylu5b5Dt/K7o3eeV8C6fsrXONu3x6De7M
7jmv9TVgiqnEZXngAJeBjG2o5yQo6PSXF7bEI8ZFsvOc7HZZ0kUXugVQLqF5
i8JUs9V7LXmxku5F+GSU1GyoJWBbBX24326IM1VFmCMIoYsF9SofFSRbo/4+
YO+oM0LuhL1NC8mNKNKg33vCyCayQxxphfgbGzeR/uHefnTQvTrZgsXbrFg+
IIurlzBdLB48OYyOtmLRYar9W7HS3EIuv9nUP77l1B/+/qZ+c+P21G/F4kZ3
WtzGn4Y+4hbVE7VLS+OaGJYJkyJFRMb0ZduzYDZ+qa6hKXtdTGXDkvfFxeWL
VTVVeAbFn2ZxJ4hgHgtT38Uvzv2xneObm+AED2ZnUzzsZ1YfTZUfHQ7CJL/N
rdsSbom7kxAWJLQSzV1ZaeyH2rGFHhRaC6wz8w1N4jhqiFygkFrrlYT4HjBx
IIo5uUBahAdVnO4pW75uz6bIhOo7SIKt6bIdkrd05yuaRcPSI3TagnZlYjE1
eWh3q8KQKdwRoNKqrkJTP9BF5QKvpgI+HRHDExAbFZeaNadXUiAAtUUVvqgf
S6x36BwYiRXhgFL12rDQo4OHzdMwmzBXMawxTZBH+xCGL1sdrud5LqtyHlSx
7/rQI7fJdtx10VEvPAsGSmopOOia3ED9qNu09CSawIWKdkv+4s3gkn/7EiuL
ppmIW3PTg6VrhrP7y1//LSDchG7jOckD3w5gM1N22Yd1Pqi3oW64qiI7rDvV
iNkDI0c80Fgm+pe//jvJFguXSKGoTpI0IJGVSDPtYi9R0YRqKXMIy9IryVts
4UTDvJRVULi5RBhtDPmjFmZ/ZFtK0Sg01tFjeSjuz9HRAq8Ta2bk0fKMUP0m
7prYTJ2fFNrFWzcnMAlpCRxA2IVpBEMSHXIWwzTD82rI4O3EunyesHnQWo4X
oSFQG4tIvYEJreucNoaAvRzrUlwgjkVt7RMaAXPYg6+ID3NoFNc7nEUsWmIR
8y0u7I+l34G7d37fYbVlK9X+hADNFg5juEhCjfXV0ICSfFTTqS079XiaMs1w
w9X1KUi3gqdVkc2bLhYOpASneE2yi9yaQb5OTxlu5Zq87129BMCEhm6RFZaH
rCro/T5Pq/x70x+uuhaQy2fNAjZDj9fW7jBLCLdBZjTR7QS0nWy70KmLKs1w
xp0l1UVzptMdtrFmgojc3l9cWul6MDR6s6AewWkKPKaAzqZtuRfBZC4/nRqM
ycyxKOyivXY7M9l4x9qmbU37gXceBMHhF3wQrsBWLNrCXcDgY9N2H19Yq03q
PE3SNeXGHXHsOf/MBrGvl0R0Dyfg/mqW1o/TCib5pnVEeOe9Su7sh98RapYD
x4eP9ldtvJmPJlQ+fsz/YU2c/JGpXLueC6l8YqnslHEYt4eI4GL3jijYYsRw
vj0ydQOTxb814f53FHXcHdylancTeS6FiBRUdgd9Lpp2cRQi2N3z7XtLaCPN
st3Z5a3A2+Bjh4jWIbR5aANCr4TlX42MnThnAM6h3W1xzoNDB84FtdCuCLrd
Y4Ng12ki1VbwNeCh/bVGPaBRz+jMV7LK/Pb5Bvh6YLDufJG7dTDZSduDDw2T
DxZJChp8HLnzAHxgbXCNb9aCkOz7/f3DJ6uqsz9Rgo/2uouv+UrwtBHQrcFz
JTIU5jzFplMld/igznNRzpl5wwluOotsJuatE2qdu6cmdqcgXY181A1hlynj
op1N/3qOnTDu2gkPflMiYvNeBcB5b/DHl2/+dN7j+F4JKRIctodLnt6OWYQx
PEM3MsUAlBfgvdXH/aEb3aKqWayYcHLOaHWPq4aFcBT7dmUJtDVvKgQFIB86
45R2LSmlgKtCthiB5uYwFz27YyslfUFGTCcPUZqe3QxuZcjeqC4pu6PVCMYx
h41hOXcx8pDeo+565n15QEUv2rpMknn26UgYst3pmJxa+JTXn99cnNkJ3dvb
w/0JUSRNZgPWkHi+052DpyVqc66ofQgep5FOEDMb8teFy3s1iyy6hYfIzNZK
Ry+Lh6NFxezDuKANl4PyRzpDi4xYLzmFRTvu4jSHOTWuB7GssS5LM9u4bsaX
EKWxZCMqwiz6HS9tiDAOoQWfOfGZSVGabI7gJLT28h3gRmW+SDSwJf+iGiNf
VHZm82atPs07H27ZpzVPttY8t3g1DMQL5o1Bool4XGmMn0LzNpWOFwh1viTi
5fJLIsAx4tnq2ONfU808laVbR7ZeNYNT187Z+tKW8LiXSwrjMt8fBa4LOjxm
DjgubU9S3VSVtt+o6Cpr3cnqkBObbYWYITM1TFcuKdNNoDvI1+QBgDpLEW0W
p+0Ttbo5zUl5baq5Fs3crz9Ra/dA3eD48hD3/qd8hViMeofvuaFOWgVEQa0P
VT61aocAt6Q9HF3al5dgRNU+5fdJVDORq3R6e9bCQHNY25xT96+L8f7BgIdX
+TZ8UprHHsjGV6Gdfnva0Xn4Ghp00IXCl5r55/Ep+1a1IbBGL1JZKKrGYMPo
l0w+741EpiV6fzqgT6/81PbNYiYjqiitdwWg8HYAWo+vpcz0RE7K9MZgxdsz
UYIPLvhX+EqFonCXn2ei1vhqyupKumvfCMBp/k2av/tbIX9yV0/LlD+X5bv/
KqR/Gt8bOkmBwefqWlQ6nvjG8QTWC89L6NxdGuDbNOWUP68heqGLJox4e1ok
5bv/1PzFu79N0K/dMPtugrSkEndK1Jq34FkzHUmZDOnU/f8CDX5H2sBXAAA=

-->

</rfc>
