CPU起飞了

最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用topps等命令却一直找不到是哪个进程在占用,怀疑中了挖矿病毒,急的团团转。

根据经验,我赶紧让他看一下当前服务器的网络连接,看看有没有可疑连接,果然发现了有点东西:

Shodan查一下这IP地址:

反向查找,发现有诸多域名曾经解析到这个IP地址:

这是一个位于德国的IP地址,开放了4444,5555,7777等数个特殊的服务端口:

其中这位朋友服务器上发现的连接到的是7777端口,钟馗之眼显示,这是一个HTTP服务的端口,直接访问返回的信息如下:

mining pool!,服务器正在挖矿实锤了!

但神奇的是,这个进程像是隐身了一般,找不到存在的任何痕迹。

进程如何隐藏

现在说回到本文的正题:Linux操作系统上,进程要隐藏起来,有哪些招数?

要回答这个问题,先来知道ps、top等命令枚举系统的进程列表的原理。

Linux的设计哲学是:一切皆文件!

进程也不例外, Linux系统中有一个特殊的目录:/proc/,这个目录下的内容,不是硬盘上的文件系统,而是操作系统内核暴露出的内核中进程、线程相关的数据接口,也就是procfs,里面记录了系统上正在运行的进程和线程信息,来查看一下:

这些以数字命名的目录,就是一个进程的PID,里面记录了该进程的详细信息。

而ps、top等命令的工作原理,实质上就是遍历这个目录。

知道了原理,想实现隐藏就有以下几个思路:

命令替换

直接替换系统中的ps、top命令工具。可以从GitHub上下载它们的源码,加入对应的过滤逻辑,在遍历进程的时候,剔除挖矿进程,实现隐藏的目的。

模块注入

编写一个动态链接库so文件,在so中,HOOK遍历相关的函数(readdir/readdir64),遍历的时候,过滤挖矿进程。

通过修改LD_PRELOAD环境变量或/etc/ld.so.preload文件,配置动态链接库,实现将其注入到目标进程中。

内核级隐藏

模块注入的方式是在应用层执行函数HOOK,隐藏挖矿进程,更进一步,可以通过加载驱动程序的方式在内核空间HOOK相应的系统调用来实现隐藏。不过这对攻击者的技术要求也更高,遇到这样的病毒清理起来挑战也更大了。

揪出挖矿进程

通过上面的进程隐藏原理看得住来,都是想尽办法隐藏/proc目录下的内容,类似于“障眼法”,所以包含pstopls等等在内的命令,都没办法看到挖矿进程的存在。

但蒙上眼不代表不存在,有一个叫unhide的工具,就能用来查看隐藏进程。

我让这位朋友安装这个工具来查找隐藏的进程,但奇怪的是,一执行yum install安装,远程连接的SSH会话就立刻断开。

于是退而求其次,选择通过源码安装,又是一直各种报错···

因为我没办法亲自操作这台服务器,沟通起来比较麻烦,于是我决定研究下这个unhide工具的源码,然后编一个python脚本发给他执行。

源码地址:https://github.com/YJesus/Unhide-NG/blob/master/unhide-linux.c

在查找隐藏进程模块,其大致使用了如下的方法:

挨个访问 /proc/pid/ 目录,其中,pid从1到到max_pid累加

  • 如果目录不存在,跳过

  • 如果是unhide自己的进程,跳过

  • 如果在ps命令中能看到,跳过

  • 剩下的,既不是自己,也不在ps命令输出中,则判定为隐藏进程

按照这个思路,我编写了一个Python脚本发给这位朋友,执行后果然发现了隐藏的进程:

别着急,不是真的有这么多进程,这里是把所有的线程ID列举出来了。随便挑选了一个看一下:

还记得前面通过netstat命令看到挖矿进程建立了一个网络连接吗?Linux一切皆文件,在 /proc/pid/fd 目录下有进程打开的文件信息:

这里发现这个进程打开了一个socket,后面的10212是inode id,再通过下面的命令看一下这个socket到底是什么:

cat /proc/net/tcp | grep 10212

输出了四元组信息:

左边是源IP地址:源端口,右边是目的IP地址:目的端口

目的端口1E61就是7777!!!

找到了,就是这货!

再次查看 cat /proc/pid/environ,定位到进程的可执行文件:

总算把这家伙找到了:

网上一搜这家伙,看来是惯犯了:

挖矿病毒分析

把这个挖矿木马下载下来,反汇编引擎中查看,发现加壳了。

脱壳后,在IDA中现出了原形,不禁倒吸了一口凉气,居然悄悄修改/root/.ssh/authorized_keys文件,添加了RSA密钥登录方式,留下这么一个后门,随时都能远程登录进来。

除此之外,还发现了病毒尝试连接的大量域名:

看到这里简直可怕!自己的服务器被病毒按在地上摩擦啊!

清除建议

  • 开启SELinux

  • 杀掉挖矿进程

  • 删除病毒程序(注意rm命令是否被替换)

  • 删除病毒驱动程序(注意rm命令是否被替换)

  • 删除病毒添加的登录凭据

  • 防火墙封禁IP、端口

---END---

长按进入小程序,进行打卡签到新一期打卡签到,奖品超多(更多精彩值得期待……)
最近热文:2020年,年终总结!
再见,360安全卫士!
中国大学最新排名是怎样的?
2021年1月编程语言排行榜:Python年度编程语言
和导师的微信聊天翻车现场,你一定也经历过!2T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,人工智能,考研,软考,英语,等等。在公众号内回复「资源」,即可免费获取!回复「社群」,可以邀请你加入读者群!明天见(。・ω・。)ノ♡

CPU被挖矿了,却找不到哪个进程!相关推荐

  1. linux 服务器CPU被挖矿的一个解决方法

    发现 敲代码的时候阿里云来了个电话,说你的服务器疑似挖矿,还发了个邮件, 人直接懵了,就去阿里云看看,一看cpu直接一直100%, 开始的时间是十一点二十多(这个时间很重要,是解决问题的一个关键) 还 ...

  2. Linux系统监控命令整理汇总-掌握CPU,内存,磁盘IO等找出性能瓶颈

    的性能有问题,总之,每到晚上挖站否的主机就出现了不稳定的情况,系统负载忽高忽低.利用服务器日志分析利器:ngxtop和GoAccess也能查出有一些IP一直在不断地扫描服务器端口还有WP后台. 但是, ...

  3. CPU 被挖矿,Redis 竟是内鬼!

    作者 | 轩辕之风O 来源 | 编程技术宇宙 却说这一日,Redis正如往常一般工作,不久便收到了一条SAVE命令. 虽说这Redis常被用来当做缓存,数据只存在于内存中,却也能通过SAVE命令将内存 ...

  4. CPU被挖矿,Redis竟是内鬼,

    大家好 我是周杰伦 却说这一日,Redis正如往常一般工作,不久便收到了一条SAVE命令. 虽说这Redis常被用来当做缓存,数据只存在于内存中,却也能通过SAVE命令将内存中的数据保存到磁盘文件中以 ...

  5. CPU被挖矿,Redis竟是内鬼。

    作者:轩辕之风 原文链接:https://www.cnblogs.com/xuanyuan/p/15564302.html 却说这一日,Redis正如往常一般工作,不久便收到了一条SAVE命令. 虽说 ...

  6. dbused StartMiner最新变种 cpu爆满 挖矿病毒 redis漏洞手动查杀流程

    上图是top之后的特征 如果是生产服务器建议还是直接重新装一台快一点 这病毒有可能是两层(可能我中了两次),第一层是用他注入进来的redis对应的用户来挖矿,例如我的是confluence,你把他清空 ...

  7. 计算机显卡最新配置,2019年9月如何配置电脑 结合最新CPU和显卡天梯图找合适的电脑硬件...

    最新CPU天梯图.显卡天梯图2019年9月已经出来了,最新的CPU.显卡性能一较高下,排行榜立马能看出.有了这些电脑硬件最新天梯图,那如何给自己配置电脑呢?玩LOL英雄联盟.魔兽世界.云顶之弈等,每个 ...

  8. linux中yum进程占cpu百分之九十,在Deepin Linux系统中kworker进程占用CPU达到100%的解决...

    如果你在Deepin Linux.Debian.Ubuntu系统中遇到kworker进程占用CPU达到100%,可以用以下解决方法解决问题,本文主要内容为问题起因.microcode介绍.解决方法及总 ...

  9. json.tojsonstring 导致cpu飙高_阿里调试神器立功了!进程导致Kubernetes节点CPU飙高的排查与解决...

    来源:https://www.cnblogs.com/maxzhang1985/p/12673160.html 一.发现问题 在一次系统上线后,我们发现某几个节点在长时间运行后会出现CPU持续飙升的问 ...

最新文章

  1. Python3数据分析与挖掘建模实战
  2. C#列出局域网中可用SQL Server服务器(续)
  3. weblogic管理1——创建 和 删除一个domain
  4. JavaScript基础(一)基本认识
  5. c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...
  6. boost::lockfree::spsc_queue用法的测试程序
  7. chmod 777后还是无法写入
  8. 成功人士都有的好习惯
  9. MySQL笔记-CURRENT_TIMESTAMP()和ON UPDATE及索引相关
  10. Leanote使用mysql_搭建个人Leanote云笔记
  11. 书单丨724运维日,为运维人干杯
  12. 每秒处理10万高并发订单的乐视集团支付系统架构分享
  13. Android木马病毒com.schemedroid的分析报告
  14. dbv oracle驱动,oracle dbv使用详解
  15. 各种门锁的内部结构图_防盗门锁锁体内部结构图是什么?
  16. python利用公式计算_python利用公式计算π的方法
  17. Git与GitHub的了解与运用
  18. 贪心科技机器学习训练营(十二)
  19. 手机内存文件夹html,手机内存不够用?这6个文件夹要定时清理,至少能省下2个G...
  20. Java基础——对象和类1(面向对象基本概念)

热门文章

  1. wayland与linux_Linux最让人叹息的地方
  2. Python return函数返回值详解
  3. 仙人掌问题(圆方树)
  4. Hibernate一对多/多对一关系映射详解及相应的增删查改操作
  5. 网文IP风向之变 | 一点财经
  6. 阿里云k8s一键部署有状态StatefulSet nacos2.0.3
  7. 543、RabbitMQ详细入门教程系列 -【Confirm与Mandatory】 2022.09.05
  8. 喜!人民币入篮;忧!欧央行下调。【济南中金点评 www.zjzx01.com】
  9. 打开虚拟机报错,解决:Entering emergency mode. Exit the shell to continu
  10. 九度1001 A+B for Matrices