Re: [PATCH v2 09/11] ima: Move validation of the keyrings conditional into ima_validate_rule()
From: Mimi Zohar <zohar@linux.ibm.com>
Date: 2020-07-07 03:19:05
Also in:
linux-integrity, lkml
On Mon, 2020-07-06 at 08:18 -0500, Tyler Hicks wrote:
On 2020-07-03 10:15:32, Mimi Zohar wrote:quoted
On Thu, 2020-07-02 at 17:16 -0500, Tyler Hicks wrote:quoted
On 2020-06-30 19:07:29, Mimi Zohar wrote:quoted
On Fri, 2020-06-26 at 17:38 -0500, Tyler Hicks wrote:quoted
Use ima_validate_rule() to ensure that the combination of a hook function and the keyrings conditional is valid and that the keyrings conditional is not specified without an explicit KEY_CHECK func conditional. This is a code cleanup and has no user-facing change. Signed-off-by: Tyler Hicks <redacted> --- * v2 - Allowed IMA_DIGSIG_REQUIRED, IMA_PERMIT_DIRECTIO, IMA_MODSIG_ALLOWED, and IMA_CHECK_BLACKLIST conditionals to be present in the rule entry flags for non-buffer hook functions. security/integrity/ima/ima_policy.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index 8cdca2399d59..43d49ad958fb 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c@@ -1000,6 +1000,15 @@ static bool ima_validate_rule(struct ima_rule_entry *entry) case KEXEC_KERNEL_CHECK: case KEXEC_INITRAMFS_CHECK: case POLICY_CHECK: + if (entry->flags & ~(IMA_FUNC | IMA_MASK | IMA_FSMAGIC | + IMA_UID | IMA_FOWNER | IMA_FSUUID | + IMA_INMASK | IMA_EUID | IMA_PCR | + IMA_FSNAME | IMA_DIGSIG_REQUIRED | + IMA_PERMIT_DIRECTIO | + IMA_MODSIG_ALLOWED | + IMA_CHECK_BLACKLIST))Other than KEYRINGS, this patch should continue to behave the same. However, this list gives the impressions that all of these flags are permitted on all of the above flags, which isn't true. For example, both IMA_MODSIG_ALLOWED & IMA_CHECK_BLACKLIST are limited to appended signatures, meaning KERNEL_CHECK and KEXEC_KERNEL_CHECK.Just to clarify, are both IMA_MODSIG_ALLOWED and IMA_CHECK_BLACKLIST limited to KEXEC_KERNEL_CHECK, KEXEC_INITRAMFS_CHECK, and MODULE_CHECK? That's what ima_hook_supports_modsig() suggests.Theoretically that is true, but I have no idea how you would append a signature to the kexec boot command line. The only users of appended signatures are currently kernel modules and the kexec'ed kernel image.The discrepancy was with KEXEC_INITRAMFS_CHECK, not KEXEC_CMDLINE. I now see that there's no support for initramfs signature verification in the kexec code so I'll assume that ima_hook_supports_modsig() is wrong and limit IMA_MODSIG_ALLOWED and IMA_CHECK_BLACKLIST to the KEXEC_KERNEL_CHECK and MODULE_CHECK actions, as you originally suggested.
My mistake. Yes, both the kexec kernel image and the initramfs read the respective file into memory and can be signed either with an imasig or modsig. Refer to kernel_read_file_from_fd(). Mimi