云服务器遭到黑客入侵植入木马病毒排查过程

· 浏览次数 : 15

小编点评

**conf.json文件解析** 该配置文件定义了服务器的配置参数,包括矿池及端口等信息。通过 IP 地址查询软件查看该 IP 地址所在的地区,发现该 IP 地址在韩国。虽然 IP 地址本身可能是全球 IP 地址,但由于该区域被韩国管辖,因此该 IP 地址被认为是位于韩国。 **病毒入侵的原因** 由于服务器开放了一些固定端口号,导致了病毒入侵。在部署中间件之前,最好确保所有中间件的端口号非固定,或者在部署过程中使用自定义端口号。同时,应该避免在公网上暴漏任何端口号。 **其他建议** * 在项目开发过程中,需要关注服务器的安全配置,并采取措施防止病毒入侵。 * 在部署中间件之前,应该仔细检查中间件的配置参数,确保所有端口号都是非固定或自定义的。 * 在运行服务器时,应该关闭不必要的服务和端口,以减少可攻击性。 * 使用安全软件,如防火墙和入侵检测系统,来保护服务器免受病毒攻击。 * 定期进行服务器审计,检查服务器是否存在漏洞,并及时修复。

正文

1、问题说明

在一个安静的下午,突然手机上面接收到云服务器厂商发的一条短信。短信内容为服务器疑似被木马病毒入侵,监测到病毒文件。然后我就使用FinalShell登录服务器准备进去看一看,刚登陆进去FinalShell左边监控程序显示cpu占用100%。服务器正常来说cpu只会在3%~9%之间,突然这个CPU占用率这么高,我就知道服务器真的被黑客入侵了。

2、排查过程

发现被入侵之后,首先需要做的就是查看系统中哪一个程序占用的cpu较高。所以需要通过Linux的 top 命令进行查看。

top -c

输入上面命令,发现第一行的程序文件运行cpu占用特别大

通过上面可以清楚看到程序的运行目录,然后我发现这个程序文件是我没有见过的,也就是说我的服务器遭到黑客入侵后他在 /tmp/.local/.-/ 目录里面给我植入了病毒脚本文件。然后我就进入 /tmp 目录下面查看

通过 ls 命令查看,目录中没有发现上面那个 .local 文件。这里就要注意了,在Linux中创建一个新的文件夹,并在文件夹的名称前面加上一个点(.),例如前面的 ".local"。这样该文件夹就会被视为隐藏文件夹了,所以我们要使用 ls -a 命令把隐藏文件也查看出来。重新输入命令:

ls -la

通过执行上面命令就可以发现 .local 文件夹了,然后就一鼓作气直接进入存放文件的目录。

进入之后发现有两个文件,通过名字可以看出应该一个是运行程序,另一个是配置文件。查看一下文件大小:

发现是一个大小在6.7兆的程序文件和一个几KB的配置文件,先把文件下载到本地。下载下来后我们后面在查看文件内容。目前我们首先需要把cpu占用率降下来确保服务器可以正常运行。

3、处理

通过问题排查我们已经找到了黑客存放在服务器里面的病毒文件了。接下来就可以直接把 .local 文件目录删除掉,通过删除命令进行删除:

rm -rf /tmp/.local

执行命令后,再次查看 /tmp 目录。发现文件已经别删除了。

删除之后,然后在杀死该程序的运行进程。执行命令:

kill -9 30737  #30737 PID 使用top -c 命令可以查看

杀死进程后,通过 top 命令再次查看下是否还有cpu占用高的进程。

可以发现cpu占用率都不高,已经降下来了。这就说明病毒已经被处理掉了。然后在通过FinalShell左边查看CPU占用率一直稳定在 4%~6%之间。

通过上面的处理服务器已经可以正常访问了。最后还需要检查一下linux的定时任务配置信息看看黑客是否修改了定时任务脚本让程序周期性的下载病毒文件。通过 crontab 查看配置信息:

crontab -l

如果输出内容为空,说明黑客没有新增新的定时任务。下面输出的是云服务器自带的安全监控工具,没有影响。

4、门罗币

通过上面的排查和处理病毒已经被清理干净了。接下来来看看下载到本地的病毒文件java程序和conf.json文件。java程序是经过加密过的所以看不到植入的程序内容,但是conf.json配置文件没有经过加密,是以明文方式显示的。内容如下:

{
    "api": {
        "id": null,
        "worker-id": null
    },
    "http": {
        "enabled": false,
        "host": "127.0.0.1",
        "port": 0,
        "access-token": null,
        "restricted": true
    },
    "autosave": true,
    "background": true,
    "colors": true,
    "title": true,
    "randomx": {
        "init": -1,
        "init-avx2": -1,
        "mode": "auto",
        "1gb-pages": false,
        "rdmsr": true,
        "wrmsr": true,
        "cache_qos": false,
        "numa": true,
        "scratchpad_prefetch_mode": 1
    },
    "cpu": {
        "enabled": true,
        "huge-pages": true,
        "huge-pages-jit": false,
        "hw-aes": null,
        "priority": null,
        "memory-pool": false,
        "yield": true,
        "asm": true,
        "argon2-impl": null,
        "argon2": [0, 1],
        "cn": [
            [1, 0],
            [1, 1]
        ],
        "cn-heavy": [
            [1, 0],
            [1, 1]
        ],
        "cn-lite": [
            [1, 0],
            [1, 1]
        ],
        "cn-pico": [
            [2, 0],
            [2, 1]
        ],
        "cn/upx2": [
            [2, 0],
            [2, 1]
        ],
        "ghostrider": [
            [8, 0],
            [8, 1]
        ],
        "rx": [0, 1],
        "rx/wow": [0, 1],
        "cn-lite/0": false,
        "cn/0": false,
        "rx/arq": "rx/wow",
        "rx/keva": "rx/wow"
    },
    "log-file": null,
    "donate-level": 1,
    "donate-over-proxy": 1,
    "pools": [
        {
            "algo": null,
            "coin": null,
            "url": "3.34.130.68:8080",
            "user": null,
            "pass": null,
            "rig-id": "proxied-miner",
            "nicehash": false,
            "keepalive": false,
            "enabled": true,
            "tls": false,
            "sni": false,
            "tls-fingerprint": null,
            "daemon": false,
            "socks5": null,
            "self-select": null,
            "submit-to-origin": false
        }
    ],
    "retries": 5,
    "retry-pause": 5,
    "print-time": 60,
    "dmi": true,
    "syslog": false,
    "tls": {
        "enabled": false,
        "protocols": null,
        "cert": null,
        "cert_key": null,
        "ciphers": null,
        "ciphersuites": null,
        "dhparam": null
    },
    "dns": {
        "ipv6": false,
        "ttl": 30
    },
    "user-agent": null,
    "verbose": 0,
    "watch": true,
    "pause-on-battery": false,
    "pause-on-active": false
}

虽然说配置内容是明文的json格式,但是我也看不懂什么意思。然后就随便找几个字段值通过百度搜索了一下,然后就发现了一个新的知识盲区 " 门罗币-XMR ":

通过搜索发现这个病毒是一个挖矿脚本,服务器竟然被别人挖矿了... 然后就找到了一篇关于门罗币挖矿脚本的说明是B站上一个UP主写的。

以防万一后面找不到,把配置说明写到下面,原文访问地址连接:https://www.bilibili.com/read/cv8021937/

{
    "api": {                       //请注意json是数据文件,如果没必要只填地址和矿池端口就可以了。  //双斜杠是注释。
        "id": null,                //Windows可用管理员模式开启挖矿软件,算力会有一定程度上的提升。
        "worker-id": null          // 本人为门罗技术爱好者,希望可以和大家共同进步。
    },
    "http": {
        "enabled": false, //启用hhtp与否
        "host": "127.0.0.1",
        "port": 0,  //端口
        "access-token": null, //访问令牌
        "restricted": true  //受限制
    },
    "autosave": true, //自动保存
    "background": false,  //挖矿是可以选择是否隐藏窗口
    "colors": true, //颜色
    "title": true, //标题
    "randomx": {
        "init": -1,  //初始化
        "mode": "auto", //模式自动
        "1gb-pages": true, //1g大页面
        "rdmsr": true, //读寄存器
        "wrmsr": true, //写寄存器
        "cache_qos": false,  //缓存
        "numa": true,
        "scratchpad_prefetch_mode": 1  //草稿行预取模式
    },
    "cpu": {
        "enabled": true, //开启CPU与否
        "huge-pages": true, //大页面
        "hw-aes": null,
        "priority": null, //优先级
        "memory-pool": true, //内存池
        "yield": true, //返回数值
        "asm": true,  
        "argon2-impl": null, //密钥导出函数
        "astrobwt-max-size": 550,  //strobwt算法最大值
        "astrobwt-avx2": false,   //高级矢量扩展集
        "rx/keva": "rx/wow"
    },
    "opencl": {       //opencl和cuda都是显卡挖矿,显卡挖门罗不划算,显卡建议挖以太币
        "enabled": false,   //启用显卡与否
        "cache": true,
        "loader": null,
        "platform": "AMD",   //AMD平台
        "adl": true,
        "cn/0": false,
        "cn-lite/0": false
    },
    "cuda": {
        "enabled": false, //启用显卡与否
        "loader": null,
        "nvml": true,   //英伟达平台
        "cn/0": false,
        "cn-lite/0": false
    },
    "donate-level": 0,   //捐赠等级
    "donate-over-proxy": 0, //委托捐赠
    "log-file": null,   //日志文件
    "pools": [    //矿池
        {
            "algo": null,   //算法
            "coin": null,   //币种
            "url": "mine.c3pool.com:13333",   //矿池及端口
            "user": "8B5mvT1wDJXQK8o9gL1NABd1AyCpK7fZ6bpAADjG6ZqMKTuJ4q44JZSPyPZzcoXohXcXGDVUsY2LU8w7Tt6AwAjt83Y1HFe",  //自己钱包地址
            "pass": "4710~rx/0", //挖矿机器名字  ~rx/0为固定门罗算法挖矿  ~之前是机器名字,之后是币种算法
            "rig-id": null,
            "nicehash": false,
            "keepalive": false,  //保持在线
            "enabled": true, 
            "tls": false,   //传输层安全
            "tls-fingerprint": null,  //传输层安全指纹
            "daemon": false,
            "socks5": null,   //代理
            "self-select": null    //自选项
        }
    ],
    "print-time": 60,  //60秒显示一次在cmd里面
    "health-print-time": 60, //正常显示算力
    "retries": 5,   //重试
    "retry-pause": 5,  //重试暂停
    "syslog": false,  //系统日志  
    "tls": {      //传输层安全
        "enabled": false,  //启用传输层安全与否
        "protocols": null, //协议
        "cert": null,      //证书
        "cert_key": null,  //证书密钥
        "ciphers": null,   //密码
        "ciphersuites": null,  //密码套件
        "dhparam": null    //密钥交换
    },
    "user-agent": null,    //用户代理
    "algo-perf": {    //各个币种算法的算力大小
    },
    "pause-on-battery": false   //使用电池时是否暂停
} 

然后我们根据脚本说明来看上面的conf.json文件。然后就发现了矿池及端口:

通过使用IP查询软件我们查看下IP地址所在地区,然后发现:

通过上图可以看到这个IP地址在韩国,虽说知道了IP地址。但是...然后呢,然后就没有然后了,到这里病毒排查过程就结束了。

5、总结

希望上面的内容对大家有所帮助,通过遇到的这个问题,让我也得到反思。以后在项目开发的同时也需要去关注如何增加服务器的安全性,以防止这些病毒的再次入侵。这次之所以让病毒入侵我觉得很大的可能是服务器开放了一些比较固定的一些中间件和软件端口号导致的。所以我们在部署中间件的时候最好要改一下中间件启动的默认端口号,或者不把任何端口号暴漏在公网下面。

公众号文章链接: https://mp.weixin.qq.com/s/vNXjss5-iobQB15WvMHCoA

与云服务器遭到黑客入侵植入木马病毒排查过程相似的内容:

云服务器遭到黑客入侵植入木马病毒排查过程

1、问题说明 在一个安静的下午,突然手机上面接收到云服务器厂商发的一条短信。短信内容为服务器疑似被木马病毒入侵,监测到病毒文件。然后我就使用FinalShell登录服务器准备进去看一看,刚登陆进去FinalShell左边监控程序显示cpu占用100%。服务器正常来说cpu只会在3%~9%之间,突然这

你的智能汽车正在窥视你!

2021年8月,蔚来部分用户数据被窃取,并遭到勒索225万美元等额比特币; 2022年5月,通用汽车表示部分在线客户账户出现异常登录; 2023年5月,丰田云服务导致215万日本用户车辆数据承担泄露风险; 2024年4月,高合汽车因车内摄像头拍摄的不雅影像泄露而备受关注; …… 近些年,随着“智能汽

云服务器从阿里云迁移到华为云,FTP服务器的一些设置处理

由于一些特殊原因,计划从阿里云上把ECS服务器的相关资源资源迁移到华为云上,为了保险起见,先申请一个月的华为云ECS服务器进行测试,首先就是搭建FTP服务器进行文件的上传处理,在使用FileZilla Server搭建服务器的时候,出现一些设置上的问题,爬坑了一小段时间才顺利跳出,顺便总结分享一下。...

云服务器配置VPN访问github等

云服务器配置VPN访问github等 使用华为云服务器器默认无法访问外网,我使用 ikuuu IKUUU VPN,通过他访问外网。 我本地使用windows系统,Tabby终端。 Tabby终端配置云服务器ssh连接,点击setting→Profiles & connections → New pr

云服务器构件过程笔记(潦草)

华为云上买的服务器, 很多都是凭借记忆写的, 大部分流程都有 由于都是第一次办理, 所以记录一下 - 华为云购买服务器, 我买的是`云耀云服务器 HECS` - 之后会有教程给服务器初始化(设置系统, 设置密码之类的), 完成后就可以正常ssh和sftp连接了 - 购买域名, 我也是在华为云上购买的

个人和初创企业想要搭建网站,如何挑选一台便宜合适的云主机?

一台云服务器,除了域名备案外,可以做很多事情,个人可以使用云服务器部署个人博客系统、论坛系统、私人网盘,部署各种后端服务,企业主要用来网站建设,适用于社区网站、企业官网、门户网站、电子商务网站、游戏类等各种应用,还可以用来数据库应用、制图渲染等等。 个人搭建博客、小型网站的话,1核2G配置即可。对于

在阿里云和腾讯云的轻量应用服务器上搭建Hadoop集群

引入 本文在两台2核2g的云服务器上搭建了Hadoop集群,两台云服务器分别是阿里云(hjm)和腾讯云(gyt),集群部署规划如下: hjm gyt HDFS NameNode\SecondaryNameNode\DataNode DataNode YARN ResourceManager\Node

利用云服务提供商的免费证书,在服务器上发布https前端应用和WebAPI的应用

我们如果要在服务器上发布https前端应用和WebAPI的应用,那么我们就需要用到https证书了。我们一般发布的应用的云服务器上,都会提供一定量的相关的免费证书(一般为20个)供我们使用,每个一年期限,到期再续即可,一般情况下基本上满足要求了,本篇随笔介绍如何基于云服务提供商的免费证书,在服务器上发布Nginx的前端应用和基于IIS的Web API接口的https应用处理。

如何建设一个用于编译 iOS App 的 macOS 云服务器集群?

现代软件开发一般会借助 CI/CD 来提升代码质量、加快发版速度、自动化重复的事情,iOS App 只能在 mac 机器上编译,CI/CD 工具因此需要有一个 macOS 云服务器集群来执行 iOS App 的编译。今天就来谈谈如何建设 macOS 云服务器集群

利用Docker、云服务器、mongodb搭建自己的测试平台

准备一个云服务器 购买一个云服务器,在阿里云,腾讯云上购买即可。 然后创建一个实例,安装Linux操作系统,我安装的是CentOS。 记住账号和密码,可以使用ssh远程登录即可。 搭建测试环境 Docker是一个轻量级的虚拟机,可以使用Docker下载一个Docker里面包含你想要的环境的镜像 比如