处理挖矿程序最佳实践

更新时间:

服务器被挖矿病毒入侵后,挖矿病毒会消耗服务器的资源、降低生产效率、影响系统稳定性,对受感染的个人或企业用户构成严重的威胁。被入侵后,您需要及时响应并处理挖矿病毒,加固系统安全。本文介绍如何处理挖矿病毒。

挖矿程序的特征

  • 挖矿程序会占用CPU进行超频运算,导致CPU严重损耗,并且影响服务器上的其他应用。

  • 挖矿程序还具备蠕虫化特点,当安全边界被突破时,挖矿病毒会向内网渗透,并在被入侵的服务器上持久化驻留,以获取最大收益。

  • 挖矿程序具有联动作用,在清理过程中会存在处理不及时或清理不彻底导致挖矿病毒反复发生、出现恶意脚本替换系统命令的现象,从而导致执行系统命令时触发恶意脚本执行(例如:xorddos)。因此,您需要在挖矿程序的一个执行周期内,尽快将被入侵服务器上的木马程序和持续化后门清理干净,否则容易导致挖矿病毒频繁复发。

如何判断资产中是否存在挖矿威胁

在收到挖矿告警或处理完挖矿病毒后,您可以参考下面两种方法判断服务器中是否存在挖矿病毒。

  • 如果您服务器的CPU使用率明显升高,例如周期性或者长时间持续达到80%以上,并且出现未知进程持续向外发送网络包的情况,可以判定您的服务器中存在挖矿威胁。

  • 已安装云安全中心客户端的服务器被挖矿程序入侵时,云安全中心会向您发送告警短信或邮件,您可以在安全告警处理页面处理挖矿事件告警。挖矿程序如果关联了其他告警事件,例如矿池通信行为访问恶意域名等,建议您一并处理关联的告警事件。如何查看和处理关联告警,请参见查看安全告警

    挖矿告警

方案一:使用云安全中心处理挖矿程序

该方案中的步骤为建议您操作的顺序,这些操作可以从快速止血、深度查杀、全盘扫描的角度层层递进,以便全面地发现并处理风险。您也可以根据实际情况调整顺序或选择某些功能进行使用。

前提条件

步骤一:处置告警结束恶意进程

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

  1. 登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国全球(不含中国)

  2. 在左侧导航栏,选择检测响应 > 安全告警处理

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

    重要

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

    image

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

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

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

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

      云安全中心支持同时处理相同告警功能,如果需要批量处理相同规则或类型触发的告警,您可以选中同时处理相同告警

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

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

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

    计划任务

步骤二:深度查杀病毒

结束恶意进程的运行后,建议您使用云安全中心的病毒查杀功能扫描您的资产,扫描结果会显示在安全告警处理页面。病毒查杀功能可以扫描清理恶意文件的一些持久化行为,例如:自启动项、定时任务。具体操作,请参见病毒查杀。示例操作如下:

  1. 登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国全球(不含中国)

  2. 在左侧导航栏,选择防护配置 > 主机防护 > 病毒查杀

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

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

    扫描模式选择快速扫描扫描范围选择被挖矿程序攻击的服务器。

    image

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

  6. 告警处理面板,选择深度查杀,单击下一步

    系统开始处理告警。处理完成后,您可以查看处理结果和告警状态。

    image

步骤三:全盘扫描病毒

您可以使用云安全中心无代理检测功能,对云服务器ECS的系统盘和数据盘进行全面的安全检测。该功能仅支持检测,不支持修复;您需要根据风险详情页的说明,自行处理风险项。更多信息,请参见无代理检测

  1. 登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国全球(不含中国)

  2. 在左侧导航栏,选择防护配置 > 主机防护 > 无代理检测

  3. 无代理检测页面主机安全检测面板,单击创建检测任务

  4. 创建检测任务面板,选中要检测的主机,并单击下一步

  5. 选择扫描范围并设置快照/镜像保存时间,单击下一步

  6. 等待检测任务完成后,查看检测出的漏洞风险、基线检查、安全告警和敏感文件结果。

    建议您根据风险详情页的说明及时处理对应风险项。

    image

方案二:手动处理挖矿程序

挖矿程序为了最大程度获取利益,会存放大量的持久化后门,导致病毒难以清理或无法杀死。如果您在未购买云安全中心服务的情况下遇到挖矿病毒,可以采取如下措施排查和处理。

Linux系统

  1. 阻断恶意网络通信。

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

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

      netstat -antp

      image

    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文件,可以劫持常见的系统命令,例如top/ps/netstat等,达到隐藏挖矿进程的目的。

    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. 防修改对抗。

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

    image

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

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

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

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

        top -c

        image

        ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | more

        image

      • 排查异常网络连接行为。

        netstat -antp

        image

      • 获取可疑进程的文件路径。

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

        md5sum /proc/$PID/exe

        image

    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文件路径后,删除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. 初始化服务器的操作系统。具体操作,请参见重新初始化系统盘

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

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

方案三:购买应急响应服务

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

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

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

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

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

加固建议

开启恶意主机行为防御

针对无法及时清理服务器上残留的挖矿程序或清理不干净导致复发的情况,云安全中心提供的恶意主机行为防御功能可对挖矿程序进行精准拦截,从而在事前抑制挖矿事件的发生。更多信息,请参见主动防御

开启恶意主机行为防御的操作入口如下所示:

image

下图是被云安全中心自动拦截的挖矿程序告警详情页:

image

提升主机安全性

  • 重装系统:服务器被挖矿后,由于系统可能存在遗留的安全威胁,往往系统文件会被更改和替换,此时系统已经变得不可信,最好的方法就是重新安装系统;

  • 减少攻击暴露面:使用ECS安全组、SLB白名单、云防火墙等服务来限制非必要的服务端口暴露在外网,仅对必要的服务端口开放访问权限,并且只允许信任的IP地址进行访问;

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

  • 常见漏洞修复:关注安全漏洞情报,及时修复应用漏洞、应急漏洞和操作系统漏洞,部分原因是系统使用的应用程序软件版本较老,存在较多的漏洞没有修复,导致被入侵;

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

凭据的安全使用方案

凭据一旦发生泄露,会给云上资源和用户业务带来很大的安全隐患。建议您安全地使用凭据。更多信息,请参见凭据的安全使用方案

相关文档