Dark background with blue code overlay
博客

Kinsing 攻击手法进化 | Akamai 博客

Evyatar Saias

寫於

Evyatar Saias

September 16, 2021

Evyatar Saias

寫於

Evyatar Saias

Evyatar Saias 是 Akamai 安全情报部的安全研究员。

前言

一个大型持久化加密挖矿僵尸网络正在大规模感染互联网上的系统。

2021 年 2 月 16 日,Akamai SIRT 首次观测到这一加密挖矿僵尸网络活动,目前其攻击目标包括 Windows 和 Linux 系统。这个僵尸网络在不同的地理区域(包括美洲、欧洲和亚洲)高度活跃,因此引起了我们的关注。该僵尸网络一直使用相同的分布式 IP 地址 (194.38.20.199) 运行,迄今已有超过六个月不需要轮换 IP 地址。此攻击活动过去仅针对 Linux 机器,但近期将攻击范围扩大到了 Windows 系统。

感染 Windows 系统

为了感染 Windows 系统,该僵尸网络利用了 CVE-2020-14883漏洞,Oracle WebLogic Server 的 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0 和 14.1.1.0.0 版本均受此漏洞影响。通过利用该漏洞,攻击者能够实施远程代码执行 (RCE),进而接管 Oracle WebLogic Server。

在感染过程的第一步中,攻击者会设法让受害者的计算机下载并执行一个名为 wbw.xml 的 XML 文件。在 Windows 计算机上,该 XML 文件通过 ClassPathXmlApplicationContext 类执行

图 1) 受害者计算机通过 ClassPathXmlApplicationContext 类下载并执行远程 XML 文件 (CVE-2020-14883) 图 1) 受害者计算机通过 ClassPathXmlApplicationContext 类下载并执行远程 XML 文件 (CVE-2020-14883)

 

所获取的 wbw.xml 文件中包含一条将在受害者计算机上执行的嵌入式 PowerShell 命令。该命令如下:

 

它试图使用 System.Net.WebClient.DownloadString方法将一个名为“ 1.ps1 ”的 PowerShell 脚本下载到受害者计算机上。它还利用 Set-ExecutionPolicy Bypass 标志,确保用于攻击的内容均不会被阻止,并且在执行过程中不会生成任何提示或警告。

图 2) wbw.xml 文件的内容,其中包含一条用于将名为“1.ps1”的 PowerShell 脚本下载到受害者计算机上的 PowerShell 命令 图 2) wbw.xml 文件的内容,其中包含一条用于将名为“1.ps1”的 PowerShell 脚本下载到受害者计算机上的 PowerShell 命令

 

之后, 1.ps1 脚本将下载一个名为“xmrig.exe”的加密货币挖矿恶意程序可执行文件,以及一个 config.json 文件。这个 config.json 文件中包含供挖矿恶意程序使用的配置信息,例如加密货币钱包地址、加密矿池端点和其他配置设置信息。除此之外, 1.ps1 脚本 还包含一个 $miner_name 变量,其中存储的是一个新名称,供存储加密货币挖矿恶意程序可执行文件“xmrig.exe”在重命名时使用,在本例中,脚本代码将“xmrig.exe”重命名为“sysupdate”,然后执行该可执行文件。

图 3) PowerShell 脚本“1.ps1”的部分内容 图 3) PowerShell 脚本“1.ps1”的部分内容
图 4) config.json 文件的部分内容,其中包含挖矿恶意程序可执行文件的配置信息(如矿池端点和加密货币钱包地址)。 图 4) config.json 文件的部分内容,其中包含挖矿恶意程序可执行文件的配置信息(如矿池端点和加密货币钱包地址)。

 

1.ps1 脚本会持久驻留在受害者计算机上,以便更新 config.json 文件和挖矿恶意程序。为此,它使用了可通过 PowerShell 在本地或远程计算机上创建、删除和运行计划任务的 SchTasks.exe可执行文件。如需了解 SchTasks.exe 的更多信息,请点击 此处。该计划任务名为“Update service for Windows Service”,此脚本会再次使用-ExecutionPolicy Bypass 标志 以避免在执行过程中引发任何警告或提示,同时让 -windowstyle 隐藏标志保持隐藏状态。

图 5) PowerShell 脚本 1.ps1 创建一个名为“Update service for Windows Service”的计划任务,以向配置文件和挖矿恶意程序可执行文件推送更新,从而持久驻留在受害者计算机上 图 5) PowerShell 脚本 1.ps1 创建一个名为“Update service for Windows Service”的计划任务,以向配置文件和挖矿恶意程序可执行文件推送更新,从而持久驻留在受害者计算机上

感染 Linux 系统

此攻击活动利用多个 CVE 来实现远程代码执行 (RCE),从而感染 Linux 系统。除了包含加密货币挖矿恶意程序的 Kinsing 恶意软件外,针对 Linux 的攻击载荷中还有一个远程访问木马 (RAT)。所针对的服务包括 Oracle WebLogic Server、Redis、Apache Solr、PHPUnit 和 Supervisor XML-RPC。

该活动还在 Linux 系统上利用了 Oracle WebLogic Server CVE-2020-14883。此漏洞在 Windows 系统中通过 ClassPathXmlApplicationContext 类来实现远程代码执行,而在 Linux 系统中使用的是 FileSystemXmlApplicationContext 类。其用于下载 bash 脚本的恶意 XML 文件名为“wb.xml”,而先前在 Windows 中用于下载 PowerShell 脚本的文件名为“ wbw.xml ”。

图 6) 受害者计算机通过 FileSystemXmlApplicationContext 类下载并执行远程 XML 文件 (CVE-2020-14883) 图 6) 受害者计算机通过 FileSystemXmlApplicationContext 类下载并执行远程 XML 文件 (CVE-2020-14883)
图 7) wb.xml 文件的内容,其中包含一个用于在受害者计算机上下载并执行 bash 脚本“wb.sh”的 bash 命令 图 7) wb.xml 文件的内容,其中包含一个用于在受害者计算机上下载并执行 bash 脚本“wb.sh”的 bash 命令

 

在 Linux 系统上,感染的第一步是利用下表中提供的任意 CVE 来实现远程代码执行,然后将 bash 脚本文件下载到受害者计算机上。

图 8) 此攻击活动用来感染受害者计算机的 CVE 图 8) 此攻击活动用来感染受害者计算机的 CVE

 

虽然此 bash 脚本的具体文件名可能是 s.sh、p.sh、sup.sh、d.sh、ex.sh、r.sh、spr.sh、tf.sh wb.sh ,但目标几乎是完全相同的。

此 bash 脚本能阻止系统上原有的挖矿恶意程序,避免其争用算力,并禁用安全和日志记录功能。然后,它会下载使用 Go 语言编写的 Kinsing 恶意软件,通过 crontab 实现持久驻留并开始进行加密货币挖矿活动。

图 9) bash 恶意脚本的一部分,用于将 Kinsing 加密货币挖矿恶意程序下载到受害者的 Linux 计算机上 图 9) bash 恶意脚本的一部分,用于将 Kinsing 加密货币挖矿恶意程序下载到受害者的 Linux 计算机上

 

在受害者计算机上执行后,Kinsing 恶意软件会在 /tmp 目录中再创建一个名为“ kdevtmpfsi ”的进程(即 xmrig 加密货币挖矿恶意程序),并执行该进程。Kinsing 恶意软件将持续监测 kdevtmpfsi 进程,以确保其一直运行。

解码“命令和控制”(C2) IP 地址

该恶意软件通过使用一个名为“ getActiveC2CUrl”的函数在运行时解码 C2 IP 地址,从而与 C2 服务器进行通信。 getActiveC2CUrl 函数使用 RC4 流加密算法对明文十六进制数据执行 XOR 加密,所用明文密钥与此数据存储在相同二进制文件内。

根据 Go 语言二进制文件存储字符串的方式,所有静态字符串基本上都会串联到一起,形成一个很大的字符串 blob,这让明文密钥和明文十六进制数据能够轻易藏匿在这个超大字符串内。在对 getActiveC2CUrl 函数进行一些反向处理后,即可确定明文密钥和明文十六进制数据在内存中的位置及其长度。

图 10) 图示为 C2 明文十六进制数据和加密密钥在内存中的位置及其长度。 图 10) 图示为 C2 明文十六进制数据和加密密钥在内存中的位置及其长度。

getActiveC2CUrl 对 C2 十六进制数据进行解码,然后将其与密钥一起传递给另一个名为“ RC4”的函数。自定义 RC4 函数内部使用来自 RC4 Go 语言程序包的 func (c *Cipher) XORKeyStream(dst, src []byte) 函数,以生成 C2 IP 地址。

在获得 C2 十六进制数据和密码后,可以进一步对 getActiveC2CUrl 函数进行反向工程,并使用 Go 语言重写该函数,以计算活动 C2 IP 地址。

图 11) 通过所获取的 C2 十六进制数据和密钥,使用 Go 语言重写 getActiveC2CUrl() 函数,以生成活动 C2 IP 地址。 图 11) 通过所获取的 C2 十六进制数据和密钥,使用 Go 语言重写 getActiveC2CUrl() 函数,以生成活动 C2 IP 地址。

RAT 功能

Kinsing 恶意软件中还包含远程访问木马 (RAT) 功能,可在二进制文件中名为“ doTask() ”的函数中找到。 doTask 函数中包含几个根据指定输入执行的函数调用比较值得关注,分别是:

  • runTaskWithScan()

  • updateTask()

  • startCmd()

  • execTaskOut()

  • masscan()

  • socks()

  • backconnect()

  • runTaskWithHttp()

  • downloadAndExecute()

 

在这些值得关注的函数中, startCmd() 让恶意软件可在受害者计算机上执行任意命令。

 

图 12) 经过反编译的 doTask() 函数显示了 Kinsing 恶意软件的远程访问木马功能。突出显示的部分是嵌入式 startCmd() 函数,它可以让恶意软件在受害者的计算机上执行任意命令。 图 12) 经过反编译的 doTask() 函数显示了 Kinsing 恶意软件的远程访问木马功能。突出显示的部分是嵌入式 startCmd() 函数,它可以让恶意软件在受害者的计算机上执行任意命令。

命令和控制通信

该恶意软件通过 HTTP 与 C2 (185.154.53.140) 进行通信。它会定期向 C2 发送 HTTP 请求,同时接收要执行的指令并提供简单的运行状况检查。

在每次发送 HTTP 请求时,受感染计算机将向 C2 发送有关其当前状态和系统资源的信息,例如核心数量、内存、操作系统以及是否已获得 root 权限等等。所有这些参数都会通过自定义 HTTP 标头提供给 C2 服务器。

 图 13) 受感染计算机向 C2 发出的 POST 请求,其中包含有关受害者系统资源和已获权限的信息 图 13) 受感染计算机向 C2 发出的 POST 请求,其中包含有关受害者系统资源和已获权限的信息

为了接收指令,受感染计算机会不断向端点发出请求, /get就是这样一个端点。当受感染计算机向 C2 的 /get 端点发出 GET 请求时,该恶意软件会立即尝试从原始的分布式 IP 地址 (194.38.20.199) 下载额外的新恶意 shell 脚本。

图 14) 受感染计算机向 C2 的 /get 端点发出 GET 请求,并由此从原始的分布式 IP 地址 (194.38.20.199) 获取一个新 shell 脚本 图 14) 受感染计算机向 C2 的 /get 端点发出 GET 请求,并由此从原始的分布式 IP 地址 (194.38.20.199) 获取一个新 shell 脚本

 

在 GET 请求成功传输到 C2 的 /get 端点后,恶意软件随即从原始的分布式 IP 地址 (194.38.20.199) 下载两个 bash 脚本,其名称分别是“ ph.sh ”和“ spre.sh”。这两个文件与我们前面看到用于初始感染计算机的 bash 脚本不同,它们各自有着不同的目的,并且包含额外的感染媒介。


我们先来看看 ph.sh 脚本。除了受害者计算机上现有的 Kinsing 恶意软件外,该脚本还从 194.38.20.199/libsystem.so 端点上下载了一个名为“ libsystem.so ”的 Rootkit。随后,ph.sh 脚本将此 Rootkit 预载入 /etc/ld.so.preload

图 15) bash 脚本 ph.sh 的一部分,用于将所获取的 libsystem.so Rootkit 预载入 /etc/ld.so.preload 图 15) bash 脚本 ph.sh 的一部分,用于将所获取的 libsystem.so Rootkit 预载入 /etc/ld.so.preload

 

除了先前被初始脚本感染的现有 cron 作业外, ph.sh 脚本又建立了一种持久性机制。为此,它注册了一项用于定期重复感染主机的系统服务。

图 16) bash 脚本 ph.sh 的一部分,将创建一项用于建立持久性的系统服务并定期重复感染主机。 图 16) bash 脚本 ph.sh 的一部分,将创建一项用于建立持久性的系统服务并定期重复感染主机。

 

如需详细了解 ph.sh 脚本所安装的 libsystem.so Rootkit 及其内部运作机制,请阅读 Trend Micro 为该特定 Rootkit 撰写的一篇精彩博文,参见 此处

在从 C2 端点收到 /get 响应时,还获取了另一个值得关注的 bash 脚本文件,即 spre.sh。其目的是检查~/.ssh/config~/.bash_history.ssh/known_hosts,找到受害者有权访问的任何主机的 SSH 凭据,从而进一步感染其他主机。然后, spre.sh 脚本会尝试通过所找到的 SSH 凭据登录所发现的主机并感染它们。

 

图 17) bash 脚本 spre.sh 在 ~/.ssh/config ~/.bash_history 和 .ssh/known_hosts 中查找 SSH 凭据,并通过找到 SSH 凭据进一步感染其他主机 图 17) bash 脚本 spre.sh 在 ~/.ssh/config ~/.bash_history 和 .ssh/known_hosts 中查找 SSH 凭据,并通过找到 SSH 凭据进一步感染其他主机

 

受感染计算机还会向 C2 端点 /mg 发出请求以获取指令,这个端点也比较值得关注。当受感染计算机向 /mg 端点发出 GET 请求时,该 C2 端点仅通过几个字符作为响应,受感染计算机随即开始与第三个 IP 地址 95.181.179.88 进行通信,该地址似乎负责通过 HTTP 以 JSON-RPC 攻击载荷的形式向受感染计算机发送挖矿命令。

图 18) 受感染计算机向 C2 的 /mg 端点发出 GET 请求 图 18) 受感染计算机向 C2 的 /mg 端点发出 GET 请求

解决办法

为抵御这些威胁,Akamai SIRT 建议您监测系统上的进程是否存在异常高的资源消耗和可疑的网络活动。如果任何进程出现异常高的 CPU 使用率,则可能表示存在加密货币挖矿活动。

Akamai SIRT 还建议您经常检查系统上在 crontab 下注册的 cron 作业,确保 cron 作业未与任何未知 IP 地址通信,因为这是 Linux 恶意软件建立持久性的常用方法,这里讨论的攻击活动也不例外。

在 Windows 系统上,可通过 PowerShell 并使用 SchTasks.exe /Query 命令来显示该攻击活动创建的任何计划任务,以完成同样的检查。此外还应检查正在运行的进程,确保 Linux 系统上没有名为“kinsing”或“kdevtmpfsi”的进程在运行;Windows 系统上没有名为“sysupdate”的进程。

尽可能在系统中增加高强度身份验证机制,弱密码很容易被暴力破解。另外,还要确保该加密挖矿僵尸网络活动所针对的服务非必要时不会面向互联网,例如 Oracle WebLogic Server、Redis、Apache Solr、PHPUnit 和 Supervisor XML-RPC,这样可显著降低上述服务被感染的风险。例如,如果某个 Redis 实例仅供内部系统使用,则无需让其面向互联网。

Akamai SIRT 还建议您对照下面的入侵迹象 (IOC) 部分检查系统中是否存在 IOC,以确保系统未被感染。除此之外,还请定期修补系统并遵循最佳实践。

入侵迹象 (IOC)

IP

IP 地址

描述

185.154.53.140

命令和控制

194.38.20.199

恶意软件分发

95.181.179.88

管理加密货币挖矿操作

195.3.146.118

备用恶意软件分发

 

文件

SHA-256

名称

描述

8ca0229fb64e3f1819375cf1daf32104c37c0d0923bdc35cb6bea655ecd1a6a4

s.sh

194.38.20.199/s.sh,用于下载 Kinsing 恶意软件的 bash 脚本

ede8fdb68d777efcc0538b465d640cbb2c061bd49461f76d65f68c135ff8bbb6

p.sh

194.38.20.199/p.sh,用于下载 Kinsing 恶意软件的 bash 脚本

0e79ec7b00c14a4c576803a1fd2e8dd3ea077e4e98dafa77d26c0f9d6f27f0c9

d.sh

194.38.20.199/d.sh,用于下载 Kinsing 恶意软件的 bash 脚本

6e35b5670953b6ab15e3eb062b8a594d58936dd93ca382bbb3ebdbf076a1f83b

spr.sh        

194.38.20.199/spr.sh,用于下载 Kinsing 恶意软件的 bash 脚本

818179ac928027a5c26c9b13d3d830b7331c3e4c46ba1e305867e3d4accaf3ef

r.sh

194.38.20.199/r.sh,用于下载 Kinsing 恶意软件的 bash 脚本

56ac2321e481708ea72e2bf7710e66c3455afa729b24f6a6ba9065ae0cca8fb3

ex.sh

194.38.20.199/ex.sh,用于下载 Kinsing 恶意软件的 bash 脚本

05e5ad89443b58805ae2eb2628d3eef1d6cbcc338bced23f422abe5ce60ff82d

tf.sh

194.38.20.199/tf.sh,用于下载 Kinsing 恶意软件的 bash 脚本

274b11542fcb30065c4cc0976ce33252ba2812756f7e22f6d80fae1acadf5c4c

wb.sh

194.38.20.199/wb.sh,用于下载 Kinsing 恶意软件的 bash 脚本

6e25ad03103a1a972b78c642bac09060fa79c460011dc5748cbb433cc459938b

kinsing

194.38.20.199/kinsing,Kinsing 恶意软件的二进制文件

7d31843ce5231c95ce07a609cb4473fe53b95a8d0685df9d666de348d17c69ff

config.json

194.38.20.199/config.json,XMRIG 挖矿恶意程序的 json 配置

c38c21120d8c17688f9aeb2af5bdafb6b75e1d2673b025b720e50232f888808a

libsystem.so

194.38.20.199/libsystem.so,Rootkit 二进制文件

5e5b5171a95955ecb0fa8f9f1ba66f313165044cc1978a447673c0ac17859170

xmrig.exe

194.38.20.199/xmrig.exe,

面向 Windows 的 XMRIG 挖矿恶意程序

49ff0329b9ad42c7fb17e6a2d80b316ed6b759ab5dfd04a5aba42b97225494cf

wbw.xml

194.38.20.199/wbw.xml,用于下载 Powershell 脚本以感染 Windows 系统的 XML 文件

25b545dc3423d5c3c0181f559486643a7097b5fd87b32f0347ed667cbf3fb38e

wb.xml

194.38.20.199/wb.xml,用于下载 bash 脚本以感染 Linux 系统的 XML 文件

6b9e23cb675be370a18a0c4482dc566be28920d4f1cd8ba6b4527f80acf978d3

curl-amd64

194.38.20.199/curl-amd64,Curl 二进制文件

fecd30cd7802f8ac4137a2d0659b3052411a99d809a5aefb48f8b821905100f3

al.sh

194.38.20.199/al.sh,用于阻止 Aegis 服务的 bash 脚本

cb2ca16246a687b34fa1ba76015cb4aa3b50b4ecca4550478eb580c4725ab48f

cron.sh

194.38.20.199/cron.sh,用于更新 crontab 的 bash 脚本

d7cda9e427d0848352a1158c68a2577c1600965fb9dbb32bc1e10af1a442d284

ph.sh

194.38.20.199/ph.sh,用于下载 Kinsing 恶意软件和 libsystem.so Rootkit 的 bash 脚本

f4c319e43296ab323615ac4bd4b7601991218ecb6d6043b1c040a96f1a33f14f

spre.sh

194.38.20.199/spre.sh,用于通过 SSH 将感染散布到其他主机的 bash 脚本

dd603db3e2c0800d5eaa262b6b8553c68deaa486b545d4965df5dc43217cc839  

kdevtmpfsi

Kinsing 加密货币挖矿恶意程序进程



Evyatar Saias

寫於

Evyatar Saias

September 16, 2021

Evyatar Saias

寫於

Evyatar Saias

Evyatar Saias 是 Akamai 安全情报部的安全研究员。