ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux服务器挖矿病毒syst3md伪装rcu-sched进程的诊断与清除实战

2026/8/7 1:48:26 拓冰建站 浏览量
Linux服务器挖矿病毒syst3md伪装rcu-sched进程的诊断与清除实战 1. 项目概述当你的服务器突然“发烧”了最近在帮朋友排查一台线上服务器时遇到了一个相当典型的案例一台原本运行平稳的CentOS服务器CPU使用率毫无征兆地飙升到100%风扇狂转业务响应慢如蜗牛。登录系统一看top命令里赫然显示着一个名为rcu-sched的进程吃掉了绝大部分CPU资源。乍一看这似乎是Linux内核的一个正经调度进程但经验告诉我事情没这么简单。深入追查后果然在系统的阴暗角落里揪出了它的真身——一个伪装成rcu-sched的挖矿病毒而其母体正是臭名昭著的syst3md或变种systmd。这并非个例在近期的服务器安全事件中这种利用系统进程名进行伪装的挖矿木马呈现高发态势。简单来说syst3md是一个在Linux服务器上肆虐的挖矿病毒家族它会下载门罗币XMR矿工程序并释放一个名为rcu-sched的伪装进程来执行挖矿任务。这个rcu-sched与系统中真实的rcu-sched内核线程同名极具迷惑性旨在逃避管理员通过top或htop等常规监控手段的初步排查。它消耗大量CPU/GPU算力为攻击者“打工”直接导致服务器性能骤降、电费激增甚至可能成为攻击者进一步渗透内网的跳板。无论你是运维工程师、开发者还是拥有个人服务器的爱好者了解这套组合拳的来龙去脉和清除方法都是一项必备的生存技能。2. 入侵原因与攻击链深度剖析服务器不会无缘无故“中招”。syst3md及其伪装进程的入侵通常不是通过复杂的0day漏洞而是利用了那些被忽视的“薄弱环节”。理解攻击链是有效防御和根除的前提。2.1 最常见的入侵向量根据多个实际案例的复盘攻击路径通常清晰且可预测弱口令爆破SSH/RDP这是最主流、最“古老”也最有效的方式。攻击者使用自动化脚本对互联网上开放了22SSH或3389RDP端口的服务器进行字典爆破。如果你的root或具有sudo权限的用户密码是123456、admin、password或者与用户名相同那么几乎等同于“开门揖盗”。未修复的软件漏洞尽管syst3md本身不常利用高危漏洞传播但它经常作为后续载荷通过其他漏洞入侵的服务器被植入。例如未及时修补的Web应用漏洞如ThinkPHP、Struts2、Confluence的历史RCE漏洞、Redis未授权访问、Docker API未授权访问等。攻击者利用这些漏洞获得执行命令的权限后第一件事往往就是下载挖矿脚本。脆弱的第三方服务配置例如Jenkins、GitLab、Hadoop YARN等服务如果配置不当如默认密码、未授权API也可能成为攻击入口。供应链污染与恶意镜像从不可信的第三方源安装软件包或者使用来源不明的Docker镜像、虚拟机镜像。这些镜像可能已被预先植入了挖矿脚本一旦运行病毒便随之激活。实操心得在我处理的案例中超过70%源于SSH弱口令。攻击者的爆破脚本非常“智能”会尝试各种常见组合并在成功登录后立即清理登录日志如/var/log/secure或/var/log/auth.log试图抹除痕迹。因此仅查看近期日志可能一无所获。2.2syst3md的攻击执行链一旦攻击者获得shell权限一个高度自动化的攻击脚本便会执行。其典型流程如下下载与驻留首先通过wget或curl从远程CC服务器下载syst3md病毒本体可能是一个二进制文件或Shell脚本。该病毒会将自己复制到系统多个隐蔽目录如/tmp、/dev/shm、/var/tmp甚至/etc/cron.daily/等计划任务目录下并赋予可执行权限。进程伪装与持久化syst3md运行后会释放真正的挖矿程序通常是xmrig的变种和一个负责守护和伪装的脚本。这个脚本会创建一个名为rcu-sched的进程来运行挖矿程序。同时它会通过多种方式实现持久化Crontab在/var/spool/cron/或/etc/cron.d/下添加定时任务每分钟或每几分钟检查一次挖矿进程是否存在若不存在则重新拉起。Systemd Service更高阶的变种会创建自定义的systemd服务如systemd-timesyncd.service的仿冒品确保开机自启。LD_PRELOAD劫持通过修改/etc/ld.so.preload文件注入恶意动态库实现进程隐藏和守护。清理痕迹与对抗病毒会尝试停止或卸载安全监控软件如阿里云安骑士、腾讯云镜、selinux、iptables等删除或覆盖系统日志并可能杀死其他竞争对手的挖矿进程独占系统资源。开始挖矿伪装好的rcu-sched进程开始全速运行连接到攻击者控制的矿池消耗CPU/GPU算力。3. 症状诊断如何发现隐藏的“矿工”一个熟练的攻击者会尽力让病毒“低调”。因此不能仅凭感觉。你需要通过一系列组合命令来发现蛛丝马迹。3.1 初级排查资源与进程异常CPU使用率异常使用top或htop命令观察是否有单个进程长期占用接近100%或非常高的CPU。关键点注意那个rcu-sched。正常的rcu-sched是内核线程其PID通常很小前几百且USER列为root。而病毒伪装的rcu-sched其PID往往较大USER可能是root也可能是其他普通用户。系统负载Load Average飙升使用uptime或w命令查看。如果1分钟、5分钟、15分钟负载值持续远高于CPU核心数例如4核CPU负载长期在10以上这是非常强烈的异常信号。网络连接异常使用netstat -antp或ss -antp命令查看是否存在到陌生IP地址尤其是知名矿池IP如pool.minexmr.com,xmr.pool.minergate.com等的持续TCP连接。挖矿进程需要与矿池保持长连接。3.2 中级排查进程与文件系统深挖当发现可疑的rcu-sched进程后需要进一步验证检查进程路径# 假设可疑PID是 12345 ls -la /proc/12345/exe正常的rcu-sched内核线程其exe链接会指向/usr/lib/debug/lib/modules/...或显示为(deleted)。而病毒进程的exe通常会指向/tmp、/dev/shm下的某个可执行文件例如/tmp/.X11-unix/.rsync/rcu-sched。检查进程的父进程pstree -p 12345 # 或 cat /proc/12345/status | grep PPid病毒的守护进程可能是syst3md或其他脚本会作为其父进程。如果父进程是一个奇怪的脚本或已终止变成init进程收养都值得怀疑。查找可疑文件# 查找近期被修改的可执行文件 find / -type f -name *syst3md* -o -name *systmd* -o -name *rcu-sched* 2/dev/null # 查找/tmp, /dev/shm, /var/tmp目录下的可疑文件 find /tmp /dev/shm /var/tmp -type f -exec file {} \; | grep -i elf # 查找包含矿池地址的文件 grep -r pool.minexmr.com\|xmr.pool.minergate.com\|minexmr.com /etc /tmp /var /root 2/dev/null3.3 高级排查计划任务与系统服务病毒为了持久化必然会留下后门。检查Crontab# 检查系统级计划任务 ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ etc/cron.monthly/ cat /etc/crontab # 检查所有用户的crontab for user in $(cut -f1 -d: /etc/passwd); do echo $user ; crontab -l -u $user 2/dev/null; done重点关注那些每分钟运行一次、指向/tmp或/dev/shm的脚本任务。检查Systemd服务# 查看所有自定义或异常的服务 systemctl list-unit-files --typeservice | grep -vE systemd|dbus|NetworkManager # 查看某个可疑服务的详细信息 systemctl status suspicious-service-name # 查看服务文件内容 cat /etc/systemd/system/suspicious-service-name.service注意那些文件名与系统服务相似但略有不同的服务例如systemd-timesyncd.servicevssystemd-timesync.service。检查LD_PRELOAD劫持cat /etc/ld.so.preload如果这个文件非空且包含你不认识的.so库路径如/usr/local/lib/libprocesshider.so那极有可能已被劫持。这个库会隐藏病毒进程使其在ps、top中不可见。4. 彻底清除解决方案手动清除实战指南发现病毒后切忌直接kill进程了事。必须遵循“断网-清除进程-清除文件-清除持久化-修复漏洞”的流程进行根治。4.1 第一步隔离与断网可选但推荐如果业务允许第一时间将服务器从网络隔离防止病毒继续与矿池通信或横向扩散。# 临时禁用网络根据实际情况选择 systemctl stop network # 或使用iptables阻断所有出站谨慎操作 iptables -P OUTPUT DROP注意如果服务器是远程管理执行此操作会导致你断开连接。通常对于有经验的运维可以在不彻底断网的情况下通过防火墙精准屏蔽矿池IP。4.2 第二步终止恶意进程首先找到并杀死所有相关的挖矿和守护进程。找到伪装进程# 查找高CPU占用的rcu-sched ps aux | grep -i rcu-sched | grep -v grep # 查找syst3md相关进程 ps aux | grep -i syst3md\|systmd | grep -v grep # 查找常见的矿机进程名 ps aux | grep -E (xmrig|minerd|cpuminer|java.*-cp) | grep -v grep杀死进程使用kill -9 PID强制终止。但要注意如果持久化机制如cron还在几分钟后进程又会复活。因此杀进程需要和后续的清理工作紧密衔接。kill -9 挖矿进程PID 守护进程PID4.3 第三步清理恶意文件根据前面排查找到的文件路径彻底删除。# 删除找到的病毒本体、挖矿程序和配置文件 rm -f /tmp/.X11-unix/.rsync/rcu-sched rm -f /dev/shm/syst3md rm -f /var/tmp/.systemd-private-*.sh # 删除可能存在的下载脚本 rm -f /tmp/kworkerds /tmp/config.json # 使用find命令再次确认并批量删除谨慎核对路径 find / -name *syst3md* -o -name *systmd* -exec rm -vf {} \; 2/dev/null注意事项在删除前可以考虑将可疑文件备份到隔离位置如/root/malware_backup/以供后续分析。使用rm -vf中的-v参数可以显示删除过程避免误删。4.4 第四步清除持久化后门这是最关键的一步否则前功尽弃。清理Crontab# 编辑root的crontab crontab -e # 在打开的编辑器中删除所有不认识的可疑任务行尤其是那些调用/tmp、/dev/shm下脚本的行。 # 清理系统cron目录 rm -f /etc/cron.d/0systemd /etc/cron.d/apache2 /etc/cron.d/sysstat # 示例删除你发现的具体可疑文件 # 检查并清理/etc/cron.hourly/daily/weekly/monthly/下的可疑脚本清理Systemd服务# 停止并禁用可疑服务 systemctl stop malicious-service-name systemctl disable malicious-service-name # 删除服务文件 rm -f /etc/systemd/system/malicious-service-name.service rm -f /usr/lib/systemd/system/malicious-service-name.service # 重载systemd配置 systemctl daemon-reload清理LD_PRELOAD劫持# 清空或恢复/etc/ld.so.preload文件 echo /etc/ld.so.preload # 或者如果之前有备份则恢复备份 # cp /etc/ld.so.preload.bak /etc/ld.so.preload检查其他自启动项# 检查rc.local cat /etc/rc.local # 检查profile.d ls -la /etc/profile.d/ # 检查bashrc等 grep -r sh\|wget\|curl /root/.bashrc /home/*/.bashrc 2/dev/null | grep -v ^#4.5 第五步修复安全漏洞清除病毒是治标修补漏洞才是治本。立即修改所有用户密码尤其是root和具有sudo权限的用户使用高强度密码长度大于12位包含大小写字母、数字、特殊字符。passwd root # 为其他用户修改密码检查并修复SSH配置禁止root直接登录编辑/etc/ssh/sshd_config设置PermitRootLogin no。使用密钥登录禁用密码登录设置PasswordAuthentication no。更改SSH端口修改Port为非22端口。使用Fail2ban安装并配置fail2ban自动封锁多次登录失败的IP。# 修改配置后重启ssh服务 systemctl restart sshd更新系统和软件运行系统更新修补已知漏洞。# CentOS/RHEL yum update -y # Ubuntu/Debian apt update apt upgrade -y审计开放端口与服务使用netstat -tlnp或ss -tlnp关闭所有非必要的端口和服务。考虑安装主机安全防护软件如云厂商提供的安骑士、云镜或开源的Wazuh、OSSEC等进行持续的入侵检测。5. 高级排查与对抗技巧实录在实战中病毒可能会采用更隐蔽的手段。下面分享一些进阶的排查技巧和踩过的坑。5.1 当进程被隐藏时使用不可信工具如果病毒通过LD_PRELOAD或修改内核模块的方式隐藏了进程常规的ps、top可能看不到。这时需要使用静态编译的、不受动态库劫持影响的工具或者直接读取内核信息。使用busyboxbusybox是一个集成了许多Unix工具的静态二进制文件。从官方下载静态编译版本用它来执行ps、ls等命令。wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64 chmod x busybox-x86_64 ./busybox-x86_64 ps aux直接查看/proc文件系统/proc是内核提供的进程信息接口难以被完全隐藏。# 查看所有数字命名的目录每个目录对应一个进程PID ls -la /proc | grep ^d.*[0-9] # 进入可疑PID目录查看exe链接和cmdline cat /proc/PID/cmdline ls -la /proc/PID/exe使用unhide工具这是一款专门用于发现隐藏进程和端口的工具。yum install epel-release -y yum install unhide -y # CentOS apt install unhide -y # Ubuntu unhide -r # 快速扫描 unhide proc # 详细进程扫描5.2 网络流量分析与矿池IP屏蔽即使清除了本地进程如果持久化脚本还在它可能会重新下载病毒。通过分析网络连接和屏蔽矿池IP可以阻断其“生命线”。使用iftop或nethogs定位高流量进程这两个工具可以实时查看每个进程的网络带宽使用情况有助于发现正在通信的挖矿进程。屏蔽已知矿池IP和域名通过iptables或hosts文件屏蔽。# 使用iptables屏蔽IP示例 iptables -A OUTPUT -d 45.9.148.0/24 -j DROP # 假设这是某个矿池的IP段 iptables -A OUTPUT -d 另一个矿池IP -j DROP # 保存iptables规则 service iptables save # CentOS 6 iptables-save /etc/sysconfig/iptables # CentOS 7# 使用hosts文件屏蔽域名 echo 0.0.0.0 pool.minexmr.com /etc/hosts echo 0.0.0.0 xmr.pool.minergate.com /etc/hosts注意矿池IP和域名经常更换此方法需要持续维护列表。5.3 文件系统完整性检查与监控病毒可能篡改系统关键文件。使用文件完整性检查工具如AIDE建立一个基准之后定期扫描对比。# 安装AIDE yum install aide -y # 初始化数据库在系统干净时做 aide --init mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz # 定期检查 aide --check如果发现/bin/ps、/bin/netstat等系统工具被篡改应立即从干净的系统介质中恢复。5.4 一个完整的清理脚本示例谨慎使用对于有经验的管理员可以编写一个清理脚本但务必在理解每一行命令的基础上并根据实际情况修改。#!/bin/bash # cleanup_miner.sh - 用于清理syst3md/rcu-sched挖矿病毒的示例脚本 # 警告请在测试环境验证或在生产环境谨慎逐条执行避免误删。 echo [1/5] 停止可疑进程... pkill -f rcu-sched pkill -f syst3md pkill -f systmd pkill -f xmrig pkill -f minerd echo [2/5] 清理临时目录可疑文件... rm -rf /tmp/.X11-unix/ rm -rf /dev/shm/.systemd-private-* rm -rf /var/tmp/.systemd-private-* find /tmp /dev/shm /var/tmp -type f -name *systemd* -o -name *rsync* -o -name *kworker* -exec rm -vf {} \; 2/dev/null echo [3/5] 清理持久化任务... # 清理cron sed -i /systemd/d /etc/crontab 2/dev/null sed -i /rsync/d /etc/crontab 2/dev/null rm -f /etc/cron.d/0systemd /etc/cron.d/apache2 2/dev/null crontab -l | grep -v -E systemd|rsync|kworker | crontab - echo [4/5] 清理LD_PRELOAD... echo /etc/ld.so.preload echo [5/5] 检查并清理systemd服务... systemctl list-unit-files --typeservice | grep -E (systemd-timesync|apache2|rsync) | awk {print $1} | while read svc; do systemctl stop $svc 2/dev/null systemctl disable $svc 2/dev/null rm -f /etc/systemd/system/$svc.service /usr/lib/systemd/system/$svc.service 2/dev/null done systemctl daemon-reload echo 基础清理完成。请务必手动检查 echo 1. 使用 top 或 htop 确认CPU使用率已恢复正常。 echo 2. 使用 netstat -antp 检查是否有异常外连。 echo 3. 根据第4.5节的建议修复安全漏洞。6. 防御体系建设如何让服务器“百毒不侵”清除病毒是一次痛苦的经历更重要的是建立常态化的防御体系防患于未然。6.1 基础安全加固必须做SSH加固密钥登录禁用密码登录强制使用SSH密钥对。改端口将默认22端口改为一个高位端口。限IP通过iptables或云安全组只允许可信IP地址访问SSH端口。使用Fail2ban自动封锁暴力破解的IP。最小权限原则为应用程序创建专用低权限用户运行避免一切皆用root。使用sudo精细分配权限而非直接给予root密码。定期更新建立操作系统和关键软件如Web服务器、数据库、运行环境的定期更新机制。关闭无用端口与服务使用systemctl disable关闭所有不需要开机启动的服务。6.2 主动监控与告警资源监控部署监控系统如Prometheus Grafana, Zabbix对CPU使用率、系统负载、网络流量设置告警阈值例如CPU持续5分钟90%则告警。进程与文件监控使用Auditd或Osquery监控敏感目录如/tmp,/etc/cron.d,/etc/systemd/system的文件创建、修改和删除事件。日志集中与分析将系统日志/var/log/secure,/var/log/messages、应用日志统一收集到ELK或Graylog等平台便于关联分析和溯源。6.3 入侵检测与响应部署HIDS安装主机入侵检测系统如Wazuh。它可以监控文件完整性、异常进程行为、rootkit检测等并可与OSSEC规则联动自动发现syst3md、xmrig等恶意软件的指纹。定期安全扫描使用ClamAV等工具进行定期的恶意文件扫描。虽然对新型变种可能不敏感但可以防范一部分已知威胁。制定应急预案提前准备好隔离网络、排查步骤、清理脚本和恢复流程。这样在真正出事时才能不慌乱。6.4 云环境下的特别注意事项如果你使用的是阿里云、腾讯云等云服务器启用云盾/云镜务必开启云厂商提供的免费主机安全服务。它们通常具备更强的恶意文件查杀、漏洞扫描和入侵检测能力并能拦截常见的爆破攻击。善用安全组安全组是虚拟防火墙比iptables更前置。严格遵循“最小开放原则”除了必要的业务端口其他一律关闭。尤其注意切勿将SSH22端口对0.0.0.0/0开放。使用密钥对创建实例时直接使用SSH密钥对并妥善保管私钥。快照与镜像在系统配置完好、安全加固后创建一个干净的系统镜像或快照。一旦中招可以快速回滚到干净状态比手动清理更彻底、更快速。服务器安全是一场持久战没有一劳永逸的银弹。syst3md和rcu-sched这类病毒之所以能反复得手往往是因为最基本的安全措施没有到位。从设置一个强密码、改变默认端口开始逐步构建起监控、检测、响应的完整防线才能让你的服务器在充满威胁的网络中安稳运行。每次安全事件都是一次宝贵的教训清理完之后花点时间复盘根源加固短板这才是应对之道。