Re: [quicwg/base-drafts] loss of only two packets can lead to an unrecoverable situation (#2267)

Christian Huitema <notifications@github.com> Mon, 28 January 2019 02:37 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 45C03130F47 for <quic-issues@ietfa.amsl.com>; Sun, 27 Jan 2019 18:37:56 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -12.553
X-Spam-Level:
X-Spam-Status: No, score=-12.553 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-4.553, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.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 6lbbiT534BWM for <quic-issues@ietfa.amsl.com>; Sun, 27 Jan 2019 18:37:54 -0800 (PST)
Received: from out-5.smtp.github.com (out-5.smtp.github.com [192.30.252.196]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 608F8130F41 for <quic-issues@ietf.org>; Sun, 27 Jan 2019 18:37:54 -0800 (PST)
Date: Sun, 27 Jan 2019 18:37:53 -0800
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1548643073; bh=dWdBEfIfCAwgOyvQwKHfd98pQVHlzkyYdtNN/V7HEbY=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=YK1AnPoMoR/aXgXzx7AZUFFemskXCWvDk5nVi9WeWGLAVYHeiMEpDhyDdKnVrqxJ+ wvGEv3C3ucKLwknCRVvs3GMxLmFbTUr4vGqhi7dS4TRCCN5B6MeQwwmUji7HWICDMt MbsZTOM5GD+k3NLsQHwI7iO9mWdBDRy2i+BtbsDg=
From: Christian Huitema <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4ab4481cc877e6116caf1151e424ebc5409a6463f7092cf0000000118662d0192a169ce1784eaec@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/2267/457982113@github.com>
In-Reply-To: <quicwg/base-drafts/issues/2267@github.com>
References: <quicwg/base-drafts/issues/2267@github.com>
Subject: Re: [quicwg/base-drafts] loss of only two packets can lead to an unrecoverable situation (#2267)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5c4e6b0152afa_70a43f94370d45c01896380"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: huitema
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/VaVlhaKqHc2Ay374cWRBvjOBDfw>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 28 Jan 2019 02:37:56 -0000

I just completed a PR in Picoquic to fix this issue. What it does:

1) Client side, implicit ACK of the first Initial Packet if the handshake key is received. After that, apply a special parser for Initial frames (see point 4 below)
2) Server side, move to a "ready" state when the 1st 1-RTT packet from client is received; as part of that move, implicit ACK of Initial and Handshake packets sent by the server.
3) Client side, move to the "ready" state when first ACK of 1-RTT packet is received from server. This triggers implicit ACK of Initial and Handshake packets sent by the client.
4) In Ready state, use a specific parser for Initial and Handshake message. Effectively ignore all frames in these packets, but if there is an ACK eliciting frame, schedule an ACK.

This removes a bunch of corner cases, such as spurious retransmit of Initial packets in the middle of a migration. It also closes an avenue for DOS against established connections, since Initial packets cannot anymore change the state of the connection once the handshake is complete.

Well, not quite all attacks: Initial packets can still trigger an ACK that might cause an allergic reaction at the peer. But then, the attacker could also send spoofed ACK in Initial packets directly to the peer, so this is not exactly a new attack. Plus, if the peer adopts the defenses outlined above, the spoofed ACK will have no side effect.


-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2267#issuecomment-457982113