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

在linux内核中拦截ELF加载程序:通过可加载内核模块的fsbinfmt_elf.c文件,第1张

概述我是内核编码的新手,目前我正在处理ELF文件,为了安全起见,我已经修改了一些文件,我需要查看它的一些自定义部分标题,并从中提取唯一的代码加密密钥. CPU解密修改后的ELF的内容. 目前上面的逻辑已经在内核源代码树的fs / binfmt_elf.c文件中的load_elf_binary函数中实现,但是我需要重新编译整个内核只需要250行代码更改,所以我正在寻找通过将其作为可加载内核模块(LKM) 我是内核编码的新手,目前我正在处理ELF文件,为了安全起见,我已经修改了一些文件,我需要查看它的一些自定义部分标题,并从中提取唯一的代码加密密钥. cpu解密修改后的ELF的内容.

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

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

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

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

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

总结

以上是内存溢出为你收集整理的在linux内核中拦截ELF加载程序:通过可加载内核模块的fs / binfmt_elf.c文件全部内容,希望文章能够帮你解决在linux内核中拦截ELF加载程序:通过可加载内核模块的fs / binfmt_elf.c文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1018175.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存