0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

各种Shell命令的用法和作用

Linux爱好者 来源:Linux爱好者 作者:小白学黑客 2021-01-11 10:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

希望能对大家有所帮助。

CPU起飞了

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

b5e495f4-523c-11eb-8b86-12bb97331649.png

b6008322-523c-11eb-8b86-12bb97331649.png

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

b60fb694-523c-11eb-8b86-12bb97331649.png

上Shodan查一下这IP地址:

b66a4956-523c-11eb-8b86-12bb97331649.png

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

b69b5dac-523c-11eb-8b86-12bb97331649.png

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

b6d88786-523c-11eb-8b86-12bb97331649.png

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

b7319416-523c-11eb-8b86-12bb97331649.png

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

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

进程如何隐藏

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

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

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

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

b7884bda-523c-11eb-8b86-12bb97331649.png

这些以数字命名的目录,就是一个进程的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脚本发给他执行。

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

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

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

如果目录不存在,跳过

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

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

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

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

b7f7daf4-523c-11eb-8b86-12bb97331649.png

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

b83757f6-523c-11eb-8b86-12bb97331649.png

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

b874f32c-523c-11eb-8b86-12bb97331649.png

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

cat /proc/net/tcp | grep 10212

输出了四元组信息:

b8903a10-523c-11eb-8b86-12bb97331649.png

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

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

b8cb041a-523c-11eb-8b86-12bb97331649.png

找到了,就是这货!

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

b8f21154-523c-11eb-8b86-12bb97331649.png

总算把这家伙找到了:

b90706ea-523c-11eb-8b86-12bb97331649.png

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

挖矿病毒分析

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

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

b96c91a4-523c-11eb-8b86-12bb97331649.png

b99650fc-523c-11eb-8b86-12bb97331649.png

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

b9c824f6-523c-11eb-8b86-12bb97331649.png

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

清除建议

开启SELinux

杀掉挖矿进程

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

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

删除病毒添加的登录凭据

防火墙封禁IP、端口

责任编辑:xj

原文标题:急死!CPU被挖矿了,却找不到哪个进程!

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11218

    浏览量

    222977
  • 挖矿
    +关注

    关注

    6

    文章

    448

    浏览量

    16755

原文标题:急死!CPU被挖矿了,却找不到哪个进程!

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Shell历史命令history用法

    1. 显示历史命令列表 「介绍」:history 命令用于显示当前会话中执行过的命令的列表,以及每个命令对应的编号。「示例代码」:history 2. 使用历史
    发表于 12-02 06:10

    【瑞萨RA6E2】1.使用串口shell点亮LED灯

    _TEXT_CMD_TOO_LONG, /**< 命令过长 */ SHELL_TEXT_CMD_LIST,/**< 可执行命令列表标题 */ SHELL_TEXT_VAR_
    发表于 11-09 17:26

    飞凌嵌入式ElfBoard-Linux系统基础入门-其它shell命令

    clear清屏命令命令:clear功能:清除屏幕参数:无 示例:清屏前执行清屏命令后,终端界面显示信息被清除:man帮助命令命令:man功能
    发表于 10-11 08:42

    shell基本介绍及常用命令shell基本介绍

    Shell是什么?我们在刚开始接触Linux的时候,经常会听到工程师提到Shell这个词,刚开始不知道这是个干什么的,简单的说,它是一个应用,接收用户命令,调用相应的内核接口函数或应用程序,并输出
    发表于 09-28 09:05

    Linux基础命令的进阶用法

    凌晨2点,正在熟睡的你被电话惊醒:"线上服务响应超时,用户大面积投诉!" 你匆忙打开电脑,SSH 登录服务器,面对满屏的进程和日志,脑子一片空白——从哪里开始排查?用什么命令?怎么快速定位问题?
    的头像 发表于 09-02 16:33 574次阅读

    深入剖析电阻的用法作用

    信号线上,为什么要接电阻?你一定想不到小小电阻,竟然有这么大的作用。本期贸泽科普实验室,就让我们一起来重新认识——电阻。
    的头像 发表于 08-21 09:10 2.8w次阅读
    深入剖析电阻的<b class='flag-5'>用法</b>和<b class='flag-5'>作用</b>

    【RA-Eco-RA6M4开发板评测】移植shell实现命令交互

    /XLmbJn0SKoDT1aLdxHDrbg 一个超级精简高可移植的shell命令行C实现二. 移植移植参考上述文章,很简单只需要实现输入输出接口 即可。代码见shell.c/h shell
    发表于 07-19 22:47

    Shell脚本入门指南

    Shell 是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话,把用户的输入, 解释给操作系统,然后处理操作系统的输出结果,输出到屏幕给与用户看到结果。
    的头像 发表于 06-03 10:47 997次阅读
    <b class='flag-5'>Shell</b>脚本入门指南

    Linux常用命令大全

    Linux常用命令是指在Linux操作系统中广泛使用的命令工具,这些命令工具可以完成各种不同的任务,如管理文件和目录、操作进程、网络通信、软件安装等。
    的头像 发表于 05-03 18:08 1616次阅读

    Linux中文本处理命令用法

    Linux 三剑客是(grep,sed,awk)三者的简称,熟练使用这三个工具可以提升运维效率。Linux 三剑客以正则表达式作为基础,而在Linux系统中,支持两种正则表达式,分别为“标准正则表达式”和“扩展正则表达式”。在掌握好正则表达式后,将具体讲解三剑客的用法
    的头像 发表于 04-15 10:22 561次阅读
    Linux中文本处理<b class='flag-5'>命令</b>的<b class='flag-5'>用法</b>

    树莓派新手必看!在树莓派上编写和运行 Shell 脚本!

    在本教程中,我将讨论Shell脚本的基础知识、它们的用途以及如何在RaspberryPi上编写和运行Shell脚本。什么是Shell脚本?Shell脚本可以让你自动化几乎所有在Linu
    的头像 发表于 03-25 09:28 895次阅读
    树莓派新手必看!在树莓派上编写和运行 <b class='flag-5'>Shell</b> 脚本!

    Linux系统中最重要的三个命令

    Linux三剑客是Linux系统中最重要的三个命令,它们以其强大的功能和广泛的应用场景而闻名。这三个工具的组合使用几乎可以完美应对Shell中的数据分析场景,因此被统称为Linux三剑客。
    的头像 发表于 03-03 10:37 805次阅读

    交换机常用配置命令

    在现代网络通信中,交换机作为局域网(LAN)的核心设备,其配置和管理对于网络的性能和稳定性至关重要。本文旨在深入探讨交换机的常用配置命令,从基本命令到高级配置,全面解析这些命令用法
    的头像 发表于 02-02 16:56 5286次阅读

    【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-灯闪

    便于调试修改动态性强资源利用灵活但实时性不足。 shell脚本是linux中壳层与命令行界面用户可以在shell脚本输入命令来执行各种各样的
    发表于 01-25 15:30

    常用linux命令

    使用command A | command B | command C命令,将A命令产生的标准输出作为B命令的标准输入(注意只能接收前一个命令的标准输出)。
    的头像 发表于 01-20 14:26 663次阅读