Yama 安全模块应该能够阻止用户运行 ptrace 系统调用,但即使将 kernel.yama.ptrace_scope 设置为 3,用户仍然可以运行 strace(它使用 ptrace)。
来自文档:
3 - no attach: no processes may use ptrace with PTRACE_ATTACH nor via
PTRACE_TRACEME. Once set, this sysctl value cannot be changed.
Yama 模块似乎已加载:
/var/log/dmesg:[ 0.000127] Yama: becoming mindful.
这是在 RHEL7 上,还安装了 SELinux,这可能与此有关。LSM 应该是可堆叠的,我在 dmesg 中看到了上述消息,因此它似乎处于活动状态。顺便说一句,一旦设置为 3,sysctl 值就是不可变的 - 我不知道这是否意味着 Yama 模块处于活动状态。
有趣的是,在 Ubuntu 上(我相信没有 Apparmor),将值设置为 3 确实会阻止 ptrace 运行 - 运行 strace -p (作为 root)会出现权限被拒绝的错误。
我很担心,因为 Yama 应该可以缓解其他几个漏洞。
我突然想到在没有 SELinux 的情况下重新启动,看看它是否能在比赛中发挥作用 - 一旦我这样做了,我就会更新。
Yama 是否已弃用(有一个 SELinux 布尔值可以处理此行为 - 它是deny_ptrace
)?我能找到的文档很少。
更新:(即使没有加载 SElinux,yama 也不会执行任何操作)
Oct 2 12:30:00 xx kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-862.11.6.el7.x86_64 root=/dev/mapper/rpool-root ro crashkernel=auto rd.lvm.lv=rpool/root rd.lvm.lv=rpool/swap rhgb ipv6.disable=1 biosdevname=0 net.ifnames=0 quiet audit=1 fips=1 boot=/dev/sda1 audit=1 CONFIG_SECURITY_YAMA=y selinux=0
Oct 2 12:30:00 xx kernel: Kernel command line: BOOT_IMAGE=/vmlinuz-3.10.0-862.11.6.el7.x86_64 root=/dev/mapper/rpool-root ro crashkernel=auto rd.lvm.lv=rpool/root rd.lvm.lv=rpool/swap rhgb ipv6.disable=1 biosdevname=0 net.ifnames=0 quiet audit=1 fips=1 boot=/dev/sda1 audit=1 CONFIG_SECURITY_YAMA=y selinux=0
Oct 2 12:30:00 xx kernel: SELinux: Disabled at boot.
Oct 2 12:30:00 xx kernel: EVM: security.selinux
Oct 2 12:30:00 xx systemd[1]: systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Oct 2 12:30:03 xx systemd: systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Yama 仍然不否认 ptrace:
xx:root@~ #strace -p 2195
strace: Process 2195 attached
restart_syscall(<... resuming interrupted poll ...>strace: Process 2195 detached
<detached ...>
xx:root@~ #sysctl -a -r yama
kernel.yama.ptrace_scope = 3