ASLR通过每次将栈的起始位置、函数库和程序本身移至不同的位置,使得缓冲溢出攻击无法猜测正确的位置,导致攻击无法成功实施。
检查方法:
执行以下命令并检查相应的命令返回是否为2。
cat /proc/sys/kernel/randomize_va_space
若返回结果不为2,请执行以下命令进行修复。
echo 2 > /proc/sys/kernel/randomize_va_space
Core dump是当程序运行过程中异常终止或崩溃时,将内存状态记录下来的行为,有助于后续定位,但可能会包含进程内存里的敏感信息,一般情况下不建议打开。
检查方法:
执行以下命令并检查相应的命令返回是否为0。
# ulimit -c
若返回结果不为0,请执行以下命令修复。
# ulimit -c 0
SysRq使得具有物理访问的用户能够访问计算机中危险的系统级命令,需要对SysRq的功能使用进行限制。如果没有禁用SysRq键,则可以通过键盘触发SysRq的调用。但该操作可能造成直接发送命令到内核,对系统造成影响,请谨慎使用。
检查方法:
执行以下命令并检查相应的命令返回是否为0。
# cat /proc/sys/kernel/sysrq # grep "^kernel.sysrq" /etc/sysctl.conf /etc/sysctl.d/*
若返回结果大于0,请执行以下命令修复。
# echo 0 > /proc/sys/kernel/sysrq
限制访问dmesg信息权限,无特权的用户无法查看系统信息,从而可以避免任何人从系统信息获取敏感信息,进而减少对系统进行攻击的行为。仅允许具有CAP_SYSLOG能力的进程查看内核日志信息,从而控制关键信息的最小权限,保障系统的安全。
检查方法:
执行以下命令查看kernel.dmesg_restrict的值是否为1。
# sysctl kernel.dmesg_restrict # grep "^kernel.dmesg_restrict" /etc/sysctl.conf /etc/sysctl.d/*
若返回结果不匹配,请执行以下命令修复。
# echo 1 > /proc/sys/kernel/dmesg_restrict
ptrace是一种系统调用用于进程跟踪,提供了父进程可以观察并控制子进程的能力。当配置参数为2时只有CAP_SYS_PTRACE的进程才能使用ptrace,这样会有效防止攻击者恶意提权。
检查方法:
执行以下命令查看kernel.yama.ptrace_scope的值是否为2。
# sysctl kernel.yama.ptrace_scope
若返回结果不为2,请执行以下命令修复。
# echo 2 > /proc/sys/kernel/yama/ptrace_scope
kptr_restrict的作用是保护内核符号地址,保护等级低时普通用户可以访问得到内核符号地址容易被攻击者利用,增加了攻击面降低了系统安全性。
检查方法:
执行以下命令查看kernel.kptr_restrict的值是否为1。
# sysctl kernel.kptr_restrict
若返回结果不为1,请执行以下命令修复。
# echo 1 > /proc/sys/kernel/kptr_restrict
内核参数SMAP(Supervisor Mode Access Prevention,管理模式访问保护),开启后禁止内核访问用户空间的数据。若不开启SMAP内核参数,攻击者可以利用内核态代码重定向的方式访问用户空间数据,增加了攻击面降低了系统安全性。
执行以下命令,若有返回值中有nosmap字段,则说明未开启SMAP内核参数,反之则说明已开启SMAP内核参数(如果CPU不支持SMAP特性,忽略该项检查)。
# cat /proc/cmdline | grep -i "nosmap" BOOT_IMAGE=/vmlinuz-4.18.0-147.5.1.6.h425.eulerosv2r9.x86_64 root=/dev/mapper/euleros-root ro crash_kexec_post_notifiers softlockup_panic=1 panic=3 reserve_kbox_mem=16M nmi_watchdog=1 fsck.mode=auto fsck.repair=yes crashkernel=512M resume=/dev/mapper/euleros-swap rd.lvm.lv=euleros/root rd.lvm.lv=euleros/swap rd.shell=0 quiet nosmap
若关闭了SMAP选项,需要编辑grub.cfg文件,在启动参数中删除nosmap选项,重启生效。
# vim /boot/efi/EFI/openEuler/grub.cfg
# vim /boot/grub2/grub.cfg
内核参数SMEP(Supervisor Mode Execution Prevention,管理模式执行保护),开启后禁止内核执行用户空间代码。若不开启SMEP内核参数,攻击者可以利用内核态代码重定向的方式执行用户空间代码,增加了攻击面降低了系统安全性。
执行以下命令,若返回值中有nosmep字段,则说明未开启SMEP内核参数,反之则说明开启了SMEP内核参数 (如果cpu不支持SMEP特性,忽略该项检查)。
# cat /proc/cmdline | grep -i "nosmep" BOOT_IMAGE=/vmlinuz-4.18.0-147.5.1.6.h425.eulerosv2r9.x86_64 root=/dev/mapper/euleros-root ro crash_kexec_post_notifiers softlockup_panic=1 panic=3 reserve_kbox_mem=16M nmi_watchdog=1 fsck.mode=auto fsck.repair=yes crashkernel=512M resume=/dev/mapper/euleros-swap rd.lvm.lv=euleros/root rd.lvm.lv=euleros/swap rd.shell=0 quiet nosmep
若关闭了SMEP选项,需要编辑grub.cfg文件,在启动参数中删除nosmep选项,重启生效。
# vim /boot/efi/EFI/openEuler/grub.cfg
# vim /boot/grub2/grub.cfg