From nobody Tue Jul 19 16:00:10 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4LnNp26Jy6z4TRSw; Tue, 19 Jul 2022 16:00:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4LnNp25n61z3rJ3; Tue, 19 Jul 2022 16:00:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1658246410; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=qYV4aXBuaWIB+jw3bLsK+XmUjnUvxTLHeeHfAm+h2U4=; b=mgZZuZfTro/HzsFg1ATqw7ggmDrESAzwD8aqgnNCKMM0wR1Q3EgM6lU6axv4T8IS94OGKe Vzj7mNeN2JPm086JyBJ/4gguoadSMxNiy3KVnIm1BBz+j8Coo3ImMmyp+e62t1KJwTme/r 9g8UzLhjmUQMI4XOyc4Kz6Ms7IKWXHDOewqDeQDK887prBKnNkSHEXP2O/hprYpaNAheQ6 quNP6FbEme/IpBDpqaQlnPGbmD+KUsiWftFPI+q8qrBC7P93v4SLQlqwTcsbyDDxWY12JJ 5D6+Zg3VyQF6DvHGPkBmjRU7mWWxlWbWhRPttD2/9t2ftmnVRAk+fI4pqdGriQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4LnNp24qY0zPhc; Tue, 19 Jul 2022 16:00:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 26JG0ApH005589; Tue, 19 Jul 2022 16:00:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 26JG0Ajm005586; Tue, 19 Jul 2022 16:00:10 GMT (envelope-from git) Date: Tue, 19 Jul 2022 16:00:10 GMT Message-Id: <202207191600.26JG0Ajm005586@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Simon J. Gerraty" Subject: git: ab4f0a151880 - main - Add -S option to veriexec List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: sjg X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ab4f0a15188087e407426aac2a720035fd2a3b0a Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1658246410; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=qYV4aXBuaWIB+jw3bLsK+XmUjnUvxTLHeeHfAm+h2U4=; b=kyz6OJpmjp4CyCmhCOK4LI7hXH2anXMjvi9k5mSmb/ITdvjb4YAO39wKKtcuy2nkl2Bqx1 xBgLMzd+xfPV1wYSuTZFQceJtqv+aa+6n+gFPmZp7P2A4g5Iti9NePheuLokLghY8vvUjk JNB0luHyA4ql+YbnGUI9ay4ZQtD8tGnatTj+BY/qymhihWxbS3bO/w8yGgeAiyrJxEZ+2p 71wvwpJpef0kt6B6dVp6HXy9LxbzyBXG8GdhbJD66Fv12G6wzupCYTzXctvtRlOjORGtNB LEnL26xUNhozVDqsYil4LjQxG/eSh6o8aQdeahZ8CUbT6VoOn7O1IaKDztJFCw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1658246410; a=rsa-sha256; cv=none; b=oZqcDUUOCRTP30lg6FMPYg1E3YtlYzCO5LtJrFtq3TemLErsOQd3W5DZSS527cv69+8WQl mmPlUn38/imRnk5ByVCtsQFPCtwokOlCIdbA17U7zZAX4B99Y5Bnnxo+vYLlPSY7f3DQ2h tlIU2+I4BjitS1UBwCwWPxqdVFulqFjau93gWnU2z00IHFVU1YGLYd0bSvnpzphB8VlC22 w+PGl9UtoIG0uDmIFEmZRa9X4JngzLFljq6yDAV0MtaMO+vycwZjufp8t6cao9q0LsnskR BbI/E++Ei6Ws43S/irN/hl+c+LCMTC3ybaQdhEXsLl1zk20LxuLfK4bjqG/G6Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by sjg: URL: https://cgit.FreeBSD.org/src/commit/?id=ab4f0a15188087e407426aac2a720035fd2a3b0a commit ab4f0a15188087e407426aac2a720035fd2a3b0a Author: Simon J. Gerraty AuthorDate: 2022-07-19 15:59:53 +0000 Commit: Simon J. Gerraty CommitDate: 2022-07-19 15:59:53 +0000 Add -S option to veriexec During software installation, use veriexec -S to strictly enforce certificate validity checks (notBefore, notAfter). Otherwise ignore certificate validity period. It is generally unacceptible for the Internet to stop working just because someone did not upgrade their infrastructure for a decade. Sponsored by: Juniper Networks, Inc. Reviewed by: sebastien.bini_stormshield.eu Differential Revision: https://reviews.freebsd.org/D35758 --- lib/libsecureboot/Makefile.depend.host | 1 - lib/libsecureboot/h/libsecureboot.h | 1 + lib/libsecureboot/vets.c | 44 ++++++++++++++++++++++------------ sbin/veriexec/veriexec.8 | 8 ++++++- sbin/veriexec/veriexec.c | 6 ++++- 5 files changed, 42 insertions(+), 18 deletions(-) diff --git a/lib/libsecureboot/Makefile.depend.host b/lib/libsecureboot/Makefile.depend.host index c6441c263f4a..f80275d86ab1 100644 --- a/lib/libsecureboot/Makefile.depend.host +++ b/lib/libsecureboot/Makefile.depend.host @@ -2,7 +2,6 @@ # Autogenerated - do NOT edit! DIRDEPS = \ - lib/libstand \ .include diff --git a/lib/libsecureboot/h/libsecureboot.h b/lib/libsecureboot/h/libsecureboot.h index 200f8bdb763f..f07988a8206e 100644 --- a/lib/libsecureboot/h/libsecureboot.h +++ b/lib/libsecureboot/h/libsecureboot.h @@ -59,6 +59,7 @@ size_t ve_trust_anchors_add_buf(unsigned char *, size_t); size_t ve_trust_anchors_revoke(unsigned char *, size_t); int ve_trust_add(const char *); void ve_debug_set(int); +void ve_enforce_validity_set(int); void ve_anchor_verbose_set(int); int ve_anchor_verbose_get(void); void ve_utc_set(time_t utc); diff --git a/lib/libsecureboot/vets.c b/lib/libsecureboot/vets.c index b06ab346f716..94475e7cad36 100644 --- a/lib/libsecureboot/vets.c +++ b/lib/libsecureboot/vets.c @@ -86,6 +86,20 @@ ve_debug_set(int n) DebugVe = n; } +/* + * For embedded systems (and boot loaders) + * we do not want to enforce certificate validity post install. + * It is generally unacceptible for infrastructure to stop working + * just because it has not been updated recently. + */ +static int enforce_validity = 0; + +void +ve_enforce_validity_set(int i) +{ + enforce_validity = i; +} + static char ebuf[512]; char * @@ -444,23 +458,23 @@ verify_time_cb(void *tctx __unused, char date[12], nb_date[12], na_date[12]; #endif - not_before = ((not_before_days - X509_DAYS_TO_UTC0) * SECONDS_PER_DAY) + not_before_seconds; - not_after = ((not_after_days - X509_DAYS_TO_UTC0) * SECONDS_PER_DAY) + not_after_seconds; - if (ve_utc < not_before) - rc = -1; - else if (ve_utc > not_after) - rc = 1; - else - rc = 0; + if (enforce_validity) { + not_before = ((not_before_days - X509_DAYS_TO_UTC0) * SECONDS_PER_DAY) + not_before_seconds; + not_after = ((not_after_days - X509_DAYS_TO_UTC0) * SECONDS_PER_DAY) + not_after_seconds; + if (ve_utc < not_before) + rc = -1; + else if (ve_utc > not_after) + rc = 1; + else + rc = 0; #ifdef UNIT_TEST - printf("notBefore %s notAfter %s date %s rc %d\n", - gdate(nb_date, sizeof(nb_date), not_before), - gdate(na_date, sizeof(na_date), not_after), - gdate(date, sizeof(date), ve_utc), rc); -#endif -#if defined(_STANDALONE) - rc = 0; /* don't fail */ + printf("notBefore %s notAfter %s date %s rc %d\n", + gdate(nb_date, sizeof(nb_date), not_before), + gdate(na_date, sizeof(na_date), not_after), + gdate(date, sizeof(date), ve_utc), rc); #endif + } else + rc = 0; /* don't fail */ return rc; } #endif diff --git a/sbin/veriexec/veriexec.8 b/sbin/veriexec/veriexec.8 index 161406ae6de2..d191f5175074 100644 --- a/sbin/veriexec/veriexec.8 +++ b/sbin/veriexec/veriexec.8 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 14, 2022 +.Dd July 8, 2022 .Dt VERIEXEC 8 .Os .Sh NAME @@ -34,6 +34,7 @@ .Nm .Op Fl v .Op Fl C Ar directory +.Op Fl S .Pa manifest .Nm .Fl z Ar state @@ -53,6 +54,11 @@ The first form is for loading a first verifies a digital signature of the .Ar manifest and if successful, parses it and feeds its content to kernel. +The +.Fl S +flag indicates that certificate validity should be checked. +Without this, a valid signature with an expired certificate +will still be accepted. .Pp The second form with .Fl z diff --git a/sbin/veriexec/veriexec.c b/sbin/veriexec/veriexec.c index aff514b1cac5..0162eeda5347 100644 --- a/sbin/veriexec/veriexec.c +++ b/sbin/veriexec/veriexec.c @@ -148,7 +148,7 @@ main(int argc, char *argv[]) dev_fd = open(_PATH_DEV_VERIEXEC, O_WRONLY, 0); - while ((c = getopt(argc, argv, "hC:i:xvz:")) != -1) { + while ((c = getopt(argc, argv, "hC:i:Sxvz:")) != -1) { switch (c) { case 'h': /* Print usage info */ @@ -174,6 +174,10 @@ main(int argc, char *argv[]) exit((x & state) == 0); break; + case 'S': + /* Strictly enforce certificate validity */ + ve_enforce_validity_set(1); + break; case 'v': /* Increase the verbosity */