繁体   English   中英

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

[英]Intercept ELF loader in linux kernel: fs/binfmt_elf.c file via loadable kernel module

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM