运行时检查内核驱动程序完整性

Urs*_*jor 0 c kernel runtime

我设法做objcopy来查看和提取.rodata段内容作为不可变完整性检查的引用,但是,我意识到内核驱动程序无法读取文件.从这个意义上说,我们如何编写驱动程序来确定它在运行时的自身完整性?

一些示例代码来制作一些插图会很好.

Jon*_*ham 5

您可以使用加密签名的模块在运行时验证内核模块的完整性.

从这个Unix和Linux Stack Exchange回答开始.

以下是Jake Edge关于截至2011年主线内核中加密签名状态的更新.补丁最终在3.7中迁移到主线.

模块签名是最近内核中的配置选项.您可以在配置内核时使用menuconfig以下命令进行设置:"启用可加载模块支持" - >"模块签名验证".

  • @UrsaMajor:模块读取自己的文件?它可以做到并计算哈希值,但这不是信任的良好基础.更好的是,内核根据它自己的编译签名缓存测试哈希.我建议你阅读在`kernel/module_signing.c`中进行签名验证的内核代码. (2认同)
  • @UrsaMajor:"这意味着,在加载时,它会读取自己" - 这不起作用.当您的模块的代码开始运行时,它将无法访问它所来自的源代码.它可以检查的是运行的内核代码,其中已经链接了模块代码,我怀疑你是否能够在那里进行任何合理的完整性检查. (2认同)
  • @UrsaMajor:要加载的文件只能用于检查实际加载的代码.你可以替换内核中的模块加载代码,但是为什么这个(模块签名)已经实现了呢? (2认同)