forked from openbmc/linux
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'next-integrity.measure-keys' into next-integrity
From "KEYS: Measure keys when they are created or updated" cover letter: Keys created or updated in the system are currently not measured. Therefore an attestation service, for instance, would not be able to attest whether or not the trusted keys keyring(s), for instance, contain only known good (trusted) keys. IMA measures system files, command line arguments passed to kexec, boot aggregate, etc. It can be used to measure keys as well. But there is no mechanism available in the kernel for IMA to know when a key is created or updated. This change aims to address measuring keys created or updated in the system. To achieve the above the following changes have been made: - Added a new IMA hook namely, ima_post_key_create_or_update, which measures the key. This IMA hook is called from key_create_or_update function. The key measurement can be controlled through IMA policy. A new IMA policy function KEY_CHECK has been added to measure keys. "keyrings=" option can be specified for KEY_CHECK to limit measuring the keys loaded onto the specified keyrings only. uid can be specified to further restrict key measurement for keys created by specific user. # measure keys loaded onto any keyring measure func=KEY_CHECK # measure keys loaded onto the IMA keyring only for root user measure func=KEY_CHECK uid=0 keyring=".ima" # measure keys on the BUILTIN and IMA keyrings into a different PCR measure func=KEY_CHECK keyring=".builtin_trusted_keys|.ima" pcr=11
- Loading branch information
Showing
10 changed files
with
207 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
// SPDX-License-Identifier: GPL-2.0+ | ||
/* | ||
* Copyright (C) 2019 Microsoft Corporation | ||
* | ||
* Author: Lakshmi Ramasubramanian (nramas@linux.microsoft.com) | ||
* | ||
* File: ima_asymmetric_keys.c | ||
* Defines an IMA hook to measure asymmetric keys on key | ||
* create or update. | ||
*/ | ||
|
||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
|
||
#include <keys/asymmetric-type.h> | ||
#include "ima.h" | ||
|
||
/** | ||
* ima_post_key_create_or_update - measure asymmetric keys | ||
* @keyring: keyring to which the key is linked to | ||
* @key: created or updated key | ||
* @payload: The data used to instantiate or update the key. | ||
* @payload_len: The length of @payload. | ||
* @flags: key flags | ||
* @create: flag indicating whether the key was created or updated | ||
* | ||
* Keys can only be measured, not appraised. | ||
* The payload data used to instantiate or update the key is measured. | ||
*/ | ||
void ima_post_key_create_or_update(struct key *keyring, struct key *key, | ||
const void *payload, size_t payload_len, | ||
unsigned long flags, bool create) | ||
{ | ||
/* Only asymmetric keys are handled by this hook. */ | ||
if (key->type != &key_type_asymmetric) | ||
return; | ||
|
||
if (!payload || (payload_len == 0)) | ||
return; | ||
|
||
/* | ||
* keyring->description points to the name of the keyring | ||
* (such as ".builtin_trusted_keys", ".ima", etc.) to | ||
* which the given key is linked to. | ||
* | ||
* The name of the keyring is passed in the "eventname" | ||
* parameter to process_buffer_measurement() and is set | ||
* in the "eventname" field in ima_event_data for | ||
* the key measurement IMA event. | ||
* | ||
* The name of the keyring is also passed in the "keyring" | ||
* parameter to process_buffer_measurement() to check | ||
* if the IMA policy is configured to measure a key linked | ||
* to the given keyring. | ||
*/ | ||
process_buffer_measurement(payload, payload_len, | ||
keyring->description, KEY_CHECK, 0, | ||
keyring->description); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.