开放墙项目
新版本的变化包括:
- LKRG项目的定位发生了变化,不再分为用于检查完整性和确定漏洞利用情况的单独子系统,而是呈现为一个用于识别攻击和各种完整性违规的完整产品;
- 兼容 Linux 内核 5.3 到 5.7,以及使用积极的 GCC 优化编译的内核,不带 CONFIG_USB 和 CONFIG_STACKTRACE 选项或使用 CONFIG_UNWINDER_ORC 选项,以及不具有 LKRG 挂钩函数的内核(如果可以)被免除;
- 构建时,会检查一些强制性的 CONFIG_* 内核设置以生成有意义的错误消息,而不是晦涩的崩溃;
- 添加了对待机(ACPI S3,挂起到 RAM)和睡眠(S4,挂起到磁盘)模式的支持;
- 为 Makefile 添加了 DKMS 支持;
- 已实现对 32 位 ARM 平台的实验性支持(在 Raspberry Pi 3 Model B 上测试)。 之前提供的 AArch64 (ARM64) 支持已得到扩展,以提供与 Raspberry Pi 4 板的兼容性;
- 添加了新的钩子,包括 Capable() 调用处理程序,以更好地识别操纵“的漏洞”
能力 “,不是进程 ID(证书 ); - 提出了新的逻辑来检测逃避命名空间限制的尝试(例如,来自 Docker 容器);
- 在 x86-64 系统上,会检查并应用 SMAP(管理程序模式访问阻止)位,旨在阻止在内核级别运行的特权代码对用户空间数据的访问。 之前实现了SMEP(Supervisor Mode Execution Prevention)保护;
- 在操作过程中,LKRG设置被放置在通常是只读的内存页中;
- 对攻击可能最有用的日志信息(例如,有关内核中的地址的信息)仅限于调试模式(log_level=4 及更高),默认情况下禁用。
- 进程跟踪数据库的可扩展性得到了提高——不再是由一个自旋锁保护的一棵RB树,而是由512个读写锁保护的512个RB树组成的哈希表;
- 默认情况下已实现并启用一种模式,其中通常仅检查当前任务的进程标识符的完整性,也可以选择检查激活(唤醒)任务的进程标识符的完整性。 对于其他处于睡眠状态或在不访问 LKRG 控制的内核 API 的情况下工作的任务,执行检查的频率较低。
- 添加了新的 sysctl 和模块参数,用于微调 LKRG,以及两个 sysctl,用于通过从开发人员准备的微调设置(配置文件)集中进行选择来简化配置;
- 默认设置已更改,一方面是在违规检测速度和响应有效性之间实现了更平衡的平衡,另一方面是对性能的影响和误报风险;
- systemd 单元文件经过重新设计,可以在启动早期加载 LKRG 模块(可以使用内核命令行选项来禁用该模块);
考虑到新版本中提出的优化,使用 LKRG 0.8 时的性能降低估计在默认模式(“重”)下为 2.5%,在轻模式(“轻”)下为 2%。
在最近举办的一场
此外,值得注意的是,发行版开发商
LKRG 中的完整性检查是通过将内核和模块的实际代码和数据、一些重要的数据结构和 CPU 设置与存储的哈希值或相应内存区域、数据结构或寄存器的副本进行比较来执行的。 检查由计时器定期激活,并根据各种事件的发生而激活。
确定可能使用的漏洞和阻止攻击是在内核提供对资源的访问之前(例如,打开文件之前)、但在进程收到未经授权的权限(例如,更改 UID)之后的阶段进行的。 当检测到未经授权的行为时,默认情况下会强制终止进程,这足以阻止许多漏洞利用。
来源: opennet.ru