跳到主要内容

流量分析:Yakit MITM 劫持国密通信

· 阅读需 8 分钟
Yak Project
网络安全垂直语言团队

随着国家网络安全战略的深入实施,国密算法(SM2、SM3、SM4 等)在我国关键信息基础设施和重要领域得到了广泛应用,旨在构建自主可控、安全可靠的密码体系。国密 TLS(GMTLS)作为其在传输层安全协议的体现,正逐步取代传统的 RSA/ECC TLS 协议。然而,这种安全性的提升也给传统的网络分析工具,尤其是中间人攻击(MITM)工具带来了新的挑战。

传统的 MITM 工具在面对 GMTLS 加密流量时往往束手无策,这限制了安全研究人员、渗透测试工程师以及开发人员对国密通信进行分析、调试和拦截的能力。Yakit 作为一款强大的网络安全工具集,其 MITM 模块针对国密通信的支持,旨在打破这一技术壁垒,使我们能够像分析传统 TLS 流量一样,深入洞察国密加密的通信细节。

技术背景: Yakit MITM 的国密支持核心功能

当前 Yakit MITM 的国密支持包含两个主要功能。

  • 国密代理功能:MITM 作为代理服务器,能够代理客户端访问国密网站。
  • 国密服务器功能:MITM 充当国密服务器,新增特性:接受客户端的国密 TLS 连接。

国密代理功能:打通客户端与国密网站的桥梁

国密代理功能是 Yakit MITM 解决国密通信难题的基石。当客户端(如普通浏览器)尝试访问一个仅支持国密TLS的网站时,通常会因为 TLS 版本或密码套件不兼容而导致握手失败。

传统场景分析:

当我们使用 Chrome 等传统浏览器访问 https://ebssec.boc.cn/ 这样的国密站点时,浏览器会发出一个 ClientHello 消息,其中包含了其支持的 TLS 版本(如 TLS 1.2、TLS 1.3)和密码套件。

由于远程服务器只接受 GMTLS 握手,它会响应一个Fatal Alert(如 "Protocol Version Alert" 或 "Handshake Failure"),从而终止 TLS 握手过程。通过 Wireshark 抓包,我们可以清晰地观察到这一失败过程,确定是由于协议版本协商不匹配所致。

传统浏览器无法直接访问仅支持 GMTLS 的站点

观察 Wireshark 流量可以发现是因为浏览器尝试进行进行 TLS 握手的时候,发送的 ClientHello 消息中指定的浏览器支持的 TLS 版本不被远程服务器(远程服务器采用国密 TLS )认可,所以远程服务器响应 Fatal Alert 终止了 TLS 握手。

Yakit MITM 国密代理流程:

当客户端配置 Yakit MITM 作为代理服务器时,情况发生了根本性变化:

**效果:**通过这种机制,Yakit MITM 扮演了“协议转换器”的角色,使得原本不具备国密能力的客户端能够无缝访问国密 TLS 站点,极大地拓宽了测试和分析范围。

国密服务器功能:应对主动使用 GMTLS 的客户端

在某些高安全要求的场景下,客户端应用程序(如特定的银行 APP、内部系统客户端)会主动发起GMTLS连接,而不是传统的 TLS。这是因为这些应用程序内置了国密协议栈,旨在直接与国密服务器进行安全通信。

旧版MITM面临的挑战: 在此前的 Yakit MITM 版本中,当这类客户端发起 GMTLS 握手时,MITM 服务器由于不支持充当国密中间人服务器(即无法以 GMTLS 与客户端进行握手),会导致握手失败。客户端会因为无法与中间人建立 GMTLS 安全通道而中断通信。

新增的国密服务器功能: 最新版本的 Yakit MITM 增强了其作为国密中间人服务器的能力。这意味着:

**1、客户端 (GMTLS) -> Yakit MITM (GMTLS):**当客户端发起 GMTLS 握手时,Yakit MITM 能够以一个国密服务器的身份接受并完成 GMTLS 握手。它会使用其内部的国密证书(通常是自签国密 CA 证书签发的)来与客户端建立 GMTLS 连接。

2、Yakit MITM -> 目标网站 (国密或传统TLS**):**建立连接后,Yakit MITM 再根据目标网站的协议支持情况( GMTLS 或传统 TLS )发起相应的握手并建立与目标服务器的连接。

**效果:**这一新增特性解决了对主动使用 GMTLS 协议的客户端进行抓包分析的痛点,使得安全研究人员可以全面地对基于国密 TLS 的应用程序进行渗透测试、流量分析和漏洞挖掘。

国密自签根证书下载

在启动 MITM 的时候,如果 YAK 检测到用户 yakit-projects 目录下不存在国密 CA 证书,则会尝试创建自签的国密 CA 证书。用户可以通过手动从 yakit-projects 目录下复制,也可以通过 Yakit 下载,后续国密证书下载功能会移动到证书下载中。

如果已经启动了 MITM 服务器,则可以通过 MITM 内置页面下载。

实战演示: Yakit MITM 的效果对比

CA 证书导入

和传统 RSA CA 证书不同,国密证书无法导入系统的根证书库,在 Mac 上导入钥匙串会报错,而在 Windows 上打开证书会提示:

由于系统不支持导入国密证书到信任根证书池中,我们需要在浏览器中导入可信证书:

不使用任何代理直接通过国密浏览器访问国密网站

可以看到该站点使用了国密 TLS,使用的国密证书所属组织是中国银行股份有限公司。

老版本 MITM 代理

使用仅支持传统 TLS 代理的老版本 Yakit MITM 进行代理访问。

  • 结果: 站点可以正常访问,但浏览器中显示的证书是普通的RSA证书,而不是原始的国密证书。
  • 分析: 这说明老版本 MITM 在代理国密站点时,其与客户端之间的通信仍是基于传统 TLS,并且用传统的RSA/ECC 自签证书进行中间人签名。虽然能访问,但并未在客户端到 MITM 这一段建立国密 TLS 通道。对于某些严格校验客户端 TLS 协议的应用,这可能仍会导致问题。

新版本 MITM 代理

使用最新版本 Yakit MITM 代理,并将国密 CA 证书导入国密浏览器。

1、证书导入: 将 Yakit 生成的国密自签 CA 证书导入到国密浏览器的信任证书库中。这一步至关重要,它使得国密浏览器能够信任由 Yakit MITM 动态签发的国密证书。

**2、访问目标站点:**通过配置了新版本 Yakit MITM 作为代理的国密浏览器访问目标站点。

  • **结果:**站点正常访问,且最关键的是,现在客户端(国密浏览器)与 Yakit MITM 之间的通信也采用了 GMTLS 协议。浏览器会显示由 Yakit MITM 自签国密 CA 证书所签发的国密中间人证书。
  • **分析:**这验证了新版本 MITM 能够充当国密服务器的能力。它与客户端建立了 GMTLS 连接,实现了真正的国密流量中间人。这意味着即使客户端强制使用 GMTLS,Yakit 也能成功介入进行流量解密和分析。

总结

Yakit MITM 对国密通信的支持是网络安全工具发展的重要一步,它有效弥补了传统工具在面对我国国密算法推广应用时的不足。通过其国密代理国密服务器功能,Yakit 成功地扮演了国密通信的“破壁人”角色,使得安全研究人员、开发人员能够:

  • 调试和分析采用国密 TLS 的应用程序和网站。
  • 进行渗透测试**,发现国密通信中的潜在漏洞。
  • 理解和验证国密协议在实际应用中的行为。

Yakit 的国密 MITM 劫持能力,为用户最大程度地利用整个 Yakit 生态工具链打开了大门。利用强大的MITM 插件体系和 Yakit 的热加载特性,用户可以随时编写、测试并部署自己的国密流量处理插件,无需重启 MITM。

未来,随着国密标准的进一步普及和操作系统对国密支持的完善,Yakit MITM 在国密安全领域的应用前景将更加广阔,它将继续作为安全专业人员应对国密挑战的利器。


本文首发于 Yak Project 公众号,阅读原文