拦截Linux内核中的ELF加载器:通过可加载的内核模块生成fs / binfmt_elf.c文件

bawejakunal

我是内核编码的新手,目前正在使用ELF文件,出于安全性目的已对其进行了一些修改,为此我需要查看其中的一些自定义节头,并从中提取唯一的代码加密密钥以用于安全性。 CPU解密修改后的ELF的内容。

目前,上述逻辑已在内核源代码树load_elf_binaryfs/binfmt_elf.c文件中函数中实现,但是我只需要大约250行代码更改即可重新编译整个内核,因此我希望通过实现来临时实现此功能它作为可加载的内核模块(LKM),以便每次加载ELF时,都会检查其是否为修改后的ELF,如果是,则从相应部分提取密钥。

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

吉尔·汉密尔顿

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何制作可加载内核(.elf)的可引导光盘(.iso)

如何从C代码加载Linux内核模块?

linux内核elf文件在哪里?

内核模块编译失败(gcc:错误:elf_x86_64:没有此类文件或目录)

如何修改binfmt_misc内核模块以使Postscript文件系统可执行?

将ELF文件加载到内存中

使用可加载内核模块的syscall拦截中的参数似乎已损坏

Linux 2.6.39.4如何查找可用的可加载内核模块

将可加载内核模块标记为树中

从C内核模块检查/ proc文件

内核本身和内核模块具有哪些ELF类型?

查找可加载内核模块的内核地址

C中的内核模块__init宏

加载ELF可执行文件

通过使用可加载的内核模块来替换内核功能

编译可加载的内核模块(Debian / Ubuntu)

如何列出所有可加载的内核模块?

Linux用户空间ELF加载器

Linux内核模块-在源文件之间共享变量

如何从Linux内核模块的sysfs属性文件中读取字符串?

在可加载的Linux内核模块上设置cpu亲和力

如何在solaris上制作可加载的内核模块?没有 linux

使用 workqueue 或 kthread 在 Linux 内核中执行 ELF

insmod过程中的可加载内核模块日志问题

Linux:重新加载内核模块

如何在Gentoo Linux中自动加载内核模块?

如何从内核内置模块向可加载内核模块发送信号/中断?

使用带有内核头文件的gcc编译Linux内核模块

针对错误的内核头文件编译Linux内核模块,会发生什么?