现代反欺诈系统使用各种方法来识别用户。其中一项关键技术是网络指纹识别,它可以在网络连接层面识别设备及其特征。这种方法包括 p0f、JA3、JA4、JARM 等工具,以及分析 TLS/SSL 连接的参数。 #### 网络指纹的创建历史和目的 ###### p0f p0f 工具用于被动分析网络流量,并在不主动通信的情况下识别操作系统、配置和设备特征。该工具最初用于网络诊断领域,后来被用于反欺诈系统。 ###### JA3 和 JA4 这些方法的出现是为了分析 TLS/SSL 连接。JA3 根据客户端 Hello TLS 消息的参数生成哈希值,而 JA4 则根据服务器 Hello 消息生成哈希值。这样就能为客户端和服务器创建独一无二的指纹,从而识别设备和程序。 ###### 作为反欺诈系统工具的网络指纹 网络指纹用于 - 通过分析网络行为识别设备。 - 识别可疑或异常网络流量。 - 识别使用隐身的机器人和反检测浏览器。 - 通过主动和被动分析技术检测恶意服务器。 ###### 用于指纹识别的关键网络连接参数 **TCP/IP 标头** - 窗口大小。 - 标志序列。 - TTL(生存时间)。 **TLS/SSL参数** - 支持的密码套件。 - 扩展及其顺序。 - 协议版本。 ###### 网络指纹参数 **1. 传输层安全(TLS)参数 ** TLS 的**版本:** - 记录版本:TLS 1.0 (769)。 - 握手版本:TLS 1.2 (771)。 - 协议版本:TLS 1.3 (772)。 **密码套件:** 客户端支持多种密码套件,包括 - TLS_AES_128_GCM_SHA256 (4865)。 - tls_aes_256_gcm_sha384 (4866)。 - tls_chacha20_poly1305_sha256 (4867)。 - 基于 ECDHE 和 RSA 的各种密码。 **2. 指纹识别方法** ** - JA3 指纹:** 哈希值:dcc69aae7a9e90b98e2f45cefce8d0ab。 格式:TLS 版本、密码套件、扩展、椭圆曲线、椭圆曲线格式。 用于根据欢迎信息的特征识别 TLS 客户端。 ** - JA3N 指纹:** ◦ 哈希值:dee19b855b658c6aa0f575eda252525e19。 o 与 JA3 类似,但进行了归一化处理以去除 GREASE 值。 ** - JA4 的足迹:** ◦ 值:t13d1516h2_8daaf6152771_02713d6af862。 o 包括 TLS 版本和其他连接参数。 #### p0f、JA3、JA4 指纹分析示例 ###### 分析 p0f 使用 p0f 确定操作系统的示例: 考虑一台 Windows 计算机的 p0f 指纹,该计算机通过有线连接到路由器,并从 ISP 上网。让我们打开p0ftest.tanatos.org页面。 - mod:"syn 客户端: "188.226.xxx.xxx/26860” srv: "167.172.59.39/443” 子项目: "cli” 操作系统:"Windows NT 内核” dist: "15” params: "generic” raw_sig: "4:113+15:0:1460:mss*44,8:mss,nop,ws,nop,nop,sok:df,id+:0” - 模式:"mtu 客户端:"188.226.xxx.xxx/26860” 服务器: "167.172.59.39/443” 子项目: "cli” link:"以太网或调制解调器” raw_mtu: "1500” 测试结果显示 Windows 操作系统具有以下特征:TCP 选项顺序(mss,nop,ws,nop,nop,sok)、乘数(mss*44,8)和 TCP 窗口大小(113+15),根据这些数据,网站得出结论,我们使用的是操作系统:“Windows NT 内核”。 mss 1460(不含报头的最大 TCP 数据大小)和 mtu 1500(最大数据包大小)是定义网络数据包大小的相关参数,表示使用的是 “以太网或调制解调器”。 让我们在通过 Wi-Fi 与路由器连接的移动设备上重复测试 - 调制解调器:"同步 cli: "188.226.xxx.xxx.xxx/60496” srv: "167.172.59.39/443” 子任务: "cli” os: "Linux 2.2.x-3.x” dist: "15” params: "generic” raw_sig: "4:49+15:0:1460:65535,10:mss,sok,ts,nop,ws:df,id+:0” - 模式:"mtu cli: "188.226.xxx.xxx.xxx/60496” srv: "167.172.59.39/443” 子任务:"cli link:"以太网或调制解调器” raw_mtu: "1500” - mod: "uptime cli: "188.226.xxx.xxx.xxx/60496” srv: "167.172.59.39/443” 子项目: "cli” 正常运行时间:"25 天 14 小时 22 分钟(取模 49 天)” raw_freq: “1000.03 Hz”。 在该测试中,通过以下一些特征识别出设备为 os:“Linux 2.2.x-3.x”:TCP 选项顺序(mss,sok,ts,nop,ws)、TCP 窗口大小值(49+15)。指纹中还有设备在网络正常运行时间中存在时间的信息:“25 天 14 小时 22 分钟(取模 49 天)”。 让我们检查使用 4G 的安卓移动设备上的 P0f 指纹 - mod:"syn 客户端:"176.15.252.192/41378 srv:"167.172.59.39/443” srv: "167.172.59.39/443” os: "Linux 2.2.x-3.x” dist: "14” params: "generic” raw_sig: "4:50+14:0:1408:65535,10:mss,sok,ts,nop,ws:df,id+:0” - 模式:"mtu 客户端:"176.15.252.192/41378” 服务器: "167.172.59.39/443” subj: "cli” link: ”?????” raw_mtu: "1448” - mod: "uptime” cli: “176.15.252.192/41378” - srv: “167.172.59.39/443” - mod: "uptime” srv: "167.172.59.39/443” srv:“167.172.59.39/443” subj:“cli” uptime:"32 天 13 小时 29 分钟(模数 49 天)” raw_freq: “989.80 Hz”。 此示例的显著特点是数据包大小为 mss 1408 和 mtu 1448。 让我们使用从某项服务购买的代理,在带有移动指纹的反检测浏览器中进行测试  在这个示例中,我们获得了与台式设备相对应的 p0f 指纹,但却试图冒充移动设备。这种不一致会被反欺诈系统视为可疑。此外,在本例中,mss 1360 和 mtu 1400 的值对应的是 OpenVPN 数据包大小,与大多数移动运营商的值不同。 让我们在反检测浏览器中使用另一个代理重复测试  使用提供的代理进行的测试结果与在真实移动设备上的测试结果完全一致。 ###### 反欺诈系统中的 UDP(用户数据报协议)。 UDP(用户数据报协议)是 IP(互联网协议)之上的一种传输协议。它的设计目的是在不建立连接和不保证交付的情况下快速、简化数据传输。如今,反欺诈系统经常通过 UDP 与客户端建立连接,这种方法有助于确定客户端的真实 IP 地址,并检测是否使用了代理服务器,这些代理服务器要么不处理 UDP 包,而是直接将其传递给收件人,从而暴露真实 IP 地址,要么阻止 UDP 包,这表明使用了掩盖真实 IP 地址的方法。 让我们在电脑上打开 networktest.twilio.com 页面,测试 UDP 支持情况。  让我们在使用 4G 的移动设备上重复测试  两台真实设备都成功通过了 UDP 连接测试。 让我们使用第一个代理在反检测浏览器中运行测试  该代理阻止 UDP 连接。 让我们在反检测浏览器中检查第二个代理  这种代理可以建立和维护 UDP 连接,并成功通过检查。 ###### JA3 指纹 JA3 指纹由以下值组成: TLSVersion、Ciphers、Extensions、EllipticCurves、EllipticCurvePointFormats。 例如 769,47–53–5–10–49161–49162–49171–49172–50–56–19–4,0–10–11,23–24–25,0 您可以在这篇文章engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967中阅读有关 JA3/JA3S 指纹如何形成和工作的更多信息。 让我们以 Chrome 浏览器和 Firefox 浏览器为例,看看 JA3 指纹识别是什么样子的。 让我们用 Firefox 浏览器打开电脑上的 tls.peet.ws/api/all 页面  771,4865-4867-4866-49195-49199-52393-52392-49196-49200-49162-49161-49171-49172-156-157-47-53,0-23-65281-10-11-16-5-34-51-43-13-45-28-27-65037-41,4588-29-23-24-25-256-257,0 刷新页面后,我们可以看到以下 JA3 的打印内容  771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,23-45-18-13-43-35-11-10-5-0-65281-65037-16-27-51-17513-41,4588-29-23-24,0 比较同一设备在 Firefox 浏览器中的打印结果,我们会发现扩展功能值略有不同。 让我们在电脑上的 Chrome 浏览器中打开测试页面,获取 JA3 指纹的结果 771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,51-11-13-35-0-5-18-65037-16-43-45-10-65281-17513-27-23-41,4588-29-23-24,0 让我们在 Chrome 浏览器中刷新页面,看看 JA3 的足迹 771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,35-51-10-27-13-18-65281-65037-45-16-5-23-43-0-11-17513-41,4588-29-23-24,0 我们可以发现,为了防止获取 JA3 指纹,Chrome 浏览器会更改扩展程序值的顺序。 让我们在移动设备的 Firefox 浏览器上重复该测试  JA3: 771,4865-4867-4866-49195-49199-52393-52392-49196-49200-49162-49161-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-34-51-43-13-45-28-27-65037,29-23-24-25-256-257,0 让我们在火狐手机浏览器中刷新页面 JA3: 771,4865-4867-4866-49195-49199-52393-52392-49196-49200-49162-49161-49171-49172-156-157-47-53,0-23-65281-10-11-16-5-34-51-43-13-45-28-27-65037-41,29-23-24-25-256-257,0 在火狐手机浏览器和桌面浏览器中,当页面刷新时,扩展功能的值也会发生变化。 让我们在 Chrome 浏览器中进行测试  JA3: 771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,0-65281-13-5-17513-51-27-45-43-11-65037-23-16-35-18-10,4588-29-23-24,0 更新页面 JA3: 771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,10-13-23-43-18-35-0-65281-51-11-45-27-16-5-65037-17513-41,4588-29-23-24,0 Chrome 浏览器移动版更改扩展功能值顺序的方式与桌面版相同。 让我们将结果合并到表格中,并按顺序对值进行排序  在表中,我们可以观察到不同浏览器和系统的 JA3 脚印中的密码、扩展和椭圆曲线部分的数值之间的特征差异。根据这些值,反欺诈系统可以区分已知的操作系统和正在使用的浏览器。 值得注意的是,同一浏览器的不同版本中的数值集可能会略有不同。 同样重要的还有 JA3S 指纹,它是由 TLS 服务器 “你好 ”信息中的版本、接受的密码和扩展名列表值组成的。 让我们以 Firefox 和 Chrome 浏览器的桌面版本为例进行说明。 Firefox JA3S:  Chrome JA3S:  根据测试结果,我们可以得出结论:服务器响应时,JA3S 脚印中的扩展列表值对于不同的客户端是不同的。 ###### JA4 指纹 JA4 指纹是 JA3 指纹的改进版,它考虑了更多参数,而且更稳定。 JA4 指纹示例: t13d1517h2_8daaf6152771_b0da82dd1658 其中 **t** 13d1517h2_8daaf6152771_b0da82dd1658 - 协议(t 表示 TCP,q 表示 QUIQ) t **13** d1517h2_8daaf6152771_b0da82dd1658 - TLS 版本(12 - 1.2,13 - 1.3) t13 **d** 1517h2_8daaf6152771_b0da82dd1658 - 通过 i - IP 地址或 d - 域指示跳转点 t13d **15** 17h2_8daaf6152771_b0da82dd1658 - Chipher Suites 的数量 t13d15 **17** h2_8daaf6152771_b0da82dd1658 - 扩展名的数量 t13d1517 **h2** _8daaf6152771_b0da82dd1658 - h2 - HTTP/2 协议 t13d1517 h2_ **8daaf6152771** _b0da82dd1658 - 哈希值用于排序 Chipher Suites t13d1517h2_8daaf6152771_ **b0da82dd1658** - 从分类扩展和算法列表中提取的哈希值 下面是 JA4 指纹的表示方法  JA4: t13d1517h2_8daaf6152771_b0da82dd1658 原始版本 JA4_r: t13d1517h2_002f,0035,009c,009d,1301,1302,1303,c013,c014,c02b,c02c,c02f,c030,cca8,cca9_0005,000a,000b, 000d,0012,0017,001b,0023,0029,002b,002d,0033,4469,fe0d,ff01_0403,0804,0401,0503,0805,0501,0806,0601 有关形成 JA4 指纹的更多信息,请参阅本页 blog.foxio.io/ja4+-network-fingerprinting 。 #### 网络指纹欺骗方法 攻击者可以通过以下方式试图隐藏网络连接的真实参数: - 修改 TCP/IP 参数。 - 生成虚假的 JA3/JA4 指纹。 - 使用代理服务器或 VPN。 反欺诈系统通过分析异常情况、比较指纹和检查客户端的操作序列来应对此类企图。 #### 结论 p0f、JA3、JA4 等网络指纹已成为反欺诈系统的重要工具。它们不仅能识别设备,还能检测伪装企图。网络和硬件指纹的结合,以及对 HTTP/2 协议和 TCP/IP 协议栈的深入分析,可提供更准确的反欺诈和反威胁保护。 _Bannykh M.V._