Linux rootkit Syslogk的分析

admin 2022年6月17日12:59:49评论98 views字数 5161阅读17分12秒阅读模式

介绍

Rootkit一旦安装,一般很难被发现。它们的代码通常比其它恶意软件更难编写,因此开发人员会复制开源项目的代码。

Adore-Ng是一个相对较旧的开源 Linux 内核 rootkit,最初针对的是内核 2.x,但目前已更新为针对内核 3.x。它可以隐藏进程、文件甚至内核模块,使其更难被发现。它还允许经过身份验证的用户模式进程与 rootkit 交互,以控制它,使攻击者可以使用一个 rootkit 来隐藏许多自定义的恶意工件。

2022年初,研究人员正在分析一个在野发现的基于Adore-Ng的rootkit,仍在开发中。获得样本后,研究人员检查了它的.modinfo部分,发现它是针对特定内核版本编译的。

Linux rootkit Syslogk的分析

众所周知,即使可以通过使用insmod Linux命令的--force标志将模块 "强制加载 "到内核中,如果在内核中找不到所需的符号,这一操作也会失败;这往往会导致系统崩溃。

insmod -f {module}

研究人员发现,内核模块可以在不强制进入默认的Centos 6.10发行版的情况下成功加载,因为发现的 rootkit 是为类似的内核版本编译的。

在查看文件的字符串时,研究人员很快确定了内核rootkit中用于引用payload的PgSD93ql硬编码文件名。这个payload文件名可能是用来避免被系统管理员发现,例如,它可能看起来像一个合法的PostgreSQL文件。

Linux rootkit Syslogk的分析

使用这个硬编码的文件名,研究人员提取了被 rootkit 隐藏的文件。它是一个编译后的后门木马,用 C 语言编写;Avast 的杀毒引擎会将其分类为 ELF:Rekoob,这是Rekoobe恶意软件家族。Rekoobe是植入合法服务器中的一段代码。在这个样本中,它被嵌入到一个伪造的 SMTP 服务器中,当它接收到一个特制的命令时会生成一个 shell。在这篇文章中,将此 rootkit 称为Syslogk rootkit,因为当特殊的数据被写入/proc/syslogk文件时,它会“暴露”自己。


Syslogk rootkit 分析

Syslogk rootkit主要基于Adore-Ng,但是加入了新的功能,使得用户模式应用程序和内核rootkit难以检测。

加载内核模块

要将rootkit加载到内核空间,需要与编译时使用的内核版本大致匹配,但也不必完全相同。

vermagic=2.6.32-696.23.1.el6.x86_64 SMP mod_unload modversions

例如,研究人员能够在Centos 6.10虚拟机中通过使用insmod Linux命令轻松地加载rootkit

加载后,会发现在使用lsmod命令时,恶意驱动程序并不会出现在加载的内核模块列表中。

Rootkit暴露

rootkit 有一个hide_module函数,它使用内核 API的list_del函数将该模块从内核模块链表中移除。接下来,它还相应地更新其内部module_hidden 标志。

幸运的是,rootkit 在函数中实现了一个proc_write功能,它在 /proc 文件系统中公开一个接口,当值1被写入 /proc/syslogk 文件时,这个rootkit就会暴露出来

Linux rootkit Syslogk的分析

一旦 rootkit 暴露出来,就可以使用 Linux 命令 rmmod 将其从内存中删除。

Syslogk rootkit 功能概述

除了隐藏自己之外,Syslogk还可以通过以下操作来完全隐藏恶意payload:

  • rootkit的hk_proc_readdir功能可隐藏包含恶意文件的目录,从而有效地对操作系统进行隐藏。
  • 恶意进程通过 hk_getpr 隐藏,这是 Adore-Ng 用于隐藏进程的混合函数。
  • 恶意payload 对 Netstat等工具是隐藏的,运行时,它不会出现在服务列表中,为此,rootkit 使用函数 hk_t4_seq_show。
  • Payload 不会持续运行。当特制的 TCP 数据包被发送到目标设备时,攻击者会按需远程执行它,被感染的设备会安装netfilter hook 来检查通信。
  • 攻击者也可以远程停止payload。这需要使用rootkit中的硬编码密钥,并了解magic packet用于远程启动payload的某些字段。

研究人员观察到Syslogk rootkit(和 Rekoobe payload)在与假 SMTP 服务器一起使用时可以完美对齐。这非常隐秘,后门程序直到一些magic packet被发送到设备上才会加载。当被查询时,它似乎是隐藏在内存中、隐藏在磁盘上、神奇的远程执行、隐藏在网络中的合法服务。即使在网络端口扫描期间发现它,它看起来仍然是合法的 SMTP 服务器。

了破坏操作系统并放置上述隐藏函数,Syslogk 使用已知的 set_addr_rw 和set_addr_ro 函数,它为Page Table Entry (PTE)结构添加或删除写入权限。

给PTE添加写入权限后,rootkit可以hook hks内部rootkit结构中声明的函数。

PTE Hooks

函数类型
Offset
函数名称
Original
hks+(0x38) * 0
proc_root_readdir
Hook
hks+(0x38) * 0 + 0x10
hk_proc_readdir
Original
hks+(0x38) * 1
tcp4_seq_show
Hook
hks+(0x38) * 1 + 0x10
hk_t4_seq_show
Original
hks+(0x38) * 2
sys_getpriority
Hook
hks+(0x38) * 2 + 0x10
hk_getpr

安装hook的机制包括通过/proc/kallsyms标识可hook的内核符号,这些符号在rootkit的get_symbol_address函数中实现(代码从这个存储库中重用)。在获得符号的地址之后,Syslogk rootkit使用udis86项目来hook该函数。

目录隐藏机制

虚拟文件系统 (VFS) 是一个抽象层,它允许对通常不是传统 FS 的东西进行类似 FS 的操作。由于它是所有文件系统查询的入口点,因此它是 rootkit hook的理想选择。

Syslogk rootkit 通过hook VFS 函数来隐藏存储在/etc/rc- zobk0jpi /PgSD93ql文件中的Rekoobe payload也就不足为奇了。

Hook 是由hk_root_readdir完成的,它调用nw_root_filldir,在那里进行目录过滤。

Linux rootkit Syslogk的分析

可以看到,所有包含子字符串的目录-Zobk0jpi都将被隐藏。

函数hk_get_vfs使用filp_open打开文件系统的根目录。这个内核函数返回一个指向结构文件的指针,该结构文件包含一个名为f_op的file_operations结构,最后存储通过hk_root_readdir hook 的readdir函数。

当然,这个功能一点也不新鲜。可以在Adore-Ng的源代码中查看它是如何自行实现的。

进程隐藏机制

在下面的截图中,可以看到 Syslogk rootkit(截图右侧的代码)是为隐藏一个名为PgSD93ql 的进程而准备的。因此,rootkit 似乎比原始版本更简单(参见截图左侧的 Adore-Ng)。此外,可以在使用 rootkit 进行身份验证后选择隐藏的进程。

Linux rootkit Syslogk的分析

上面解释的Syslogk rootkit 函数hk_getpr是adore_find_task和should_be_hidden函数的混合,但它使用相同的机制来隐藏进程。

网络流量隐藏机制

Adore-Ng rootkit允许从 Netstat等 Linux 程序中隐藏一组给定的监听服务。它使用导出的proc_net 结构来更改 tcp4_seq_show( ) 处理程序,该处理程序在 Netstat 查询侦听连接时由内核调用。在 adore_tcp4_seq_show() 函数中,strnstr( ) 用于在 seq->buf 中查找包含它试图隐藏的端口的十六进制表示的子字符串。如果找到,则删除该字符串。

Linux rootkit Syslogk的分析

这样,在列出被感染机器中的连接时,将不会显示后门。以下部分介绍了此 rootkit 的其它有趣功能。

Magic packets

它不是持续运行payload,而是通过发送特制的网络流量数据包按需远程启动或停止。

这些被称为是magic packets,是因为它们具有特殊的格式和特殊的权力。在此实现中,攻击者可以在被感染设备中没有监听端口的情况下触发,从而以某种方式在系统中“神奇地”执行命令。

启动 Rekoobe payload

Syslogk rootkit 对启动虚假 SMTP 服务器的magic packet检查很简单。首先,它会检查数据包是否是 TCP 数据包,在这种情况下,它还会检查源端口,该端口应为 59318。

如果magic packet包符合上述标准,则Rekobee将由rootkit执行。

Linux rootkit Syslogk的分析

当然,在执行伪服务之前,rootkit 会通过调用 rootkit 函数pkill_clone_0来终止程序的所有现有实例。此函数包含硬编码的进程名称PgSD93ql; 它仅通过send_sig发送KILL信号来杀死Rekoobe进程。

为了在用户模式下执行启动Rekoobe 伪服务的命令,rootkit 通过组合内核 API 执行以下命令:call_usermodehelper_setup、call_usermodehelper_setfns 和 call_usermodehelper_exec。

/bin/sh -c /etc/rc-Zobk0jpi/PgSD93ql

在下一节中,将描述一种更复杂的magic packet。

停止 Rekoobe payload

由于攻击者不希望网络中的任何其他人能够杀死Rekoobe,因此用于杀死Rekoobe的 magic packet 必须与之前用于启动Rekoobe的包中的某些字段相匹配。此外,数据包必须满足其他要求——它必须包含一个在 rootkit 中硬编码的密钥,并且位于magic packet的可变偏移量中。检查的条件:

  • 当 rootkit 通过 magic packets 执行 Rekoobe 时,它会检查启用的标志。只有启用该标志,它才会继续。
  • 它检查ReservedTCP 标头的字段以查看它是否为0x08。
  • Source Port必须介于63400和63411之间(包括 63400 和63411)。
  • 目标端口和源地址必须与发送用于启动 Rekoobe 的包时使用的地址相同。
  • 最后,它查找硬编码的密钥,在本例中是D9sd87JMaij。

硬编码密钥的偏移量也是在数据包中设置的,而不是在硬编码偏移量中,是计算出来的。更准确地说,它是在数据偏移字节(TCP 标头)中设置的,这样在将字节向右移动 4 bits 并乘以4后,它指向Key预期的偏移量(如下图所示,注意rootkit 以相反的顺序比较 Key)。

Linux rootkit Syslogk的分析

在实验中,研究人员使用值0x50作为数据偏移量(TCP标头),因为在将其移位4 bits后得到5,乘以4之后等于20。由于20恰好是TCP标头的大小,因此通过使用此值,能够将密钥放在数据包数据部分的开头。


Rekoobe 分析

当被感染的设备接收到适当的magic packet后,rootkit 会在用户模式空间中启动隐藏的恶意软件Rekoobe。

它看起来像一个无害的 SMTP 服务器,但它上面有一个后门命令,可以在处理starttls命令时执行。在一个合法的服务中,这个命令由客户端发送到服务器,通知它想要开始 TLS 协商。

Linux rootkit Syslogk的分析

为了触发Rekoobe 后门命令(生成 shell),攻击者必须通过 TLS 发送字节 0x03,后面跟着标签长度值(TLV)编码的数据。在这里,标记是符号%,长度用四个数字字符指定,还有值(注意,长度和值是任意的,但不能为零)。

Linux rootkit Syslogk的分析

此外,要建立 TLS 连接,需要 Rekoobe中嵌入的证书。


Rekoobe payload 和 Syslogk rootkit 的由来

Rekoobe显然是基于 TinySHell 开源项目,这是基于以相同顺序多次发生的字符和变量赋值中观察到的顺序。

Linux rootkit Syslogk的分析

另一方面,如果看一下Syslogk rootkit,即使它是新的,也会发现追溯到 2018 年12月13日的 TinySHell 的引用。

Linux rootkit Syslogk的分析

证据表明,攻击者开发了Rekoobe 和 Syslogk,并运行它们。


结论

安全软件的架构优势之一是它通常具有以不同权限级别运行的组件。在较低权限级别上运行的恶意软件不能轻易干扰在较高权限级别上运行的进程,因此可以更直接地处理恶意软件。


原文链接:
https://decoded.avast.io/davidalvarez/linux-threat-hunting-syslogk-a-kernel-rootkit-found-under-development-in-the-wild/



原文始发于微信公众号(维他命安全):Linux rootkit Syslogk的分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月17日12:59:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux rootkit Syslogk的分析http://cn-sec.com/archives/1124571.html

发表评论

匿名网友 填写信息