0x01 研究背景
最近在研究企业服务器集群安全的时候,发现针对企业服务器集群的僵尸网络攻击明显增加,并且呈现出一个很强的趋势。
僵尸网络(Botnet),是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序),从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
针对服务器的Botnet植入,大多都是通过“抓肉鸡”(简单的说就是利用对方电脑漏洞进行入侵,或者木马病毒种植,然后随便控制对方计算机,为所欲为,比如文件的删除,篡改破坏等,在这里的话,抓肉鸡的主要目的其实还是为了去植入Botnet病毒,并且激活)的形式来组件僵尸网络。组成的僵尸网络可以用来当做二级服务器进行病毒样本的散播,也可以用来进行一些DDoS攻击、CC攻击等一些需要大量服务器进行的大规模分布式攻击,影响很大,如下图就是服务器遭受elknot DDoS病毒攻击的异常流量。
图1:异常的UDP流量
这台受害的主机遭受了来自国外肉鸡的DDoS UDP攻击,流量峰值可以达到3000mbps以上,可见影响非常大。
0x02 攻击原理
前面提到攻击者通过抓肉鸡的方式来获取服务器,这些肉鸡服务器大多数都是带有大量安全隐患的服务器,比如一下几种服务器:
- 使用不安全的服务器软件(如包含Struts安全漏洞的JBoss服务器软件)
- 没有及时安装最新安全更新的操作系统(如使用WinServer2003等老旧的系统)
- 系统本身存在可以提权或者直接为最高权限的弱密码账户
- 连接外网的蜜罐服务器(大多为弱口令)
- 可以获取到系统权限的漏洞、0day漏洞(如Redis Crackit)
这些都会被从事黑产工作的不法分子当做肉鸡被抓获。用来组建大规模分布式的Botnet肉鸡网络。
抓取完肉鸡后,攻击者一般会对其执行植入病毒的操作,并且激活病毒,激活病毒包括两种方式:
(1) 手动激活:在使用wget等命令从病毒分发服务器上下载病毒后,提权后执行病毒文件。在执行病毒操作前,一般会关闭一些安全相关的软件,比如iptables、ufw等防火墙软件,例如使用service iptables stop、SuSEfirewall2 stop这些命令来关闭防火墙。
图2:某肉鸡的操作日志
(2) 被动激活:同手动激活的方式类似,先将服务器上安全相关的软件关闭后wget病毒样本,然后将病毒文件写入/etc/init.d或者/boot等自启动的目录,然后当受害者重新启动的时候,病毒脚本自动启动。攻击者一般会选择以下几个目录进行病毒写入:
- /etc/init.d/
- /boot
- /root
- /etc/cron.hourly
- /etc/rc.x
- /var/tmp
- /tmp
- /mnt
图3:某肉鸡/etc/init.d目录下被写入恶意程序
一般病毒执行后,会连接到对应的服务器,我们称之为C&C服务器(Command & Control Server),并且肉鸡的状态会被C&C服务器监控,攻击者一旦发现肉鸡因为某些原因断线,会再去寻觅新的肉鸡。
图4:某病毒分发服务器
图5:C&C服务器通信原理
通过C&C服务器,攻击者即可对肉鸡做到绝对的控制,并且可以通过http协议发送信令,控制肉鸡。
大致的一个流程如下图所示:
图6:利用Botnet攻击受害者服务器
首先攻击者配置botnet病毒分发服务器(这些服务器大多来自于境外的VPS供应商或者是黑客从境内抓到的不安全的服务器,后者则会以web服务的形式对外散发botnet病毒而服务器拥有者并不知情)和C&C服务器,同时在公网范围内寻找可以控制的肉鸡集群(Victim1、Victim2和Victim3),然后控制肉鸡集群在从botnet病毒分发服务器上去获取病毒样本(一般使用wget命令)并且赋予执行权限后(chmod 777 xxx)执行botnet病毒样本(./xxx),或者使用nohup命令让病毒后台执行(在这里我们可以用top命令来观察消耗资源较多的进程,鉴于botnet攻击网络会消耗大量的CPU、内存、网络等资源,这里可以比较容易识别的到样本的位置),对于有些境外的攻击者,还会添加echo "nameserver 8.8.8.8" >> /etc/resolv.conf,用来更改DNS解析地址,鉴于我国网络的大条件下,你懂得。
图7:捕获的部分botnet病毒分发服务器及样本
在肉鸡内部署botnet病毒并且执行完毕后,肉鸡将会和C&C服务器进行通信,来接收C&C服务器发出的控制指令(一般为HTTP协议,但是根据最近得到的一些botnet样本中,我们同事发现了一些基于TLS/SSL协议的C&C通信模型)。到这里,一个botnet僵尸网络就已经组建完毕。接下来,攻击者可以通过C&C服务器对目标系统(图中的Victim4)进行攻击行为,来使目标系统无法正常提供服务甚至瘫痪。
图8:使用top命令观察内存占用较大的程序
0x03 攻击方式
基于僵尸网络发起的网络攻击方式有很多,根据这几天获得的病毒样本来看,大多数主要攻击还是以DDoS攻击为主,例如最近抓到的某样本主要功能在 cnc_communication_handler()函数中完成, 包括建立 C2 session、发送上线包、接收和响应指令。其交互过程为:
1. Bot 连接 C&C 服务器,分别发送 2 个密文 botidbuff 和 verbuff。
2. Bot 等待服务器的指令,根据指令类型作出响应。
图9:某病毒样本的符号特征
指令报文: 某病毒样本解密后的指令消息为文本格式, 以一个指令名称 COMMAND 开头, 后面紧跟若干空格隔开的参数,形如:
- COMMAND <arg1> <arg2> ... <argN>
具体的 COMMAND 可以分为两类: 远控类和攻击类, 各种命令的意义和格式如下表所示。
表1:某Botnet家族可以执行攻击的类型和信令
对于大多数DDoS来说,大部分DDoS的攻击流量均来自于UDP,根据本人的日常监测数据来看,绝大多数针对服务器的DDoS攻击均为UDP的方法/反射方式,目前DDoS的攻击可以有以下几种类型:
表2:Botnet可以发起的DDoS攻击类型
表3:UDP DDoS可以放大的攻击倍数
根据个人的一些研究发现,反射性的攻击现在成为了UDP DDoS攻击的主流类型,毕竟反射型DDoS攻击可以用很少的代价取得一个相对不错的效果。
0x04 缓解方案
对于Botnet发起的DDoS攻击包括其他的DDoS攻击,首先得有一个意识,那就是不能够100% 杜绝此类攻击对于服务器集群的影响,对于Botnet发起的分布式DDoS攻击,可以采取一些方法针对性的疏导或者吸收攻击的流量,如Flowspec或者RTBH,甚至在流量过大的情况下可以直接去屏蔽来自外界的流量,只保留需要的链接,这样可以一定程度上缓解DDoS攻击对服务器所带来的影响。
对于服务器被抓肉鸡这事儿,建议采取以下操作:
1. 必须要对服务器进行端口设置,并且要做更细粒度的权限划分,保证权限不会被滥用。
2. 将服务更新到最新,使用旧版本的服务可能会因为黑客利用已知漏洞对目标系统进行渗透,从而导致服务器当做肉鸡对外攻击。
3. 更改公司的安全策略,保证服务器不存在弱口令和空口令,防止黑客利用bruteforce方式抓取肉鸡;尽量使用不同的密码,防止黑客使用撞库的方式获得服务器权限。
4. 使用服务器操作监控的软件记录敏感操作和敏感目录文件变化,例如使用企业内部可限制仅可以堡垒机方式登录内部服务器。
5. 对服务器的端口进行周期扫描和严格管控,防止服务器被黑客当做botnet病毒分发的工具甚至是肉鸡。
毕竟黑产这种东西,人在做,天在看。
【本文是51CTO专栏作者elknot的原创文章,转载请通过51CTO获取授权】