summaryrefslogtreecommitdiff
path: root/lib/libsecureboot
Commit message (Collapse)AuthorAgeFilesLines
* veloader: insist on verifying .4th .lua etcSimon J. Gerraty2020-08-211-1/+5
| | | | | | | | | | | | When files are read from .rc or .4th, verify_file is asked to guess the severity (VE_TRY,VE_WANT,VE_MUST) Reviewed by: stevek MFC after: 1 week Sponsored by: Juniper Networks Notes: svn path=/head/; revision=364443
* Revert that!Simon J. Gerraty2020-07-191-5/+1
| | | | Notes: svn path=/head/; revision=363351
* Oops missed Makefile.configSimon J. Gerraty2020-07-191-1/+5
| | | | Notes: svn path=/head/; revision=363350
* verify_pcr_export: bump kenv_mvallen if neededSimon J. Gerraty2020-06-121-0/+14
| | | | | | | | | | | | The loader.ve.hashed list can easily exceed KENV_MVALLEN. If so, bump kenv_mvallen to a multiple of KENV_MVALLEN to accommodate the value. Reviewed by: stevek MFC after: 1 week Notes: svn path=/head/; revision=362127
* Improve interaction of vectx and tftpSimon J. Gerraty2020-04-071-10/+18
| | | | | | | | | | | | | | | On slow platforms, it helps to spread the hashing load over time so that tftp does not timeout. Also, some .4th files are too big to fit in cache of pkgfs, so increase cache size and ensure fully populated. Reviewed by: stevek MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D24287 Notes: svn path=/head/; revision=359700
* Fix pkgfs stat so it satisfies libsecurebootSimon J. Gerraty2020-03-256-30/+126
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need a valid st_dev, st_ino and st_mtime to correctly track which files have been verified and to update our notion of time. ve_utc_set(): ignore utc if it would jump our current time by more than VE_UTC_MAX_JUMP (20 years). Allow testing of install command via userboot. Need to fix its stat implementation too. bhyveload also needs stat fixed - due to change to userboot.h Call ve_error_get() from vectx_close() when hash is wrong. Track the names of files we have hashed into pcr For the purposes of measured boot, it is important to be able to reproduce the hash reflected in loader.ve.pcr so loader.ve.hashed provides a list of names in the order they were added. Reviewed by: imp MFC after: 1 week Sponsored by: Juniper Networks Differential Revision: https://reviews.freebsd.org//D24027 Notes: svn path=/head/; revision=359307
* veloader use vectx API for kernel and modulesSimon J. Gerraty2020-03-085-74/+197
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The vectx API, computes the hash for verifying a file as it is read. This avoids the overhead of reading files twice - once to verify, then again to load. For doing an install via loader, avoiding the need to rewind large files is critical. This API is only used for modules, kernel and mdimage as these are the biggest files read by the loader. The reduction in boot time depends on how expensive the I/O is on any given platform. On a fast VM we see 6% improvement. For install via loader the first file to be verified is likely to be the kernel, so some of the prep work (finding manifest etc) done by verify_file() needs to be factored so it can be reused for vectx_open(). For missing or unrecognized fingerprint entries, we fail in vectx_open() unless verifying is disabled. Otherwise fingerprint check happens in vectx_close() and since this API is only used for files which must be verified (VE_MUST) we panic if we get an incorrect hash. Reviewed by: imp,tsoome MFC after: 1 week Sponsored by: Juniper Networks Differential Revision: https://reviews.freebsd.org//D23827 Notes: svn path=/head/; revision=358744
* Avoid unused vars when VE_ECDSA_HASH_AGAIN undefinedSimon J. Gerraty2019-12-201-2/+3
| | | | | | | | Reviewed by: emaste MFC after: 1 week Notes: svn path=/head/; revision=355962
* Update Makefile.depend filesSimon J. Gerraty2019-12-112-1/+16
| | | | | | | | | | | | | Update a bunch of Makefile.depend files as a result of adding Makefile.depend.options files Reviewed by: bdrewery MFC after: 1 week Sponsored by: Juniper Networks Differential Revision: https://reviews.freebsd.org/D22494 Notes: svn path=/head/; revision=355617
* Initialize verbosity and debug level from envSimon J. Gerraty2019-10-242-4/+25
| | | | | | | | | | | | | For EFI at least, we can seed the environment with VE_VERBOSE etc. Reviewed by: stevek imp Sponsored by: Juniper Networks MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D22135 Notes: svn path=/head/; revision=354038
* libsecureboot: avoid recusion in ve_trust_initSimon J. Gerraty2019-07-112-4/+2
| | | | | | | | | | | | | set our guard value immediately. also replace call to ve_trust_init in opgp_sig.c:initialize with call to openpgp_trust_init. Reported by: mindal@semihalf.com Reviewed by: jhibbits obrien MFC after: 1 week Notes: svn path=/head/; revision=349924
* libsecureboot: allow OpenPGP support to be dormantSimon J. Gerraty2019-06-267-31/+240
| | | | | | | | | | | | | | | | | | | Since we can now add OpenPGP trust anchors at runtime, ensure the latent support is available. Ensure we do not add duplicate keys to trust store. Also allow reporting names of trust anchors added/revoked We only do this for loader and only after initializing trust store. Thus only changes to initial trust store will be logged. Reviewed by: stevek MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D20700 Notes: svn path=/head/; revision=349446
* libsecureboot: allow control of when pseudo pcr is updatedSimon J. Gerraty2019-05-194-1/+38
| | | | | | | | | | | | | During boot we only want to measure things which *must* be verified - this should provide more deterministic ordering. Reviewed by: stevek MFC after: 1 week Sponsored by: Juniper Networks Differential Revision: https://reviews.freebsd.org/D20297 Notes: svn path=/head/; revision=347981
* load_key_buf do not free data from dearmorSimon J. Gerraty2019-05-192-2/+6
| | | | | | | | | | | The data returned by dearmor is referenced by the key leave it alone! Reviewed by: stevek MFC after: 2 days Notes: svn path=/head/; revision=347980
* libsecureboot: make it easier to customize trust anchorsSimon J. Gerraty2019-05-097-69/+107
| | | | | | | | | | | | | Avoid making hash self-tests depend on X.509 certs. Include OpenPGP keys in trust store count. Reviewed by: stevek MFC after: 1 week Sponsored by: Juniper Networks Differential Revision: https://reviews.freebsd.org/D20208 Notes: svn path=/head/; revision=347408
* Allow no_hash to appear in manifest.Simon J. Gerraty2019-04-234-8/+21
| | | | | | | | | | | | | | | | | sbin/veriexec will ignore entries that have no hash anyway, but loader needs to be explicitly told that such files are ok to ignore (not verify). We will report as Unverified depending on verbose level, but with no reason - because we are not rejecting the file. Reviewed by: imp, mindal_semihalf Sponsored by: Juniper Networks MFC After: 1 week Differential Revision: https://reviews.freebsd.org//D20018 Notes: svn path=/head/; revision=346604
* Always report file with incorrect hash.Simon J. Gerraty2019-04-091-1/+1
| | | | Notes: svn path=/head/; revision=346070
* Create kernel module to parse Veriexec manifest based on envsMarcin Wojtas2019-04-035-4/+167
| | | | | | | | | | | | | | | | | | | | | | | | | The current approach of injecting manifest into mac_veriexec is to verify the integrity of it in userspace (veriexec (8)) and pass its entries into kernel using a char device (/dev/veriexec). This requires verifying root partition integrity in loader, for example by using memory disk and checking its hash. Otherwise if rootfs is compromised an attacker could inject their own data. This patch introduces an option to parse manifest in kernel based on envs. The loader sets manifest path and digest. EVENTHANDLER is used to launch the module right after the rootfs is mounted. It has to be done this way, since one might want to verify integrity of the init file. This means that manifest is required to be present on the root partition. Note that the envs have to be set right before boot to make sure that no one can spoof them. Submitted by: Kornel Duleba <mindal@semihalf.com> Reviewed by: sjg Obtained from: Semihalf Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D19281 Notes: svn path=/head/; revision=345830
* Extend libsecureboot(old libve) to obtain trusted certificates from UEFI and ↵Marcin Wojtas2019-03-0612-36/+1341
| | | | | | | | | | | | | | | | | | | | | | | | | | | | implement revocation UEFI related headers were copied from edk2. A new build option "MK_LOADER_EFI_SECUREBOOT" was added to allow loading of trusted anchors from UEFI. Certificate revocation support is also introduced. The forbidden certificates are loaded from dbx variable. Verification fails in two cases: There is a direct match between cert in dbx and the one in the chain. The CA used to sign the chain is found in dbx. One can also insert a hash of TBS section of a certificate into dbx. In this case verifications fails only if a direct match with a certificate in chain is found. Submitted by: Kornel Duleba <mindal@semihalf.com> Reviewed by: sjg Obtained from: Semihalf Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D19093 Notes: svn path=/head/; revision=344840
* Allow for reproducible buildSimon J. Gerraty2019-03-042-3/+16
| | | | | | | | | | | | Use SOURCE_DATE_EPOCH for BUILD_UTC if MK_REPRODUCIBLE_BUILD is yes. Default SOURCE_DATE_EPOCH to 2019-01-01 Reviewed by: emaste Sponsored by: Juniper Networks Differential Revision: https://reviews.freebsd.org/D19464 Notes: svn path=/head/; revision=344784
* Add libsecurebootSimon J. Gerraty2019-02-2629-0/+4922
Used by loader and veriexec Depends on libbearssl Reviewed by: emaste Sponsored by: Juniper Networks Differential Revision: D16335 Notes: svn path=/head/; revision=344565