跳到主要内容

3.1 MITM技术原理与含义

3.1.1 核心定义

中间人攻击(Man-in-the-Middle, MITM)是一种通过劫持通信双方信道,实现对传输数据窃听、篡改或重放的攻击技术。在安全测试领域,该技术被转化为基础工具,用于协议级漏洞挖掘和流量审计。MITM 本质上是需要引入一个中间人(攻击者)来劫持客户端与服务器通信,一般我们使用下面的图例来解释这个过程:

图:中间人攻击流程与核心能力示意图

在上图现实的过程中,我们通过在客户端与服务器之间插入攻击者来劫持通信信道的攻击技术,攻击者通过同时向客户端伪装成服务器、向服务器伪装成客户端的方式,建立起一个透明的中继通道,使得所有的数据传输都必须经过攻击者的控制,从而实现对通信内容的完全监控和操控。在这个攻击过程中,攻击者不仅能够窃听双方的所有通信数据,还可以对传输的内容进行实时篡改,甚至可以保存并重放之前的会话内容,这使得MITM攻击成为网络安全领域中最具威胁性的攻击方式之一,同时也被广泛应用于安全测试和漏洞挖掘工作中。

3.1.2 技术难点与原理

当我们介绍完基础的MITM原理之后,读者可能会疑惑不是说HTTPS是加密安全的通信吗?为什么还会被MITM劫持?接下来我们就要解释这些

HTTPS与证书系统

HTTPS 的安全机制核心在于其基于 TLS/SSL 协议构建的证书体系。服务器通过由受信任的证书颁发机构(CA)签发的数字证书向客户端证明身份(如 www.example.com),这一过程形成了加密通信的信任基础。

图:HTTPS连接初始化与证书验证流程

具体流程包含三个关键环节:

  • 客户端首先请求服务器公钥证书;

  • 随后严格验证证书的有效性,包括检查是否由可信 CA 签发、域名是否匹配以及是否在有效期内;

  • 最后通过非对称加密协商出会话密钥,建立安全的加密信道。

整个机制的核心安全前提是信任链(Trust Chain)的完整性——客户端必须无条件信任 CA 及其签发的证书体系,才能确保通信不被窥探或篡改。

破坏信任链(Trust Chain)

HTTPS 的脆弱性恰恰源于人为或系统性的信任链断裂,这成为 MITM 攻击的核心突破口。在现实中,攻击者可通过多种手段破坏信任链:伪造 CA 签发的恶意证书(如诱导用户安装伪造的"根证书"或利用企业监控场景);劫持合法证书(如窃取服务器私钥或利用 CA 漏洞,典型案例如 2011 年 DigiNotar 事件);利用用户行为漏洞(如忽略浏览器"连接非私密"警告强制访问);或通过恶意软件污染系统信任库(篡改操作系统/浏览器的可信 CA 列表)。这些手段的最终目的是诱导客户端错误地将恶意证书认证为合法,从而解密 HTTPS 流量——本质上,MITM 攻击的成功并非突破加密算法本身,而是精准打击了证书信任模型的社会工程薄弱环节。

但是很多时候,MITM的攻击行为并不都是恶意的:

  1. 企业安全审计:企业通过预置自签名证书到员工设备来实现监控数据泄露(DLP),拦截恶意软件的目的;

  2. 开发者通过代理工具:Yakit,Charles 等来劫持流量,定位API通信或者应用通信的缺陷;

  3. 安全测试人员通过主动信任测试工具的根证书,来测试应用通信的脆弱性和应用逻辑问题;

我们可以使用一个时序图来展示Yakit MITM作为中间人是如何通过自己的CA劫持证书信任链的过程,读者有兴趣的话可以跟随这个流程自己实现一下HTTPS劫持的核心操作:

图:Yakit MITM HTTPS证书劫持核心流程图

幸运的是,我们这部分代码完全开源,用户可以通过以下核心代码指引在代码仓库 github.com/yaklang/yaklang 找到核心功能的技术实现:

  • common/crep/mitm.go - MITM服务器主体,CA证书初始化与服务创建

  • common/minimartian/mitm/mitm.go - 动态证书生成引擎,缓存机制核心

  • common/crep/mitm_config.go - 配置管理,CA证书设置接口

  • common/crep/mitm_transparent_ssl.go - 透明HTTPS代理,流量劫持实现

  • common/minimartian/proxy.go - 底层代理服务器

  • common/crep/mitm_hijack_handler.go - 请求/响应劫持处理器

  • common/utils/lowhttp/exec.go - HTTP执行引擎

  • common/utils/tlsutils/ - TLS证书工具集

核心调用链路:mitm.gomitm_config.gomitm_transparent_ssl.gominimartian/mitm.go

其中证书动态生成与缓存机制实现在 minimartian/mitm.go,透明HTTPS代理实现在 mitm_transparent_ssl.go,两者协同构成完整的HTTPS劫持链路。

MITM技术工具实现的意义

MITM 技术的双面性体现了工具中立性原则——其价值取决于使用者的意图与应用场景的合法性。在非恶意场景中,MITM 工具通过主动介入加密通信,为安全防御、技术调试与风险防控提供了不可替代的支撑。Yakit MITM 的实现诠释了 MITM 技术的“工具中立性”本质——通过用户主动授权机制,将攻击性技术转化为安全建设基础设施。其核心价值在于构建了一个安全可控的中间人介入框架,使开发者、测试人员和企业安全团队能够合法利用 MITM 技术强化防御体系。