mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 03:10:12 +00:00
![Arnd Bergmann](/assets/img/avatar_default.png)
Changing the direct dependencies of IMA_BLACKLIST_KEYRING and
IMA_LOAD_X509 caused them to no longer depend on IMA, but a
a configuration without IMA results in link failures:
arm-linux-gnueabi-ld: security/integrity/iint.o: in function `integrity_load_keys':
iint.c:(.init.text+0xd8): undefined reference to `ima_load_x509'
aarch64-linux-ld: security/integrity/digsig_asymmetric.o: in function `asymmetric_verify':
digsig_asymmetric.c:(.text+0x104): undefined reference to `ima_blacklist_keyring'
Adding explicit dependencies on IMA would fix this, but a more reliable
way to do this is to enclose the entire Kconfig file in an 'if IMA' block.
This also allows removing the existing direct dependencies.
Fixes: be210c6d35
("ima: Finish deprecation of IMA_TRUSTED_KEYRING Kconfig")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
323 lines
10 KiB
Text
323 lines
10 KiB
Text
# SPDX-License-Identifier: GPL-2.0-only
|
|
# IBM Integrity Measurement Architecture
|
|
#
|
|
config IMA
|
|
bool "Integrity Measurement Architecture(IMA)"
|
|
select SECURITYFS
|
|
select CRYPTO
|
|
select CRYPTO_HMAC
|
|
select CRYPTO_SHA1
|
|
select CRYPTO_HASH_INFO
|
|
select TCG_TPM if HAS_IOMEM
|
|
select TCG_TIS if TCG_TPM && X86
|
|
select TCG_CRB if TCG_TPM && ACPI
|
|
select TCG_IBMVTPM if TCG_TPM && PPC_PSERIES
|
|
select INTEGRITY_AUDIT if AUDIT
|
|
help
|
|
The Trusted Computing Group(TCG) runtime Integrity
|
|
Measurement Architecture(IMA) maintains a list of hash
|
|
values of executables and other sensitive system files,
|
|
as they are read or executed. If an attacker manages
|
|
to change the contents of an important system file
|
|
being measured, we can tell.
|
|
|
|
If your system has a TPM chip, then IMA also maintains
|
|
an aggregate integrity value over this list inside the
|
|
TPM hardware, so that the TPM can prove to a third party
|
|
whether or not critical system files have been modified.
|
|
Read <https://www.usenix.org/events/sec04/tech/sailer.html>
|
|
to learn more about IMA.
|
|
If unsure, say N.
|
|
|
|
if IMA
|
|
|
|
config IMA_KEXEC
|
|
bool "Enable carrying the IMA measurement list across a soft boot"
|
|
depends on TCG_TPM && HAVE_IMA_KEXEC
|
|
default n
|
|
help
|
|
TPM PCRs are only reset on a hard reboot. In order to validate
|
|
a TPM's quote after a soft boot, the IMA measurement list of the
|
|
running kernel must be saved and restored on boot.
|
|
|
|
Depending on the IMA policy, the measurement list can grow to
|
|
be very large.
|
|
|
|
config IMA_MEASURE_PCR_IDX
|
|
int
|
|
range 8 14
|
|
default 10
|
|
help
|
|
IMA_MEASURE_PCR_IDX determines the TPM PCR register index
|
|
that IMA uses to maintain the integrity aggregate of the
|
|
measurement list. If unsure, use the default 10.
|
|
|
|
config IMA_LSM_RULES
|
|
bool
|
|
depends on AUDIT && (SECURITY_SELINUX || SECURITY_SMACK || SECURITY_APPARMOR)
|
|
default y
|
|
help
|
|
Disabling this option will disregard LSM based policy rules.
|
|
|
|
choice
|
|
prompt "Default template"
|
|
default IMA_NG_TEMPLATE
|
|
help
|
|
Select the default IMA measurement template.
|
|
|
|
The original 'ima' measurement list template contains a
|
|
hash, defined as 20 bytes, and a null terminated pathname,
|
|
limited to 255 characters. The 'ima-ng' measurement list
|
|
template permits both larger hash digests and longer
|
|
pathnames. The configured default template can be replaced
|
|
by specifying "ima_template=" on the boot command line.
|
|
|
|
config IMA_NG_TEMPLATE
|
|
bool "ima-ng (default)"
|
|
config IMA_SIG_TEMPLATE
|
|
bool "ima-sig"
|
|
endchoice
|
|
|
|
config IMA_DEFAULT_TEMPLATE
|
|
string
|
|
default "ima-ng" if IMA_NG_TEMPLATE
|
|
default "ima-sig" if IMA_SIG_TEMPLATE
|
|
|
|
choice
|
|
prompt "Default integrity hash algorithm"
|
|
default IMA_DEFAULT_HASH_SHA1
|
|
help
|
|
Select the default hash algorithm used for the measurement
|
|
list, integrity appraisal and audit log. The compiled default
|
|
hash algorithm can be overwritten using the kernel command
|
|
line 'ima_hash=' option.
|
|
|
|
config IMA_DEFAULT_HASH_SHA1
|
|
bool "SHA1 (default)"
|
|
depends on CRYPTO_SHA1=y
|
|
|
|
config IMA_DEFAULT_HASH_SHA256
|
|
bool "SHA256"
|
|
depends on CRYPTO_SHA256=y
|
|
|
|
config IMA_DEFAULT_HASH_SHA512
|
|
bool "SHA512"
|
|
depends on CRYPTO_SHA512=y
|
|
|
|
config IMA_DEFAULT_HASH_WP512
|
|
bool "WP512"
|
|
depends on CRYPTO_WP512=y
|
|
|
|
config IMA_DEFAULT_HASH_SM3
|
|
bool "SM3"
|
|
depends on CRYPTO_SM3_GENERIC=y
|
|
endchoice
|
|
|
|
config IMA_DEFAULT_HASH
|
|
string
|
|
default "sha1" if IMA_DEFAULT_HASH_SHA1
|
|
default "sha256" if IMA_DEFAULT_HASH_SHA256
|
|
default "sha512" if IMA_DEFAULT_HASH_SHA512
|
|
default "wp512" if IMA_DEFAULT_HASH_WP512
|
|
default "sm3" if IMA_DEFAULT_HASH_SM3
|
|
|
|
config IMA_WRITE_POLICY
|
|
bool "Enable multiple writes to the IMA policy"
|
|
default n
|
|
help
|
|
IMA policy can now be updated multiple times. The new rules get
|
|
appended to the original policy. Have in mind that the rules are
|
|
scanned in FIFO order so be careful when you design and add new ones.
|
|
|
|
If unsure, say N.
|
|
|
|
config IMA_READ_POLICY
|
|
bool "Enable reading back the current IMA policy"
|
|
default y if IMA_WRITE_POLICY
|
|
default n if !IMA_WRITE_POLICY
|
|
help
|
|
It is often useful to be able to read back the IMA policy. It is
|
|
even more important after introducing CONFIG_IMA_WRITE_POLICY.
|
|
This option allows the root user to see the current policy rules.
|
|
|
|
config IMA_APPRAISE
|
|
bool "Appraise integrity measurements"
|
|
default n
|
|
help
|
|
This option enables local measurement integrity appraisal.
|
|
It requires the system to be labeled with a security extended
|
|
attribute containing the file hash measurement. To protect
|
|
the security extended attributes from offline attack, enable
|
|
and configure EVM.
|
|
|
|
For more information on integrity appraisal refer to:
|
|
<http://linux-ima.sourceforge.net>
|
|
If unsure, say N.
|
|
|
|
config IMA_ARCH_POLICY
|
|
bool "Enable loading an IMA architecture specific policy"
|
|
depends on (KEXEC_SIG && IMA) || IMA_APPRAISE \
|
|
&& INTEGRITY_ASYMMETRIC_KEYS
|
|
default n
|
|
help
|
|
This option enables loading an IMA architecture specific policy
|
|
based on run time secure boot flags.
|
|
|
|
config IMA_APPRAISE_BUILD_POLICY
|
|
bool "IMA build time configured policy rules"
|
|
depends on IMA_APPRAISE && INTEGRITY_ASYMMETRIC_KEYS
|
|
default n
|
|
help
|
|
This option defines an IMA appraisal policy at build time, which
|
|
is enforced at run time without having to specify a builtin
|
|
policy name on the boot command line. The build time appraisal
|
|
policy rules persist after loading a custom policy.
|
|
|
|
Depending on the rules configured, this policy may require kernel
|
|
modules, firmware, the kexec kernel image, and/or the IMA policy
|
|
to be signed. Unsigned files might prevent the system from
|
|
booting or applications from working properly.
|
|
|
|
config IMA_APPRAISE_REQUIRE_FIRMWARE_SIGS
|
|
bool "Appraise firmware signatures"
|
|
depends on IMA_APPRAISE_BUILD_POLICY
|
|
default n
|
|
help
|
|
This option defines a policy requiring all firmware to be signed,
|
|
including the regulatory.db. If both this option and
|
|
CFG80211_REQUIRE_SIGNED_REGDB are enabled, then both signature
|
|
verification methods are necessary.
|
|
|
|
config IMA_APPRAISE_REQUIRE_KEXEC_SIGS
|
|
bool "Appraise kexec kernel image signatures"
|
|
depends on IMA_APPRAISE_BUILD_POLICY
|
|
default n
|
|
help
|
|
Enabling this rule will require all kexec'ed kernel images to
|
|
be signed and verified by a public key on the trusted IMA
|
|
keyring.
|
|
|
|
Kernel image signatures can not be verified by the original
|
|
kexec_load syscall. Enabling this rule will prevent its
|
|
usage.
|
|
|
|
config IMA_APPRAISE_REQUIRE_MODULE_SIGS
|
|
bool "Appraise kernel modules signatures"
|
|
depends on IMA_APPRAISE_BUILD_POLICY
|
|
default n
|
|
help
|
|
Enabling this rule will require all kernel modules to be signed
|
|
and verified by a public key on the trusted IMA keyring.
|
|
|
|
Kernel module signatures can only be verified by IMA-appraisal,
|
|
via the finit_module syscall. Enabling this rule will prevent
|
|
the usage of the init_module syscall.
|
|
|
|
config IMA_APPRAISE_REQUIRE_POLICY_SIGS
|
|
bool "Appraise IMA policy signature"
|
|
depends on IMA_APPRAISE_BUILD_POLICY
|
|
default n
|
|
help
|
|
Enabling this rule will require the IMA policy to be signed and
|
|
and verified by a key on the trusted IMA keyring.
|
|
|
|
config IMA_APPRAISE_BOOTPARAM
|
|
bool "ima_appraise boot parameter"
|
|
depends on IMA_APPRAISE
|
|
default y
|
|
help
|
|
This option enables the different "ima_appraise=" modes
|
|
(eg. fix, log) from the boot command line.
|
|
|
|
config IMA_APPRAISE_MODSIG
|
|
bool "Support module-style signatures for appraisal"
|
|
depends on IMA_APPRAISE
|
|
depends on INTEGRITY_ASYMMETRIC_KEYS
|
|
select PKCS7_MESSAGE_PARSER
|
|
select MODULE_SIG_FORMAT
|
|
default n
|
|
help
|
|
Adds support for signatures appended to files. The format of the
|
|
appended signature is the same used for signed kernel modules.
|
|
The modsig keyword can be used in the IMA policy to allow a hook
|
|
to accept such signatures.
|
|
|
|
config IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY
|
|
bool "Permit keys validly signed by a built-in or secondary CA cert (EXPERIMENTAL)"
|
|
depends on SYSTEM_TRUSTED_KEYRING
|
|
depends on SECONDARY_TRUSTED_KEYRING
|
|
depends on INTEGRITY_ASYMMETRIC_KEYS
|
|
select INTEGRITY_TRUSTED_KEYRING
|
|
default n
|
|
help
|
|
Keys may be added to the IMA or IMA blacklist keyrings, if the
|
|
key is validly signed by a CA cert in the system built-in or
|
|
secondary trusted keyrings. The key must also have the
|
|
digitalSignature usage set.
|
|
|
|
Intermediate keys between those the kernel has compiled in and the
|
|
IMA keys to be added may be added to the system secondary keyring,
|
|
provided they are validly signed by a key already resident in the
|
|
built-in or secondary trusted keyrings.
|
|
|
|
config IMA_BLACKLIST_KEYRING
|
|
bool "Create IMA machine owner blacklist keyrings (EXPERIMENTAL)"
|
|
depends on SYSTEM_TRUSTED_KEYRING
|
|
depends on INTEGRITY_TRUSTED_KEYRING
|
|
default n
|
|
help
|
|
This option creates an IMA blacklist keyring, which contains all
|
|
revoked IMA keys. It is consulted before any other keyring. If
|
|
the search is successful the requested operation is rejected and
|
|
an error is returned to the caller.
|
|
|
|
config IMA_LOAD_X509
|
|
bool "Load X509 certificate onto the '.ima' trusted keyring"
|
|
depends on INTEGRITY_TRUSTED_KEYRING
|
|
default n
|
|
help
|
|
File signature verification is based on the public keys
|
|
loaded on the .ima trusted keyring. These public keys are
|
|
X509 certificates signed by a trusted key on the
|
|
.system keyring. This option enables X509 certificate
|
|
loading from the kernel onto the '.ima' trusted keyring.
|
|
|
|
config IMA_X509_PATH
|
|
string "IMA X509 certificate path"
|
|
depends on IMA_LOAD_X509
|
|
default "/etc/keys/x509_ima.der"
|
|
help
|
|
This option defines IMA X509 certificate path.
|
|
|
|
config IMA_APPRAISE_SIGNED_INIT
|
|
bool "Require signed user-space initialization"
|
|
depends on IMA_LOAD_X509
|
|
default n
|
|
help
|
|
This option requires user-space init to be signed.
|
|
|
|
config IMA_MEASURE_ASYMMETRIC_KEYS
|
|
bool
|
|
depends on ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
|
|
default y
|
|
|
|
config IMA_QUEUE_EARLY_BOOT_KEYS
|
|
bool
|
|
depends on IMA_MEASURE_ASYMMETRIC_KEYS
|
|
depends on SYSTEM_TRUSTED_KEYRING
|
|
default y
|
|
|
|
config IMA_SECURE_AND_OR_TRUSTED_BOOT
|
|
bool
|
|
depends on IMA_ARCH_POLICY
|
|
help
|
|
This option is selected by architectures to enable secure and/or
|
|
trusted boot based on IMA runtime policies.
|
|
|
|
config IMA_DISABLE_HTABLE
|
|
bool "Disable htable to allow measurement of duplicate records"
|
|
default n
|
|
help
|
|
This option disables htable to allow measurement of duplicate records.
|
|
|
|
endif
|