0

    急死!CPU 被挖矿了,却找不到哪个进程!

    2023.05.18 | admin | 252次围观

    (给算法爱好者加星标,修炼编程内功)

    来源:小白学黑客【前言】通过排查挖矿病毒的一次“有趣”经历,本文不仅展示了各种 Shell 命令的用法和作用,也能加深读者对Linux 进程和文件系统的理解。

    同时在本文中,还出现了各种不同的工具类网站ai找不到链接文件,相信对于一些专业人士会很有帮助。

    希望能对大家有所帮助。

    CPU起飞了

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

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

    上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目录下的内容,类似于“障眼法”,所以包含ps、top、ls等等在内的命令,都没办法看到挖矿进程的存在。

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

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

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

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

    源码地址:

    在查找隐藏进程模块ai找不到链接文件,其大致使用了如下的方法:

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

    按照这个思路,我编写了一个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密钥登录方式,留下这么一个后门,随时都能远程登录进来。

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

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

    清除建议

    - EOF -

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论