前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HCRootkit Sutersu Linux Rootkit 分析

HCRootkit Sutersu Linux Rootkit 分析

作者头像
FB客服
发布2021-10-11 16:00:22
8270
发布2021-10-11 16:00:22
举报
文章被收录于专栏:FreeBufFreeBuf

1、Lacework Labs在Avast公司的同事最近初步的鉴定基础之上,标识出与 HCRootkit / Sutersu Linux Rootkit活动相关的新样本和基础设施。

2、恶意病毒种植程序包含并发送附件、内核模块和userlandELF文件。这些文件会危害具有标准 rootkit 功能的主机。

3、主代理使用特有自定义基于protobuf的协议进行 C2 通信。

摘要

Lacework Labs 最近检测了一个新的公开共享的 rootkit,确定了它的核心功能和它对 Linux 主机的威胁级别。该rootkit最早由Avast共享,引发我们确认该rootkit覆盖范围和进一步的研究。除了删除内核模块和userland样本外,我们以下的分析还提供了对安装程序(恶意病毒种植程序)的深入了解。我们撰写此博客的目的在 Avast 的研究结果之上,分享我们的分析结果,并以 Yara 规则和 IOC 的形式为防御者提供检测选项。

恶意病毒种植程序(The Dropper)

ELF恶意病毒种植程序 (602c435834d796943b1e547316c18a9a64c68f032985e7a5a763339d82598915) 是coreutils软件包“kill”二进制文件的修改版本。大多数“kill”二进制文件的核心功能保持不变,但增加了在执行期间将两个 ELF 文件写入磁盘的功能。这些组件之一是用户态二进制文件,另一个是被 Avast 标识为 Sutersu rookit的内核模块 (10c7e04d12647107e7abf29ae612c1d0e76a79447e03393fa8a44f8a164b723d)。值得注意的是,图1和图2显示 ELF 植入程序和内核 rootkit 在 VirusTotal 上的检测率很低或根本不存在。

图-1 Virus Total for Dropper

图-2 内核rootkit

通过 mktemp 系统调用生成临时文件名后,rootkit 首先写入磁盘。将 20224 字节 (0x4f00) 写入临时文件后,关闭文件描述符,然后使用 insmod 命令安装此内核模块。通过stdout/stderr重定向到/ dev / null,错误随后被忽略。如果在底层系统上启用了安全启动(需要签名的内核模块)或者内核版本不是内核模块的编译目标,则 insmod 将失败。最后,dmesg命令用于清除 dmesg 命令输出 (T1070),其中包含安装的内核模块的残留文件,以及通过删除命令删除的底层 ELF 二进制文件。

图-3 内核模块写入磁盘

将内核模块写入磁盘后,嵌入式userland组件将写入 /proc/.inl 或 /tmp/.tmp_XXXXXX,具体取决于 /proc/.inl 的打开命令是否成功。

鉴于底层后门 coreutils 实用工具是 kill,合规使用该实用工具的“sudo kill”命令去终止特权进程的情况并不少见。执行sudo会获得安装内核模块和写入 /proc/ 中的特权位置的适当权限。写入文件后,文件描述符被关闭,二进制文件通过系统调用执行,然后通过 unlink 系统调用删除。该行为可以在下图中看到。

图-4 Userland ELF 写入磁盘

The Rootkit – Sutersu

Avast 指出的内核模块是开源 rootkit “Sutersu”。该rootkit 具有广泛的内核版本支持,并支持多种架构,包括x86、x86_64 和ARM。正如人们对 rootkit 所期望的那样,Sutersu 支持文件、端口和进程隐藏。Sutersu 还支持在编译时指定的附加模块形式的进程和文件隐藏之外的功能。

在写入文件时,这些附加模块包括一个键盘记录器、一个特定事件下载和执行 (DLEXEC) 二进制文件的模块,以及一个在触发事件之前监视特定“magic字节”的 ICMP 模块。当接收到特定的 ICMP 数据包时,DLEXC 和 ICMP 模块可以一起使用来触发二进制文件的下载和执行。它们也可以独立使用。Lacework 实验室确定了多个具有各种模块和外部 IP 的 Sutersu 内核模块。

在种植程序病毒ELF文件中标识出的一个Sutersu 变种包含 ICMP 模块,该模块监视流入的 ICMP 数据包的去向,然后触发进一步的操作,显示特定地址对外隐藏的连接。下面的图 – 5 显示了在 Sutersu KO 文件中标识的硬编码 IPv4 地址。

图-5 内核模块嵌入的IP

“127.0.0.1”对应于图 -6 所示的 userland ELF 二进制文件中的 sshd 服务设置命令。

图-6 Userland组件中sshd服务初始化

The Userland ELF文件

嵌入式userland ELF 文件是通过 UPX 实用程序打包的动态链接文件。这表示userlandELF不仅是基于二进制字符串的文件,而且是 UPX 创建的二进制文件(有时标记为 UPX_0 和 UPX_1)中存在的两个不同段的指示标志。

图-7 UPX段

图-8 Userland二进制文件查看

正如 Avast Research Labs 在他们的推文中提到的,userland二进制文件包含用于命令的自定义 protobuf 文件。二进制文件中标识的唯一文件路径还指示 Poco(网络库)、Libboost(详细的 C++ 库集)和 libssh 的使用情况。

图-9 硬编码开发路径

Lacework Labs 发现了嵌入在 Sutersu 变体 (54b1a9338aa7df8a97fea8da863c615352368f3fc67e3caceb6ee65eb71bdbff) 中的userland库的其他变体,其中包含 Python one-liners。下面的图 – 10 显示了嵌入式 Python one-liner,它通过用户名为“vsftp”的“winter1qa2ws”凭据在 FTP 获取远程二进制文件。

图-10 Python One Liner

初始userland执行任务

在初始执行 userland 二进制文件时,该程序会尝试通过用垃圾数据(十六进制值 0xff11)覆盖安装位置来删除 dropper 的任何证据。下面的这段代码片段也可以在各种 Sutersu 内核模块中找到。

图-11 覆盖之前创建的文件

接下来,userland 二进制文件确保它可以访问 /root/ 目录(图 12 中的变量 pathName),然后将当前正在执行的二进制文件读入本地缓冲区,以执行二进制文件并伪装成进程名称为“ [kthread]”(T1036.005)。

图-12 以Kthread名称重新生成Userland二进制文件

最后,主函数执行循环涉及向多个域名65130端口上的发出 HTTP和GET 请求,以获取“/iplist”资源。值得注意的是,Sutersu 内核模块中的隐藏端口也包括65130。每 180 秒,二进制文件就会尝试在 127.0.0.1 端口 65439 上启动 sshd服务,如图 Userland Component 中的 sshd Setup 所示。Userland ELF 在隔离环境中执行,该环境将一个子集的静态域名条目添加到 /etc/hosts 文件,以监测域名交互行为。下图显示了 ELF 尝试启动 SSH 服务且未在/etc/hosts 中明确列出以及无法访问域名的失败信息 。

图-13 ELF主程序执行

自定义 Protobuf

正如 Avast 最初提到的,userland 组件包含一个自定义 protobuf,用于定义发送到其 C2 服务器的消息。Lacework Labs 能够挖掘出 protobuf aetifact来标识userland组件中的底层功能。二进制文件中的其他硬编码字符串表明这是 protobuf 版本 2,该版本允许字段可选。当考虑一个字段在发送回 C2 服务器的protobuf 消息是否总是包含数据时,字段可选一个重要的考量。下面的代码是提取的 protobuf 字段的伪代码表示,可能不代表准确的 protobuf 定义。

代码语言:javascript
复制
cmd.proto {
cmd
SessionInfo
desc
hide
uid
Init
key
sysinfo
SystemVersion
version
system
RequestVersion
app_type
ResponseVersion
size
app_type
RequestUpdateDownload
size
app_type
ResponseUpdateDownload
off
data
app_type
Upload_Passwd
}
cmd.Upload_Passwd.PasswordInfo{
PasswordInfo
address
port
username
password
Tick
Show_Msg
message
Forward_Data
src_uid
dest_uid
cmd
data
Host_List
}
cmd.Host_List.Host_Info {
Host_Info
ip
system
hide
version
nonlinetime
desc
Session_Connect
uid
Session_DisConnect
uid
Verify
username
password
CommonCommand
cmd
args
}
cmd.CommonCommand.Command_Info {
Command_Info
name
value
List_Dir
files
}
cmd.List_Dir.List_Info {
dir
List_Info
name
modify_date
isdir
size
executable
readonly
writeable
Fwd_Beg
code
message
Fwd_Ing
data
Fwd_End
code
message
}

代码:提取的自定义 Protobuf

自定义 Ghidra 脚本

为了帮助分析和分类来自上述恶意软件的关键 IoC,Lacework Labs 发布了两个 Ghidra 脚本来帮助防御者和研究人员。dropper ELF 包含多个用于userland和 Suterusu rootkit 组件的嵌入式 ELF。HC_Dropper_ID Ghidra 脚本标识这些嵌入二进制文件的路径以帮助 ELF 的提取。

图-14 Dropper ID

“HCRootkit_Sutersu”标识了“vermagic”字符串,该字符串显示了为 Suterusu rootkit 编译的内核。此外,该脚本还会尝试标识嵌入的 IPv4 脚本以及 ICMP 模块。图 – 12 显示了 Ghidra 脚本执行的输出。

图-15 HCRootkit_Sutersu

结论

了解开源攻击性实用程序生态系统并在分析过程中利用这些资源可以快速减少为您的组织标识关键 IoC 所需的时间。Lacework Labs 继续跟踪不断演变的威胁并发布 IoC 和 Ghidra 脚本,以帮助各地的防御者应对事件。

IOC

| > efbd281cebd62c70e6f5f1910051584da244e56e2a3228673e216f83bdddf0aa> > 602c435834d796943b1e547316c18a9a64c68f032985e7a5a763339d82598915> > 6187541be6d2a9d23edaa3b02c50aea644c1ac1a80ff3e4ddd441b0339e0dd1b> > 19b4ccbd5dedcd355eb6c10eabcf7884a92350717815c4fc02d886bc76ecd917> > 10c7e04d12647107e7abf29ae612c1d0e76a79447e03393fa8a44f8a164b723d> > 7e5b97135e9a68000fd3efee51dc5822f623b3183aecc69b42bde6d4b666cfe1> > d7ad1bff4c0e6d094af27b4d892b3398b48eab96b64a8f8a2392e26658c63f30> > 7b48feabd0ffc72833043b14f9e0976511cfde39fd0174a40d1edb5310768db3> > 2daa5503b7f068ac471330869ccfb1ae617538fecaea69fd6c488d57929f8279> > ywbgrcrupasdiqxknwgceatlnbvmezti.com> > pdjwebrfgdyzljmwtxcoyomapxtzchvn.com> > yhgrffndvzbtoilmundkmvbaxrjtqsew.com> > wcmbqxzeuopnvyfmhkstaretfciywdrl.name> > ruciplbrxwjscyhtapvlfskoqqgnxevw.name> > esnoptdkkiirzewlpgmccbwuynvxjumf.name> > nfcomizsdseqiomzqrxwvtprxbljkpgd.name> > hkxpqdtgsucylodaejmzmtnkpfvojabe.com> > etzndtcvqvyxajpcgwkzsoweaubilflh.com> > 172.96.231.69> > 47.112.197.119 |

Yara规则

代码语言:javascript
复制
rule linux_mal_hcrootkit_1 {
meta:
description = "Detects Linux HCRootkit, as reported by Avast"
hash1 = "2daa5503b7f068ac471330869ccfb1ae617538fecaea69fd6c488d57929f8279"
hash2 = "10c7e04d12647107e7abf29ae612c1d0e76a79447e03393fa8a44f8a164b723d"
hash3 = "602c435834d796943b1e547316c18a9a64c68f032985e7a5a763339d82598915"
author = "Lacework Labs"
ref = "https://www.lacework.com/blog/hcrootkit-sutersu-linux-rootkit-analysis/"
strings:
$a1 = "172.96.231."
$a2 = "/tmp/.tmp_XXXXXX"
$s1 = "/proc/net/tcp"
$s2 = "/proc/.inl"
$s3 = "rootkit"
condition:
uint32(0)==0x464c457f and
((any of ($a*)) and (any of ($s*)))
}
rule linux_mal_hcrootkit_2 {
meta:
description = "Detects Linux HCRootkit Wide, unpacked"
hash1 = "2daa5503b7f068ac471330869ccfb1ae617538fecaea69fd6c488d57929f8279"
hash2 = "10c7e04d12647107e7abf29ae612c1d0e76a79447e03393fa8a44f8a164b723d"
author = "Lacework Labs"
ref = "https://www.lacework.com/blog/hcrootkit-sutersu-linux-rootkit-analysis/"
strings:
$s1 = "s_hide_pids"
$s2 = "handler_kallsyms_lookup_name"
$s3 = "s_proc_ino"
$s4 = "n_filldir"
$s5 = "s_is_proc_ino"
$s6 = "n_tcp4_seq_show"
$s7 = "r_tcp4_seq_show"
$s8 = "s_hide_tcp4_ports"
$s9 = "s_proc_open"
$s10 = "s_proc_show"
$s11 = "s_passwd_buf"
$s12 = "s_passwd_buf_len"
$s13 = "r_sys_write"
$s14 = "r_sys_mmap"
$s15 = "r_sys_munmap"
$s16 = "s_hide_strs"
$s17 = "s_proc_write"
$s18 = "s_proc_inl_operations"
$s19 = "s_inl_entry"
$s20 = "kp_kallsyms_lookup_name"
$s21 = "s_sys_call_table"
$s22 = "kp_do_exit"
$s23 = "r_sys_getdents"
$s24 = "s_hook_remote_ip"
$s25= "s_hook_remote_port"
$s26 = "s_hook_local_port"
$s27 = "s_hook_local_ip"
$s28 = "nf_hook_pre_routing"
condition:
uint32(0)==0x464c457f and 10 of them
}
rule linux_mal_suterusu_rootkit {
meta:
description = "Detects open source rootkit named suterusu"
hash1 = "7e5b97135e9a68000fd3efee51dc5822f623b3183aecc69b42bde6d4b666cfe1"
hash2 = "7b48feabd0ffc72833043b14f9e0976511cfde39fd0174a40d1edb5310768db3"
author = "Lacework Labs"
ref = "https://www.lacework.com/blog/hcrootkit-sutersu-linux-rootkit-analysis/"
strings:
$a1 = "suterusu"
$a3 = "srcversion="
$a4 = "Hiding PID"
$a5 = "/proc/net/tcp"
condition:
uint32(0)==0x464c457f and all of them
}

参考来源:

https://www.lacework.com/blog/hcrootkit-sutersu-linux-rootkit-analysis/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • 恶意病毒种植程序(The Dropper)
  • The Rootkit – Sutersu
  • The Userland ELF文件
  • 初始userland执行任务
  • 自定义 Protobuf
  • 自定义 Ghidra 脚本
  • 结论
  • IOC
  • Yara规则
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档