电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 579 人浏览分享

潜伏的 Linux Rootkit:Syslogk

[复制链接]
579 0
Rootkit 是非常危险的恶意软件一旦侵入就很难被发现。开发 Rootkit 通常更加困难很多
攻击者都倾向于重用开源项目。

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

2022年早期,研究人员发现基于 Adore-Ng 开发而来的在野 Rootkit。根据 .modinfo可以看
出这是为特定内核版本编译的:

QQ截图20220720101514.png

内核版本

如果使用 insmod --force 的命令强制将模块加载到内核中,内核找不到所需的符号就会导致系统奔溃发现的Rootkit
可以在不强制加载的情况下,在 CentOS 6.10 中成功加载。

Rootkit 中硬编码的文件名为 PgSD93ql,这也是要引用的 Payload 文件名。攻击者想将该名称贴近
PostgreSQL 的文件名称,不被发现。

999.png

硬编码文件


按图索骥找到被 Rootkit 隐藏的文件,实际为 C 写的后门。由于写入文件时显示 /proc/syslogk将
其命名为 Syslogk Rootkit。

分析 Syslogk

Syslogk Rootkit 主要基于 Adore-Ng 开发,但也包含一些更为隐蔽的新功能。

加载内核模块

要将 Rootkit 加载到内核空间,需要与编译时使用的内核版本大致匹配,但不必严格相同。
通过 insmod 命令,即可在 Centos 6.10 中轻松加载该 Rootkit。但加载后使用 lsmod 命令
并不会看到内核模块列表中出现该恶意驱动程序。

掀开隐藏面纱

Rootkit 中的 hide_module 函数,使用内核 API list_del 从内核模块的链表中删除该模块。不过Rootkit 在函
数中实现了 proc_write 函数,当 /proc/syslogk 文件被写入 1 时,就会显示 Rootkit。

QQ截图20220720103751.png

现形

一旦 Rootkit 被确认,就可以使用 rmmod 命令将其删除。

功能概述

Syslogk 使用了多种方式隐藏自身:

通过 hk_proc_readdir 隐藏包含恶意文件的目录
通过 hk_getpr 隐藏特定进程
通过 hk_t4_seq_show 隐藏特定服务
通过安装 netfilter hook 控制接收到的特制 TCP 数据包
通过硬编码的密钥利用特制 TCP 数据包远程启动 Payload

Syslogk 非常隐蔽,在特制的 TCP 数据包发送到实现主机前并不会加载后门执行时也是
打着SMTP合法服务的旗号进行隐蔽传输。

在为 PTE增加了写权限后,Rootkit 就可以 Hook 指定函数:

998.png

Hook 函数

通过 /proc/kallsyms 获取到可 Hook 的内核符号地址后,Rootkit 使用 udis86对指定函数进行 Hook。

目录隐藏

Syslogk Rootkit Hook 了 VFS 函数来隐藏 /etc/rc-Zobk0jpi/PgSD93ql 文件。Hook 是通过hk_root_readdir
调用 nw_root_filldir 目录过滤实现的。

998.png

部分代码

如上所示,任何包含 -Zobk0jpi 字符串的目录都会被隐藏。这一方式一点都不新鲜,可以查看 Adore-Ng的源码是如何实现的。

进程隐藏

Syslogk 进程隐藏的方式比 Adore-Ng 更简单,默认隐藏名为 PgSD93ql 的进程。

QQ截图20220720104203.png

版本比较

流量隐藏

Rootkit 通过在 adore_tcp4_seq_show() 函数中利用 strnstr 函数查找特定端口的十六进制字符串如果发现即删掉
以此,将如 netstat 的 Linux 应用程序查询监听连接时的结果进行过滤。

993.png

流量隐藏

这样,在查看失陷主机的连接情况时,就不会出现后门的连接。

特制 TCP 数据包

启动虚假 SMTP 服务器的特制 TCP 数据包非常简单,只要数据包符合 TCP且来源端口为59318即可触发。

991.png

启动

启动服务前,Rootkit 会调用 pkill_clone_0 终止所有实例。然后通过 call_usermodehelper_setup、call_usermod
ehelper_setfns 和 call_usermodehelper_exec 的内核 API 启动服务。

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

停止服务的特制 TCP 数据包要求高很多:

检查启用执行标志
检查 TCP 头中的 ReservedTCP 为 0x08
检查源端口在 63400 到 63411 之间
检查源 IP 与目的端口与启动的特制 TCP 数据包一致
检查硬编码的密钥 D9sd87JMaij

硬编码的密钥的偏移量是通过 TCP 头中的 data offset 进行设置的,将4bit 的字节向右移动并乘以4后即可指向预期偏移量。

899.png

偏移量

在分析时,data offset 使用的值为 0x50,右移后会得到 20。这正好是 TCP头的大小 使用这个值可以将密
钥放在数据包数据部分的开头位置。

分析 Rekoobe

通过特制TCP数据包启动 Rekoobe 后,Rekoobe 看起来像一个普通的 SMTP 服务器。但其中存在后门指令
starttls,在正常情况下该指令是要开始 TLS协商。

898.png

后门指令

为了触发 Rekoobe 后门,攻击者通过 TLS发送 0x03 字节,随后是 TLV 格式的编码数据。

896.png

传送数据

溯源

如下所示,Rekoobe 显然是基于 TinySHell开源项目。

892.png

相似对比

另一方面,在 Syslogk Rootkit 中也有对 TinySHell 的引用,如下所示:

38.png

相似引用

结论

内核 Rootkit 非常难以检测与删除,这些恶意软件已经在高权限层中运行这种攻击者值得非常注意。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.