关于在银河麒麟中配置使用自定义IMA功能
关于IMA的配置参考官网
使用
grep CONFIG_IMA /boot/config-$(uname -r)
来查看IMA的情况
CONFIG_IMA=y
CONFIG_IMA_MEASURE_PCR_IDX=10
CONFIG_IMA_LSM_RULES=y
# CONFIG_IMA_TEMPLATE is not set
CONFIG_IMA_NG_TEMPLATE=y
# CONFIG_IMA_SIG_TEMPLATE is not set
CONFIG_IMA_DEFAULT_TEMPLATE="ima-ng"
CONFIG_IMA_DEFAULT_HASH_SHA1=y
# CONFIG_IMA_DEFAULT_HASH_SHA256 is not set
# CONFIG_IMA_DEFAULT_HASH_SHA512 is not set
CONFIG_IMA_DEFAULT_HASH="sha1"
# CONFIG_IMA_WRITE_POLICY is not set
# CONFIG_IMA_READ_POLICY is not set
CONFIG_IMA_APPRAISE=y
# CONFIG_IMA_ARCH_POLICY is not set
# CONFIG_IMA_APPRAISE_BUILD_POLICY is not set
CONFIG_IMA_APPRAISE_BOOTPARAM=y
# CONFIG_IMA_APPRAISE_MODSIG is not set
CONFIG_IMA_TRUSTED_KEYRING=y
# CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY is not set
# CONFIG_IMA_BLACKLIST_KEYRING is not set
# CONFIG_IMA_LOAD_X509 is not set
使用
sudo cat /sys/kernel/security/ima/ascii_runtime_measurements
来查看IMA的完整性度量记录
如果你想修改IMA配置:
使用下面的命令来查看当前用户的id:
id -u
使用下面的命令来增加运行时自定义策略(Runtime Custom Policy):
echo /home/user/tmpfile > /sys/kernel/security/ima/policy
cp tmpfile /sys/kernel/security/ima/policy
cat tmpfile > /sys/kernel/security/ima/policy
但是根据前面读出来的配置:# CONFIG_IMA_WRITE_POLICY is not set
无法使用,除非重新编译内核,行不通
另一种是启动时自定义策略(built-in custom policy)
改变/etc/default/grub来配置成使用自定义策略启动(后来发现其实不用,只要自己创建了/etc/ima/ima-policy文件就会自动地加载自定义策略):
sudo vi /etc/default/grub
将其中的GRUB_CMDLINE_LINUX=""
改变为
GRUB_CMDLINE_LINUX="ima_appraise=fix ima_audit=0"
GRUB_CMDLINE_LINUX_SECURITY="security=kysec"
并使用
sudo update-grub
来更新grub启动配置
其中自定义的策略应该放在/etc/ima/ima-policy中
但是银河麒麟首先不能直接sudo vi,会没有权限
然后如果创建这个文件的话可以用下面的命令:
sudo mkdir /etc/ima
sudo touch /etc/ima/ima-policy
然后再
sudo code --no-sandbox --disable-gpu-sandbox --user-data-dir=/root/.vscode/
用root权限打开vscode或者直接用vim来修改
sudo vi /etc/ima/ima-policy
在其中如果加上下面的内容:
dont_measure fsmagic=0x9fa0 # PROC_SUPER_MAGIC
dont_measure fsmagic=0x62656572 # SYSFS_MAGIC
dont_measure fsmagic=0x64626720 # DEBUGFS_MAGIC
dont_measure fsmagic=0x1021994 # TMPFS_MAGIC
dont_measure fsmagic=0x1cd1 # DEVPTS_SUPER_MAGIC
dont_measure fsmagic=0x42494e4d # BINFMTFS_MAGIC
dont_measure fsmagic=0x73636673 # SECURITYFS_MAGIC
dont_measure fsmagic=0xf97cff8c # SELINUX_MAGIC
dont_measure fsmagic=0x43415d53 # SMACK_MAGIC
dont_measure fsmagic=0x27e0eb # CGROUP_SUPER_MAGIC
dont_measure fsmagic=0x63677270 # CGROUP2_SUPER_MAGIC
dont_measure fsmagic=0x6e736673 # NSFS_MAGIC
dont_measure fsmagic=0xde5e81e4 # EFIVARFS_MAGIC
measure func=MMAP_CHECK mask=MAY_EXEC
measure func=BPRM_CHECK mask=MAY_EXEC # binary executed
measure func=FILE_CHECK mask=^MAY_READ euid=0
measure func=FILE_CHECK mask=^MAY_READ uid=0 # root opened r/o, r/w
measure func=MODULE_CHECK
measure func=FIRMWARE_CHECK
measure func=POLICY_CHECK
重新启动时(在Ubuntu20上)会有报错:Failed to load the IMA custom policy file /etc/ima/ima-policy1:Invalid argument
其中的1:Invalid argument其实是行号(不分开我还以为是其他文件呢...)
最后试了一下用下述的内容:
measure func=MMAP_CHECK mask=MAY_EXEC euid=1000
measure func=FILE_CHECK mask=^MAY_READ euid=1000
measure func=FILE_CHECK mask=^MAY_READ euid=0
measure func=FILE_CHECK mask=MAY_READ uid=1000
#appraise func=FILE_CHECK mask=MAY_READ appraise_type=imasig
是可以启动的,而且度量记录条数并没有过多。如果把最后一行注释取消掉,会有报错:failed to fix pid1 permisssion denied
不太清楚具体原因。
但是使用麒麟改GRUB和ima-policy还是不行,启动卡在图标处,按ESC会有一些错误信息:
Failed to start Authenticate by human biometric
如果把ima-policy改成下述内容:
measure func=FILE_CHECK mask=MAY_READ uid=1000
启动到某个地方黑屏后就没反应了
搞不懂思密达
下面是只使用GRUB选择使用一些预设的度量策略的方法:
改变/etc/default/grub来配置成使用预设策略:
sudo vi /etc/default/grub
将其中的`GRUB_CMDLINE_LINUX=""改成如下的两行:
GRUB_CMDLINE_LINUX="ima_tcb ima_appraise_tcb ima_appraise=off ima_audit=0"
GRUB_CMDLINE_LINUX_SECURITY="security=kysec"
再使用
sudo update-grub
来更新grub启动配置,再重启即可
经过排查,原来是kysec的问题,在ubuntu中配置可行大概是ubuntu没有kysec ,现在是这样配置的:
/etc/ima/ima-policy中的内容如下:
measure func=FILE_CHECK mask=^MAY_READ euid=1000
GRUB启动配置,也就是/etc/default/grub中的内容如下:
GRUB_DEFAULT=0
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_DISTRIBUTOR_RELEASE=`lsb_release -d -s | awk -F" " '{print $2 " " $3}' 2> /dev/null || echo ""`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash loglevel=0"
GRUB_CMDLINE_LINUX="ima_appraise_tcb ima_appraise=off ima_audit=0"
再使用
sudo update-grub
更新配置后重启就可以查看度量值了,能看到类似下面的结果:
10 1d8d532d463c9f8c205d0df7787669a85f93e260 ima-ng sha1:0000000000000000000000000000000000000000 boot_aggregate
10 832cdc51f56ab669516480d2f030cfcb9ca70a08 ima-ng sha1:5a493e4a8ace4e0a7bd608936fd8c07e62df9566 /init
10 36c821e585bfc0c164de21bdf1909216318d85aa ima-ng sha1:8c87d9511c99d2ed6bdfa5fd8ceb1ff5b3b3d8c7 /usr/bin/sh
10 804e66ad9b641c6fe8c5c43b0e555b73445c307c ima-ng sha1:7db501b4ac0906d2bc76154be2e474ca49a83ad3 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
10 0bd657c386fef5386f7898046cc9f480ba7756e5 ima-ng sha1:e7639aa9eca7f73561641e14715e4f8810198ea5 /etc/ld.so.cache
10 36f276698feac02280ddb19e3d3f95172702cb71 ima-ng sha1:8f7d59c6f95b0cf57a8db165033296dda91d1239 /usr/lib/x86_64-linux-gnu/libc.so.6
10 223eb68bfb9f72922506747d3bc4dd76d813b5da ima-ng sha1:65030975e1f3887efd00fbb568f00409b7c256d0 /conf/arch.conf
10 42d3c8ce8d3dc2925f434026ff0e497b23871bf1 ima-ng sha1:1ea4f64494e66cf4c77adc2efb46bbc1c30336f0 /conf/initramfs.conf
最后贴一点关于IMA的介绍:
Linux中的IMA(Integrity Measurement Architecture,完整性度量架构)是内核中的一个子系统,主要用于度量和验证系统文件和可执行文件的完整性,以防止恶意软件的入侵,增强系统的安全性。
IMA的主要功能:
文件完整性度量:在文件被执行或读取时,计算文件的哈希值,以评估文件的完整性。
文件完整性评估:通过哈希、签名、HMAC等密码学技术对文件的内容进行完整性验证,如果验证失败,则不允许任何进程对该文件进行访问。
支持远程证明:结合TPM(Trusted Platform Module),IMA可以将度量值扩展到TPM的PCR中,增强安全性和真实性,实现系统的远程证明。
灵活的策略配置:支持基于文件路径、文件类型、文件内容等进行配置,管理员可以通过编辑配置文件来定义IMA策略。
IMA的运行模式
度量(measure)模式:提供对文件的完整性状态观测功能,访问受保护文件时,会往度量日志增加度量记录。如果系统包含TPM芯片,还可以往TPM芯片PCR寄存器中扩展度量摘要值,以保证度量信息不被篡改。度量场景并不提供对文件访问的控制,它记录的文件信息可传递给上层应用软件,进一步用于远程证明。
评估(appraise)模式:提供对文件的完整性校验功能,从根本上杜绝了未知的/被篡改的文件的访问。通过密码学技术对文件的内容进行完整性验证,如果验证失败,则不允许任何进程对该文件进行访问。
IMA的核心组件:
IMA-measurement:负责度量文件的完整性,计算文件的哈希值等。
IMA-appraisal:负责评估文件的完整性,验证文件的哈希值是否与预期值匹配。
IMA-audit:负责记录审计日志,对IMA的操作进行审计。
浙公网安备 33010602011771号