Re: [Last-Call] Last Call: <draft-gont-numeric-ids-sec-considerations-06.txt> (Security Considerations for Transient Numeric Identifiers Employed in Network Protocols) to Best Current Practice

Fernando Gont <fgont@si6networks.com> Tue, 15 December 2020 05:11 UTC

Return-Path: <fgont@si6networks.com>
X-Original-To: last-call@ietfa.amsl.com
Delivered-To: last-call@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3E27A3A0957; Mon, 14 Dec 2020 21:11:15 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: 0
X-Spam-Level:
X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[NICE_REPLY_A=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 Au1pNGfpZ1Ou; Mon, 14 Dec 2020 21:11:10 -0800 (PST)
Received: from fgont.go6lab.si (fgont.go6lab.si [91.239.96.14]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 9A7883A0949; Mon, 14 Dec 2020 21:11:10 -0800 (PST)
Received: from [10.0.0.129] (unknown [186.19.8.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by fgont.go6lab.si (Postfix) with ESMTPSA id 52D3E280793; Tue, 15 Dec 2020 05:06:03 +0000 (UTC)
To: Christian Huitema <huitema@huitema.net>, Russ Housley <housley@vigilsec.com>, Ben Kaduk <kaduk@mit.edu>
Cc: last-call@ietf.org, draft-gont-numeric-ids-sec-considerations@ietf.org
References: <160735373732.25981.15176977559155786235@ietfa.amsl.com> <F438198F-34E2-4C9F-A32F-ACD58D9A6734@vigilsec.com> <20201209211455.GZ64351@kduck.mit.edu> <327D2176-1722-4F83-9ED1-205C575D67E6@vigilsec.com> <d64183b5-067b-5f6b-e5c8-0975311f2fbf@si6networks.com> <4A0B53B2-71D7-4623-90CC-E0E884101C31@vigilsec.com> <20201214025510.GS64351@kduck.mit.edu> <BDD8DC40-D615-4624-8D04-A9FC47E4F9FA@vigilsec.com> <d066ba38-694a-8462-4ffa-0662a224517c@huitema.net>
From: Fernando Gont <fgont@si6networks.com>
Message-ID: <f8b06e79-c6fc-d46c-d8be-07e07480242d@si6networks.com>
Date: Tue, 15 Dec 2020 02:05:41 -0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1
MIME-Version: 1.0
In-Reply-To: <d066ba38-694a-8462-4ffa-0662a224517c@huitema.net>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Language: en-US
Content-Transfer-Encoding: 7bit
Archived-At: <https://mailarchive.ietf.org/arch/msg/last-call/uUgBQLSnBuly-jGTRjH6-6nyAQU>
Subject: Re: [Last-Call] Last Call: <draft-gont-numeric-ids-sec-considerations-06.txt> (Security Considerations for Transient Numeric Identifiers Employed in Network Protocols) to Best Current Practice
X-BeenThere: last-call@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: IETF Last Calls <last-call.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/last-call>, <mailto:last-call-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/last-call/>
List-Post: <mailto:last-call@ietf.org>
List-Help: <mailto:last-call-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/last-call>, <mailto:last-call-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 15 Dec 2020 05:11:15 -0000

On 15/12/20 01:18, Christian Huitema wrote:
> 
> I think there are two main issues in the document: it does not 
> distinguish between identifiers that are "visible on the wire" and those 
> that are only visible by the endpoints;

The identifiers are the same.

draft-irtf-pearg-numeric-ids-generation analyzes e.g. how a predictable 
identifier can be exploited by somebody that sees the ID (or can sample 
some),as well as by attackers that can't.

If a protocol employs numeric IDs and does not encrypt the ID, then both 
on-path systems and the remote endpoint will see the ID. If the protocol 
does employ encryption, then only the remote endpoint sees the IDs.

So, "who sees the identifiers" doesn't really change the identifier 
type: it just constrains who can exploit them and how.



> and, it suggests an overly specific identifier generation algorithm.

This particular document does not discuss any algorithms. In fact, the 
advice says:

    3.  Recommend an algorithm for generating the aforementioned
        identifiers that mitigates security and privacy issues, such as
        those discussed in [I-D.irtf-pearg-numeric-ids-generation].

So the algorithms are provided as *examples*. It's not a requirement to 
pick one of  the algorithms in draft-irtf-pearg-numeric-ids-generation.



> The document also suffers from 
> trying to fit different kinds of protocol parameters in a single 
> abstract category, the "Transient Numeric Identifier". This feels 
> somewhat artificial.

All of the parameters are identifiers of some sort. It's the same type 
of parameter (a transient numeric ID), employed for identifying 
different data objects.

The generalization is not artificial. We came up with it after realizing 
that all transient numeric IDs fall into one of the categories in 
draft-irtf-pearg-numeric-ids-generation, based on the interoperability 
requirements and failure severity.



> Fixing the lack of distinction between "visible on the wire" and 
> "visible by the end-points" would require fixing the section 3 regarding 
> "issues". The current list of issues feels theoretical and detached from 
> the actual attacks. It lists:
> 
>     o  Protocol specifications that under-specify the requirements for
>        their identifiers
> 
>     o  Protocol specifications that over-specify their identifiers
> 
>     o  Protocol implementations that simply fail to comply with the
>        specified requirements

These are the three usual failures associated with the specification of 
numeric identifiers. All flawed IDs I know of are the result of one of 
these three issues.

They certainly are *not* the actual attacks, but rather the reasons why 
implementations end up with flawed IDs.



> That list of issues seems somewhat self-referential, another way of 
> saying "protocols that do not comply with the recommendations in this 
> document".

That's certainly not what we mean. The above text means:

* Some specs fail to spell out requirements (they spec'ed lesss than 
they should have) -- so implementations end up picking flawed algorithms 
because the spec failed to spell out the requiredments for the IDS.

* Some specs over-specify their IDs (the specified more than they should 
ahve), leading to flawed IDs. e.g., traditional IPv6 SLAAC, where the 
requirement should have been that the IID is unique, but the spec ended 
up requiring hosts to embed the MAC address in the IID.

* At times, protocol specs do a good job, but implementations fail to 
comply with the spec, and end up employing flawed IDs. (the protocol 
spec was good, but the implementors screwed up).


Nothing in this list self-references this document. It talks about the 
relevant specs for each of the IDs we analyzed.



> If we want to provide guidance, we should instead look at 
> categories of attacks enabled by classic mistakes, such as injection 
> attacks, correlation attacks, or spoofing attacks. That's the point at 
> which we can make a distinction between "visible on the wire" and not -- 
> injection attacks, correlation attacks and spoofing attacks by third 
> parties are mitigated if the identifier is not visible, but spoofing 
> attacks by the connected peer are not.

Such discussion is in 
https://tools.ietf.org/html/draft-irtf-pearg-numeric-ids-generation-03 .

As noted, the analysis mentions what an attacker that doesn't see the 
IDs can do, and what an attacker that can sample the IDs can do. At the 
end of the day, it doesn't matter if the attacker doesn't see the IDs 
because he's off-path, or because the relevant protocol encrypts the 
numeric IDs -- at the end of the day, the attacker sees the IDs, or he 
doesn't.



> EKR mentions how much the document is at odd with recent practice, like 
> the design of QUIC. QUIC does use a number of identifiers: connection 
> identifiers, packet numbers, stream numbers, data offsets within 
> streams. If that document had been available before the design of QUIC, 
> would it have help development? My personal opinion is no, it would not 
> have make the protocol better. It might have created a hurdle during the 
> last call reviews, forcing the developers to discuss why they would not 
> comply with the recommendation in this draft, and creating additional 
> delays in the process for little practical result.

I disagree. I do think that, for example, the specification of 
connection IDs is sub-optimal.

I missed the LC for that document. But my understanding is that IESG 
review is pending. So hopefully the issue will be raised -- not to 
thwart progress, but to help improve the spec.

Thanks,
-- 
Fernando Gont
SI6 Networks
e-mail: fgont@si6networks.com
PGP Fingerprint: 6666 31C6 D484 63B2 8FB1 E3C4 AE25 0D55 1D4E 7492