ATT&CK-CN V1.01 Last Update: 2019-11 [返回索引页]

译者: 林妙倩、戴亦仑 原创翻译作品,如果需要转载请取得翻译作者同意。

数据来源:ATT&CK Matrices

原文: https://attack.mitre.org/techniques/T1215

术语表: /attack/glossary

内核模块和扩展

可加载内核模块 (LKMs) 是可以根据需要加载和卸载到内核中的代码片段。 它们不需要重启系统即可扩展内核的功能。 例如,设备驱动程序是一类模块,它使内核可以访问连接到系统的硬件。 恶意使用时,可加载内核模块 (LKM) 可以是一种内核模式的 Rootkit,具有最高的操作系统特权 (Ring 0)。 攻击者可以利用可加载内核模块来隐秘地在系统上实现持久化,并规避防御。 在民间已经发现了一些例子,并且有一些开源项目。

基于 LKM 的 rootkit 的常见特性包括:隐藏自身、选择性地隐藏文件、进程和网络活动,以及篡改日志,提供经过身份验证的后门,并允许非特权用户启用 root 访问权限。

内核扩展,也称为 kext,在 macOS 中用于将功能加载到系统,类似于 Linux 的 LKM。 它们通过 kextloadkextunload 命令进行加载和卸载。 已经发现了几个可以使用该方法的例子。 在民间发现了一些例子。

缓解

用于检测 Linux rootkit 的常用工具有:rkhunter、chrootkit,尽管 rootkit 可能被设计成绕过某些检测工具。 安装 LKM 和内核扩展需要 root 级别的权限。 通过适当的权限分离和限制特权提升,限制对 root 帐户的访问并防止用户加载内核模块和扩展。 应用程序白名单和软件限制工具(如 SELinux) 也可以帮助限制内核模块的加载。

检测

从 Linux 内核版本 2.6 开始,LKM 通常被加载到/lib/modules 并具有扩展名 .ko(“kernel object”)中。

许多 LKM 需要 Linux 头文件(特定于目标内核)才能正确编译。 这通常通过操作系统包管理器获得,并像普通包一样安装。 攻击者可能会在加载恶意模块之前在目标系统上运行这些命令,以确保它被正确编译。

在基于 Ubuntu 和 Debian 的系统上,这可以通过运行:apt-get install linux-headers-$(uname -r) 来完成 在基于 RHEL 和 CentOS 的系统上,这可以通过以下方式实现:yum install kernel-devel-$(uname -r) 通过监视以下命令,可以检测 Linux 系统上的加载、卸载和操作模块:modprobe insmod lsmod rmmod modinfo 对于 macOS,监视 kextload 命令的执行,并与其他未知或可疑的活动相关联。