当前位置:首页 > 探索

中间人攻击的方式

2015年,中间联想官网的人攻下载页面被人动了手脚。用户下载的中间驱动程序里被塞进了一段恶意代码,安装后会自动替换浏览器里的人攻广告链接。攻击者没攻破联想的中间服务器,也没破解用户的人攻密码——他们只是坐在了用户和联想服务器中间,把数据掉了个包。中间这就是人攻中间人攻击,英文叫Man-in-the-Middle,中间简称MITM。人攻

说白了,中间你以为是人攻跟A在聊天,实际上B蹲在你们中间,中间把你的人攻话先听一遍,再转给A。中间A回复的时候,B也一样先过目。你俩浑然不觉,B却把所有内容看得清清楚楚,甚至能偷偷改几个字。

这种事在HTTP时代特别猖獗。你连上一个不安全的WiFi,打开某个网站,旁边的人用ARP欺骗把自己伪装成网关,你的所有流量就从他那儿过。密码、Cookie、聊天记录,全是裸奔。2010年有个叫Firesheep的Firefox插件,点一下按钮,就能在公共WiFi里抓取周围人Facebook的会话Cookie,然后直接登录他们的账号。当时在咖啡馆里演示,旁边桌的人脸都绿了。

HTTPS本来是为了解决这个问题。TLS握手的时候,客户端和服务器会协商一个密钥,中间人没有这个密钥,理论上就插不进去。但理论是理论。如果攻击者能伪造一张受信任的证书,浏览器照样被骗。2011年,荷兰CA机构DigiNotar被入侵,攻击者签发了google.com的假证书,然后用它来劫持伊朗用户的Gmail流量。DigiNotar后来直接破产了。

证书伪造是中间人攻击里技术含量比较高的一种。更低成本的做法是SSL剥离。攻击者坐在中间,把HTTPS的请求降级成HTTP。用户浏览器地址栏里没有小锁图标,但很多人根本不看。工具sslstrip就是干这个的,2009年Moxie Marlinspike在黑帽大会上演示之后,这东西就泛滥了。

还有一种更隐蔽的:DNS劫持。你把域名发出去,中间人把DNS响应改了,你连上的根本不是真正的服务器,而是一台长得一模一样的假网站。2018年,MyEtherWallet的DNS被劫持,用户被引导到钓鱼网站,一小时内被盗走价值15万美元的以太币。

防御手段也不是没有。HSTS强制浏览器只用HTTPS访问特定域名,证书锁定(Certificate Pinning)让客户端只信任特定证书,DNSSEC给DNS响应加上签名。但这些部署起来都有成本,很多网站到现在也没配齐。普通用户能做的其实很有限——别连来路不明的WiFi,看到证书警告别点“继续访问”,浏览器地址栏的小锁至少瞄一眼。

中间人攻击的本质是信任错位。你信任网络通道,但通道被人控了;你信任证书,但证书是假的;你信任DNS,但DNS被污染了。每一层信任机制都有被利用的可能。技术上的修补一直在做,可只要有人贪图方便、忽略警告,中间人就永远有饭吃。

分享到: