<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' []>
<rfc ipr="trust200902" category="info" docName="draft-lvelvindron-ack-throttling-00">
<?rfc toc="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc private=""?>
<?rfc topblock="yes"?>
<?rfc comments="no"?>
<front>
<title abbrev="Handling ACK throttling">Handling ACK throttling</title>

<author initials="L." surname="Velvindron" fullname="Loganaden Velvindron">
<organization>hackers.mu</organization>
<address>
<postal>
<street>88 Avenue De Plevitz Roches Brunes</street>
<city>Rose Hill</city>
<code>71259</code>
<country></country>
<region></region>
</postal>
<phone>+230 59762817</phone>
<email>logan@hackers.mu</email>
<uri></uri>
</address>
</author>
<date year="2016" month="August" day="10"/>

<area>Internet</area>
<workgroup>TCP Maintenance and Minor Extensions</workgroup>
<keyword></keyword>


<abstract>
<t>The functionality provided by the TCP ACK throttling mechanism
can be exploited as a side channel vulnerablity to terminate connections
between two arbitrary hosts and inject data in the communication stream.
</t>
</abstract>


</front>

<middle>

<section anchor="introduction" title="Introduction">
<t><xref target="RFC5961"/> defines the challenge ACK response mechanism as a technique to
mitigate against blind in-window attacks. Specifically, an ACK packet is sent
in response to an incoming segment with a SYN bit to confirm that the preceding connection
was lost. Another case is sending an ACK packet if the RST packet
is received but the sequence number does not match the next expected sequence
number. Lastly, to prevent data injection, the range of valid ACK value is
reduced for better strictness, so the likelihood of old ACK values and very
new ACK values are discarded. In all of those cases, the ACK packet is
referrered to as a &quot;Challenge ACK&quot; through the rest of this document.
</t>
<t><xref target="RFC5961"/> also introduces an ACK throttling mechanism to reduce possible
wastage of CPU and bandwidth resources by limiting the number of challenge
ACK that can be sent in a given interval.
</t>
<t>An attacker can leverage the Challenge ACK and the ACK throttling mechanism
to abuse on the global ACK throttling rate-limit on a target host. Through
a series of step, the attacker can send spoofed packets to the target host,
affect the the global challenge ACK rate-limiter, Count the number
of challenge ACK received, and finally compare that number with the target
system limit.
</t>
<t>The attacker can then gather clues about: the existence of a 4-tuple
connection, the next expected sequence number, and the expected ACK number.
</t>
<t>Based on the gathered information, the attacker can mount connection reset
attacks and data injection attacks. Those attacks have been demonstrated to
work in real-world constraints according to <xref target="CBR01"/>.
</t>
<t>Due to the seriousness of the threat, it is sufficient to deprecate the
ACK throttling mechanism, as defined in <xref target="RFC5961"/>.
</t>
<t>This document updates <xref target="RFC5961"/>.
</t>

<section anchor="terminology" title="Terminology">
<t>Challenge ACK in this document denotes the ACK packet sent in response to an
segment whose RST bit is set and the sequence number does not fully
match the next expected sequence value, but is within the current receive
window as defined in <xref target="RFC5961"/>.
</t>
<t>The keywords MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD,
SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL, when they appear in this
document, are to be interpreted as described in <xref target="RFC2119"/>.
</t>
</section>
</section>

<section anchor="deprecation-of-ack-throttling-mechanism" title="Deprecation of ACK throttling mechanism">
<t>An implementation is not required to implement an ACK throttling mechanism
which is conservative as defined in section 7 of <xref target="RFC5961"/>.
However, if there is a concern about CPU or bandwidth usage, an
implementation may have a per-socket ACK throttling mechanism which is
independent. This makes it more difficult to abuse compared to having a single
(global) ACK throttling mechanism. Additionally, an implementation may
also introduce a randomized value to the interval defined in Section 7 of
<xref target="RFC5961"/>. This makes the attack defined in section 1 much more difficult.
</t>
</section>

<section anchor="operations" title="Operations">
<t>It will take time to update all of the TCP implementations that fully
implement the ACK throttling mechanism as described in <xref target="RFC5961"/>.
</t>
<t>An operator can increase the value of the ACK throttling limit to the
highest value possible to mitigate the risk of the vulnerabilities defined
in section 1 of <xref target="RFC5961"/>.
</t>
</section>

<section anchor="iana-considerations" title="IANA Considerations">
<t>None of the proposed measured have an impact on IANA.
</t>
</section>

<section anchor="security-considerations" title="Security Considerations">
<t>The purpose of this document is to deprecate a feature of TCP that has
been shown to lead to security vulnerabilities. Specific examples of those
vulnerabilities can be found in [!<xref target="CBR01"/>]. In particular, the ACK throttling
mechanism leads to a side-channel vulnerability that can be leveraged for
connection reset and data injection attacks. A description of this
functionality can be found in section 1.
</t>
</section>

</middle>
<back>
<references title="Normative References">
<reference anchor='CBR01' target=''>
 <front>
 <title>Off-Path TCP Exploits: Global Rate Limit Considered Dangerous</title>
  <author initials='Y.C.' surname='Cao' fullname='Y.C. Cao'></author>
  <author initials='Z.W.' surname='Wang' fullname='Z.W. Wang'></author>
  <author initials='T.D.' surname='Dao' fullname='T.D. Dao'></author>
  <date year='2016' />
 </front>
 <seriesInfo name="University of California" value='' />
 </reference>
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"?>
<?rfc include="http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5961.xml"?>
</references>

</back>
</rfc>
