最干净的解决方法是通过重装系统,确保系统中没有任何恶意文件或后门。尤其是在无法完全确认病毒清除干净的情况下,重新安装是确保安全的最佳做法。
1、第一次出现问题解决后写脚本
第一次机器出现GSD挖矿进程排查思路和清理脚本,观察一星期后没有出现问题,没有重装系统,测试环境在使用,添加计划任务,每天凌晨执行脚本。过渡了段时间
1.1、清理病毒脚本参考
#!/bin/bash
# 定义需要扫描的可疑文件和进程名称
SUSPICIOUS_FILES=(
"/bin/gsd"
"/bin/crondr"
"/bin/bprofr"
"/etc/cron.d/pwnrig"
"/etc/cron.daily/pwnrig"
"/etc/cron.hourly/pwnrig"
"/etc/cron.monthly/pwnrig"
"/etc/cron.weekly/pwnrig"
)
SUSPICIOUS_SERVICES=(
"pwnrige"
)
# 检查并删除可疑文件
for file in "${SUSPICIOUS_FILES[@]}"; do
if [ -e "$file" ]; then
echo "发现可疑文件: $file,正在删除..."
sudo chattr -ia "$file" && sudo rm -f "$file"
fi
done
# 检查并禁用可疑 systemd 服务
for service in "${SUSPICIOUS_SERVICES[@]}"; do
if systemctl list-units --type=service | grep -q "$service"; then
echo "发现可疑服务: $service,正在禁用并删除..."
sudo systemctl stop "$service"
sudo systemctl disable "$service"
sudo rm -f "/etc/systemd/system/${service}.service"
sudo systemctl daemon-reload
fi
done
# 检查并清理计划任务中的可疑项
CRON_DIRS=(
"/etc/cron.d"
"/etc/cron.daily"
"/etc/cron.hourly"
"/etc/cron.monthly"
"/etc/cron.weekly"
)
for dir in "${CRON_DIRS[@]}"; do
if sudo grep -q "gsd" "$dir"/* 2>/dev/null; then
echo "发现计划任务中的可疑条目,在 $dir 中清理..."
sudo sed -i '/gsd/d' "$dir"/*
fi
done
# 检查环境变量中的可疑项
PROFILE_FILES=(
"/etc/profile"
"/etc/bashrc"
"$HOME/.bash_profile"
"$HOME/.bashrc"
)
for profile in "${PROFILE_FILES[@]}"; do
if grep -q "gsd" "$profile"; then
echo "发现环境变量中的可疑条目,在 $profile 中清理..."
sudo chattr -ia "$profile"
sudo sed -i '/gsd/d' "$profile"
fi
done
echo "恶意文件和进程检查完成。"
1.2、环境变量注意事项
第一次解决问题时,未能明确找到病毒被触发的具体位置。登录时系统反应特别缓慢,删除病毒进程后,虽然系统暂时恢复正常,但再次通过 SSH 登录时,病毒又被触发。经过排查,发现问题的根源在于环境变量配置文件(如 .profile)被篡改,导致每次登录成功后病毒进程会自动启动。进一步排查用户的环境配置文件时,发现这些文件中含有恶意脚本或命令,这些脚本会在每次用户登录时被触发,导致病毒进程重新启动。重点排查了登录脚本配置文件,特别是 /etc/profile、~/.bashrc、~/.bash_profile 等文件,这些文件存储了系统和用户的环境变量配置。
2、第二次出现gsd排查步骤
两个月后的今天,发现系统CPU负载异常升高,经排查发现 gsd 进程异常运行。尝试使用之前编写的脚本终止该进程,但未能成功。怀疑 gsd 进程未彻底清理,或者存在其他入侵手段,导致进程复发。以下是手动排查的步骤。
2.1、查看病毒使用系统文件和资源
用于查看与 gsd 相关的所有打开的文件和网络连接
lsof |grep gsd
查看父进程
ps -fp 969169
UID PID PPID C STIME TTY TIME CMD
root 969169 1 99 11:06 ? 01:58:11 gsd
通过查到本地监听端口,使用iptables禁用
ss -tnp | grep 21282
sudo iptables -A INPUT -p tcp --dport 21282 -j REJECT
sudo iptables -A OUTPUT -p tcp --sport 21282 -j REJECT
还是没有解决
2.2、查看gsd相关的文件删除
find / -name "*gsd*" -exec rm -f {} \;
2.3、检查计划任务
crontab -l
cat /etc/crontab
ls /etc/cron.d/
#清理全部计划,我这边没有发现新的计划任务
crontab -r
2.3、尝试收到kill进程
kill -9 969169
杀死后不到一分钟又启动一个进程
2.4、杀死进程后启动新进程(怀疑有系统服务)
查找源程序
ls -l /proc/973108/exe
2.5、查看指定进程的服务状态信息
systemctl status 973108
2.6、删除系统文件和禁止服务
# 查看服务状态,确认进程是否由 pwnrigl.service 启动
systemctl status 975493
# 取消屏蔽服务,允许对该服务进行管理
sudo systemctl unmask pwnrigl.service
# 移除文件的不可变属性,使其可以删除
chattr -ia /usr/lib/systemd/system/pwnrigl.service
# 停止 pwnrigl.service 服务,防止该进程继续运行
sudo systemctl stop pwnrigl.service
# 禁用 pwnrigl.service 服务,防止其在系统重启后自动启动
sudo systemctl disable pwnrigl.service
# 删除服务文件,彻底清除与 pwnrigl.service 相关的文件
sudo rm /usr/lib/systemd/system/pwnrigl.service
# 重新加载 systemd 配置,确保系统中不再存在该服务的引用
sudo systemctl daemon-reload
# 再次查看进程是否仍然运行,确认恶意进程是否被完全清除
lsof -p 975493
2.7、检查系统服务,查看没有出现
ls /etc/init.d/
systemctl list-units --type=service --all
3、总结
本次问题通过查找 gsd 进程使用的文件和系统服务,成功定位并停止了病毒的相关进程,从而解决了高 CPU 占用和进程复发的问题。然而,这次解决方案并未完全清除病毒,只是通过停止当前进程和禁用相关服务使其暂时无法再次启动。
主要步骤:
• 通过排查 gsd 进程相关的文件和服务,定位到恶意服务并对其进行停用。
• 清除了服务文件并停止了进程,确保暂时没有复发。
注意事项:
1. 未完全清除病毒:虽然目前没有发现 gsd 进程复发,但并未彻底删除病毒的所有痕迹。病毒可能通过其他手段或系统漏洞重新激活,因此不能保证完全解决问题。
2. 环境隔离:如果以后需要使用相似的环境,建议考虑重新安装并隔离系统与其他网络或服务器,避免恶意软件的传播或入侵。
3. 加强安全防护:确保系统的安全性,定期更新操作系统和应用程序,开启防火墙、实施权限控制、使用入侵检测等措施,以防止类似攻击再次发生。
病毒排查的过程不仅帮助解决了具体问题,还通过反复实践加深了对系统的理解,并巩固了基本操作技能。
开工大吉