Re: [PATCH] certs: Restrict blacklist updates to the secondary trusted keyring

From: Eric Snowberg
Date: Mon Sep 11 2023 - 21:24:33 EST




> On Sep 11, 2023, at 4:04 PM, Jarkko Sakkinen <jarkko@xxxxxxxxxx> wrote:
>
> On Mon Sep 11, 2023 at 4:29 PM EEST, Mimi Zohar wrote:
>> Hi Eric,
>>
>> On Fri, 2023-09-08 at 17:34 -0400, Eric Snowberg wrote:
>>> Currently root can dynamically update the blacklist keyring if the hash
>>> being added is signed and vouched for by the builtin trusted keyring.
>>> Currently keys in the secondary trusted keyring can not be used.
>>>
>>> Keys within the secondary trusted keyring carry the same capabilities as
>>> the builtin trusted keyring. Relax the current restriction for updating
>>> the .blacklist keyring and allow the secondary to also be referenced as
>>> a trust source. Since the machine keyring is linked to the secondary
>>> trusted keyring, any key within it may also be used.
>>>
>>> An example use case for this is IMA appraisal. Now that IMA both
>>> references the blacklist keyring and allows the machine owner to add
>>> custom IMA CA certs via the machine keyring, this adds the additional
>>> capability for the machine owner to also do revocations on a running
>>> system.
>>>
>>> IMA appraisal usage example to add a revocation for /usr/foo:
>>>
>>> sha256sum /bin/foo | awk '{printf "bin:" $1}' > hash.txt
>>>
>>> openssl smime -sign -in hash.txt -inkey machine-private-key.pem \
>>> -signer machine-certificate.pem -noattr -binary -outform DER \
>>> -out hash.p7s
>>>
>>> keyctl padd blacklist "$(< hash.txt)" %:.blacklist < hash.p7s
>>>
>>> Signed-off-by: Eric Snowberg <eric.snowberg@xxxxxxxxxx>
>>
>> The secondary keyring may include both CA and code signing keys. With
>> this change any key loaded onto the secondary keyring may blacklist a
>> hash. Wouldn't it make more sense to limit blacklisting
>> certificates/hashes to at least CA keys?
>
> I think a bigger issue is that if a kernel is updated with this patch
> it will change the behavior. It is nothing to do whether the "old" or
> "new" is better but more like kind of backwards compatibility issue.

For a kernel built without the secondary trusted keyring defined, there is
no change to their security posture. For a kernel built with the secondary
trusted keyring defined, I would view the system as being more secure
with this patch. For any system using the secondary trusted keyring,
root can add trusted keys. However without this patch, root can not
mitigate a security problem on a live system and do any type of revocation
for keys it owns. Without the ability to do a revocation, we really only have
authenticity, not integrity.