Grsecurity项目的开发商
HKSP 补丁由华为员工发布,在 GitHub 简介中提到了华为,并在项目名称中使用了华为一词(HKSP - 华为内核自我保护)。 同时,华为代表否认了HKSP项目与公司的联系,并表示该代码是员工个人主动开发的,不是华为官方项目,也没有在公司产品中使用。 在
HKSP 包括一些更改,例如 cred 结构中偏移量的随机化、防止对用户标识符命名空间(pid 命名空间)的攻击、将进程堆栈与 mmap 区域分离、检测对 kfree 函数的双重调用、通过伪函数阻止泄漏-FS /proc(/proc/ {modules、keys、key-users}、/proc/sys/kernel/* 和 /proc/sys/vm/mmap_min_addr、/proc/kallsyms)、改进的用户空间地址随机化、附加 Ptrace保护、增强的 smap 和 smep 保护、禁止通过原始套接字发送数据、阻止 UDP 套接字中的错误地址以及检查正在运行的进程的完整性的能力。 它还包括 Ksguard 内核模块,旨在检测引入典型 rootkit 的尝试。
补丁
Grsecurity 开发人员对该补丁的研究揭示了代码中的许多错误和弱点,并且还表明缺乏能够让他们充分判断项目功能的威胁模型。 为了清楚地证明代码是在没有使用安全编程方法的情况下编写的,给出了处理程序中的一个小漏洞的示例。
文件 /proc/ksguard/state 是使用 0777 权限创建的,这意味着每个人都具有写访问权限。 ksg_state_write 函数用于解析写入 /proc/ksguard/state 的命令,创建一个 tmp[32] 缓冲区,根据传递的操作数的大小将数据写入该缓冲区,而不考虑目标缓冲区的大小,也不考虑目标缓冲区的大小。检查参数与字符串大小。 那些。 要覆盖部分内核堆栈,攻击者只需向 /proc/ksguard/state 写入特殊格式的行即可。
static ssize_t ksg_state_write(struct file *file, const char __user *buf,
size_t 长度,loff_t *偏移量)
{
u64值;
字符 tmp[32];
大小_t n = 0;
if (copy_from_user(tmp, buf, len))
return -1;
值 = simple_strtoul(tmp, '\0', 10);
...
利用原型:
字符 buf[4096] = { };
int fd = open(“/proc/ksguard/state”, O_WRONLY);
如果(fd >= 0){
写(fd,buf,sizeof(buf));
关闭(fd);
}
来源: opennet.ru