TLS指纹模拟

这篇具有很好参考价值的文章主要介绍了TLS指纹模拟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

深蓝实验室@lz520520

介绍

https等协议通过tls加密传输,大家可能觉得数据被全加密了应该可以保证无恶意流量特征,流量侧通信不会被发现,但在加密前,会有一个tls协商过程,client和server协商交互才会生成最后加密用的密钥,而这个协商过程就可以切切实实进行指纹提取。这就是tls指纹。

JA3是一种创建SSL/TLS客户端指纹的方法,它易于在任何平台上生成,并且可以轻松共享以获取威胁情报。JA3 由三位 Salesforce 成员(John Althouse、Jeff Atkinson 和 Josh Atkins)开发,是一种用于根据 ClientHello 数据包生成 SSL 指纹以识别建立加密连接的客户端的技术。相同的客户端工具所产生的JA3指纹总是一致的。JA3 指纹从一开始就是为了证明客户端应用程序是否存在恶意。

我们在使用burpsuite等工具时,经常会遇到网站无法打开,去掉代理又变正常的情况,很可能是网站的WAF使用了JA3指纹识别到了代理工具。常见的如cloudfare waf就使用了该指纹技术。

go默认ja3指纹89be98bbd4f065fe510fca4893cf8d9b

chromeja3指纹cd08e31494f9531f560d64c695473da9

分析

ja3

tls指纹生成过程

JA3方法用于收集Client Hello数据包中以下字段的十进制字节值:版本、可接受的密码、扩展列表、椭圆曲线密码和椭圆曲线密码格式。然后,它将这些值串联在一起,使用“,”来分隔各个字段,同时,使用“-”来分隔各个字段中的各个值。

版本、可接受的密码、扩展列表、椭圆曲线密码和椭圆曲线密码格式
SSLVersion,Cipher-Suites,SSLExtension,EllipticCurve,EllipticCurvePointFormat

例子

769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0

然后使用MD5 hash生成指纹

ada70206e40642a3e4461f35503241d5

具体分析

这里以go开发的frp为例

Client Hello数据包如下,ja3就是由以下圈出来的部分生成的

TLS指纹模拟

SSLVersion

这里显示是 TLS1.2,对应实际值是0x0303

TLS指纹模拟

转换成十进制为

771

Cipher-Suites

如下加密算法套件有19个,根据ja3规则,每个之间用"-"连接

TLS指纹模拟

转换成果如下

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

SSLExtension

这个扩展列表是由所有扩展类型值组成,如下扩展类型值有8个

TLS指纹模拟

生成结果为

5-10-11-13-65281-18-43-51

EllipticCurve

椭圆曲线密码

即扩展type值为10对应的数据,这里写的是supported_group

生成结果为

29-23-24-25

EllipticCurvePointFormat

椭圆曲线格式

即扩展type只为11对应的数据,这里数据值为0

TLS指纹模拟

生成结果为

0

最后将上面所有部分用","拼接组成最终需要hash的字符串

771,49199-49200-49195-49196-52392-52393-49171-49161-49172-49162-156-157-47-53-49170-10-4865-4867-4866,5-10-11-13-65281-18-43-51,29-23-24-25,0

进行hash计算如下

TLS指纹模拟

通过ja3工具解析数据包结果,可以看到和我们计算结果一致

ja3s

JA3S方法会收集Server Hello数据包中以下各个字段的十进制字节值:版本、可接受的加密算法和扩展列表。然后,它将这些值串联在一起,使用“,”来分隔各个字段,并通过“-”来分隔每个字段中的各个值。

SSLVersion,Cipher,SSLExtension
769,47,65281–0–11–35–5–16

PS: 因为Server Hello会因为Client Hello不同和不同,所以只能做一个参考。

计算

FRP的Server Hello数据包如下,计算需要的三部分如下

TLS指纹模拟

SSLVersion

版本

TLS指纹模拟

生成结果

771

Cipher

可接受的加密算法,只有一个

生成结果

4865

SSLExtension

扩展列表,扩展列表只有两个

TLS指纹模拟

根据类型值,生成结果

43-51

将上述拼接起来

771,4865,43-51

但ja3s工具生成,加密套件这块额外添加了参数实际算法名称

如下,但实际表示意义也是唯一的

TLS指纹模拟

771,CipherSuite(0x1301, TLS_AES_128_GCM_SHA256),43-51

TLS指纹模拟

绕过

文章

https://mp.weixin.qq.com/s/og2IKo8lcydh8PROUPD7jQhttps://segmentfault.com/a/1190000041699815

https://github.com/refraction-networking/utls

这个库是基于crypto/tls进行开发的,可以模拟绝大部分情况下的ja3指纹。

和官方库差不多的用法,如下在封装时除了conn连接和config配置以外,需要传入ClientHelloID,这个ID是有一些内置的指纹可以直接调用,或者也可以自定义。

conn, _ := net.DialTimeout("tcp", "121.14.77.201:443", 10*time.Second)
uConn := tls.UClient(conn, &tls.Config{ServerName: "www.qq.com", InsecureSkipVerify: true}, tls.HelloChrome_102)
uConn.Write([]byte("aaa"))

这是官方库

u_common.go,如下有非常全的现成指纹信息可以用。

TLS指纹模拟

这些ID最终对应到这个函数utlsIdToSpec里

TLS指纹模拟

后续可参考这里编写实现自己的。

TLS指纹模拟

并且该库还支持解析数据包中的client hello信息,来自动化构建一个自定义参数,实现模拟各种ja3指纹

浏览器访问,然后抓包找到client hello包,选中tls层的数据,然后复制成hex stream即可。

TLS指纹模拟

将tls的hex数据粘贴到以下位置,通过fingerprinter.FingerprintClientHello即可解析生成一个自定义spec,封装到tlsConn里直接使用。

要注意的是ClientHelloID还设置成HelloCustom即自定义

conn, _ := net.DialTimeout("tcp", "121.14.77.201:443", 10*time.Second)
rawCapturedClientHelloBytes, _ := hex.DecodeString("1603010200010001fc03037741eebedfb7afbcfcd0f49f9b59d7a9c13eb3ccd8f207b8c692ffb1b9b9f5c22017bd40c3ec96ca8c21df97de564ce5e4e88bc945ca902d7d4260f77fb980631400221a1a1301130213021303c02bc02fc02cc030cca9cca8c013c014009c009d002f0035010001918a8a000000000012001000000d7370312e62616964752e636f6d00170000ff01000100000a000a0008dada001d00170018000b00020100002300a00efd73f80bf561e25ea122de025cb65678ebfcd201e8c49325fbabe586918cdb8cfdeaac64d4798b351295c62d94aa3c48a8f4181bee25d4202025cbf7eaf074233d576018c8adfe0d4527daa496e1b05162c0490a00fb108522a31e0bf369482a97a77d62f147f1657e927b45223545e7ad54f99239d820ed81b41c172a15dc3762f5d8fd1d333e082f55daca4e38ae11456fa4caf6be4419b56e5ed36a08580010000e000c02683208687474702f312e31000500050100000000000d0012001004030804040105030805050108060601001200000033002b0029dada000100001d0020ecb49f62fef0dc89ff3e6084d99e39b27820e68d9c4d8bf24b6d367e286ce05a002d00020101002b000706baba03040303001b0003020002446900050003026832caca0001000015002800000000000000000000000000000000000000000000000000000000000000000000000000000000")
uConn := tls.UClient(conn, &tls.Config{ServerName: "www.qq.com", InsecureSkipVerify: true}, tls.HelloCustom)
fingerprinter := &tls.Fingerprinter{}
generatedSpec, err := fingerprinter.FingerprintClientHello(rawCapturedClientHelloBytes)
if err != nil {
t.Fatalf("fingerprinting failed: %v", err)
}
if err := uConn.ApplyPreset(generatedSpec); err != nil {
t.Fatalf("applying generated spec failed: %v", err)
}
uConn.Write([]byte("aaa"))

可以看到完全一致(wireshark好像3.6以上就支持ja3的指纹生成了)

PS: 要注意一点,SNI也会参与计算,如果ServerName为空会不插入Extension里,导致ja3指纹计算结果不一样

TLS指纹模拟

这个库还有些其他玩法,可以自行参考文档或者他的example.go

存在小bug,如果自动握手,可能会出现握手失败的问题,建议手动握手文章来源地址https://www.toymoban.com/news/detail-453911.html

uConn := tls.UClient(c, tlsConfig, tls.HelloChrome_Auto)
// 错误姿势,如此可能会报错
uConn.Write([]byte("a"))
// 正确姿势

err := uConn.Handshake()

到了这里,关于TLS指纹模拟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 决策树(实验室会议小记)

    特征过多导致过拟合、有一些特征是噪音。 1、 尝试所有组合:也是全局最优 2、贪心算法:每次决策都是基于当前情况去寻找最优解。计算过程:把特征加进去→是否更优?→是:加入模型/否:淘汰 3、L1正则:目标函数为损失函数;特点:具有稀疏性 4、决策树:节点代表

    2024年02月08日
    浏览(44)
  • 【新知实验室】TRTC腾讯实时音视频动手实验

    https://cloud.tencent.com/document/product/647/16788 应用 TRTC 通过应用的形式来管理不同的业务或项目。您可以在 TRTC 控制台 给不同的业务或项目分别创建不同的应用,从而实现业务或项目数据的隔离。每个腾讯云账号最多可以创建100个 TRTC 应用。 SDKAppID SDKAppID(应用标识/应用 ID)是腾

    2024年02月01日
    浏览(36)
  • 新知实验室-TRTC如此简单

    腾讯实时音视频(Tencent Real-Time Communication,TRTC),将腾讯多年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。 1、多人音

    2023年04月27日
    浏览(67)
  • XShell连接实验室服务器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 第一次连接实验室服务器跑代码,因pycharm专业版学生认证需要时间,所以自学了XShell连接服务器以及提交任务,现在终于装好了,趁着热乎劲儿总结下,也希望对你有用。作者是新手小白,如有疏漏

    2024年01月24日
    浏览(48)
  • 网络安全实验室2.基础关

    url:http://lab1.xseclab.com/base1_4a4d993ed7bd7d467b27af52d2aaa800/index.php 查看网页源代码的方式有4种,分别是:1、鼠标右击会看到”查看源代码“,这个网页的源代码就出现在你眼前了;2、可以使用快捷Ctrl+U来查看源码;3、在地址栏前面加上view-source,如view-source:https://www.baidu.com ;

    2023年04月17日
    浏览(35)
  • WebGL在实验室方向的应用

    WebGL在实验室方向的应用涉及到实验过程的可视化、数据分析、模拟等方面。以下是一些WebGL在实验室领域的应用示例,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.分子模型和化学反应模拟: 利用WebGL,实验室研究人员可以

    2024年01月24日
    浏览(37)
  • 在校外连接校内实验室服务器

    去官网注册、登录、创建网络 zerotier官网 我使用微软账号登录的,这个随便 点 Create A Network NETWORK ID 点ID进去 1. Ubuntu配置SSH 如果出现不在sudoers列表的问题查看这里 验证安装是否成功并且SSH服务正在运行 SSH相关 2.Ubuntu安装zerotier 3.Ubuntu加入zerotier局域网 以下代码片的 NETWORK

    2024年02月14日
    浏览(66)
  • 【新知实验室】腾讯云TRTC初体验

    今年腾讯云音视频发布了“三合一”的RT-ONE™网络。该网络整合了腾讯云实时通信网络(TRTC)、即时通信网络(IM)以及流媒体分发网络(CDN)三张网络,为业界最完整的音视频通信PaaS平台构建基座,面向教育、零售、泛娱乐等行业需求提供服务。 接下来我主要为大家展示

    2023年04月08日
    浏览(39)
  • 实验室信息化建设必要性

    市场监管总局2021年9月14日发布《关于进一步深化改革促进检验检测行业做优做强的指导意见》明确到2025年,检验检测体系更加完善,创新能力明显增强,发展环境持续优化,行业总体技术能力、管理水平、服务质量和公信力显著提升,涌现一批规模效益好、技术水平高、行

    2024年02月11日
    浏览(39)
  • 超纯试剂纯化研发实验室建设要求分析

    超纯试剂通常是指用于药品研发和生产的高纯度化学试剂,这些试剂的纯度和质量对药品的安全性和有效性具有重要影响。超纯试剂纯化研发实验室主要是研究和开发新的超纯试剂及其制备方法,以确保其符合医药领域对试剂质量的要求。这些实验室通常配备有先进的设备和

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包