完整性测量架构(IMA)& Linux扩展验证模块(EVM)

时间:2013-07-31 09:27:47

标签: security linux-kernel cryptography hmac

我正在尝试激活IMA评估& EVM模块。

在我的bt5R3上编译linux内核3.10.2并在第一次设置内核启动选项后如下:

GRUB_CMDLINE_LINUX="rootflags=i_version ima_tcb ima_appraise=fix ima_appraise_tcb evm=fix"

运行此命令后生成xattr security.ima和security.evm

find / \( -fstype rootfs -o -fstype ext4 \) -type f -uid 0 -exec head -c 1 '{}' \;
像这样:

GRUB_CMDLINE_LINUX="rootflags=i_version ima_tcb ima_appraise=enforce ima_appraise_tcb evm=enforce"

我尝试创建xattr的数字签名,就像本教程中推荐的那样 Tutorial to IMA & EVM

已遵循每个步骤,创建RSA密钥,在启动时尽早使用keyctl在initramfs中加载它们。

Session Keyring
       -3 --alswrv      0 65534  keyring: _uid_ses.0
977514165 --alswrv      0 65534   \_ keyring: _uid.0
572301790 --alswrv      0     0       \_ user: kmk-user
126316032 --alswrv      0     0       \_ encrypted: evm-key
570886575 --alswrv      0     0       \_ keyring: _ima
304346597 --alswrv      0     0       \_ keyring: _evm

然而,当我尝试读取已签名和散列的文件时,当我重新启动操作系统时,我收到错误“Permission Denied” 跑dmesg告诉我:

[ 5461.175996] type=1800 audit(1375262160.913:57): pid=1756 uid=0 auid=4294967295 ses=4294967295 op="appraise_data" cause="**invalid-HMAC**" comm="sh" name="/root/Desktop/new.sh" dev="sda1" ino=546526 res=0

你知道我为什么会得到无效的HMAC吗? 他们的密钥像教程说的那样加载......

#!/bin/sh -e

PREREQ=""

# Output pre-requisites
prereqs()
{
        echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
        ;;
esac

grep -q "ima=off" /proc/cmdline && exit 1

mount -n -t securityfs securityfs /sys/kernel/security

IMA_POLICY=/sys/kernel/security/ima/policy
LSM_POLICY=/etc/ima_policy

grep -v "^#" $LSM_POLICY >$IMA_POLICY

# import EVM HMAC key
keyctl show |grep -q kmk || keyctl add user kmk "testing123" @u
keyctl add encrypted evm-key "load `cat /etc/keys/evm-key`" @u
#keyctl revoke kmk

# import Module public key
mod_id=`keyctl newring _module @u`
evmctl import /etc/keys/pubkey_evm.pem $mod_id

# import IMA public key
ima_id=`keyctl newring _ima @u`
evmctl import /etc/keys/pubkey_evm.pem $ima_id

# import EVM public key
evm_id=`keyctl newring _evm @u`
evmctl import /etc/keys/pubkey_evm.pem $evm_id

# enable EVM
echo "1" > /sys/kernel/security/evm

# enable module checking
#echo "1" > /sys/kernel/security/module_check

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

解决了,新内核使用HMAC v2,你必须在编译内核时激活非对称密钥。

cat .config应该包含以下条目:

CONFIG_EVM_HMAC_VERSION=2
CONFIG_ASYMMETRIC_KEY_TYPE=y

然后当您对文件进行散列或签名时使用

evmctl -u - -x --imasig/--imahash $file

同样你应该创建非对称密钥并使用带有initramfs的keyctl在_evm和_ima keyring中加载它们。