内核代码能否以其他内核代码无法撤消的方式将其设置为只读?

问题描述 投票:3回答:1

我的印象是,Linux内核进行自我保护的尝试围绕不允许恶意代码在内核空间中运行。特别是,如果要加载恶意内核模块,那么从安全角度来看,这将是“游戏结束”。但是,我最近遇到了a post,它与此信念背道而驰,并说内核可以通过某种方式保护其自身的某些部分免受其自身其他部分的影响:]

[有很多机制可以保护您免受恶意模块的侵害。我写内核代码很有趣,所以我在该领域有一些经验。它基本上是页面表中的一个标志。

有什么可阻止任何内核模块将页面表中的该标志更改回去的?防止恶意模块的唯一方法是阻止它们加载。一旦加载,游戏就结束了。

将分页表设为只读。完成。

内核模块可以再次将其设为可读写,就像您的代码将其设为只读一样,然后继续进行更改。

您实际上可以对此进行锁定,以使内核模式在中断发生之前不能修改页表。如果您的IDT也是只读的,则该模块将无法对其进行任何操作。

对我来说这没有任何意义。我是否缺少有关内核内存工作原理的重要信息?内核空间代码能否限制自己修改页面表?那真的会阻止内核rootkit吗?如果是这样,那么为什么Linux内核今天不这样做以终止所有内核rootkit?

我的印象是,Linux内核进行自我保护的尝试围绕不允许恶意代码在内核空间中运行。特别是,如果要加载恶意内核模块,...

security assembly linux-kernel x86-64 page-tables
1个回答
0
投票

如果恶意内核代码以受信任的方式加载(例如,加载内核模块而不利用漏洞),则no

© www.soinside.com 2019 - 2024. All rights reserved.