如何禁止其他 Linux 内核模块访问某些常规文件?
How can I prohibit other Linux Kernel modules to get access to some regular files?
问题是禁止访问某些文件(来自我的 "blacklist" 的文件)。这意味着除了我(我自己的内核模块)之外没有人可以读取或修改这些文件。
我已经在 Whosebug 上问过这个问题,但我还没有得到答案。只提供了一种解决方案来更改文件的权限和文件的所有者。但是,这对我的目标来说还不够,因为文件的权限以及文件的所有者可以很容易地被其他人修改。
但是我没有放弃,我一直在研究这个问题。
我用指向我自己的函数的指针替换了系统调用 table 的一些字段。因此,我设法禁止任何 USER 模块访问我的黑名单中的文件;此外,这种方法不依赖于文件的权限或文件的所有者。但是,关键词是"user modules"。我的意思是任何内核模块仍然可以通过调用例如 filp_open()
函数轻松访问我的黑名单中的文件。我查看了 Linux 代码源,结果发现我挂钩的所有这些系统调用(open
、openat
、...)都是简单的包装器,仅此而已。
你能帮帮我吗?有没有办法用 filp_open
做一些类似于我对系统调用所做的事情?欢迎任何其他解决方案(不挂钩)。
你要求的是不可能的。 理论上,这个可以通过运行内核在定制hypervisor或运行下实现在定制硬件上,但在现实中实现起来会极其复杂(如果不是不可能的话)。
您无法保护内核不受自身影响。在任何正常情况下(即没有专用硬件或管理程序),Linux 内核在机器上以最高特权级别运行,因此可以根据需要恢复您所做的任何更改。如果您的模块需要拒绝整个内核 对某些文件的访问 ,那么您正在做的事情在概念上确实存在错误。此外,您似乎假设其他内核模块会以某种方式 "interested" 干扰您的模块:为什么会这样?
此外,即使更改权限或覆盖系统调用也不能解决任何问题:除非您正确配置kernel lockdown (kernel >= v5.4) and/or some other security measure like module signing(最好也是安全启动),root
用户始终能够插入模块并颠覆您的 "security" 措施。
如果您需要剥夺 root
对这些文件的访问权,那么正如我所说,这确实存在逻辑错误。 root
用户已经可以用任何它想要的配置文件做任何想做的事,当然破坏重要的配置文件会破坏系统,但这并不是你可以避免的事情。假设 root
是邪恶的在任何正常情况下作为威胁模型都没有多大意义。
问题是禁止访问某些文件(来自我的 "blacklist" 的文件)。这意味着除了我(我自己的内核模块)之外没有人可以读取或修改这些文件。
我已经在 Whosebug 上问过这个问题,但我还没有得到答案。只提供了一种解决方案来更改文件的权限和文件的所有者。但是,这对我的目标来说还不够,因为文件的权限以及文件的所有者可以很容易地被其他人修改。
但是我没有放弃,我一直在研究这个问题。
我用指向我自己的函数的指针替换了系统调用 table 的一些字段。因此,我设法禁止任何 USER 模块访问我的黑名单中的文件;此外,这种方法不依赖于文件的权限或文件的所有者。但是,关键词是"user modules"。我的意思是任何内核模块仍然可以通过调用例如 filp_open()
函数轻松访问我的黑名单中的文件。我查看了 Linux 代码源,结果发现我挂钩的所有这些系统调用(open
、openat
、...)都是简单的包装器,仅此而已。
你能帮帮我吗?有没有办法用 filp_open
做一些类似于我对系统调用所做的事情?欢迎任何其他解决方案(不挂钩)。
你要求的是不可能的。 理论上,这个可以通过运行内核在定制hypervisor或运行下实现在定制硬件上,但在现实中实现起来会极其复杂(如果不是不可能的话)。
您无法保护内核不受自身影响。在任何正常情况下(即没有专用硬件或管理程序),Linux 内核在机器上以最高特权级别运行,因此可以根据需要恢复您所做的任何更改。如果您的模块需要拒绝整个内核 对某些文件的访问 ,那么您正在做的事情在概念上确实存在错误。此外,您似乎假设其他内核模块会以某种方式 "interested" 干扰您的模块:为什么会这样?
此外,即使更改权限或覆盖系统调用也不能解决任何问题:除非您正确配置kernel lockdown (kernel >= v5.4) and/or some other security measure like module signing(最好也是安全启动),root
用户始终能够插入模块并颠覆您的 "security" 措施。
如果您需要剥夺 root
对这些文件的访问权,那么正如我所说,这确实存在逻辑错误。 root
用户已经可以用任何它想要的配置文件做任何想做的事,当然破坏重要的配置文件会破坏系统,但这并不是你可以避免的事情。假设 root
是邪恶的在任何正常情况下作为威胁模型都没有多大意义。