Thank Zhihao Tao for your hard work. The document spent countless nights and weekends, using his hard work to make it convenient for everyone.
If you have any questions, please send a email to zhihao.tao@outlook.com
1. 概述
TLS/SSL
用于加密常见应用程序的通信,以确保数据安全和预防恶意软件,因此它可以隐藏在噪音中。要启动TLS/SSL
会话:
- 客户端将在
TCP
3次握手后发送TLS/SSL
客户端Hello
数据包。此数据包及其生成方式取决于构建客户端应用程序时使用的包和方式。 - 服务器如果接受
TLS/SSL
连接,将使用基于服务器端库和配置以及Client Hello
中的详细信息制定的SSL Server Hello
数据包进行响应。
2. 检测方式
2.1 证书检测
-
TLS/SSL
证书主题字段
-
TLS/SSL
证书颁发者字段
-
TLS/SSL
证书序列号 -
TLS/SSL
证书sha-1指纹 -
TLS/SSL
证书服务器名称指示字段 -
TLS/SSL
证书的notbefore字段 -
TLS/SSL
证书的notafter字段 -
TLS/SSL
证书有效日期
-
TLS/SSL
证书链中的证书 -
TLS/SSL
版本
2.2 JA3
JA3
是一种TLS/SSL
指纹识别方法,其灵感来自Lee Brotherston
的研究和工作以及他的TLS/SSL
指纹识别工具:FingerprinTLS
。
JA3
的创始人
John Althouse
Jeff Atkinson
Josh Atkins
2.2.1 JA3
由于TLS/SSL
协商以明文形式传输,因此可以使用SSL Client Hello
数据包中的详细信息对客户端应用程序进行指纹识别。
JA3
从Client Hello
数据包中的以下字段收集十进制字节值:
TLS/SSL
版本- 可接受的密码
- 扩展列表
- 椭圆曲线和椭圆曲线格式
然后按顺序将这些值连接在一起,使用","
分隔每个字段,使用"-"
分隔每个字段中的每个值。
字段顺序如下:
SSLVersion,Cipher,SSLExtension,EllipticCurve,EllipticCurvePointFormat
例子:
769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0
如果Client Hello
中没有TLS/SSL
扩展,则字段留空。
例子:
769,4-5-10-9-100-98-3-6-19-18-99,,,
然后对这些字符串进行MD5
散列以生成易于使用和共享的32个字符指纹。这是JA3``TLS/SSL
客户端指纹。
769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0 --> ada70206e40642a3e4461f35503241d5
769,4-5-10-9-100-98-3-6-19-18-99,,, --> de350869b8c85de67a350c8d186f11e6
我们还需要引进一些代码,Google’s GREASE
(生成随机扩展并保持可扩展性)。https://datatracker.ietf.org/doc/html/draft-davidben-tls-grease-01
2.2.2 JA3S
JA3S是用于SSL/TLS
通信的服务器端的JA3, 服务器对特定客户机响应的指纹。
同一台服务器会根据Client Hello
消息及其内容以不同的方式创建其Server Hello
消息。因此,这里不能像客户端和JA3那样,仅仅根据服务器的Hello消息来对其进行指纹识别。尽管服务器对不同客户端的响应不同,但它们对同一客户端的响应总是一致的。
JA3S
使用以下字段顺序:
SSLVersion,Cipher,SSLExtension
通过结合JA3 + JA3S
对客户端与其服务器之间的整个加密协商进行指纹识别。那是因为服务器会对不同的客户端做出不同的响应,但对同一个客户端的响应总是相同的。
对于 Trickbot 示例:
JA3 = 6734f37431670b3ab4292b8f60f29984 ( Fingerprint of Trickbot )
JA3S = 623de93db17d313345d7ea481e7443cf ( Fingerprint of Command and Control Server Response )
对于 Emotet 示例:
JA3 = 4d7a28d6f2263ed61de88ca66eb011e3 ( Fingerprint of Emotet )
JA3S = 80b3a14bccc8598a1f3bbe83e71f735f ( Fingerprint of Command and Control Server Response )
在这些恶意软件示例中,命令和控制服务器始终以完全相同的方式响应恶意软件客户端,不会偏离。因此,即使流量被加密并且人们可能不知道命令和控制服务器的IP
或域,因为它们在不断变化,但我们仍然可以通过对客户端和服务器之间的TLS
协商进行指纹识别,以合理的信心来识别恶意通信。
2.2.3 优势
由于JA3
会检测客户端应用程序,因此无论恶意软件是否使用 DGA(域生成算法)或每个C2
主机的不同IP
,或者即使恶意软件使用Twitter
进行C2
,JA3
都可以根据它如何检测恶意软件本身沟通而不是它沟通的对象。
在只允许安装少数特定应用程序的锁定环境中,JA3
也是一种出色的检测机制。在这些类型的环境中,您可以构建预期应用程序的白名单,然后对任何其他JA3
命中发出警报。