Re: Non-Last Small IPv6 Fragments

Tom Herbert <tom@herbertland.com> Thu, 10 January 2019 21:19 UTC

Return-Path: <tom@herbertland.com>
X-Original-To: ipv6@ietfa.amsl.com
Delivered-To: ipv6@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DB5B1130F3F for <ipv6@ietfa.amsl.com>; Thu, 10 Jan 2019 13:19:17 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.041
X-Spam-Level:
X-Spam-Status: No, score=-2.041 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.142, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=herbertland-com.20150623.gappssmtp.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 Ag6u7MU5aztM for <ipv6@ietfa.amsl.com>; Thu, 10 Jan 2019 13:19:15 -0800 (PST)
Received: from mail-qt1-x82f.google.com (mail-qt1-x82f.google.com [IPv6:2607:f8b0:4864:20::82f]) (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 32DBD12896A for <ipv6@ietf.org>; Thu, 10 Jan 2019 13:19:15 -0800 (PST)
Received: by mail-qt1-x82f.google.com with SMTP id v11so15503404qtc.2 for <ipv6@ietf.org>; Thu, 10 Jan 2019 13:19:15 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=herbertland-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=3M059rbdeyLDj/eThkegw1Fq7miI42UaR7Dm2O0IElc=; b=yp7D3PhL98ql2zt7j6OmYPEpCUsUpLll79yGXuLLkleqI5Uq79zkOeIfBMWYsPQn7Z R18/mHbVGZ+CfaHhOTqWeymszo4oiJg/XX3Ghr3Pcf8Z1pW0PrcOaF8Nn0TqCr21Rhpl HiC9up9ei0sD2wCDjO2YeRdro2ZqsmJ7a0IHUASPXmbtw8ZMX+wG9rDGimVuoRBTisRR szLq1VC7ubcnRD+aDTseeLA6LfBBx/34SV0LaLeOnNHis5Yb7U40bG+9GvCBdvoe4tMV mgnr8wHTvQOyRMCBfCtne0sAtaiX9f1idh4zKdMS1REst7DfKf0LnoKtml6yDCfe52WT YTwg==
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:content-transfer-encoding; bh=3M059rbdeyLDj/eThkegw1Fq7miI42UaR7Dm2O0IElc=; b=EvCoJ8hC2LD2d62Mivs27Fmnbwua+37HppGNm3G8mmyycsvdKwdNp8CnYvSAo2RoES YbWhqBDYsck9U5X1X4qkPFb4ZXXUhCTHdCTZbhyKB/8wPQCHPRm9UoyY7h6faKwE0LPp hHKyJCR09vOc18dnatv8JvSH323aOG1LKGEiKWiQJR1SK7xJVcgMhSYwZDDbFWi1dGjy cjsURQPLs3dnvqQS+leL2jv9Sj+Tkfh/sk7HXSoKpyRly75ICE3MaCmpeAhOEc4Xo3da ed6Tff8RY3/M7NfQLexJJFffiUDph+xsiDsCBygO+wWSUc58C/131778fHED+RGH8tAv BJWw==
X-Gm-Message-State: AJcUukeHg/UDnShkhwSUwhoY2VNZG0nXYncbeUm57axjBhlgy11yATzk ibgJ1Y4KYEh9V/nN1WwnEgfxOShxdXw6dg+Rd+6Xhw==
X-Google-Smtp-Source: ALg8bN5fXw0gY6ITGrfHeYIj133OwOzToArHHSS0r1dFLQG2CvC6rsV4qX+DjgyXx3G0/p+svYG27uO1X8Vb3q4qIsw=
X-Received: by 2002:a37:d4d9:: with SMTP id s86mr10787245qks.190.1547155154045; Thu, 10 Jan 2019 13:19:14 -0800 (PST)
MIME-Version: 1.0
References: <CAOSSMjV0Vazum5OKztWhAhJrjLjXc5w5YGxdzHgbzi7YVSk7rg@mail.gmail.com> <2AB3F16C-FC0E-4EF7-B1ED-1A97F2CEC69B@gmail.com> <BYAPR05MB42458F851962F26AE1E15CC4AE840@BYAPR05MB4245.namprd05.prod.outlook.com> <CAAedzxofmhokstWuq7mRWnd5PTz5WQaiDNnE8O_VHXF_PbK6nw@mail.gmail.com> <BYAPR05MB4245388FB800873A5A8ED12AAE840@BYAPR05MB4245.namprd05.prod.outlook.com> <66bf652a-2bc0-6814-6ded-a63eece7fbe2@gmail.com> <BYAPR05MB4245B9305E6EC57EDD45509FAE840@BYAPR05MB4245.namprd05.prod.outlook.com>
In-Reply-To: <BYAPR05MB4245B9305E6EC57EDD45509FAE840@BYAPR05MB4245.namprd05.prod.outlook.com>
From: Tom Herbert <tom@herbertland.com>
Date: Thu, 10 Jan 2019 13:19:03 -0800
Message-ID: <CALx6S35QkKhRFVV+FE0Cnb-CrNHTj96QqQGNsHqrxjQYV5qB0Q@mail.gmail.com>
Subject: Re: Non-Last Small IPv6 Fragments
To: Ron Bonica <rbonica@juniper.net>
Cc: Brian E Carpenter <brian.e.carpenter@gmail.com>, "ek@loon.co" <ek@loon.co>, Bob Hinden <bob.hinden@gmail.com>, IPv6 List <ipv6@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/ipv6/UpDiINlWxD5LtIrMA5z7aHwygUY>
X-BeenThere: ipv6@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "IPv6 Maintenance Working Group \(6man\)" <ipv6.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/ipv6>, <mailto:ipv6-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/ipv6/>
List-Post: <mailto:ipv6@ietf.org>
List-Help: <mailto:ipv6-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/ipv6>, <mailto:ipv6-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 10 Jan 2019 21:19:18 -0000

On Thu, Jan 10, 2019 at 12:33 PM Ron Bonica <rbonica@juniper.net> wrote:
>
> Brian,
>
> The following are two more fundamental questions:
>
> - Would the attack be effective?
Hi Ron,

I imagine it could be. In Linux for instance, the reassembly queue
requires an skbuf structure for each fragment. That means one packet
in reassembly could tie up thousands of such structures in memory in
your proposed attack.

> - If the attack is effective, is there a better way to mitigate it (e.g., by limiting the number of fragments that a receiving node is willing to reassemble for a single packet)?

That might be reasonable, however requiring intermediate fragments to
be at least 1280 MTU in IPv6 also solves that without needing to
define some aritrary new limit. I'd also point out that while Linux
was changed to enforce a minimum size on intermediate fragments for
IPv6, doing the same thing in IPv4 was rejected since intermediate
nodes can fragment.

Tom

>
>                                                                         Ron
>
>
> > -----Original Message-----
> > From: Brian E Carpenter <brian.e.carpenter@gmail.com>
> > Sent: Thursday, January 10, 2019 3:01 PM
> > To: Ron Bonica <rbonica@juniper.net>; ek@loon.co
> > Cc: IPv6 List <ipv6@ietf.org>; Bob Hinden <bob.hinden@gmail.com>
> > Subject: Re: Non-Last Small IPv6 Fragments
> >
> > On 2019-01-11 08:52, Ron Bonica wrote:
> > > Erik,
> > >
> > > Thanks for the response.
> > >
> > > So, I understand that if I were to launch a stream of such packets at a target:
> > >
> > >
> > >   *   The target might drop many of the attack packets (but that’s ok)
> > >   *   The target would still process non-fragmented packets at a reasonable
> > speed
> > >   *   The target would still be able to reassemble fragments that are from
> > other sources and not part of the attack
> > >
> > > If this is the case, we have nothing to worry about.
> >
> > Well, we have to worry about a broken Linux implementation unless this "fix"
> > is reversed.
> >
> > (I can see a pragmatic argument for dropping non-final fragments that are
> > really small, which might be diagnostic of an attack. But then you have to
> > define "really small".)
> >
> >    Brian
> >
> > >
> > >                                                           Ron
> > >
> > >
> > > From: Erik Kline <ek@loon.co>
> > > Sent: Thursday, January 10, 2019 2:42 PM
> > > To: Ron Bonica <rbonica@juniper.net>
> > > Cc: Bob Hinden <bob.hinden@gmail.com>; Timothy Winters
> > <twinters@iol.unh.edu>; IPv6 List <ipv6@ietf.org>
> > > Subject: Re: Non-Last Small IPv6 Fragments
> > >
> > > On Thu, 10 Jan 2019 at 11:32, Ron Bonica
> > <rbonica@juniper.net<mailto:rbonica@juniper.net>> wrote:
> > >> I read some of the reports on the link, but am still not clear what the
> > >> underlying problem is.   Why does Linux have a problem with receving
> > >> intermediate fragments less than 1280?
> > >>
> > >
> > > Hi Bob,
> > >
> > > Might we be defending against an attack in which a packet contains:
> > >
> > > - An IPv6 header (40 bytes)
> > > - A Fragment Header (8 bytes)
> > > - A TCP header (20 bytes)
> > > - TCP Payload (1200 bytes)
> > >
> > > This packet doesn't need to be fragmented at all because the total length is
> > only 1268 bytes. However, a mischievous source node divides the packet into
> > 1200 fragments. The first fragment contains an IPv6 header, a fragment
> > header, the TCP header, and one byte of the TCP payload. Each subsequent
> > fragment contains the IPv6 header, a fragment header, and one byte of TCP
> > payload.
> > >
> > > Are reassembly algorithms clever enough to protect against such attacks? If
> > so, I don't see the problem either. But if not, we may have a problem.
> > >
> > > I'm recently familiar with an IPv6 fragment reassembly implementation, as it
> > turns out.  The core implementation uses/makes liberal reference to:
> > >
> > >     https://urldefense.proofpoint.com/v2/url?u=https-
> > 3A__tools.ietf.org_html_rfc815&d=DwIFaQ&c=HAkYuh63rsuhr6Scbfh0UjBX
> > eMK-ndb3voDTXcWzoCI&r=Fch9FQ82sir-BoLx84hKuKwl-
> > AWF2EfpHcAwrDThKP8&m=sK5K5wuiRYsxdqBoO01uXstXrB6pcOH7vIaVlqPk
> > bw8&s=wRD2EDX32nGJdkVKcg_MlfkjpiweHbKU_7X3BJXHQks&e=<https://u
> > rldefense.proofpoint.com/v2/url?u=https-
> > 3A__tools.ietf.org_html_rfc815&d=DwMFaQ&c=HAkYuh63rsuhr6Scbfh0UjB
> > XeMK-ndb3voDTXcWzoCI&r=Fch9FQ82sir-BoLx84hKuKwl-
> > AWF2EfpHcAwrDThKP8&m=-
> > dVqPKvvhh60cA1adnmR9mFsqrX0ADki0K4BlrOQqGc&s=6m7aXa5azbXR0bS
> > ACw5GJgOfJx06tbs_1LydP-h2aqs&e=>
> > >
> > > It works generally in terms of managing a hole descriptor list.  It would
> > successfully reassemble the sequence of packets you describe.  Whether that's
> > an "attack" or not, I don't really see it.  With local policy caps on the lifetime of
> > unreassembled fragment bits and so on, it seems possible to limit and manage
> > the total resources allocated to reassembly.
> > >
> > >
> > > --------------------------------------------------------------------
> > > IETF IPv6 working group mailing list
> > > ipv6@ietf.org
> > > Administrative Requests:
> > https://urldefense.proofpoint.com/v2/url?u=https-
> > 3A__www.ietf.org_mailman_listinfo_ipv6&d=DwIFaQ&c=HAkYuh63rsuhr6S
> > cbfh0UjBXeMK-ndb3voDTXcWzoCI&r=Fch9FQ82sir-BoLx84hKuKwl-
> > AWF2EfpHcAwrDThKP8&m=sK5K5wuiRYsxdqBoO01uXstXrB6pcOH7vIaVlqPk
> > bw8&s=aU3laJhpXnj8ataCCjgCdmeHhXP6jyerRBW6vUlk-SI&e=
> > > --------------------------------------------------------------------
> > >
>
> --------------------------------------------------------------------
> IETF IPv6 working group mailing list
> ipv6@ietf.org
> Administrative Requests: https://www.ietf.org/mailman/listinfo/ipv6
> --------------------------------------------------------------------