Re: [Trans] WGLC started for draft-ietf-trans-threat-analysis

Stephen Kent <s@zerho.info> Mon, 14 May 2018 15:26 UTC

Return-Path: <s@zerho.info>
X-Original-To: trans@ietfa.amsl.com
Delivered-To: trans@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4B99F12421A for <trans@ietfa.amsl.com>; Mon, 14 May 2018 08:26:32 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.701
X-Spam-Level:
X-Spam-Status: No, score=-2.701 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=zerho.info
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 L4gp7hJQEM9G for <trans@ietfa.amsl.com>; Mon, 14 May 2018 08:26:24 -0700 (PDT)
Received: from mail1.protonmail.ch (mail1.protonmail.ch [185.70.40.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 700AA12E8CD for <trans@ietf.org>; Mon, 14 May 2018 08:26:24 -0700 (PDT)
Date: Mon, 14 May 2018 11:26:08 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zerho.info; s=protonmail; t=1526311579; bh=yXSG/mpU/UYoMuyrUz7sZ3BOsety+NSKXgi8N0YewGE=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References: Feedback-ID:From; b=CvBBFltNll52GpMerhior86sgB4zEZDAjav0zI0rB1Xewp3k2m3v7rtBVhLGs2C9r weM6h+VKOzjHrg39c8zmhDeIQUalCXOcKnfFnya/TH40Bq6wGo9qihx2XjT6b5bBeh NSkV5C3pk9MEcImq7zblUHfrlZIFSe2kvLdmiMNU=
To: Andrew Ayer <agwa@andrewayer.name>
From: Stephen Kent <s@zerho.info>
Cc: Trans <trans@ietf.org>
Reply-To: Stephen Kent <s@zerho.info>
Message-ID: <alhGtNm005X-hBR82niHi9RpJoLosgZF8ah8HC4qLzFX0PPStVGSTbgJtP-zrg1u8vgfb_IiQ70ANuRua2kjRf4zwutQHVRo3pE2PCgZfHo=@zerho.info>
In-Reply-To: <20180507122941.300b69582fa3acdb52b625af@andrewayer.name>
References: <alpine.LRH.2.21.1804161658150.17034@bofh.nohats.ca> <20180507122941.300b69582fa3acdb52b625af@andrewayer.name>
Feedback-ID: J6dPlme6glBGJLMEtGsaqJPE6vPDBSW6lOheJXLXjEWBxgn8P1CEZKbZGc4D01YOct3XeTXymnV_hlw9t4YeHg==:Ext:ProtonMail
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Archived-At: <https://mailarchive.ietf.org/arch/msg/trans/nloFtigI5IqYeSbQbowK5Kd-TEY>
Subject: Re: [Trans] WGLC started for draft-ietf-trans-threat-analysis
X-BeenThere: trans@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Public Notary Transparency working group discussion list <trans.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/trans>, <mailto:trans-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/trans/>
List-Post: <mailto:trans@ietf.org>
List-Help: <mailto:trans-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/trans>, <mailto:trans-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 14 May 2018 15:26:32 -0000

Andrew,

Thanks for taking the time to review the document and for the nice organization of your comments.


A.	Logs do not check for syntactic misissuance 

Sections 4.1.1.1 and 4.2.1.1 give the impression that logs check, or ought to check, submitted certificates for syntactic misissuance. Page 20 says that syntactic misissuance will be detected "only if" a (pre-)certificate is submitted to a log that performs syntactic checks. 

There was no intent to suggest that logs do or ought to perform syntax checks. Sorry for any confusion in that regard. I did find several places where uppercase reserved words appear, which is inappropriate for an informational RFC. I will change all of these to lowercase. 

Also, note that 6962-bis says: “Logs SHOULD accept certificates and precertificates that are fully valid according to RFC 5280 [RFC5280] verification rules and are submitted with such a chain.” This text suggests that some logs might choose to verify certificate syntax as part of path validation, although none need to do so. The text goes on to note that a log may choose to accept certs that violate some 5280 rules, which also suggests to me that syntax checking is not outlawed by 6269-bis. It acknowledges that this leniency is needed to accept “quirks of CA certificate-issuing software.”


This is not an intended function of logs, and not a single one of the 58 logs currently in operation performs syntactic misissuance checks. Furthermore, having logs perform this function would violate separation of concerns. Instead, monitors perform syntactic misissuance checks. crt.sh, for instance, runs all certificates through several certificate linters. 

The document examines possible ways that one might detect syntax problems and how elements of CT might facilitate remediation of detected problems. Logs, if they chose to perform such checks, could help in this respect and that’s why they are discussed, irrespective of how logs currently operate. Also, I don’t see where 6962-bis states that a monitor performs syntax checks. For example, the 6962-bis text for the description of Monitor operation still says “Monitors watch logs to check that they behave correctly, for certificates of interest, or both.” (The “or both” makes no sense here, as I noted several times in 2017, but …)


Page 20 says that "syntactic checking [of pre-certificates] by a log helps avoid issuance of an erroneous certificate." This is contrary to RFC6962 and RFC6962-bis, which both state that issuing a pre-certificate is a binding commitment by the CA to issue a certificate. It would be dangerous for a CA to follow the advice on page 20, as browsers rightly consider misissuance of a pre-certificate to be equivalent to misissuance of a real certificate. 

I'll change the text on page 20 to state that a log could help a CA detect and avoid issuing a syntactically erroneous cert. Also, what 6962 says is not relevant here- that was an experimental doc, not standards track. Submission of a pre-cert to a log probably does indicate an internet to issue a cert, but certificate issuance need not result in delivery to a Subject. If a CA were advised by a log that a certificate was malformed (e.g., due to “quirks of CA certificate-issuing software” then the CA could ditch the certificate, or revoke it, and try again.

CAs must perform syntactic checks on the TBSCertificate prior to signing anything.

In principle yes, but in practice, … “quirks of CA certificate-issuing software”

Section 4.2.1.1 is premised on two I-Ds that were not adopted by trans and have expired. I suggest that sections 4.1.1.1 and 4.2.1.1 be removed entirely. 

I believe that the two I-Ds in question were generated because of the text that I was writing here, not the other way around. The text in 4.1.1.1 says that a log could optionally check for syntax problems; it does not say that they MUST/SHOULD do so. I'll change the text in 4.1.1.1 to note, parenthetically, that syntax checks by a log are optional.


B.	Conflation of log misbehavior and CA misbehavior 

Page 4 says that if a bogus SCT is discovered, it would trigger a revocation request. Page 26 says that browsers need to "reject certificates that contain SCTs from conspiring logs." 


Page 4 says that discovery of a bogus SCT would "presumably, trigger" a revocation request. Page 26 does not require a browser to reject a certificate that does not contain an SCT. (As noted above, this document is not intended to establish requirements for any element of the CT system.) 5.4 describes issues that might arise IF such behavior were adopted.

Page 3 says "if an RP verified that a certificate that claims to have been logged has a valid log entry, the RP would have a higher degree of confidence that the certificate is genuine." 

But behavior of a log says nothing about whether a certificate was properly issued. A properly-issued certificate might be logged to a a misbehaving log, and a misissued certificate might be logged to a well-behaved log. 

Therefore, browsers should not consider a certificate more likely to be genuine just because it's logged, and if a certificate contains an embedded SCT from a log that's known to be bad, the browser should reject only that SCT, and still check SCTs from other logs. And there is no need to revoke a properly-issued certificate just because it's submitted to a log that misbehaves. 

I agree that a browser placing greater trust in a certificate because it has been logged is not fool-proof. However, it represents an important initial check. I believe Richard Barnes made some good arguments on the list last year about the utility of logging and the complexity and potential privacy issues that arise if browsers engage in auditing. So, yes, I believe that receipt of a certificate containing an SCT probably will inspire greater confidence. I will revise the text to insert the term "probably". Browser interactions with an audit system are not yet standardized and present some privacy concerns, so one ought not assume that the more extensive checks you note will be widely deployed.


Section 5.3 says that "evidence of a bogus or erroneous certificate" can be "in the form of a log entry and/or SCT." An SCT is irrelevant for this, as it attests only to log behavior. 

An SCT can be used to retrieve a log entry, so it seems reasonable to include it here. I’ll revise the text to say that a log entry or SCT is supporting evidence.

C.	Response to log misbehavior 

On pages 4, 9, and 13, the draft says that monitors should not "trust" or "rely upon" misbehaving logs. But monitors don't trust or distrust logs - they just view logs as a source of certificates. Browsers, on the other hand, do trust and distrust logs. For example, after two logs (WoSign and Startcom) issued bad SCTs, they were distrusted by Chrome, but Cert Spotter and crt.sh continued monitoring them until they shut down. 

The document should be updated to remove mention of monitors trusting or relying upon logs, and to make clear that the primary response to a misbehaving log is for browsers to distrust it. 

A monitor selects a set of logs that it will use to check for mis-issued certificates. By so doing it is implicitly trusting (relying on) them. If they are detected to misbehave, Monitors will, presumably, stop relying on them, as you indicated in your example.

D.	Signature/chain mutation attack 

There's another way a log can misbehave which ought to be mentioned in section 3.1.1.2. A misbehaving log that conspires with a CA could log a misissued certificate, but mutate the certificate's signature or chain such that the certificate is no longer cryptographically attributable to the CA. The CA could then plausibly deny that it issued the certificate. Since the signature and chain are not part of the Merkle Tree, the SCT will be accepted by browsers and be auditable, despite the log entry being mutated and useless for responding to the misissuance. 

Monitors should be sure to validate the signature and chain of logged certificates so that this misbehavior can be detected. 

I don’t think I understand the attack. Where is the mutated certificate signature? If you can provide a clear, detailed description of the attack I could include it in the revised text.

E.	Chrome is requiring SCTs now 

As David A. Cooper pointed out, Chrome is now requiring new certificates to contain SCTs, so sections 3.1.2.2, 3.2.2.1, and 5.4 need updates. 

As I noted in my reply to David, Chrome is just one browser. The WG has been informed, in the past, that the Chrome developers reserve to right to do whatever they feel is best for that product, irrespective of what the IETF describes in an RFC. So, for now, I don’t think, the sections in question require changes.

F.	Organization 

The organization of the draft seems sub-optimal. At a high level, the document is broken up into semantic and syntactic misissuance, and then into malicious vs non-malicious CA. Within these categories, the document discusses the implications when the certificate is logged, not logged, or when the log is misbehaving. Very often, these implications are the same regardless of the type of misissuance or the culpability of the CA. As a result, there is a lot of duplication, often with minor differences in wording, which makes the document harder to understand. 

I think the structure of section 5, which discusses issues as standalone concepts, is a better model. Alternatively, the duplication could be removed from sections 3 and 4 and replaced by references to prior sub-sections. 

I agree that there is some duplication, but I prefer the taxonomic approach and I’ve used that in other threat/attack documents, most recently RFC 7132. It’s rather late in this process to suggest a massive revision of the document.

G.	Minor comments 

Page 3 says "'bad-CA-lists' a CA as noted above". "Bad-CA-list" hasn't been defined and doesn't appear to be noted above. 

Fair point- I’ll try to provide an in-context definition. BTW, the cited text appears on page 4, not 3. 

Page 3 talks about "validat[ing]" an SCT, which is ambiguous, as it could refer to checking the SCT's signature, or auditing the SCT for inclusion. I suggest replacing "validates" with "audits" and replacing "is invalid" (in the same sentence) with "fails auditing." 

Section 8.1.3 of 6962-b defines SCT validation as checking the SCT signature, period. I’ll cite that section in the text. BTW, the cited text appears on page 4, not 3.

Page 4 says that "a CA benefits from CT when it detects a (mis-issued) certificate that represents the same Subject name as a legitimate certificate issued by the CA." How is a CA supposed to know if the certificate is misissued or not? 

I’ll reword the text to indicate that I was envisioning a CA acting as a Monitor for its clients in this case. BTW, the cited text appears on page 5, not 4.

Page 10 says that a monitor/auditor will detect a misbehaving log when it "sees the bogus certificate." It also needs to see the SCT. 

If the pre-certificate was logged, the certificate contains the SCT.  But, to be general, I’ll add a parenthetical reference to the SCT. BTW, the quoted text appears on page 11, not 10. 

Section 3.1.2.1 talks about a Subject being able to detect the lack of an SCT in a certificate that it is issued. Since this is part of the section on "Semantic misissuance," which is defined in the Introduction as a certificate issued to someone who isn't the Subject, it's unclear to me what the point of this sub-section is. A Subject, by definition, would never be issued a semantically misissued certificate. 

Fair point- I’ll move this text to Section 4.1.2

Section 3.3.1 ends with "If the bogus certificate is detected and logged, browsers that require an SCT will reject the bogus certificate." Wouldn't the logging of a certificate cause an SCT to be issued, and thus allow it to be *accepted* by browsers that require an SCT? 

Fair point- I’ll reword the text to note that if the certificate is logged, it is subject to detection as bogus. Since the CA is presumed to be malicious, it may delay revocation or try to suppress revocation status distribution (as per 3.5). Inn this case even browsers that require an SCT are still vulnerable.

The last paragraph of section 3.5 talks about the attack in 3.4 and should be moved.

The sentence that refers to “CA certificate 2” does belong with the discussion in 3.4, so I will move it to the end of that section. The rest of the text talks about ways that one might counter attacks based on manipulating distribution of revocation status, and thus belongs at the end of 3.5.