记一次阿里云被挖矿处理记录

摘要
莫名其妙的服务器就被攻击了,又被薅了羊毛,当做免费的挖矿劳动力了。

一、起因

上班(摸鱼)好好的,突然收到一条阿里云的推送短信,不看不知道,两台服务器被拉去作为苦力,挖矿去了。这不是耽误我摸鱼吗,再说你挖到的矿币又不带我分,岂能忍。本着对公司负责任的态度(实在没办法),这不收拾一下过分的挖矿脚本,对不起这么多年积攒的专业知识。

登录服务器,top 一下,ps 一下,crontab -l 一下,好家伙,只看到 CPU 异常占用了,却没发现到底是哪个玩意贪了我这么多资源。与以往的不太一样啊(你特么在逗我?)。

按照以往的经验,ps -aux --sort=-pcpu|head -10 一下,贪渎者肯定原形毕露。难不成穿了个马甲。仔细分析,可能不仅仅是马甲这么简单,更有可能是隐身衣。使出万能的百度大法,果然有几篇秘籍指出问题,一一对照下,只能发现大概,定位不到最终的“宝藏”地点。看来百度不行,得 google 一下了。这次秘籍多了起来,给出了一项专门破解隐藏进程的功法。

二、寻“宝”

BusyBox 是一个集成了 300 多个最常用 Linux 命令和工具的软件。甚至还集成了一个 http 服务器和 telnet 服务器,集成的包大小只有 1M 左右。有人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单点说 BusyBox 就是一个集成了许多 Linux 工具和命令的大的工具箱。在嵌入式软件中,BusyBox 有着广泛的运用。

所以,下载 BusyBox,安装:

$ wget https://busybox.net/downloads/binaries/1.30.0-i686/busybox
$ mv busybox /usr/bin/busybox
$ chmod +x /usr/bin/busybox

查看 BusyBox 基本功能

$ busybox --help

使用瑞士军刀查看一下进程信息

$ busybox top

作祟者原型毕露,有个 /bin/daemon 进程,占用过高的 CPU 使用

挖矿进程

同时使用 netstat 查看一下程序端口占用

$ netstat -anp | grep ESTAB

结果如下:

netstat结果

可以看到有一个程序占用端口 14444,连接的ip为 217.182.169.148,却并没有打印出程序的进程号,在shadan搜索一下,ip 为法国的,基本确定入侵使用的端口为 14444,先把端口禁用掉。

异常IP

三、“六娃”的能力

既然确定是 /bin/daemon,那就需要找出这个玩意是怎么具有“七娃”的能力,又是如何进行挖矿的。

首先可以确定的是 /bin/daemon 是一个二进制执行程序,那就可以看看它的动态库依赖关系

$ ldd /bin/daemon

ldd结果

此时还未发现有任何异常的结果(请原谅眼神不好使,四个眼睛都没发现问题)

既然 ldd 无法找出异常,祭出大招,看看 /bin/daemon 所执行的系统调用

$ strace /bin/deamon

strace调用链
好家伙,不看不知道,居然有一个 ld.so.preload,来了个预加载。

一般来说,预加载 so 有两种方式:

  1. 修改/etc/ld.so.preload配置文件,这种方法对配置修改后运行的进程有效,而无法影响已经在运行的进程
  2. 启动进程前设置LD_PRELOAD环境变量,此方法只对当前进程生效

LD_PRELOAD 可以影响程序的运行时链接,它允许定义在程序运行前优先加载的动态链接库,通过这个环境变量,可以在主程序和其动>态链接库的中间加载别的动态链接库,甚至覆盖正常的函数。

进程在启动后,会按照一定的顺序加载动态库:

  • 加载环境变量 LD_PRELOAD 指定的动态库
  • 加载文件 /etc/ld.so.preload 指定的动态库
  • 搜索环境变量 LD_LIBRARY_PATH 指定的动态库搜索路径
  • 搜索路径 /lib64 下的动态库文件

从上面的结果来看,加载了一个 /usr/local/lib/libprocesshider.so 动态库,从上面的 ldd 返回结果也看到了这个动态库,再仔细一看,这名字,不就是 process+hider
libprocesshider.so,Hide a process under Linux using the ld preloader. 官方的解释,本来可能只是作者觉得一个好玩的玩意,却被别有用心的人拿来做坏事。

找到这家伙,那好办了,先把它直接干掉。

$ rm -rf /usr/local/lib/libprocesshider.so

啥?万能的 rm -rf 大法居然失效了,这家伙身上居然给自己加了个盾,大招居然没有收到人头。

冷静一下,仔细分析。既然不能删除,那就是有着隐藏属性,等待技能冷却,我还有招。

$ lsattr /usr/local/lib/libprocesshider.so

文件隐藏属性

果然,文件被追加了隐藏属性。可以看到有 ia 属性。

文件隐藏属性解释:

属性选项功能
i如果对文件设置 i 属性,不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置 i 属性,只能修改目录下文>件中的数据,但不允许建立和删除文件
a如果对文件设置 a 属性,只能在文件中增加数据,不能删除和修改数据;如果对目录设置 a 属性,只允许在目录中建立和修改>文件,不允许删除文件
u设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录
s和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复

既然加了盾,那把盾给破了就是:

$ chattr -ia /usr/local/lib/libprocesshider.so

什么,chattr 没权限,这是反弹伤害吗?这,玩不下去了啊。

试试分身术吧。

$ cp /usr/bin/chattr /usr/bin/chattr2
$ chattr2 -ia /usr/bin/chattr

没报错,嗯,再试试

$ chattr -ia /usr/local/lib/libprocesshider.so

咋,还提示没权限。

再看一下 chattr

$ file /usr/bin/chattr

chattr

这这这,跟我这虚晃一枪呢。你把我原来的文件删了,给我放个空文件,你是想骗谁呢。

看来要重装 chattr 了,但是机器上跑了不少服务,担心有影响。集中精力,冥想三分钟,条条大路通罗马,此路不通,换路走。谁让咱兄弟姐妹多呢。

服务器都是选择的一样的镜像,版本一致,从其它未被攻击的系统中拷贝一份 chattr,(划重点)拷贝到服务器上时,请换一个文件名称,通过新的文件修改原来的文件。如 chattr2

$ chattr2 -ia /usr/bin/chattr
$ rm -rf /usr/bin/chattr
$ mv /usr/bin/chattr2 /usr/bin/chattr

正主归位,一切妖魔邪道即将化为无形。

$ chattr -ia /usr/local/lib/libprocesshider.so
$ chattr -ia /etc/ld.so.preload
$ rm -rf /usr/local/lib/libprocesshider.so
$ rm -rf /etc/ld.so.preload

此时,通过 top 即可看到 /bin/daemon 进程。没有了隐身衣,无所遁形了吧。

那么,接下来,就应该干掉“罪魁祸首”了。大蛇精和蝎子精已死,救爷爷终于有希望了。

/bin/daemon 是通过软链指向 /usr/bin/daemon,不墨迹,直接干掉本尊。

$ chattr -ia /usr/bin/daemon
$ rm -rf /usr/bin/daemon

当然,记得杀掉运行中的 /bin/daemon 进程

$ kill -9 2415

四、守护者

一般的挖矿脚本程序肯定都有一个守护进程,保证挖矿的进程被杀之后,可以重新启动,绝大多数是用的定时任务的方式。既然通过 crontab -l 没看到定时任务,那就看看 /etc/cron.d 目录下有没有:

crontab

cron.d
果然,在 /etc/cron.d 目录下,存在着定时任务脚本,查看脚本内容:

$ cat /etc/cron.d/systemd

果然运行了一条定时任务,查看指向的脚本内容:

$ cat /lib/systemd/systemd-login

systemd-login

脚本文件没有内容,file /lib/systemd/systemd-login

very short file(no magic)

什么👻 ,先不管了,干掉再说。

$ rm -rf /lib/systemd/systemd-login
$ rm -rf /etc/cron.d/systemd
$ rm -rf /etc/cron.d/systemd~
$ rm -rf /etc/cron.d/systemz~

打完野怪打小龙,打完小龙打大龙,等一段时间看看,还好,己方水晶没爆。

运行一段时间,一切稳定,算是暂告一段落。

五、总结

本篇文章还有很多的不足之处,并没有找到病毒攻击的入口,又是如何入侵到系统的,挖矿的脚本究竟运行在哪?按照正常的被攻击排错方式,一开始并不顺利。总结一下系统被入侵的排查思路,只是给后来者提供一下解决思路(希望大家的系统都很健壮,不被攻击)。

  • 查看系统的 CPU内存占用
  • 查询占用系统资源过高的进程
  • 排查定时任务,crontab -l 或者 /etc/cron.d 目录
  • 检查异常端口,如发现,禁用端口,堵漏
  • 使用 last 命令查看系统异常登录情况(一般攻击者会抹去入侵记录)
  • 使用 history 命令查看系统历史执行命令(一般攻击者会抹去历史命令)
  • 查看开机启动脚本 /etc/rc.local ,是否插入了开机启动进程
  • 通过 find /etc/cron.daily/* -mtime -1 查找前一天到现在被修改的文件
  • 找一台正常的机器,比较一下被修改文件的 md5

后续救援不如从源头堵住疏漏,平时使用系统时,可以从以下方面尽量保证系统安全:

  • 检查弱口令,使用强口令,能用证书的,尽量不使用密码
  • 不需要在外网访问的端口,尽量不开启,只开放在内网
  • 尽量使用普通用户启动服务,不要使用 root 用户启动服务
  • 系统被入侵,一般都是通过部署的服务暴露出来的漏洞,及时更新软件版本,加固系统
  • 修改常用软件服务的端口,尽量不要使用原有端口
  • 定时备份重要的文件数据,以防止服务器被入侵时,丢失重要数据

未完待续…

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

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

相关文章

具备捕获 Web2 用户能力的 PoseiSwap,治理通证$POSE再度涨超 360%

Nautilus Chain 是行业内首个模块化 Layer3 架构链,开发者能够基于模块化进行定制化开发,并有望进一步推动 Web3 应用向隐私、合规等方向发展。当然,Nautilus Chain 的特殊之处还在于为生态用户带来丰厚的空投预期,据悉上线 Nauti…

android Surface(1, 2)

android Surface(1, 2) android的Surface相关内容从底层依次往上分别是: 1.frameBuffer,简称fb,对于同一个android系统,可以同时存在多个frameBuffer,本机是fb0,依次外接时,fb1, fb2, ……fbn…

安全漏洞的检测利用

安全漏洞的检测&利用 一、安全漏洞的基本概念1.1、什么是漏洞1.2、漏洞的简单理解1.3、微软的RPC漏洞与蠕虫病毒1.4、微软经典的蓝屏漏洞1.5、Heartbleed(心脏滴血)漏洞1.6、破壳漏洞CVE-2014-62711.7、漏洞的危害1.8、漏洞的成因1.9、漏洞的信息的组…

electron+vue3全家桶+vite项目搭建【21】自定义窗口拖拽移动

引入 如果你尝试过透明窗口,并控制透明部分事件击穿,就会发现使用 drag属性样式去控制窗口拖拽会导致点击事件失效,并且带drag属性的窗口移动到另一个窗口的透明部分会有窗口乱动的各种BUG,于是,这便需要我们自己去实…

mac上 如何批量在文件名后加相同的文字?

mac上如何批量在文件名后加相同的文字?不管你是使用windows电脑还是使用mac电脑,很多小伙伴都会在电脑上进行文件批量重命名的操作,不过这项操作对于使用windows系统电脑的小伙伴来说会简单一些,因为在网上可以搜索到很多这样的教…

软考:中级软件设计师:计算机体系结构,CISC和RISC,Flynn分类,指令流水线,吞吐率,效率

软考:中级软件设计师:计算机体系结构 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的…

LabVIEW开发X射线图像增强

LabVIEW开发X射线图像增强 X射线图像在临床诊断中起着重要作用。但是,由于各种原因,例如不均匀,低照度条件和一些噪点,图像质量通常不是很好。因此有必要增强这些图像,以方便后续处理或诊断。模糊集论是开发图像处理中…

SpringBoot第19讲:SpringBoot 如何保证接口幂等

SpringBoot第19讲:SpringBoot 如何保证接口幂等 在以SpringBoot开发Restful接口时,如何防止接口的重复提交呢? 本文是SpringBoot第19讲,主要介绍接口幂等相关的知识点,并实践常见基于Token实现接口幂等。 文章目录 Spr…

LLaMA: Open and Efficient Foundation Language Models

背景 用最少的计算资源,解决了LLM大模型预测问题,训练了一些列的LLaMa模型,在参数量比较少的情况下,达到业界大模型效果。 主要贡献就是提升了LLM模型的训练速度和效率,在小容量的基础上,大大提升了模型的…

基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

最长公共子序列LCA

最长连续公共子序列 题目链接:3692. 最长连续公共子序列 - AcWing题库 /*解法:定义dp[i1][j1]为以a[i]结尾的字符串和b[j]结尾的字符串的最长连续公共子序列那么对于a[i] b[j]的时候 dp[i1][j1] dp[i][j]1否则为0 其他就是细枝末节 */ #include<iostream> #include<…

【底部消息红点提示】uniapp开发小程序时,使用uni.setTabBarBadge设置底部菜单的红点

一、实现的效果 功能描述&#xff1a;无论点击底部的哪个菜单栏&#xff0c;都可以看到第二个菜单栏下显示的红点通知。 如果只在人脉当前页面设置的话&#xff0c;当你在第二个菜单栏的页面中调用uni.setTabBarBadge方法设置红点后&#xff0c;切换到第一个菜单栏的页面时&am…