查看: 951|回复: 2
收起左侧

[分享] 【机♀器人烤肉】Linux内核锁定

[复制链接]
神代すみれ
发表于 2024-11-3 07:36:38 | 显示全部楼层 |阅读模式
本帖最后由 神代すみれ 于 2024-11-3 07:41 编辑

kernel_lockdown - 内核镜像访问防护功能



描述



Kernel Lockdown 功能旨在防止直接和间接访问正在运行的内核镜像,试图保护内核镜像免受未经授权的修改,并防止访问内核内存中的安全和加密数据,同时仍允许加载驱动模块。
如果访问或使用了受限制或禁止的功能,内核将发出如下消息:
Lockdown:X:Y 受限制,请参阅 man kernel_lockdown.7


其中 X 表示进程名称,Y 表示受限制的内容。
在启用 EFI 的 x86 或 arm64 机器上,如果系统以 EFI 安全启动模式启动,则会自动启用锁定。
覆盖范围当锁定生效时,许多功能将被禁用或限制使用。这包括允许直接访问内核镜像的特殊设备文件和内核服务:
/dev

  
/mem

/dev/kmem

/dev/kcore

/dev/ioports

BPF

kprobes


以及直接配置和控制设备的能力,以防止使用设备访问或修改内核镜像:
• 使用模块参数直接指定硬件参数给驱动程序,通过内核命令行或加载模块。

• 使用直接 PCI BAR 访问。

• 在 x86 上使用 ioperm 和 iopl 指令。

• 使用 KD * IO 控制台 ioctls。

• 使用 TIOCSSERIAL 串行 ioctl。

• 修改 x86 上的 MSR 寄存器。

• 替换 PCMCIA CIS。

• 覆盖 ACPI 表。

• 使用 ACPI 错误注入。

• 指定 ACPI RDSP 地址。

• 使用 ACPI 自定义方法。


某些操作受到限制:


• 只有有效签名的模块可以加载(如果模块文件被 IMA 评估,则豁免)。

• 只有有效签名的二进制文件可以 kexec(如果二进制映像文件被 IMA 评估,则豁免)。

• 不允许未加密的休眠/挂起到交换,因为内核镜像保存到可以访问的介质中。

• 不允许使用 debugfs,因为这允许一系列操作,包括直接配置、访问和驱动硬件。

• IMA 需要在安全启动锁定模式下将“secure_boot”规则添加到策略中,无论它们是否在命令行上指定,用于内置和自定义策略。




版本



Kernel Lockdown 功能是在 Linux 5.4 中添加的。
注意



Kernel Lockdown 功能由 CONFIG_SECURITY_LOCKDOWN_LSM 启用。lsm=lsm1,...,lsmN 命令行参数控制 Linux 安全模块的初始化顺序。它必须包含字符串 lockdown 才能启用 Kernel Lockdown 功能。如果未指定命令行参数,则初始化将回退到 security= 命令行参数的值,然后回退到 CONFIG_LSM 的值。



版权信息
https://www.man7.org/linux/man-pages/man7/kernel_lockdown.7.html


额外部分(另一篇文章)
https://mjg59.dreamwidth.org/55105.html

Linux 内核锁定补丁(Linux kernel lockdown patches)已于去年合并到 5.4 内核中,这意味着它们现在是多个发行版的一部分。对于我来说,这是一段 7 年的旅程,这意味着很容易忘记其他人对代码的投入不如我一样。以下是这些补丁的目的、为什么以当前形式实现以及在部署该功能时需要考虑的问题。
Root 是一个用户——一个特权用户,但仍然是一个用户。Root 不同于内核。以 root 身份运行的进程仍然无法解引用属于内核的地址,仍然受制于调度器的随机性等。但是,历史上这个边界一直很脆弱。各种接口使得 root 可以直接修改内核代码(例如加载模块或使用 /dev/mem),而其他接口则使得 root 不那么直接(例如能够加载新的 ACPI 表,这些表可能会导致 ACPI 解释器覆盖内核)。在过去,这并不是一个重大的问题,因为当时没有广泛部署的机制来验证内核的完整性。但是,一旦 UEFI 安全启动广泛部署,这就成了一个问题。如果您验证了引导链,但允许 root 修改内核,则验证引导链的好处就会大大减少。即使 root 不能修改磁盘上的内核,root 也可以热补丁内核,然后通过在系统启动时放置一个二进制文件来使其持久化。
锁定(Lockdown)旨在通过提供一个可选的策略来避免这种情况,该策略关闭了允许 root 修改内核的接口。这是最初实现的唯一目的,它对应于当前实现中的“完整性”模式。以锁定完整性模式启动的内核可以防止甚至 root 使用这些接口,从而增加了对运行内核与引导内核相对应的保证。但是,锁定的功能已经被扩展。有一些用例,即使防止 root 修改内核也不够——内核可能持有秘密信息,即使 root也不应该被允许看到(例如,EVM 签名密钥可用于防止离线文件修改),而完整性模式并不防止这种情况。这就是锁定的保密模式的用途。保密模式是完整性模式的超集,具有对 root 使用可能允许检查包含秘密的任何内核内存的功能施加额外限制。
不幸的是,目前我们没有强大的机制来标记哪些内核内存包含秘密,因此为了实现这一点,我们最终阻止了对所有内核内存的访问。毫不奇怪,这损害了人们出于完全合法的原因检查内核的能力,例如使用允许跟踪和探测内核的各种机制。
我们如何解决这个问题?有几种方法:
1:引入一种机制来标记包含秘密的内存,并仅限制对这些内存的访问。我曾试图为用户空间做类似的事情,结果发现很难,但这可能是最好的长期解决方案。

2:添加对具有适当签名的特权应用程序的支持,实现用户空间侧的策略。这实际上已经可能了,尽管不是那么直接。锁定是在 LSM 层实现的,这意味着可以使用任何其他现有的 LSM 来施加策略。例如,我们可以使用 SELinux 来施加保密限制于大多数进程,但允许具有特定 SELinux 上下文的进程使用它们,然后使用 EVM 来确保任何在该上下文中运行的进程都具有合法的签名。这对于通用发行版来说是一个很大的障碍。

3:在通用发行版中不使用保密模式。它所保护的攻击主要是针对特殊用途的用例,它们可以自己启用保密模式。

我的建议是选择(3),我鼓励启用锁定的通用发行版仅在完整性模式下启用,而不是保密模式。保密模式的成本与其提供的好处相比太高了。需要保密模式的人可能已经知道他们需要,并且应该能够自己启用它并处理后果。



翻译时听的歌曲:https://music.163.com/#/song?id=1440345204
塞ぐ目に落ちる景色の様に
就像坠落在捂住双眼上的景色

霞む私は誰のものでも無いの
缥缈的我不属于任何人

buy me


so feeling

からかわないで
不要捉弄我

私だけに見せて
只让我来看

歪な夜をどうぞ
这扭曲的夜晚

评分

参与人数 3魅力 +1 人气 +6 收起 理由
白露为霜 + 1 版区有你更精彩: )
胡淇允 + 3
隔山打空气 + 3

查看全部评分

StarlitFuture
发表于 2024-11-4 09:26:22 | 显示全部楼层
听上去像是Linux版的Core Isolation,root权限过大的问题确实也该关注了
神代すみれ
 楼主| 发表于 2024-11-4 18:41:39 | 显示全部楼层
StarlitFuture 发表于 2024-11-4 09:26
听上去像是Linux版的Core Isolation,root权限过大的问题确实也该关注了

2019年被加入到Linux 5.X内核中的(实际上这个提案可以追溯到2012年)。

开玩笑就是:微软抄Linux做了个HVCI()
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-23 17:58 , Processed in 0.116021 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表