Commit bbb0f186 authored by Roberto Sassu's avatar Roberto Sassu Committed by Zheng Zengkai
Browse files

ima: Introduce appraise_exec_immutable policy



hulk inclusion
category: feature
feature: IMA Digest Lists extension
bugzilla: 46797

-------------------------------------------------

This patch modifies the existing "appraise_exec_tcb" policy, by adding the
appraise_type=meta_immutable requirement for executed files:

appraise func=MODULE_CHECK appraise_type=imasig
appraise func=FIRMWARE_CHECK appraise_type=imasig
appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig
appraise func=POLICY_CHECK appraise_type=imasig
appraise func=DIGEST_LIST_CHECK appraise_type=imasig
dont_appraise fsmagic=0x9fa0
dont_appraise fsmagic=0x62656572
dont_appraise fsmagic=0x64626720
dont_appraise fsmagic=0x858458f6
dont_appraise fsmagic=0x1cd1
dont_appraise fsmagic=0x42494e4d
dont_appraise fsmagic=0x73636673
dont_appraise fsmagic=0xf97cff8c
dont_appraise fsmagic=0x43415d53
dont_appraise fsmagic=0x6e736673
dont_appraise fsmagic=0xde5e81e4
dont_appraise fsmagic=0x27e0eb
dont_appraise fsmagic=0x63677270
appraise func=BPRM_CHECK appraise_type=imasig appraise_type=meta_immutable
appraise func=MMAP_CHECK appraise_type=imasig

This policy can be selected by specifying
ima_policy="appraise_exec_tcb|appraise_exec_immutable" in the kernel
command line.

Signed-off-by: default avatarRoberto Sassu <roberto.sassu@huawei.com>
Signed-off-by: default avatarTianxing Zhang <zhangtianxing3@huawei.com>
Reviewed-by: default avatarJason Yan <yanaijie@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 5ddc3553
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -1798,6 +1798,10 @@
			files mmap'd for exec. Files in the tmpfs filesystem are
			not excluded from appraisal.

			The "appraise_exec_immutable" policy requires immutable
			metadata for executed files, if the "appraise_exec_tcb"
			policy is selected.

			The "fail_securely" policy forces file signature
			verification failure also on privileged mounted
			filesystems with the SB_I_UNVERIFIABLE_SIGNATURE
+10 −0
Original line number Diff line number Diff line
@@ -236,6 +236,7 @@ __setup("ima_tcb", default_measure_policy_setup);

static bool ima_use_appraise_tcb __initdata;
static bool ima_use_appraise_exec_tcb __initdata;
static bool ima_use_appraise_exec_immutable __initdata;
static bool ima_use_secure_boot __initdata;
static bool ima_fail_unverifiable_sigs __ro_after_init;
static int __init policy_setup(char *str)
@@ -253,6 +254,8 @@ static int __init policy_setup(char *str)
			ima_use_appraise_tcb = true;
		else if (strcmp(p, "appraise_exec_tcb") == 0)
			ima_use_appraise_exec_tcb = true;
		else if (strcmp(p, "appraise_exec_immutable") == 0)
			ima_use_appraise_exec_immutable = true;
		else if (strcmp(p, "secure_boot") == 0)
			ima_use_secure_boot = true;
		else if (strcmp(p, "fail_securely") == 0)
@@ -750,6 +753,13 @@ static void __init add_rules(struct ima_rule_entry *entries, int count,
					continue;
			}
		}

		if (ima_use_appraise_exec_immutable)
			if (entries == appraise_exec_rules &&
			    (entries[i].flags & IMA_FUNC) &&
			    entries[i].func == BPRM_CHECK)
				entries[i].flags |= IMA_META_IMMUTABLE_REQUIRED;

		if (policy_rule & IMA_DEFAULT_POLICY)
			list_add_tail(&entries[i].list, &ima_default_rules);