云安全中心企业版支持Linux Rootkit入侵威胁检测功能,帮助您及时发现资产是否被Rootkit入侵。
背景信息
Rootkit是指黑客在已入侵的服务器上为了实现自身或其他恶意行为而隐藏的恶意程序。Rootkit通常采用与操作系统机制相关的底层技术来实现,以对抗人工审计和安全软件分析。因此,通常涉及对受害服务器的内核和驱动进行注入和篡改。
Rootkit危害
Linux服务器的Rootkit是一类近年来得到很大发展的高级对抗性恶意程序。通常,Linux Rootkit特指以Linux内核模块(LKM)形式加载到操作系统中,从内核态实现更高权限的操作,或直接对内核态代码进行篡改,从而劫持整个系统正常程序的运行。借助Rootkit,黑客可以实现对任意目录、文件、磁盘内容、进程、网络连接与流量的隐藏、窃取和篡改,并提供隐蔽的后门可供黑客直接登录到受害服务器执行更多操作。
如果服务器被植入了Rootkit,黑客就可以完全控制该服务器,并且不易被察觉。例如,在Linux服务器中较为常见的Reptile Rootkit,可以向目标系统安装一个名为reptile_module的内核态驱动模块,并将自身隐藏,实现以下目的:
黑客用户提权
隐藏文件和目录
隐藏进程
隐藏TCP/UDP连接
开机持久化隐藏
文件内容读写篡改
ICMP/UDP/TCP类型后门
带文件传输功能的反弹Shell
代码与模块混淆
检测难点与现状
相比Rootkit的公开流行和发展,其检测技术在业界并没有成型的产品和成熟的方案。现有的工具,例如Chkrootkit和Rkhunter,仅能根据特定几种已知类型Rootkit的文件等特征进行判断,无法发现存在隐藏痕迹的新型Rootkit。而类似Volatility的内存取证方案,需要采集待检测服务器的全系统快照,并依赖定制的或特定功能的插件,导致其无法被非安全专业人员或云服务器用户使用。
云安全中心Rootkit检测方案介绍
为了对云服务器实现Rootkit的精准检测,云安全中心推出了一套轻量级的方案。该方案以取证的方式,试图发现潜在的Rootkit存在痕迹和影响。同时,该方案保证对目标服务器的资源消耗极低,以避免带来潜在的稳定性风险。
为了发现任何形式的隐藏和混淆的Rootkit,Rootkit检测功能依据通用Rootkit的原理进行操作,即总是存在对内核态函数(系统调用、VFS函数及底层功能函数)的挂钩、篡改和劫持。通过对系统内存镜像进行必要数据的采集检查,来确定Rootkit的存在和属性,以及判断被篡改劫持的系统功能,推断Rootkit本身的功能作用。通过以上操作,尽可能准确地判定Rootkit,并向用户告警传递相关信息。
作为一种取证扫描形式的检测技术,本检测方案可定时对目标服务器上所有历史上被植入且仍然存活的Rootkit内核模块进行全量检出,但不包括Rootkit植入过程中的行为检测。关于疑似Rootkit植入行为,以及用于植入的Rootkit内核模块文件(.ko文件),云安全中心提供“进程异常行为”、“恶意进程(云查杀)”、“持久化后门”等类型的告警检测。
Rootkit检测与推送范围
云安全中心企业版每天定时检测您资产中是否存在Rootkit威胁,检测出威胁时会自动发送告警通知,无需您主动启用或触发检测。非企业版用户或未检测出Rootkit威胁的用户不会收到相关告警。
如果您在安全告警设置中未选择任何关注等级,您将不会收到告警通知。具体内容,请参见通知设置。
Rootkit告警信息解读
如果您的资产中检测到Rootkit内核模块,云安全中心控制台会推送以下告警信息。
告警参数说明详见以下表格。
参数 | 说明 |
Rootkit内核模块名称 | 指从内核态内存中,定位到的隐藏的内核模块名称。正常的内核模块载入后会在lsmod命令输出中列出,而隐藏的模块名则在此列表中隐藏。 |
Rootkit篡改的内核函数 | 指在扫描中,发现被篡改、劫持的内核态函数名。这其中包括了作为内核功能入口的系统调用函数、VFS抽象层函数以及更底层的函数等。这种篡改既包括对正常函数指针的替换,也包括对正常内核代码的改写。这些劫持后真正被执行的代码,都存在于上述命名的隐藏内核模块的内存地址空间内。 |
Rootkit特征影响 | 指根据上述定位的篡改的目标,分析归纳出的Rootkit作用功能。现在包括如下分类标签:目录或文件隐藏、进程隐藏、文件内容隐藏、目录或文件防删除、网络隐藏、用户提权、进程劫持、信号劫持或后门开关、文件防改写或输入窃取、工作目录劫持。不同的Rootkit可能包括其中一项或多项标签。 |
支持检测的Rootkit列表
云安全中心Rootkit检测功能支持检测Linux 2.6.32以上内核、64位服务器。实际测试中选取了GitHub上较活跃维护的RootKits-List-Download列表,筛选其中开源或开放的Linux LKM型Rootkit。当前,云安全中心已全部可检出其中仍然有效的Rootkit。
支持检测的完整的Rootkit列表及状态如下。
Rootkit | 测试系统 | 内核 | 结果 |
f0rb1dd3n/Reptile 1.0 | CentOS 7.6 | 3.10.0 | 检出 |
f0rb1dd3n/Reptile 2.0 | Ubuntu 16.04 | 4.4.0 | 检出 |
Eterna1/puszek-rootkit | Ubuntu 16.04 | 4.4.0 | 检出 |
m0nad/Diamorphine | Ubuntu 16.04 | 4.4.0 | 检出 |
citypw/suterusu | CentOS 7.6 | 3.10.0 | 检出 |
Xingyiquan | CentOS 6.10 | 2.6.32 | 检出 |
bones-codes/the_colonel | CentOS 6.10 | 2.6.32 | 检出 |
miagilepner/rickrolly | CentOS 6.10 | 2.6.32 | 检出 |
matteomattia/moo_rootkit | CentOS 6.10 | 2.6.32 | 已失效 |
ivyl/rootkit | CentOS 6.10 | 2.6.32 | 检出 |
QuokkaLight/rkduck | Ubuntu 16.04 | 4.4.0 | 检出 |
falk3n/subversive | CentOS 6.10 | 2.6.32 | 检出 |
a7vinx/liinux | CentOS 6.10 | 2.6.32 | 检出 |
varshapaidi/Kernel_Rootkit | CentOS 7.8 | 3.10.0 | 已失效 |
hanj4096/wukong | CentOS 7.8 | 3.10.0 | 检出 |
NinnOgTonic/Out-of-Sight-Out-of-Mind-Rootkit | CentOS 6.10 | 2.6.32 | 已失效 |
joshimhoff/toykit | CentOS 6.10 | 2.6.32 | 已失效 |
jiayy/lkm-rootkit | CentOS 6.10 | 2.6.32 | 已失效 |
nurupo/rootkit | CentOS 6.10 | 2.6.32 | 检出 |
trimpsyw/adore-ng | CentOS 7.8 | 3.10.0 | 检出 |
PinkP4nther/Sutekh | Alibaba Cloud Linux (Alinux) | 4.19.91 | 检出 |
当前,对于已经在云上发现的多种非开源并已有一定受害影响面的Rootkit,云安全中心已支持全部检出。具体检测列表后续披露。
高级对抗型Rootkit检测
在云服务器的大量分析中,已经发现部分对抗型Rootkit,用于对抗类似于Volatility的一般内核内存取证形式的扫描检测。我们目前的检测机制已经支持对这类混淆和对抗的绕过。这类对抗型Rootkit一般会尝试在已隐藏模块的基础上,进一步在载入内核的内存数据中擦除包括模块头部数据在内的痕迹。针对这种情况,我们仍然能够检测出上述内核函数的篡改以及对应的特征影响,但其内核模块名称已经无法还原提取,此时用户接收到的告警如下所示。