6

【Rootkit 系列研究】Linux 平台的高隐匿、高持久化威胁

 2 years ago
source link: https://paper.seebug.org/1870/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【Rootkit 系列研究】Linux 平台的高隐匿、高持久化威胁

2022年03月31日 2022年03月31日 经验心得

作者:深信服千里目安全实验室
相关阅读:
1、【Rootkit 系列研究】序章:悬顶的达摩克利斯之剑
2、【Rootkit 系列研究】Windows平台的高隐匿、高持久化威胁
3、【Rootkit 系列研究】Linux平台的高隐匿、高持久化威胁
4、【Rootkit 系列研究】Rootkit检测技术发展现状
5、【Rootkit 系列研究】Windows平台的高隐匿、高持久化威胁(二)

从西方APT组织的攻击历史及已经泄露的网络武器看,高隐匿、高持久化(Low&Slow)是其关键特征,而 Rootkit 则是达成此目的的重要技术之一。

在上一篇文章“【Rootkit 系列研究】Windows平台的高隐匿、高持久化威胁”里,我们介绍了Windows Rootkit的生存期,可达成的效果,运用这项技术展开攻击的可行性以及这项技术的发展现状。除了Windows操作系统,Linux、Mac OS等同样受Rootkit关注。在本文中,我们将目光投向Linux操作系统。我们首先对近年来用户态Rootkit在黑产组织中的广泛使用进行讨论,接着介绍内核态Rootkit的高度定制化需求和Linux系统上存在的其他类型Rootkit,最后从攻防视角对Rootkit进行总结。

难以检测的Linux Rootkit

想象以下场景:由于业务需要,你们公司稳定运行多年的某台Linux服务器需要进行系统升级,在完成升级后,你偶然注意到服务器上多了几个看起来像系统文件的文件(夹),你的第一反应是什么?这是新版本引入的系统文件,pass?有点可疑,去搜索引擎查询这些文件名是否正常?小心!任何一丝异常的背后都可能潜藏着巨大的危险。

Rootkit在几乎所有操作系统上都是最具挑战性的恶意软件类型,它利用操作系统代码中的疏忽,隐藏它的存在和恶意行为。制作精良的Rootkit可以在受害主机长期驻留,让主机在用户视角和部分内核视角没有任何感知,进而很难通过系统提供的检测工具以及常规的防病毒软件进行检测和清除。

用户态倍受黑产青睐

Linux Rootkit运行时所处的层次分用户层和内核层两种。对于运行于用户层的用户态Rootkit,它所涉及的技术简单且成熟,例如替换系统文件,动态链接库劫持等。对近两年曝光的黑产组织攻击样本进行分析,我们发现越来越多的黑产组织以某些开源Rootkit为基础,将用户态Rootkit技术加入自己的技术栈。

进一步讲,黑产组织喜欢将用户态Rootkit作为其攻击链中multi-stage-malware的一部分,即他们没有将Rootkit功能集成在原本的挖矿或僵尸网络样本中,而是在原有恶意软件的基础上新增Rootkit,用于实现隐藏文件等新的功能,以规避安全公司提出的感染检测方案:“通过检查某些路径、文件的存在与否,判断某主机是否受到某恶意软件的影响”。

根据某海外安全厂商2020年底的报告,H2Miner挖矿家族开始使用新的Rootkit样本。该Rootkit修改自开源项目“beurk”,它使用LD_PRELOAD技术劫持动态链接过程,将磁盘上的挖矿文件“kinsing”以及正在运行的相关进程隐藏。这使得IT管理员在感知到系统运行速度无故变慢后,无法通过“top”命令看到占用大量CPU资源的挖矿进程。值得一提的是,H2Miner家族目前仍十分活跃,我们发现2021年底该家族使用Log4j漏洞进行挖矿软件传播。(链接:12.12 Log4j RCE 黑产从业者的狂欢)

2021年我们还观测到活跃的TeamTNT挖矿家族使用的Rootkit样本(链接:1.10 2021挖矿木马趋势报告)。该家族除了利用修改自开源项目“Diamorphine”的内核态Rootkit之外,还在用户层替换了ps、top等系统命令文件,当使用这些命令进行排查时,挖矿的相关痕迹会被隐藏。具体代码如图:

467a4326-4161-4b87-a048-dbf285791922.png-w331s

2021年4月,某海外安全厂商曝光了一种新型远控程序Facefish,他们怀疑攻击者正在进行僵尸网络组网,并计划在组网完成后,以“访问权限即服务”(access-as-a-service)的方式出售该网络的访问权限。Facefish远控通过第一阶段的dropper释放出一个Rootkit,Rootkit利用用户态常用的动态链接库劫持技术,实现ssh、sshd的运行时链接程序劫持,最终在受害主机上放置一个后门。事实上,对于一个Rootkit程序,Facefish的这种用法十分原始,因为它仅利用了Rootkit的触发机制,恶意so文件中还可以增加一系列隐藏功能。动态链接库劫持效果如图:

f2a38658-7d05-4f42-b3be-0f35f20145e4.png-w331s

为了降低被怀疑的概率,上述组织使用的恶意动态链接库分别命名为libsystem.so、libs.so,它们刻意模仿Linux的系统自带程序文件名,并驻留在系统文件路径下,企图蒙蔽服务器管理员。

试想如果你在包含上百个so文件,并且这些文件的文件名均以“lib”开头的文件夹/lib64中看到了libs.so,这会引起你的怀疑吗?不过对于防御的一方,上述场景并不会让人夜不能寐,因为针对用户态Rootkit,有诸如文件完整性检测、交叉视图等十分成熟的检测技术。归根结底,这些Rootkit都只运行在用户层,当防御措施深入进操作系统内核,从底向上看,他们通通无处遁形。

内核态的高度定制化

防御方可以深入Linux操作系统内核进行防守,攻击的一方当然也可以进入内核层进行攻击。越接近Linux操作系统底层内核代码,Rootkit的开发难度越大,对其进行检测的难度也越高。对攻击者来说,高投入通常意味着更有价值的攻击目标和更高的回报,如果开发得当,Rootkit可以长期藏匿在目标机器中,所以内核态Rootkit也是攻击者关注的重点。

传统的内核态Rootkit使用可加载内核模块(LKM)技术进入内核层后,在内核层进行“hook”。从执行在用户态的程序调用“int 0x80”陷入内核开始,整个系统调用流程中的任何一个位置,都可能成为内核态Rootkit进行hook的目标,围绕“hook什么”,“如何hook”这两个问题,出现了近十种内核态Rootkit技术。

与用户态Rootkit不同,由于内核态Rootkit直接对Linux内核源代码进行操纵,所以对Rootkit有极高的定制化要求。这是因为经过多年的发展,Linux的内核版本众多,每个版本的内核代码都有或多或少的修改,攻击者开发的某个内核态Rootkit可以在A版本上正常运行,很可能在B版本上完全失效,这就可能出现文章开头提到的那一幕。

前文提到的TeamTNT挖矿家族除了在用户态替换系统命令文件外,还使用内核态Rootkit技术,将恶意内核模块diamorphine.ko加载进内核,实现进程、模块、文件目录的隐藏以及用户权限的提升。该挖矿家族以云主机为目标,Rootkit只能在2.6.x、3.x、4.x内核版本上正常运行,具体实现如图:

f191ba76-ba19-46ac-871d-0516ca05efb1.png-w331s

除了黑产,APT组织发起的定向攻击中也用到了内核态Rootkit。APT组织对隐蔽性有更高的要求,这也给信息收集环节提出了更大的挑战,APT组织需要清楚的知道某次定向攻击的目标所使用Linux服务器的内核版本号。在必要条件下,APT组织可以拿到与目标服务器完全相同的实体,并直接在其上进行Rootkit开发。例如震网病毒事件中,攻击者对目标设备了如指掌,而后在恶意代码中加入了严苛的环境判断。再例如2020年曝光,据称由APT28开发的内核态Rootkit Drovorub,它针对3.7以下版本的Linux内核,特别是Red Hat发行版进行攻击。

内核态攻防进入深水区

Rootkit最关键的要点是隐藏,而隐藏意味着攻击者清楚的知道为什么某个文件(夹)会显示,为什么某个网络连接可被观测,然后对这些显示的机制进行绕过,以达到隐藏的效果。攻击者知道的这些机制,防御方当然也知道,并且对其开展检测,而攻击者进一步进行绕过,随后便产生了攻防双方的猫鼠游戏。Linux内核态Rootkit攻防的本质,是双方谁对操作系统底层技术更加了解。继续深入Linux内核,有没有更加底层的Rootkit技术?答案当然是有,而且近年来越来越多。

2015年,Ryan利用Linux内核中的kprobe机制实现了Rootkit。Kprobe是Linux内核开发者用于内核函数跟踪的一种轻量级内核调试技术,这个Rootkit展示了利用基于kprobe机制进行hook,实现Rootkit功能的可行性。

2016年,Michael在Blackhat上提出了一种基于命名空间的新型Linux Rootkit——Horse Pill,它在操作系统启动过程中劫持虚拟根文件系统initrd(boot loader initialized RAM disk),使受攻击的服务器进入另一个由攻击者创建的“楚门的世界”(即一个子命名空间)。在这个子命名空间中,用户所有的操作都能正常执行,但完全意识不到还存在另一个并行运行的,由攻击者所控制的“真实世界”。

在kprobe的基础上,Linux 4.0以上版本增加了eBPF技术,该技术可以在不加载内核模块的前提下,在Linux内核中运行用户编写的程序。Guillaume在2021年Blackhat上公开了基于eBPF的Rootkit。

虽然kprobe、Horse Pill、eBPF在内核更加底层的位置完成了Rootkit的隐藏功能,但是痕迹是否真的隐藏,会根据观测的视角而大不相同。理论上不存在没有任何痕迹的Rootkit,总有某些角度可以观测到系统出现了异常,因为如果一个程序在所有视角都隐藏,那么攻击者也无法对它进行控制。上述这些技术可以被攻击者所利用,而防御方同样可以利用它们。现在各安全公司已利用它们设计功能更强大的安全软件,对系统进行监控。

我们已经深入Linux内核深处,是否还存在更加底层的Rootkit?2021年12月28日,海外某安全公司给出了突破操作系统的答案。他们发现了固件Rootkit“iLOBleed”,其隐藏在惠普固件HP iLO 上,同时可以以最高权限访问和修改设备上所有的软硬件资源。

事实上,对于现有的高级Rootkit,安全软件已经非常难以检测,通常需要安全专家人工介入分析,可以想象某些由APT组织定向投递的Rootkit正在受害机器中潜伏。对Rootkit技术进行研究,不是去解决想象中的问题,而是回应真实的ring0世界。

1.https://www.4hou.com/posts/vLmm

2.https://www.trendmicro.com/en_us/research/20/k/analysis-of-kinsing-malwares-use-of-rootkit.html

3.https://therecord.media/malware-campaign-targets-server-hosting-software-cwp/

4.https://documents.trendmicro.com/assets/white_papers/wp-tracking-the-activities-of-teamTNT.pdf

5.https://www.blackhat.com/docs/us-16/materials/us-16-Leibowitz-Horse-Pill-A-New-Type-Of-Linux-Rootkit.pdf

6.https://github.com/elfmaster/kprobe_rootkit

7.https://i.blackhat.com/USA21/Wednesday-Handouts/us-21-With-Friends-Like-EBPF-Who-Needs-Enemies.pdf

8.https://www.secureworld.io/industry-news/access-as-a-service-rising-in-popularity

9.https://threats.amnpardaz.com/en/2021/12/28/implant-arm-ilobleed-a/

10.https://www.ptsecurity.com/ww-en/analytics/rootkits-evolution-and-detection-methods/


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1870/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK