CobaltStrike流量特征分析

2022-01-20 16:25:06 浏览数 (1)

HOLIDAY

CS流量特征分析

作者:wal613@深蓝攻防实验室

01

配置信息

  主要对比默认配置的profile和配置修改后的profile[1],本文修改后的profile采用如下配置。

主要变化,http-get、http-post中把信息隐藏在jquery*.js中:

02

HTTP

2.1

指令特征分析

#2.1.1. 心条包

请求的url为/jquery-3.3.1.min.js,返回包的大小为5543,返回包到下一个请求包之间的时间为心跳时间。

#2.1.2. sleep

请求的url为/jquery-3.3.1.min.js,返回包大小为5607,包含指令数据。执行完之后,下一个请求包按照新的时间发送心跳包。

#2.1.3. shell

这里的shell指令,对应“shell whoami”,其请求的url为/jquery-3.3.1.min.js,返回包大小为5628,包含指令数据。下一个包发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令执行的结果,大小为96。另外,接收到指令到执行完指令,并返回结果,时间间隔为0.098093s。

#2.1.4. file

示例中的流量包,包含两个指令内容,第一个指令其特征为,请求的url为/jquery-3.3.1.min.js,返回包大小为5607。随后,间隔0.0071820s后,发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令的结果,大小为395。第二个指令其特征为,请求的url为/jquery-3.3.1.min.js,返回包大小为5607。随后,间隔0.012044s后,发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令的结果,大小为75。

#2.1.5. hashdump

请求的url为/jquery-3.3.1.min.js,返回包大小为115580,包含指令数据,以及用于进行hashdump的dll。下一个包发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令执行的结果,大小为288。另外,接收到指令到执行完指令,并返回结果,时间间隔为1.140577s。

#2.1.6. screenshot

请求的url为/jquery-3.3.1.min.js,返回包大小为268497,包含指令数据,以及用于进行screenshot的dll。下一个包发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令执行的结果,大小为304566。另外,接收到指令到执行完指令,并返回结果,时间间隔为31.417141s。

2.2

流量包分析

在指令特征分析中,可以看到,在流量包中可以从域名/IP、指令长度(心跳返回包长度)、指令结果长度(返回结果包长度)、指令执行时间(POST包与指令包时间间隔)作为参考依据,对cs流量进行分析。对于给定的http流量包,对流量包数据进行筛选,筛选出恶意的http流量。

2.3

小节

对比正常的http流量,CS的http通信流量具有以下几个特征: A. 心跳包特征 a) 间隔一定时间,均有通信,且流级上的上下行数据长度固定; B. 域名/IP特征 a) 未走CDN、域前置的,域名及IP暴露 b) 走CDN、域前置的,真实IP会被隐藏; C. 指令特征 a) 下发指令时,通过心跳包接收指令,这时,server端返回的包更长,甚至包含要加载的dll模块数据。 b) 指令执行完后,client端通过POST请求发送执行的结果数据,body部分通过加密和base64编码。 c) 不同指令,执行的时间间隔不一样,可以通过POST请求和GET请求的间隔进行判断。 D. 数据特征 a) 在请求的返回包中,通信数据均隐藏在jqeury*.js中。

03

DNS

3.1

指令特征分析

#3.1.1.心条包1

心跳包1特征比较明显,都是单包的方式,发送域名的A记录查询,间隔5s,以下两个域名进行,其中返回的ip地址为74.125.196.113。分析可以知道,该字段用来表示dns beacon的指令,通过与默认值进行异或操作得到,这里的默认值即74.125.196.113。

#3.1.2.心条包2

心跳包2,中间穿插了多指令的心跳包格式,穿插了www、api起始的指令,进行了6次A记录查询,间隔为10s。

这里心跳2返回的A记录ip地址为74.125.196.130,表示切换心跳模式。而后续的www记录,字段表示数据。对于起始的180,1表示该包只包含这一个字段,80表示所有数据的长度。后续的36dxxx、2f2xxx和1a5xxx,3、2、1分别表示后续紧跟3个、2个、1个字段,在域名中以.分割,进行拼接后即为数据长度。之后的api,表示结束,这里返回的ip 0.0.0.0表示没有后续的指令。

#3.1.3.sleep

执行指令时,会采用心跳2的方式进行。如果api A记录查询,如果ip返回不为空,则发起api TXT记录查询,用来接收执行指令。api A记录查询,返回的ip值与74.125.196.113进行异或操作,得到api TXT记录查询的数据长度。

#3.1.4.shell

这里进行心跳时,A记录查询返回的IP为74.125.196.131,表示后续存在执行指令,随后发送api A记录查询,获取指令数据长度,返回的IP为74.124.196.49。之后,发送api TXT记录查询,获取指令信息。之后发送post A记录查询,返回指令执行结果数据。post数据的解析方式,同www数据的解析方式,此处的140,1表示紧随其的字段,这里即自身140,40表示后续的数据长度,即0x40字节。指令执行的时间为0.155756s。

#3.1.5.file

这里的file指令,包含三个。其接收到的指令长度分别为74.125.196.49、74.125.196.33和74.125.196.49,指令执行结束后返回的数据长度分别为0x150、0x220和0x240,指令执行的时间分别为0.008949s、0.005989s和0.008816s。

#3.1.6.hashdump

hashdump发送的api A记录查询,得到的数据长度为74.124.134.17,后续紧跟api TXT记录查询获取hashdump相应dll。之后,发送post A记录,用来返回结果,这里返回的数据长度为0xd0,执行指令的时间为1.148639s。

#3.1.7.screenshot

screenshot指令,发起的api A记录查询,返回的执行指令数据长度为74.127.190.17,后续使用api TXT记录接收screenshot dll及指令数据。之后,执行screenshot指令,结果采用post A记录的方式返回,这里返回的数据长度为0x27230,执行指令的时间为1.662623s。

3.2

流量包分析

从上述分析中,可以看到,可以从指令长度(api A记录及api TXT记录)、指令结果长度(post A记录)、指令执行时间(POST A记录与指令包时间间隔)作为参考依据。对于给定的dns流量包,对流量包数据进行筛选,筛选出恶意的dns流量。

3.3

小节

对比正常的dns流量,CS的dns通信流量具有以下几个特征: A. 心跳包特征 a) 间隔一定时间,均有通信,采用A记录查询的方式进行; b) 心跳包1和心跳包2,由初始A记录的返回地址决定 B. 域名 a) 很明显的域名解析特征 C. 指令特征 a) 下发指令时,通过心跳包接收指令,这时,切换为TXT记录查询进行,甚至包含要加载的dll模块数据。 b) 指令执行完后,client端通过A记录查询发送post起始的域名信息返回结果数据。 c) 不同指令,执行的时间间隔不一样,可以通过TXT记录查询和A记录查询发送的post信息的间隔进行判断。

04

HTTPS

4.1

指令特征分析

#4.1.1.心跳包

心跳包特征比较明显,受控端发送的数据长度为592,cs server返回的长度为6032,时间间隔为5s。

#4.1.2.sleep

sleep指令,在心跳包收到指令时执行,此时心跳包中,受控端发送的指令长度为592,cs server返回的数据长度为6096。

#4.1.3.shell

shell指令,心跳包中,csserver返回的数据长度为6128,执行指令时间为0.553008s,返回指令执行结果数据中,受控端返回的数据包长度为544。

#4.1.4.file

file指令这里存在4条,受控端接收的数据长度分别为6128、6096、6096、6128,执行时间分别为0.362313s、0.371764s、0.380523s和0.350793s,向cs server返回的执行结果数据包长度为976、448 800、528和448 832。

#4.1.5.hashdump

hashdump指令,受控端接收的数据长度较长,包含了hashdump工具及指令,其执行时间为1.509852,执行结果返回的数据包长度为736。

#4.1.6.screenshot

screenshot指令,受控端接收的数据比hashdump更长,包含了screenshot工具及执行指令,其执行时间为2.060741s,受控端向cs server返回的数据长度同样最长。

4.2

流量包分析

从上述分析中,可以看到,可以从指令长度(受控端心跳包接收数据长度)、指令结果长度(受控端执行完指令向cs server发送的数据长度)、指令执行时间作为参考依据。对于给定的https流量包,对流量包数据进行筛选,筛选出恶意的https流量。

4.3

JA3/JA3S

#4.3.1.TLS/SSL握手过程

基于RSA魔兽和密钥交换的过程。

#4.3.2.JA3

JA3算法[6]用来收集SSL中client端发起的“Client Hello”中的信息,包括SSLVersion、Cipher、SSLEextension、EllipticCurve和EllipticCurvePointFormat。把这些信息组成字符串,然后计算其hash值,进而检测该SSL/TLS是否是恶意的流量。 以下是CS 4.4默认配置下的https流量中,客户端JA3特征:

正常浏览器访问https://www.baidu.com的JA3特征:

ja3[5]工具,可以直接输入一个pcap包,计算出其中的SSL/TLS ja3信息,如下所示。

可以使用[2]网站,来查询JA3的指纹信息。

#4.3.3.JA3S

JA3S算法[4]是对SSL/TSL通信时,服务端返回的“Server Hello”中的信息收集,包括SSLVersion、Cipher和SSLExtension这些字段信息。把这些信息组成字符串,然后计算[5]其hash值,进而检测该SSL/TLS是否是恶意的流量。 以下是CS 4.4默认配置下的https流量中,服务端的JA3S特征:

正常浏览器访问https://www.baidu.com的JA3S特征:

ja3[5]工具,可以直接输入一个pcap包,计算出其中的SSL/TLS ja3s信息,如下所示。

#4.3.4.Go实现的特征

【TODO】 参考[9]。

4.4

机器学习相关

#4.4.1.DataCon2020

DataCon2020中,也有流量方向的题目,主要针对加密恶意流量进行检测,其中清华大学的HawKEye战队[7]实现的效果很好。 该方向的题目背景为某小区内网感染了使用TLS/SSL加密通信的恶意软件,任务是通过仅观察网络出口处的443端口加密流量,定位感染的IP。 HawKEye主要从数据包、流、主机三个维度进行特征提取: A. 数据包(Packets):从包长和通信IP地址进一步展开。 B. 流级数据(Flows):从证书主体、证书签发机构以及流级多维特征展开。 C. 主机级数据(IPs):从主机级多为特征展开。

在包长特征上,正常浏览器访问https的web页面时,上行的数据远小于下行数据,而对于一些木马流量,由于其会向服务端发送数据,而服务端向客户端只需要发送少了控制指令,造成其上行数据远大于下行数据,如下图所示。

证书主体和签发者的特征。在TLS建立连接的过程中,服务端发来的证书中的叶子证书的Subject字段表明了客户端的 直接通信对象,而Issuer字段则表明了该证书的直属签发机构。Subject字段里的common name通常是一个域名。如下图,分别是默认配置的cs证书信息和访问www.baidu.com的证书信息。

流级多维特征,主要考虑以下四个部分: A. 元数据(Metadata):即单条流的基本统计数据,包括持续时间、总得流入/流出的字节数、数据包个数。 B. 窗口序列统计特征:对上下行流量进行处理,包括包时间间隔和包长度的窗口,每个窗口提取统计特征。 C. TLS/SSL握手包特征:关注加密套件和列表。 D. TLS/SSL证书特征:包含是否自签名、是否过期、版本号、证书有效期、公钥长度等。

#4.4.2.国内相关检测技术

国内做加密流量检测的一家公司提出了一种《基于机器学习多模型的SSL加密威胁检测技术研究和应用》方法[8]。

其在特征工程阶段,从单流特征和多流特征两个维度展开。 单流特征是指一次SSL/TLS会话所体现出来的特征,包含时空特征、握手特征、证书特征和背景特征。时空特征:包含时间特征和空间特征,时间特征如流时长、包间隔等,空间特征如包大小转移矩阵、熵值等。握手特征:客户端和服务端在握手阶段的特征,如协议版本、支持的扩展项等。证书特征:使用的数字证书的一系列特征,如证书链长度、使用者正常度等。背景特征:从背景流量中提取并选择的一类特征,如DNS、HTTP等。 有些恶意行为在一次会话中特征并不明显,这时就需要对一对通信实体间的多次会话进行特征提取,称之为多流特征。比如,流簇上/下行首流相似度,可以很好地反映含噪声的心跳行为,流簇上/下行首流畸形度则可以很好地反映上线信息、下发执行、心跳等恶意行为。

4.5

小节

对比正常的https流量,CS的https通信流量具有以下几个特征: A. 心跳包特征 a) 间隔一定时间,均有通信,且流级上的上下行数据长度固定; B. 域名/IP a) 黑白情况 C. 证书特征 a) 自签名、有效期、server name等 b) JA3特征 c) 加密套件及扩展列表 D. 指令特征 a) 下发指令时,通过心跳包接收指令,这时,server端返回的包更长,甚至包含要加载的dll模块数据。 b) 指令执行完后,返回结果的请求中,client上行数据比要多余心跳包,下行数据变化不大。 c) 不同指令,执行的时间间隔不一样。

05

参考资料

[1] Malleable-C2-Profiles [2] JA3 SSL Fingerprint [3] cobalt strike basics [4] TLS Fingerprinting with JA3 and JA3S [5] JA3 [6] Open Sourcing JA3 [7] DataCon2020加密恶意流量分析Writeup [8] 基于机器学习多模型的SSL加密威胁检测技术研究和应用 [9] Go语言木马加密通信分析与检测

0 人点赞