运维开发网

在linux内核中拦截ELF加载程序:通过可加载内核模块的fs / binfmt_elf.c文件

运维开发网 https://www.qedev.com 2020-06-09 10:00 出处:网络
我是内核编码的新手,目前我正在处理ELF文件,为了安全起见,我已经修改了一些文件,我需要查看它的一些自定义部分标题,并从中提取唯一的代码加密密钥. CPU解密修改后的ELF的内容.
我是内核编码的新手,目前我正在处理ELF文件,为了安全起见,我已经修改了一些文件,我需要查看它的一些自定义部分标题,并从中提取唯一的代码加密密钥. CPU解密修改后的ELF的内容.

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

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

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

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

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

0

精彩评论

暂无评论...
验证码 换一张
取 消