Re: Back to work

Martin Duke <martin.h.duke@gmail.com> Sat, 31 October 2020 20:41 UTC

Return-Path: <martin.h.duke@gmail.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6A21B3A0E91 for <quic@ietfa.amsl.com>; Sat, 31 Oct 2020 13:41:47 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id T94vWyl-ucqR for <quic@ietfa.amsl.com>; Sat, 31 Oct 2020 13:41:45 -0700 (PDT)
Received: from mail-il1-x132.google.com (mail-il1-x132.google.com [IPv6:2607:f8b0:4864:20::132]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8718E3A0EA5 for <quic@ietf.org>; Sat, 31 Oct 2020 13:41:45 -0700 (PDT)
Received: by mail-il1-x132.google.com with SMTP id c11so9548673iln.9 for <quic@ietf.org>; Sat, 31 Oct 2020 13:41:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=99srT99jzMna2MdFWzCkNUb6tkGxppME/pPDXXQWgBc=; b=EE5R6dhayKdQM81JDgvBTk7pFVkd52tBgMxuZAnJ1hXGQgEdrmNamBvKXy0cGIvHF2 RFm9WkySbuZWdTx/dO4h1YCc14crsLs+n9f3gOqevWtSSEfCc5WlXMnBkCkPUtIe6grj BO8ija0xWJz2qJfxuNBW9AzfEcaNRhbbFK819q0B53/tgMW2p5/MLrd9tpII4g9fsjoP OwRoyQecsT4TEI01HX8wi4AvPjWG66xNahYaItuPrdQz4YQsxu/dF33SCWJ1hQppg2LV 8lT6U8pb1oCKc4pCFmbZYqO8Z8E6kEFkDiTUECMi5+i0QFLrPAdBGaF2QVWPMjx1ybGA Eazw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=99srT99jzMna2MdFWzCkNUb6tkGxppME/pPDXXQWgBc=; b=czGkZQxc/mFBSlT/6bkXqeNQeC7+PiGmNJSzrYOnXDJ/BKsOehBiPsCZhZEb0HJ75G p0109Fv9hHsUVqIG7qQaM5FRwSn3MytWFBPr3lBxRPFsE/AarI7MTQmBP41t1FXFIa8Q CxiCZibSFqEsnPCsQx5ZmOSvQRatPoxTLdhm4jS4i4kjDoqP1n36tJp1/f6RuTYJ5oPR L8NpQMVvNKz4RHADW0RrBO3QFLmCk1YFP7xjbDvfVv7s8rM7x1JWdpPReNoEy3uMMc33 V+BU8OFWiSq0yAQxdwR9t0ZDOiywy3pcxKYRyWvAVTTtx8XPK0ynDQ/2OZEW1GTak3UO sDYw==
X-Gm-Message-State: AOAM531Zx8RkA62NNqLPHYE1WNgvc1US7kiv3c1mti/Nc7/CX2QQe7vR 5F0c4et1xcb2CozWHO2pRMgkg/dqSxAVLNdcoNg=
X-Google-Smtp-Source: ABdhPJyOryAJI9ZpWSpPYfbXlEt4vaiTfzbrUiPe+x6KPqaQOKsCf0loPdevCIQ+xpOWFppmX7ReH1szV12W6zIrMxs=
X-Received: by 2002:a05:6e02:926:: with SMTP id o6mr6051137ilt.287.1604176904647; Sat, 31 Oct 2020 13:41:44 -0700 (PDT)
MIME-Version: 1.0
References: <0f150dec-e408-48bf-8e54-05e3e96e7a85@www.fastmail.com> <CALZ3u+a1fBq1MB52H-h-JYY=OOkOo9=jEu7smNVeyy_9U3abEw@mail.gmail.com> <CAKcm_gNoB=nP050VRfw5MXAAw-HhpnKHp6pAx9onaA4a5CH5-Q@mail.gmail.com> <b80cf41524865c171712bfcfca7ef92e2a472044.camel@ericsson.com> <efe63bdf-7af2-49c0-932d-3a36de61bdd6@www.fastmail.com> <41A07550-1BFA-43E6-83A0-93FA96DF1E9B@apple.com> <CAN1APddS_qtMoUiUL9uwtAB3rXuAQ0NmiipXGDkS4hcA5od6Ag@mail.gmail.com> <CAKcm_gOcuuF_REWszJyYC6eO6swavMD3D9VnzgJTHEwEAXOsnw@mail.gmail.com> <CAM4esxT2kD6U-Hb5cOSfykBPvTmboEozqqiYiFF63ywxstm-LQ@mail.gmail.com> <CAKcm_gPzEgEssO3LMyW=t9tvbsRrLQBJ7M=2mxySs3H-YUXF5A@mail.gmail.com> <CACpbDceKFAVZ=Vrvj8ZoOj95TNfkCqNrpLh8FOBMBUBU=Qx_eQ@mail.gmail.com> <cc9aca43-7556-7fed-8ef8-1b5343316a0d@huitema.net> <59211AC5-0D72-4295-9E67-DA0BF5B92965@apple.com> <7fca948f-6c71-45c8-8c76-8cfabf11898b@www.fastmail.com> <5CD85C94-CFB2-47FF-9178-0DBE354EFCBF@apple.com> <f950a0cf-1be1-491b-8bc4-f5816cdb13e6@www.fastmail.com> <fed2a70b-954e-f224-fd0f-e80d36f12e87@huitema.net> <9c116544-c120-422b-8968-79effb3020ca@www.fastmail.com> <C2E762A1-2CCD-4728-A9DB-32D6AE02A1BD@apple.com> <CAKcm_gNBoHTTjB9LLufiV5bnU7ngXH5fRkrpHjePL3wk_XeyZw@mail.gmail.com>
In-Reply-To: <CAKcm_gNBoHTTjB9LLufiV5bnU7ngXH5fRkrpHjePL3wk_XeyZw@mail.gmail.com>
From: Martin Duke <martin.h.duke@gmail.com>
Date: Sat, 31 Oct 2020 13:41:33 -0700
Message-ID: <CAM4esxR2iVJ8mU7-MG+gho+9KLwCb54OmHnW1=bsLZk-5woLZQ@mail.gmail.com>
Subject: Re: Back to work
To: Ian Swett <ianswett=40google.com@dmarc.ietf.org>
Cc: Eric Kinnear <ekinnear=40apple.com@dmarc.ietf.org>, IETF QUIC WG <quic@ietf.org>, Christian Huitema <huitema@huitema.net>, Martin Thomson <mt@lowentropy.net>
Content-Type: multipart/alternative; boundary="0000000000008ef75605b2fd8a49"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/4JDtL1vUoRj_R1c6zVhLasbAg8g>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 31 Oct 2020 20:41:47 -0000

I want to carefully think through the various scenarios here, two "normal"
ones and two attack ones. But the summary is that the proposal to always
use the amp limit is good, if we add a coupe of more recommendations for
clients (in bold below)

1) Normal NAT rebinding. The connection is idle for a long period. A good
server will have reset its congestion controller due to the long idle
period.

The client then sends a packet (if the server does first, it'll probably
disappear).  Whether or not that packet is small, the server is going to be
limited by the amplification limit rather than congestion control. One
alternative is to kill the connection after an idle period and restart with
0RTT, but that's only superior because the client has to send a bunch of
bytes. The recommendation here, I think, is that *clients SHOULD send one
or more full-size datagrams when restarting after a long idle period*, *and
possibly reset its PMTU assumptions. *[I can't remember what DPDLPMTUD says
about idle periods]

If the client does this, the server will be able to validate address and
MTU in one RTT. Otherwise, it's going to have to take two. But the
recommendation is sufficient to mitigate the impact of the 3x limit in NAT
rebinding cases.

2) Spoofed NAT rebinding. An attacker rewrites source addresses on someone
else's packets, or opens a valid connection and then switches the source
address to the victim. The amplification limit will prevent anything bad
from happening here, then PATH_CHALLENGE will fail and we're done.

3) Normal Migration. The client suddenly changes the CIDs and source IP.
(a) If the path is pre-validated, there is no issue. PATH_CHALLENGE and
PATH_RESPONSE SHOULD have been padded to handle MTU and address validation
simultaneously.
(b) If the path is not-prevalidated, the client SHOULD pad PATH_CHALLENGE.
This will be more restrictive than init-cwnd, unless *the client sends 3
datagrams or so, padded pings if necessary.*

4) Spoofed Migration: the attacker opens a connection, then sends packets
with new CIDs and the victim's IP. It is impossible for this to be
pre-validated. Because the attacker has to send 1 byte for every 3 the
victim gets, this is safe.

I'll propose some text in review.

On Fri, Oct 30, 2020 at 8:08 PM Ian Swett <ianswett=
40google.com@dmarc.ietf.org> wrote:

> Thanks for all the awesome discussion.
>
> It sounds like we're landing on text that requires the 3x limit be
> enforced until path validation succeeds, even if it's believed it's NAT
> rebinding.  I don't think that's a huge performance hit for the reasons
> stated above, but it does add some complexity for some implementations, so
> I'm not sure if it'll be widely enforced or not?
>
> To answer Jana's question(far above) about resetting the congestion
> controller, my thinking is the following.  In cases when the server
> believes it's NAT migration, it does not reset the congestion controller
> and this limits the potential attack to the congestion window built up
> prior to the migration.  Additionally, the server has to believe it's a NAT
> migration, which makes the attack unpredictable or useless in the presence
> of modern NATs and Firewalls.
>
> So what I'd argue for is that NAT migrations MAY be treated as validated
> paths, but the congestion controller MUST NOT be reset in that case.  I
> think this fits what MT said their implementation currently did and what I
> believe ours does today as well.
>
> Thanks, Ian
>
> On Thu, Oct 29, 2020 at 9:28 PM Eric Kinnear <ekinnear=
> 40apple.com@dmarc.ietf.org> wrote:
>
>> Agreed, I think that’s where the “client needs to pad PATH_CHALLENGE and
>> any PATH_RESPONSE needs to be padded if the challenge was padded” came
>> from.
>>
>> To the point about it being an error case — that totally makes sense, and
>> as Christian points out, that is also significantly more likely under some
>> of the attacks than someone being both idle and transferring lots of data
>> at the same time.
>>
>> I’m pretty sure we did previously have text that allowed the server to
>> treat the new address as validated if only the port changed, but we took it
>> out to help with some of the MOTS attacks. Also fully agreed that it would
>> be really nice to not split the logic across retaining some things (CC/RTT)
>> some of the time, but not others (Path, MTU validation).
>>
>> All this said, I suspect these are all edge cases enough that the more
>> conservative PR (as currently written) would be totally sufficient.
>> My current feeling is that if we wanted to carve it out such that a small
>> packet from an attacker on the side (or an unintentional migration) didn’t
>> generate MAX(full_size_packet, 3x_what_came_in_from_the_attacker) sized
>> packets, that would be neat, but not absolutely necessary.
>>
>> Thanks,
>> Eric
>>
>>
>> > On Oct 29, 2020, at 5:09 PM, Martin Thomson <mt@lowentropy.net> wrote:
>> >
>> > On Fri, Oct 30, 2020, at 10:42, Christian Huitema wrote:
>> >> That means doing thing differently for a regular migration and for a
>> NAT
>> >> rebinding. A regular migration happens starts the client sends a full
>> >> size packet, with a not yet seen CID, and containing a path challenge.
>> >> Responding to that with a full size response makes sense. But if the
>> >> server receives a short packet, with an already used CID, and without a
>> >> path challenge, that's probably a NAT rebinding. Responding with full
>> >> size challenge packets is counter-productive.
>> >
>> > Ahh, that seems sensible.  Conveniently, the current PR results in what
>> you describe, so I have less work to do :)
>>
>>