利用 Kernel Keyring 实现无文件 ELF 执行
Fileless ELF Execution via Kernel Keyring
我展示了一种利用 Linux Kernel Keyring 执行 ELF 载荷的新技巧,整个过程无需触碰文件系统,也无需调用 execve。传统方法如 memfd_create 仍会在 /proc/self/fd/ 留下文件描述符,而 Keyring 技术能将载荷直接存储在 kernel 的 slab 内存中。通过 add_key 和 keyctl 系统调用,我们可以将 ELF 字节流注入内核,读取后映射到匿名内存,最后手动加载程序头并跳转执行。这种方法不仅规避了文件系统的痕迹,连 /proc/self/fd 也保持干净,仅留下加载器本身作为唯一的磁盘痕迹。
载荷从 HTTP 进入内核 slab 内存,被复制到匿名映射中,并通过直接跳转运行,全程没有 execve,没有文件描述符,VFS 中也没有任何 inode。
- josephcsible
在我看来,你似乎是把 ELF 二进制文件的内容从用户态内存复制到 kernel keyring,然后立刻再从 kernel keyring 复制回用户态内存,最后按常规方式在用户态执行。既然这样,用 keyring 这些步骤的意义何在?直接做用户态执行不就行了吗?
- westurner
通过这种方式加载的进程,在加载完成后还能被重新验证吗?