Re: [Sidrops] what to do when the CRL is hosed?

Job Snijders <job@ntt.net> Mon, 23 March 2020 15:27 UTC

Return-Path: <job@ntt.net>
X-Original-To: sidrops@ietfa.amsl.com
Delivered-To: sidrops@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 29A863A0810 for <sidrops@ietfa.amsl.com>; Mon, 23 Mar 2020 08:27:42 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-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 p9FWJ5lZKoPS for <sidrops@ietfa.amsl.com>; Mon, 23 Mar 2020 08:27:40 -0700 (PDT)
Received: from mail4.sttlwa01.us.to.gin.ntt.net (mail4.sttlwa01.us.to.gin.ntt.net [IPv6:2001:418:3ff:110::40]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3087B3A0802 for <sidrops@ietf.org>; Mon, 23 Mar 2020 08:27:40 -0700 (PDT)
Received: from auth2-smtp.messagingengine.com (auth2-smtp.messagingengine.com [66.111.4.228]) by mail4.sttlwa01.us.to.gin.ntt.net (Postfix) with ESMTPSA id 75ECD220138 for <sidrops@ietf.org>; Mon, 23 Mar 2020 15:27:38 +0000 (UTC)
Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailauth.nyi.internal (Postfix) with ESMTP id B52CA27C0058 for <sidrops@ietf.org>; Mon, 23 Mar 2020 11:27:36 -0400 (EDT)
Received: from imap1 ([10.202.2.51]) by compute3.internal (MEProxy); Mon, 23 Mar 2020 11:27:36 -0400
X-ME-Sender: <xms:aNV4XmmVkkFMqqKxsHamVLnAWvS1IgV4mMiJ2w9Fc6LIXjHiToSQ5A>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedugedrudegkedgjeeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfgjfhffhffvufgtsehttd ertderredtnecuhfhrohhmpedflfhosgcuufhnihhjuggvrhhsfdcuoehjohgssehnthht rdhnvghtqeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhroh hmpehjohgsodhmvghsmhhtphgruhhthhhpvghrshhonhgrlhhithihqddutdegjeeludeh keegqddvfeeffeekfedvtddqjhhosgeppehnthhtrdhnvghtsehsohgsohhrnhhoshhtrd hnvght
X-ME-Proxy: <xmx:aNV4XjEHTx-P8LWIyvHFml7eX-8fCqQRUtMarMAYPvgggiYSV1-q2g> <xmx:aNV4XnRllJgifE1Xt4zx2w-GixE4H9erD8WNueJWGxGhcZz9NiTYYw> <xmx:aNV4XqSGDCul9oU5BIGB1wduS4Uj2k_0hSHhnFwNGZpeG6g6cwecvQ> <xmx:aNV4Xj3uyGTs8xOIIPYWNTjSxZSXMGOgqhdCa-VbyN2v1VeuHR7XMj9ObaY>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id 3302AC200A6; Mon, 23 Mar 2020 11:27:36 -0400 (EDT)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.1.7-1021-g152deaf-fmstable-20200319v1
Mime-Version: 1.0
Message-Id: <4fe26a30-4a08-41a5-be7f-0c5997230d0a@www.fastmail.com>
In-Reply-To: <3a683da4-42f9-28c6-f0dd-4d11d3c67857@ripe.net>
References: <20200224151532.GD19221@vurt.meerval.net> <20200224211531.GB60925@vurt.meerval.net> <20200225090338.10464b1a@glaurung.nlnetlabs.nl> <9cc3a6a5-f9c8-23df-588e-48dee5db62d4@verizon.net> <3B7006DE-5366-47E7-9CD6-AF392F9ED0CC@nlnetlabs.nl> <6602d1a7-ecbf-73a0-21d8-1254fb2aff97@verizon.net> <253D1ED7-52D8-4A00-9D69-095E61D09C9F@nlnetlabs.nl> <db920115-e188-700f-ceb2-08cd2996046a@verizon.net> <3a683da4-42f9-28c6-f0dd-4d11d3c67857@ripe.net>
Date: Mon, 23 Mar 2020 16:27:16 +0100
From: Job Snijders <job@ntt.net>
To: sidrops@ietf.org
Content-Type: text/plain
Archived-At: <https://mailarchive.ietf.org/arch/msg/sidrops/XHz2bJlU255aMhug4hfEzbMfD6s>
Subject: Re: [Sidrops] what to do when the CRL is hosed?
X-BeenThere: sidrops@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: A list for the SIDR Operations WG <sidrops.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/sidrops>, <mailto:sidrops-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/sidrops/>
List-Post: <mailto:sidrops@ietf.org>
List-Help: <mailto:sidrops-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/sidrops>, <mailto:sidrops-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 23 Mar 2020 15:27:43 -0000

Dear all,

I'm observing the discussions in sidrops with increasing alarm. Taking stock of the current situation I see:

1) failure to produce consistent output across multiple validators based on the current specs
2) failure to produce software updates which address the reported MITM scenarios

One can argue "well, the specs did not explicitly mentioned what to do in scenario X Y Z", but even if the specs don't give precise guidance on what to do, I do not believe that the specs anywhere specify that insecure behaviour is acceptable. And even /if/ the specs granted "permission" for sloppy validation strategies, I'd expect any software developer producing 'security software' to deviate from such specs and implement validation strategies which are as secure as possible.

On Mon, Mar 23, 2020, at 15:23, Robert Kisteleki wrote:
> On 2020-03-23 14:33, Stephen Kent wrote:
> >> What I am suggesting is that we *could* update 6486 and make
> >> validation more restrictive regarding manifests:
> >> - all objects on a manifest must be present and accounted for (I agree
> >> with Job regarding partial withhold attacks)
> >> - all objects on a manifest need to be validated
> >> - objects that are not on a manifest can be considered invalid
> >>
> >> This is in-line with the specifications defined in RFC 6481 (A Profile
> >> for Resource Certificate Repository Structure), which essentially says
> >> that all current objects must be published, and that no invalid
> >> objects may be published.
>
> > agree.
> 
> As I wrote before, I believe that a single mistake (withheld /
> unpublished object or even a bit flip) invalidating a whole repository,

Some nuance could be added: it depends on where the error in the tree exists. If a top level manifest or CRL is hosted, indeed everything underneath it should be tossed. But for instance when a manifest 'at 2 levels deep', references a file that doesn't exist, you only need to toss that specific manifest (at least). So, yes, errors in the repository should result in the repository (or parts of it) being considered inadmissible.

RPKI started out on the premise that an unencrypted transport (rsync) was acceptable, because everything was signed and cryptographically verifiable. Now we are in a situation where the transport channel *is* insecure, and the data transmitted across it is not properly verified. Validators are *knowingly* proceeding to produce VRPs with incomplete, expired, and/or corrupted data.

> and as a consequence everything that could be validated under it, is a
> way to high price to pay. It also makes attacks much easier: withholding
> one single object from a repo and poof, a whole subtree (forest...) is gone?

I'd be very hesitant to use absolutes such as "the price is way too high". The alternative is to allow for a number of MITM attack vectors. What is the cost of those? I have MITM examples running in my lab with routinator, rpki-client, fort, and ripe ncc's validator where partial withholding attacks are trivial and successful. The result of those MITM attacks is hard-to-troubleshoot network outages.

Strategically hiding a select few ROAs can easily result in large scale outages because the attacker can make "RPKI Valid" announcements flip to "RPKI Invalid": this is worse than if the validator would've thrown out the manifest (things would've gone from "Invalid" to "Not-Found").

Performing the RFC 6811 Origin Validation procedure on an *incomplete* set of data is worse than not doing RFC 6811 at all. If RPKI validators allow flipping announcements from Valid to Invalid, that goes against the premise under which we designed RPKI to be incrementally deployable. We taught this industry that deploying RPKI would be safe.

> I believe a more nuanced approach is needed, like if there's a problem
> on a particular validation path (a cert is missing or has an error) then
> invalidate that path, if a CRL is missing then warn but use a stale one,
> but leave the otherwise unaffected bits validated.

I'm not sure you weigh the power of partial withholding attacks as severely as I do. As mentioned before: stricter validator on the RPKI Cache Validator side of the house will put the onus on RPKI CA Publication points to run a tight ship. I believe this to be appropriate because there are far less CA operators than there are RP operators.

If the validators are not going to be strict, what motivation exists for the CA operators to clean up their act?

If the validators are not going to be strict, are network operators supposed to just accept that the VRPs they feed into "invalid == reject" policies on their EBGP routers potentially are tainted? How will that convince anyone to deploy RPKI Origin Validation?

Kind regards,

Job