前言
好久不见!小G之前发布过关于僵尸网络和恶意木马远控android手机的文章和视频,发现大家对这一类问题的确非常感兴趣。恰逢当前有一个其他的机会,那么也正好总结下这一部分的知识点和大家分享分享。
一些概念
C&C:command-and-control命令与控制。简单理解,这是一种机器与机器之间的通讯方式。
C&C Server:C&C 服务器是由攻击者的计算机将命令发送到受恶意软件入侵的系统,并从目标网络接收被盗的数据。值得一提,现在已经发现许多c&c服务器为IDC服务器以及使用基于云的服务,例如网络邮件和文件共享服务,因为C&C服务器可以与正常流量融合在一起并避免被检测到。
Botnet:僵尸网络。是指已被恶意软件感染并受到恶意参与者控制的一组计算机。僵尸网络是包括机器、人和网络的组合词,每个受感染的设备都称为僵尸网络。僵尸网络可以实现完成非法或恶意任务,包括发送垃圾邮件,窃取数据,勒索软件,欺诈性点击广告或分布式拒绝服务(DDoS)攻击。
通讯模式
- 直连 shell
fromsocketimport*importsubprocessif__name__ =="__main__":
server = socket(AF_INET, SOCK_STREAM)
server.bind((0.0.0.0,6666))
server.listen(1)
print()
print(waiting connect)
print()whileTrue:
talk, addr = server.accept()
print(connect from, addr)
proc = subprocess.Popen(["python -c import pty; pty.spawn(\"/bin/bash\")"],
stdin=talk,
stdout=talk,
stderr=talk,
shell=True)
- 反弹 shell非主动访问目标主机,而是通过反射shell绕过防火墙建立连接。主控端保持监听模式即可(如使用netcat),然后让肉鸡上主动连接主控端。
- C&C服务器因为大部分的肉鸡ip为动态ip,所以远控中基本都使用反弹式通信,反弹式通信需要肉鸡每隔一段时间对主控端发送心跳包,但这或许需要保证主控端的公网ip保持不变,所以就需要一台能够集中控制僵尸网络的主机,也就是上述的C&C服务器。
1.通过IP地址访问C&C服务器描述:IP地址硬编码到远控脚本优点:简单粗暴,成本低缺点:易识别防御:ip黑名单识别程度: *
2.通过域名访问C&C服务器描述:域名硬编码到远控脚本(可注册比较正常的域名伪装,降低被发现的风险)优点:简单粗暴,成本低缺点:易识别防御:域名黑名单,蜜罐识别程度: **
3.Fast-flux && Double-flux && Triple-flux描述:Fast-flux技术是指不断改变域名和IP地址映射关系的一种技术。Double-flux则是域名和ip均不断轮转。Triple flux在Double flux的基础上,增加一层Name Server通过CNAME方式解析,这样域名有可能指向ip也有可能指向别的域名,然后再指向ip,这些Name Server也会定期轮换,就增加了更多C&C通道和干扰项。(https://www.freebuf.com/articles/network/136423.html)
优点:即使识别部分ip和域名也无法将整个僵尸网络屏蔽缺点:易识别防御:利用TTL(存活时间)时间较短以及历史数据等特征挖掘剩余域名和ip识别程度: ****
4.使用 web C&C服务器描述:通过在一些论坛的冷门区域或者热门网站发送C&C控制指令,然后让恶意软件通过爬虫的方法在访问这些论坛的时候获取指令。典型案例:2015年俄罗斯攻击者使用twitter作为Hammertoss 的C&C服务器。优点:不易发现,且不可封禁热门网站缺点:被发现后会被直接封禁账号损失僵尸网络。防御:封禁账号识别程度: ***
5.使用DGA随机域名生成算法描述:这种C&C控制方法的思路就是控制一个确定的随机域名生成算法,用约定好的随机数种子生成大量的随机域名,恶意软件对这些域名全部进行访问。优点:不易发现,难逆向出随机算法缺点:灵活性差,需要平衡访问频率与等待时间的成本防御:机器学习识别程度: *****
模拟攻击
在介绍模拟攻击之前,先介绍一下本次模拟的主要目的和场景。这次模拟不会复现复杂的攻击模式,因为第一成本较大,小编无法承担。第二,检测该攻击未来的趋势一定是流量检测,覆盖的检测范围主要包含远程控制阶段或者寻找c&c服务器建立通讯阶段等。本问主要对服务器与肉鸡之间的远程控制部分进行研究,所以利用直连和主流远控木马进行模拟攻击。这其中包括了pc主机控制pc肉鸡、pc主机控制android肉鸡(pc包括linux和windows)。之前的文章我有简单介绍过windows主机的TOP远控木马https://www.jianshu.com/p/bfc62aa26717,各位读者可以去自行下载进行模拟,模拟时建立虚拟机即可。另外,pc端控制android肉鸡的方法我也有在网络上发布过视频讲解和文章介绍:https://www.toutiao.com/i6799210632919908876/,https://www.toutiao.com/i6796246473408250379/,所以重复的内容就不再介绍了。至于pc端的远控也是大同小异,如果读者们有较强烈的需求,后续我会更新这部分的内容。
流量分析
在模拟攻击时我利用wireshark进行抓包,报文内容主要覆盖了如下几个攻击阶段:1.主控端与被控端建立连接初期2.主控端与被控端发送心跳报文keep-Alive3.主控端与被控端数据传输,其中包括远程桌面控制、文件窃取,文件上传,命令控制等。下面我就对TOP病毒家族的上述攻击阶段进行报文分析。来吧,展示。
- njrat 家族主控端与被控端建立连接初期报文:
分析:首先攻击建立是基于TCP协议,那么三次握手阶段我们可以获取到主控端和被控端的的ip以及端口。这个报文中的主控端ip是147.32.83.57,被控端是一个内网ip。这个时候会有人有疑问:如何确定源目ip和主被控端的对应关系呢?这个问题很重要,因为后续算法的很多特征抽取都与主被控端维度相关。在通讯模式中我介绍了反弹shell的通讯机制,而现在的c&c攻击链路中无论是否为直连,或是通过c&c服务器进行通讯建立,绝大数都采用了反弹shell的方式进行连接,这样攻击者始终保持监听,静待肉鸡上线即可。那么重点来了,既然是反弹shell,首先发起的syn包的就是被控端,也就是上述的内网ip。然后我们对被控端对主控端的首包进行分析,即第一个控制位为[PSK ACK]的数据包。为什么第一个具有该控制位的报文为首包呢,简单理解就是PSH控制位代表数据传输,具体协议内容这里不详细介绍。首包size约382个字节,查看内容我们发现:被控端把肉机的基本信息发送给了主控端。比如操作系统,用户名等(攻击溯源时可以使用这个特征)。二者建立通讯后,由又发送了心跳报文和其他数据报文,我后面会针对这部分流量结合其他病毒家族进行介绍。
- x-rat 家族主控端与被控端发送心跳报文keep-Alive报文:
分析:可以观察到报文的size非常有规律。不过,主控端与被控端发送的心跳size可以大小一致,也可以不一致。x-rat对传输的数据进行了加密处理,很有可能是单向加密。不过通过加密后的内容也可以发现每次心跳发送的内容基本一致,具有一定的规律。下面这个报文中的心跳内容并未加密,大家可以一探究竟了:
该报文的心跳内容就是基本的ping/pong模式。其实,心跳也只不过是保持连接的一种机制,也可能是让主被控端之间相互认证的一种方式,而且贯穿通信的始终。具体的内容在恶意软件使用时进行设定或者硬编码实现,臭名昭著的Gh0st家族心跳内容如下:
- 主控端与被控端数据传输,其中包括:远程桌面控制、文件窃取、文件上传、shell命令控制等QuasarRat家族shell控制报文:
分析:报文的内容覆盖的攻击场景是shell命令控制,也就是说主控端发送简单的shell命令,被控端就会执行一系列的操作,比如主控端发送了一个简单的download命令,被控端就会返回给大量的数据给主控端,这也是为什么主控端发送的字节数较少,而被控端发送的字节数较多的原因。虽然大部分的传输内容都被加密了,但是小编还是很辛苦的给大家找了一些非加密命令控制报文,比如Kryptik家族基于irc服务的shell命令控制报文:
该主控端的ip情报如下, 因为报文是前些年的数据,所以情报虽然过期但是有效。
x-rat家族远程桌面控制/文件窃取报文:
特征分析
- 心跳数据报文数量前面的流量分析中我对心跳报文做了简要的描述,其特征为:size较小,数目较多,跨越时间较长等特征。有论文中对心跳包量级占比加以横向的对比统计分析:
- 上行流量大于下行流量首先声明:这里的上行流量为被控端向主控端发送的流量,下行流量为主控端向被控端发送的流量。正常的TCP通讯中,上下行流量比例<=1,比如我们在冲浪时下载一部电影,这时我们也会主动发送连接请求到服务器,然后发送下载命令,服务器向我们返回一部电影的数据量。可能这个例子不是十分的恰当,但是注意:这种场景下我们同样是主动发送连接请求,但是我们发送给服务端的数据量较少,而服务端却返回给我们较多的数据。从这一点来分析,恰恰与c&c中rat阶段的行为模式相反。有论文中对这一部分特征也做了横向的对比,采用了正常应用中的QQ、utorrent、taobao与灰鸽子木马进行对比实验分析:
- PSH控制位报文比例前面提到过PSH控制位代表数据有传输的,发送数据时推送PSH控制位为1。正常的TCP通信中,发送端将PSH置为1,并立即创建一个报文段发送出去。接收端收到PSH为1的报文后, 等到整个缓冲都填满了再向上递交。木马在通信过程中通常希望发送命令的报文和获取数据文件的报文的优先级较高,置PSH为1后不会等到整个缓冲都填满后再向上递交。所以,这也就产生了木马的又一个显著特征:PSH数据包占TCP数据包总数的比例较高。trojan与正常应用的PSH控制位报文占比如下:
- 数据报文时间间隔因为在整个远程控制阶段中,心跳数据报文会贯穿始终、上下行流量的比例、PSH控制位的占比等原因会导致报文与报文之间的时间间隔分布与正常应用的TCP通讯时间间隔分布存在一定的差异,对差异的度量同样可以作为算法模型的输入特征。
机器学习检测模型
通过对c&c远程控制的报文数据加以行为分析后,我们可以对其进行几个方面的特征抽象,比如上面的分析结论。利用这些抽象特征可以提取多种具体的统计特征,比如某个维度的方差、中位数、标准差等等。小编在做该类(pc控制pc,pc控制android有细微的差异)检测模型中共输入70个左右的统计特征和字段特征,采用了比较稳定的树模型结构的算法,比如:随机森林、GBDT、xgboost等。由于样本数据实在是难以获取,过采样也无法解决问题的本质,所以暂时不考虑使用深度学习去尝试。不过对于加密流量的恶意c&c检测模型,小编当时是采用了深度学习的算法,如:resNet、mobileNet,CNN、LSTM等。因为当时这部分数据量级足以支撑,且没有使用统计类特征,而是采用了计算机视觉的思想进行了建模。如果有读者对这部分内容感兴趣,或者想一起讨论合作,可以私信我。
总结
c&c攻击是现如今非常主流的攻击方式,而且僵尸网络的构建其实并不是最终目的,因为很多黑客或者黑产人员都会利用僵尸网络中的肉鸡进行具体的集中攻击,比如另一个非常有名的攻击:DDOS。对于c&c检测的方法有很多,IPS中存储着大量的签名库、规则库等等,但是使用流量检测的方法并没有全面铺开,可能是因为存在着一定的误报风险。但是提升检测方法的召回能力一定是解决该类问题的本质。所以我们还有很多点可以深入的挖掘,比如结合c&c场景中DGA恶意域名检测思想以及僵尸网络后期的DDOS攻击检测思想。今后的工作可能会涉及到类似的工作内容,也希望自己可以尝试做到最好。谢谢各位的耐心阅读,如果小编有哪里介绍的不好,还请各位多多包涵之余,不吝赐教。我们下期再见~~~
0 留言