通过可加载的内核模块

时间:2015-06-12 07:42:14

标签: c linux-kernel kernel kernel-module elf

我是内核编码的新手,目前我正在使用ELF文件,为了安全起见,我已经对其进行了一些修改,我需要查看它的一些自定义部分标题并从中提取唯一的代码加密密钥它为CPU解密修改后的ELF的内容。

目前,上述逻辑已经在内核源代码树的load_elf_binary文件中的fs/binfmt_elf.c函数中实现,但是只需要大约250行代码更改,我需要重新编译整个内核,所以我希望通过将它实现为可加载的内核模块(LKM)来即兴发挥这一功能,这样每次加载ELF时它都会检查它是否是修改过的ELF,如果是,那么它会从中检出密钥。相应部分。

编辑:总结一下,我正在研究制作一个可加载的内核模块来读取ELF的各个部分,并获取包含加密密钥和相关元数据的自定义部分的内容,并在CPU寄存器中设置这些值。

1 个答案:

答案 0 :(得分:3)

是的,可能,但绝对不容易。甚至还有一个受支持的内核工具" kprobes"允许您从指定位置插入对自己代码的调用(请参阅Documentation/kprobes.txt)。如果插入对您自己的代码的调用不足,我认为您需要使用与kprobe相同的机制:通过将jmpcall s指令覆盖到您自己的代码中来修补所需位置

我曾经在一家公司工作,该公司的安全产品通过运行时修补Windows内核来安装它的钩子。这几乎是一回事,但至少在Windows版本中,必须支持有限数量的版本。

所以,它绝对可能,但我不想尝试。它会非常脆弱;你实际上是想要击中移动的目标。每个内核安全补丁或版本升级都可能会破坏您的代码。