跳到主要内容

中间人劫持风险

中间人攻击的本质是在通信双方之间插入一个透明代理,在双方毫无察觉的情况下读取或篡改传输内容。 攻击成立的前提是通信路径上存在可控节点,且流量未经端到端加密保护。

中间人劫持原理

HTTP 明文传输的特性使得网络路径上的任何节点都可以读取和篡改流量。 HTTP 协议本身不提供任何机密性或完整性保证,数据以明文形式在网络中传输,路由器、交换机、运营商设备、公共 WiFi 热点上的任何一个节点都可以完整地读取请求和响应内容,并在转发前任意修改。

劫持的核心操作是替换,而不是破解。 攻击者无需破解任何加密,只需将目标内容替换为恶意内容后转发即可。插入广告、注入脚本、替换下载文件、窃取 Cookie,都属于这种替换操作的变体。

攻击手法

公共 WiFi 是实施中间人攻击成本最低的场景,攻击者只需搭建一个同名热点即可捕获全部流量。 咖啡馆、机场、酒店等场所的公共 WiFi 环境中,设备会自动连接到信号最强的同名热点,攻击者借此成为所有流量的中转节点,对 HTTP 流量拥有完全的读写权限。

ARP 欺骗将局域网内的流量劫持到攻击者设备,适用于有线或无线局域网环境。 ARP 协议没有认证机制,攻击者可以持续广播伪造的 ARP 响应,声称自己的 MAC 地址对应网关 IP,使局域网内其他设备将所有流量发往攻击者,由攻击者代为转发到真实网关,形成透明代理。

DNS 劫持通过控制域名解析过程将用户引导至攻击者控制的服务器,绕过网络路径层面的拦截限制。 攻击者通过入侵路由器修改其 DNS 配置、向 DNS 缓存注入伪造记录(缓存投毒),或在设备上植入修改系统 DNS 设置的恶意程序,使正常域名解析到恶意 IP,后续流量因此被引入攻击者的服务器。

SSL Strip 是一种将 HTTPS 降级为 HTTP 的中间人攻击,由安全研究员 Moxie Marlinspike 于 2009 年在 Black Hat DC 上公开演示。 攻击原理如下:攻击者首先通过 ARP 欺骗等手段介入通信路径,之后在用户与目标服务器之间分别维持两段独立连接——攻击者侧向服务器发起正常的 HTTPS 加密连接,而向用户侧仅建立 HTTP 明文连接。攻击者拦截服务器返回的所有 HTTPS 链接,将其重写为 HTTP 形式后再转发给用户,使用户始终在无加密信道上通信,而对服务器和用户双方都显得透明无异常。

BGP 劫持是互联网路由层面的中间人攻击,可以将全球范围内特定 IP 段的流量劫持到攻击者控制的网络。 BGP(边界网关协议)是互联网骨干路由协议,各自治系统通过它互相通告自己持有的 IP 前缀。BGP 协议本身缺乏强制认证机制,攻击者可以宣告不属于自己的 IP 前缀,使附近路由器将流量错误地发往攻击者网络。历史上已有多次有据可查的 BGP 劫持事件:2013 年针对美国多家金融机构和政府网络的流量曾被重路由至白俄罗斯;2014 年比特币矿池通信遭到 BGP 劫持被截获;2018 年有攻击者通过 BGP 劫持亚马逊 Route 53 的 DNS 流量,将用户引导至仿冒加密货币钱包网站。

运营商信道劫持是规模最大的中间人攻击形式,可以影响整个城市或地区的用户流量。 运营商骨干网上的设备天然处于所有用户流量的中转位置,一旦被利用(无论是技术入侵还是内部合谋),对 HTTP 流量的完全控制就意味着可以对海量用户同时实施劫持。

SSL Strip 历史案例

SSL Strip 工具发布后迅速暴露了 HTTPS 部署的最后一公里问题,推动了 HSTS 机制的普及。 2009 年演示时,大量网站虽然支持 HTTPS,但仍允许 HTTP 访问并依赖服务器端 301 跳转来引导用户。SSL Strip 在跳转发生之前就介入,使用户始终停留在 HTTP。由于用户浏览器地址栏未显示任何异常(当时浏览器不会对缺少 HTTPS 进行警告),攻击几乎不会引起注意。这一攻击的广泛传播直接促使 HTTP 严格传输安全(HSTS)机制成为主流防御标准,并推动了 HSTS Preload List 的建立。

运营商劫持案例

运营商体系内的从业者深知 HTTP 流量在传输层的零防护特性,绍兴黑产案展示了这一漏洞的商业化规模。

你曾经是否发现自己的微博突然多关注了几个人,甚至发布了几条广告微博?QQ突然被加入陌生群组?也许就是因为黑灰产团伙已经控制了你的账户,曾经绍兴警方就成功侦破过一件大案。

一家数百人的黑灰产集团,由近十家公司组成。并且还上市了,年营收达到上千万。该团伙创始人原本在运营商体系工作,后开始创业。由于当时各大网站和App都还是使用HTTP协议,导致在传输层毫无防护能力。

于是该团伙在2011年开始创业,通过和各地运营商建立合作,共建基于运营商流量的广告业务,实现劫持访问站点(插入推广Cookie获得抽成、增加其它站点访问量等)、插入广告、替换原有广告、替换下载的App等行为,通过广告的投放来赚取高额利益。到2016年左右,各大主流站点几乎都将通信协议升级为HTTPS,导致运营商能够劫持的流量不断下降,广告的展示与点击也随之下降,使得公司营收急剧缩水。营收仅187万,净利润2万元。

当年,以微博、公众号、头条号、直播为代表的新媒体开始崛起,于是该公司嗅到其中的机会,发现虽然各大主流互联网公司都实现了HTTPS,但其中还是存在一些非HTTPS的业务,比如一些资源链接、边缘业务、降级HTTP等。通过这些HTTP流量,可以抓取到用户的COOKIE信息。

拿到COOKIE信息,即拥有了该用户的账户权限,从而可以实现操控海量账户,在微博、微信、抖音等新媒体平台来进行精准营销、加粉丝、点赞、刷浏览量等方式盈利。优先为自己运营的新媒体账号加粉、刷量,并售卖加粉、刷量服务。通过该方法创造多个自媒体大V账号,2016年营收3028万元,净利润1053万元,并于2017年底在新三板上市。

虽然盈利颇丰,但其业务模式并不能见光。于是其在内部做了很多安全防护措施,包括使用匿名工具讨论敏感业务和技术问题,核心数据储存在海外,秒波IP池避免被追踪,对大V账号进行加白避免引起舆论,服务拥有应急程序能够自动清除。

防御策略

HTTPS 强制跳转解决的是用户首次访问时以明文发起请求的问题。 当用户直接在浏览器输入域名时,默认会发起 HTTP 请求,服务器将其 301/302 跳转到 HTTPS。这个初始 HTTP 请求在跳转完成前是完全裸露的,攻击者可以在此时注入内容或劫持会话。

HSTS 解决的是浏览器缓存强制策略的问题,避免每次都依赖服务器的跳转响应。 当服务器在 HTTPS 响应中发送 Strict-Transport-Security 头后,浏览器会在指定时间内直接将所有到该域名的请求升级为 HTTPS,不再发出任何 HTTP 请求,从源头消除了降级劫持的可能。includeSubDomains 指令将这一保护扩展到所有子域名,HSTS Preload List 则将策略预置在浏览器中,使其无需任何首次访问即可生效。

Cookie Secure 标志防止 Cookie 通过 HTTP 信道传输,但存在子域名绕过的边界问题。 当某主域配置了 HSTS 但未启用 includeSubDomains 时,攻击者可以利用不存在的子域名(如 http://fake.example.com)配合 DNS 污染,触发浏览器发出 HTTP 请求,从而在请求头中携带并窃取主域的 Cookie。

Certificate Pinning 解决的是伪造证书欺骗客户端的问题。 即使攻击者在网络路径上部署了中间设备并持有受信任 CA 签发的证书,通过将预期的证书指纹或公钥固化在客户端代码中,客户端可以拒绝接受任何与预置指纹不匹配的证书,从而防止证书替换攻击。