Re: [lisp] Warren Kumari's Discuss on draft-ietf-lisp-rfc6830bis-26: (with DISCUSS and COMMENT)

Warren Kumari <warren@kumari.net> Wed, 06 February 2019 19:01 UTC

Return-Path: <warren@kumari.net>
X-Original-To: lisp@ietfa.amsl.com
Delivered-To: lisp@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 992D3130F29 for <lisp@ietfa.amsl.com>; Wed, 6 Feb 2019 11:01:19 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.042
X-Spam-Level:
X-Spam-Status: No, score=-2.042 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_MED=-0.142, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=kumari-net.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 0JZDLPXy3NnV for <lisp@ietfa.amsl.com>; Wed, 6 Feb 2019 11:01:15 -0800 (PST)
Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) (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 02034130F35 for <lisp@ietf.org>; Wed, 6 Feb 2019 11:01:14 -0800 (PST)
Received: by mail-wm1-x331.google.com with SMTP id a62so3621951wmh.4 for <lisp@ietf.org>; Wed, 06 Feb 2019 11:01:14 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kumari-net.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=1yoyeCH4h7+DYARx95VlYCzP2fIjYG7ZV0nn1Hskcw0=; b=Zg/obcCgiPgAErkWmM31KW1QWS6aF108WGDVlAlHyru1rYfVJz4JYc5RL2nJd3Pilg gEYNShpijo8y/TCSgZ4sH+lid5guc73xz39Zw5FzVRXjb4txfcQD9mlxUGujnKgSh7JE fdCkHR6xcKkTTXNeidfdQCKJRdVk5YWOG0BkQRY6xzLh7l4mTVJFwd3KxwFdnXIHUFYi buDOoXekFsWKk3gox2NAB4lvyF60YyzOZ0PAEKdUxLjij7G/DACxFLuKwfNFC58E/bEw 4cStCgCgrozEGhaUOw93hkCqLKWOejHytXx72pcbnjbIcPo9+ep4lT9Byj6wV+YC1Wc7 SqMw==
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=1yoyeCH4h7+DYARx95VlYCzP2fIjYG7ZV0nn1Hskcw0=; b=K3YBKRzExF5GRg/+01l6L/fjsOoU5hXhGj1xDQIygrYGQEpIacYQNkSNgA0MRvQzlu CiWvSC6qzl/TBo9CAVV6k3FZPb1KRMm1/sE1lMDMDR9c8/z55gPTu+xLzRKUelxPJpas RnMOOLCleAyHbLulR7NeL9t7zBR6LmPQVi9IUVpyvUHuc4HhCcdpqZZXDO735D1m9+hr n2l1Atv4DDvqlJ08S4WVh1QKDANxpf18ZtYvk9JkJeMdd1SudwAE+CBNJWzZ8V7AI34u STXicrfKFFQZybUyM2pm4Vn5dTK4LDFXLxT0BS4HSuZIjb1tZW0IWEw+9VHEJpXD8sPZ ucUw==
X-Gm-Message-State: AHQUAuZ0cOl8ahT4LfM3i6ieyC/CZpkCA/vGIJ87uNdMskNusGksGxoO 3ncugzqG3Ou3d/ktOQbKu01cWe6jhxhDI85BYb3PtA==
X-Google-Smtp-Source: AHgI3IYOQE7jLEvlgoktr7p3FgVDLENKys35H9A4jA2euAR/69AwYWi1OWKe+w4msMtlgraqc+NGSEe1CVrgDTgtJ70=
X-Received: by 2002:a7b:cc13:: with SMTP id f19mr4031442wmh.83.1549479672810; Wed, 06 Feb 2019 11:01:12 -0800 (PST)
MIME-Version: 1.0
References: <154941971479.32132.7227582520612116720.idtracker@ietfa.amsl.com> <E8FC2F26-A7F3-454C-ABBB-C3B47536EB58@gmail.com>
In-Reply-To: <E8FC2F26-A7F3-454C-ABBB-C3B47536EB58@gmail.com>
From: Warren Kumari <warren@kumari.net>
Date: Wed, 06 Feb 2019 14:00:35 -0500
Message-ID: <CAHw9_iLvNo7gdnyXcdKLyqA+iuvnLmMkX9ZHretgfy6Tn9-Lwg@mail.gmail.com>
To: Dino Farinacci <farinacci@gmail.com>
Cc: The IESG <iesg@ietf.org>, draft-ietf-lisp-rfc6830bis@ietf.org, Luigi Iannone <ggx@gigix.net>, lisp-chairs@ietf.org, lisp@ietf.org
Content-Type: multipart/alternative; boundary="0000000000007c2e8c05813e5924"
Archived-At: <https://mailarchive.ietf.org/arch/msg/lisp/mPmkKypki2FYAeBplXAwilmaWY4>
Subject: Re: [lisp] Warren Kumari's Discuss on draft-ietf-lisp-rfc6830bis-26: (with DISCUSS and COMMENT)
X-BeenThere: lisp@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: List for the discussion of the Locator/ID Separation Protocol <lisp.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/lisp>, <mailto:lisp-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/lisp/>
List-Post: <mailto:lisp@ietf.org>
List-Help: <mailto:lisp-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/lisp>, <mailto:lisp-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 06 Feb 2019 19:01:20 -0000

On Wed, Feb 6, 2019 at 12:48 PM Dino Farinacci <farinacci@gmail.com> wrote:

> Warren, thanks for the review, I have changed text to address your
> comments and nits below. A new diff file is enclosed at the end.
>
> I want to send one message to the IESG. This has no reflection on Warren
> or his commentary. But the standards process seems to be at an all-time low
> for my prespective. And this Jan 2019 I have been coming to IETF for 30
> years. So I think I’m not speaking off the cuff here and speak from what I
> have experienced over that long time frame.
>
> We have been trying to get these documents to move forward and it seems
> with all the new people that come to the IESG that do the reviews are not
> expert in the art and hence we have to explain basic LISP. It has been
> happening for about 6 quarters now. We explain, people understand, a
> quarter passes, there is silence, new people come into the review process,
> and we explain again.
>
> We have redone text so many times that likely have undone commentary from
> people that were experienced in the art who commented years ago. What if
> they come back in now and say “you change the text again”.
>
> To the authors, this seems non-sense, never ending and not productive. One
> can see why open-source approaches are out competing the IETF process. I’ll
> stop there.
>
> I’ll explain once again in the DISCUSS comments below because I know
> Warren put effort into this when he should have been resting.  ;-)
>
> > On Feb 5, 2019, at 6:21 PM, Warren Kumari <warren@kumari.net> wrote:
> >
> > ----------------------------------------------------------------------
> > DISCUSS:
> > ----------------------------------------------------------------------
> >
> > I read much of this on a plane while overtired, so it is entirely
> possible /
> > probable that I've completely misunderstood something(s) obvious. Many
> of the
> > below are probably simple to address, and either I simply need to be
> educated,
> > or just there needs to be a bit more text / detail provided.
>
> I will respond briefly and directly.
>
> > 1: "3.  The ITR sends a LISP Map-Request as specified in
> > [I-D.ietf-lisp-rfc6833bis].  Map-Requests SHOULD be rate-limited." What
> does
> > the ITR do with the packet while waiting for the Map-Request to
> complete? Must
>
> > it buffer the packets or can it discard them? If the former, for how
> long must
> > it buffer? When you say "SHOULD be rate-limited", can you provide
> guidance on
> > rates? 1 request per second? 1 million per second? Is this rate-limit per
> > destination or per device? Apologies if this is clearly stated in
> RFC6833(bis)
> > - I only skimmed it, and didn't see an answer there.
>
> We have said drop or queue. We discourage queuing because one never knows
> which packets are the important ones to queue. Never much the same as the
> ARP resolution issue.
>

Works for me -- note that I don't see that in either the original, nor the
attached diff.


>
> > 2: "6. ... Note that the Map-Cache is an on-demand cache. An ITR will
> manage
> > its Map-Cache in such a way that optimizes for its resource constraints."
> > Presumably I could cause this cache to thrash / overflow by looking at
> the RLOC
> > database, and choosing EIDs to send traffic to which all require
> different
> > cache entries, causing the cache to overflow (or, at least, causing
> maximum
> > cache pressure). This seems like an ideal DoS vector. It seems that there
> > should be more guidance provided on how to size the Map-Cache / the
> expected
> > order of the cache size, even if it is ultimately an implementation
> issue (e.g:
> > is a Map-Cache of 100 entries OK for an ITR? or should it be O(1000)? Or
> > roughly size(database)/2? Having multiple devices with small caches, and
> a bot
> > which does the above seems like a global risk).
>
> What happens if you send 10,000,000 BGP routes in an update and the
> receiver can’t store it. It is the same problem. We have lots of research
> on this problem and there are pointers in the spec to it.
>

Well, what happens is that I tear down the session:
accepted-prefix-limit {
      maximum {{ peer_prefix_limit }};
      teardown 85 idle-timeout 10;
}

This is somewhat of a false analogy - I only accept BGP routes from
configured peers, not just anyone on the Internet.
A better analogy would be Neighbor Discovery, where a random person on the
Internet can cause your router to have to build state -- and we ended up
having to publish RFC6583 - "Operational Neighbor Discovery Problems" to
address exactly this issue.



>
> > I'm quite confused by much of the MTU / Fragmentation stuff -- I did
> read the
> > documents on a plane after not getting much sleep, and so it is entirely
> > possible / probable that I'm just being stupid, but there are bits which
> don't
> > seem to make sense to me. 3: "2.  Define L to be the size, in octets, of
> the
> > maximum-sized packet an ITR can send to an ETR without the need for the
> ITR or
> > any intermediate routers to fragment the packet." How do I know what L
> is? The
>
> > document "RECOMMENDS that L be defined as 1500" -- but 1500 isn't
> universally
> > true (if it were, we would never have to do Path MTU). What happens when
> the
> > *actual* MTU on the path is e.g 1476 because there is a tunnel on the
> path? The
> > text also mentions "which is less than the ITR’s estimate of the path MTU
> > between the ITR and its correspondent ETR" - this implies that the ITR is
> > tracking / estimating the MTU, which a: doesn't align with the rest of
> the
> > text, or b: sounds like the stateful solution below. I have reread this
> > multiple times, but it still feels like it is avoiding the issue by
> defining it
> > to not exist.
>
> L is an architectural constant. If there tends to be tunnels between the
> ITR and ETR, then you choose L to be 1400. Or you run MTU discovery between
> the ITR and ETR to determine the effective MTU.
>

That doesn't sound like an "architectural constant" - it sounds like a
configurable value.
As an example:
"Both OSPF and IS-IS make a clear distinction between architectural
constants and configurable parameters. Architectural constants are
parameters which were fixed by the specification and cannot be changed by
the network manager".
(from "OSPF and IS-IS: From Link State Routing Principles to Technologies").
See also https://tools.ietf.org/html/rfc2328#appendix-B ,
https://tools.ietf.org/html/rfc3719, etc.



> > 4: "Note that reassembly can happen at the ETR if the encapsulated
> packet was
> > fragmented at or after the ITR." - I think that there needs to be more
> text /
> > description about resource constraints on routers performing reassembly
> of
> > fragments - in most cases a router doesn't have to / isn't expected to
> have to
> > reassemble transit packets from arbitrary sources on the Internet
> (things where
> > routers may reassemble are aimed at the control plane which can be
> > rate-limited, or are from expected source addresses). It seems that
> spoofing
> > lots of initial fragments without the final one will be a tax on the
> router.
>
> We have chosen 3 methods to deal with MTU issues because ETR reassembly is
> the worst approach. And I certainly wouldn’t recommend using it.
>

Fair, but I think the document should say so.



>
> > 5: "Instead of using the Map-Cache or mapping system, RLOC information
> MAY be
> > gleaned from received tunneled packets or Map-Request messages. A
> "gleaned"
> > Map-Cache entry, one learned from the source RLOC of a received
> encapsulated
> > packet, is only stored and used for a few seconds, pending
> verification." - it
> > seems that this is ripe for abuse (or I'm missing in the cache
> expiration). I
> > want to hijack traffic from Site X to well known Service Y, so I look up
> > Service Y and save the TTL from the Map-Reply. I then start spoof packets
> > listing myself as the ETR - eventually Site X will glean from my spoofed
> > packets, and start sending traffic to me - yes, this will only work for
> a few
> > seconds -- but as soon as I stop getting packets from site X, I know
> site X has
> > verified the entry and discovered it is wrong... and that the TTL is now
> being
> > deprecated. I start a timer, and second or two less than the TTL later I
> start
> > spoofing packets again, knowing that site X will soon expire the cache
> entry
> > and will once again be willing to accept mine again. A: I get some Site
> X to
> > Site Y traffic for a few seconds every TTL seconds, and B: the loss of
> this
> > traffic is a signal that TTL seconds again it will need to be refreshed.
>
> It was a Google employee in the early days that wanted this feature (circa
> 2007). ;-) It was so return packets from a server side didn’t have to do
> the mapping system lookup. It is off by default and only used in trusted
> enviornments where you can control how the ITR and ETR behave.
>

You say that "it is off by default" -- but I don't see that in this
document (nor, at a quick glance, in RFC 7832 - "Locator/ID Separation
Protocol (LISP) Threat Analysis").



>
> > 6: "10.1.  Echo Nonce Algorithm" -- If I spoof lots of packets with the
> N- and
> > E-bits set, the receiving ETR will need to keep false state, and
> presumably I
> > can overfill a cache. This will cause the ETR to not be able to include
> the
> > received nonce on legitimate traffic, and so the ITR on the far side will
> > think this ETR is down. This seems like a fairly easy DoS. I'm guessing
> that
> > this can be worked around by not setting the E bit in the RLOC-probe
> Map-Reply
> > message, but this feels like a dangerous foot gun, and should at least be
> > noted. Note that this is different to the "Note the attacker must guess a
> > valid nonce the ITR is requesting to be echoed within a small window of
> time.
> > The goal is to convince the ITR that the ETR’s RLOC is  reachable even
> when it
> > may not be reachable."  attack listed in the document in that a: it
> doesn't
> > require any guessing, and b: makes an ETR appear down, not up.
>
> You can’t overfill any cache. An xTR just remembers the last nonce that
> came with the E-bit set and when it returns packets it uses that nonce.
>

Um, I don't think this is right (or I've misunderstood) - you don't store
"the last nonce that came with the E-bit set" (one number), you have to
store "the last nonce that came with the E-bit set for every ITR which is
sending them".
These have to be stored somewhere, and this is a limited size space (N
slots). If I send you N+1 spoofed packets you will have to evict something
from this space -- what am I missing?


>
> Yes, many implementations default to not setting advertising they are
> echo-nonce capable in Map-Replies. So RLOC-probing tends to be used for
> RLOC reachability. Plus we added features into RLOC-probing that makes it
> more useful now (lisp-crypto key exchange for one).
>
>
Pointer?

> The document does mention "... attack can be mitigated by preventing RLOC
> > spoofing in the network by deploying uRPF BCP 38 [RFC2827]." - while
> that may
> > be true for many of the above, BCP38 is far from being universally
> deployed,
> > and this feels similar to solving world hunger by saying everyone must
> have
> > enough food. :-)
>
> An ETR can verify mappings if it chooses to. The more overhead you want to
> put in the system for anti-spoofing, one can do. Tradeoffs.
>
> By the way food is everywhere, you just have to be willing to eat it.  ;-)
>

As someone who was born in Africa and has seen the effects of famine
firsthand, I find this statement offensive -- people don't starve to death
because they didn't feel like eating their broccoli, they starve to death
because there isn't any food.

W


>
> > Again, apologies if I've completely misunderstood something, clue-bat
> gladly
> > accepted…
>
> You did a pretty good job. Thanks.
>
> > ----------------------------------------------------------------------
> > COMMENT:
> > ----------------------------------------------------------------------
> >
> > Comments:
> > 1: "LISP Locator-Status-Bits (LSBs):  ... The field is 32 bits when the
> I-bit
> > is set to 0 and is 8 bits when the I-bit is set to 1." - I think I'm
> missing
> > something fairly fundamental here (and in Section 10, 13.1, and others)
> - if
> > I'm using the I bit, it sounds like I can only have 8 ETRs? And with
> this clear
> > I can only have 32? I feel like I must have missed something….
>
> Right 8 ETRs per EID-prefix. If you needed more, then you take the
> EID-prefix and cut it in half and increase the mask-length by 1, then you
> can use a different set of 8 for each more specific EID-prefix. Otherwise,
> you use RLOC-probing and the number of RLOCs can bee up to 255 (the width
> of the RLOC-Count field in an EID-record).
>
> > 2: "When the ’DF’ field of the IP header is set to 1, or the packet is
> an IPv6
> > packet originated by the source host, the ITR will drop the packet when
> the
> > size is greater than L and send an ICMPv4..." I think this needs to say
> when
> > the resulting (or encapsulated) packet is greater than L (otherwise it is
> > unclear if you are referring to the original or resulting packet).
>
> Yes, I will clarify. Great point.
>
> > 3: "The server-side sets a Weight of zero for the RLOC subset list. In
> this
> > case, the client-side can choose how the traffic load is  spread across
> the
> > subset list." -- please insert a reference to Section 12 here. I wrote
> up a
> > long comment on what happens of the load sharing delivers packets to
> different
> > ETRs, before finding this section later on in the document.
>
> Done.
>
> > Nits:
> > 1: " LISP does not require changes to either host protocol stack or to
> underlay
> > routers. " -- I think either "to either the host protocol stack" or " to
> either
> > host protocol stacks"
> >
> > 2: "As an exmple of such attacks an off-path attacker can" -- typo for
> example.
> >
> > 3: "it can protect itself from erroneious reachability attacks" -- typo
> for
> > erroneous.
>
> Fixed.
>
> Thanks again,
> Dino
>
>
>
>

-- 
I don't think the execution is relevant when it was obviously a bad idea in
the first place.
This is like putting rabid weasels in your pants, and later expressing
regret at having chosen those particular rabid weasels and that pair of
pants.
   ---maf