跳至主要內容

服务器挖矿病毒处理指南

fanfan...大约 8 分钟技术分享技术分享

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

0. 前言

最近公司服务器突然 cpu 的占用变成 99% 经过排查发现是一个挖矿程序入侵 服务器的 /tmp 文件夹进行持续性的挖矿 此贴根据阿里云相关文档和自己实践整理出

找到的挖矿进程

0499df1640b55903adee5b83e790bd4c
0499df1640b55903adee5b83e790bd4c

1. Linux系统

  1. 阻断恶意网络通信。

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

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

      netstat -antp
      
      image
      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
    image

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

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

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

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

        top -c
        
        image
        image
        ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | more
        
        image
        image
      • 排查异常网络连接行为。

        netstat -antp
        
        image
        image
      • 获取可疑进程的文件路径。

        ls -al /proc/$PID/exe
        
  9. 执行以下命令,终止挖矿进程,并清理挖矿文件。

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

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

1. 伪装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
      

2. 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

3. 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

4. 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
    

5. 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文件。

3. 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
    
上次编辑于:
贡献者: fanfan
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8
Off