Kinsing 攻击手法进化 | 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 类执行

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

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

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


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

感染 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 ”。


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



虽然此 bash 脚本的具体文件名可能是 s.sh、p.sh、sup.sh、d.sh、ex.sh、r.sh、spr.sh、tf.sh 或 wb.sh ,但目标几乎是完全相同的。
此 bash 脚本能阻止系统上原有的挖矿恶意程序,避免其争用算力,并禁用安全和日志记录功能。然后,它会下载使用 Go 语言编写的 Kinsing 恶意软件,通过 crontab 实现持久驻留并开始进行加密货币挖矿活动。

在受害者计算机上执行后,Kinsing 恶意软件会在 /tmp 目录中再创建一个名为“ kdevtmpfsi ”的进程(即 xmrig 加密货币挖矿恶意程序),并执行该进程。Kinsing 恶意软件将持续监测 kdevtmpfsi 进程,以确保其一直运行。
解码“命令和控制”(C2) IP 地址
该恶意软件通过使用一个名为“ getActiveC2CUrl”的函数在运行时解码 C2 IP 地址,从而与 C2 服务器进行通信。 getActiveC2CUrl 函数使用 RC4 流加密算法对明文十六进制数据执行 XOR 加密,所用明文密钥与此数据存储在相同二进制文件内。
根据 Go 语言二进制文件存储字符串的方式,所有静态字符串基本上都会串联到一起,形成一个很大的字符串 blob,这让明文密钥和明文十六进制数据能够轻易藏匿在这个超大字符串内。在对 getActiveC2CUrl 函数进行一些反向处理后,即可确定明文密钥和明文十六进制数据在内存中的位置及其长度。


getActiveC2CUrl 对 C2 十六进制数据进行解码,然后将其与密钥一起传递给另一个名为“ RC4”的函数。自定义 RC4 函数内部使用来自 RC4 Go 语言程序包的 func (c *Cipher) XORKeyStream(dst, src []byte) 函数,以生成 C2 IP 地址。
在获得 C2 十六进制数据和密码后,可以进一步对 getActiveC2CUrl 函数进行反向工程,并使用 Go 语言重写该函数,以计算活动 C2 IP 地址。


RAT 功能
Kinsing 恶意软件中还包含远程访问木马 (RAT) 功能,可在二进制文件中名为“ doTask() ”的函数中找到。 doTask 函数中包含几个根据指定输入执行的函数调用比较值得关注,分别是:
runTaskWithScan()
updateTask()
startCmd()
execTaskOut()
masscan()
socks()
backconnect()
runTaskWithHttp()
downloadAndExecute()
在这些值得关注的函数中, startCmd() 让恶意软件可在受害者计算机上执行任意命令。

命令和控制通信
该恶意软件通过 HTTP 与 C2 (185.154.53.140) 进行通信。它会定期向 C2 发送 HTTP 请求,同时接收要执行的指令并提供简单的运行状况检查。
在每次发送 HTTP 请求时,受感染计算机将向 C2 发送有关其当前状态和系统资源的信息,例如核心数量、内存、操作系统以及是否已获得 root 权限等等。所有这些参数都会通过自定义 HTTP 标头提供给 C2 服务器。

为了接收指令,受感染计算机会不断向端点发出请求, /get就是这样一个端点。当受感染计算机向 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

除了先前被初始脚本感染的现有 cron 作业外, 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 凭据登录所发现的主机并感染它们。

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

解决办法
为抵御这些威胁,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 加密货币挖矿恶意程序进程 |