链接预览是社交媒体和即时通讯应用预先显示链接内容的功能,它让用户在点击链接之前就能了解跳转目标的概要。Facebook、X (原 Twitter) 、LINE、Slack、iMessage 等主要平台都实现了链接预览功能,会显示从 OGP (Open Graph Protocol) 元标签中取得的标题、说明文字和缩略图。然而,这个便利的功能与短链接结合之后,可能产生严重的安全风险。安全研究者 Talal Haj Bakry 与 Tommy Mysk 在 2020 年发表的调查显示,多款主要即时通讯应用在生成链接预览时会把用户的 IP 地址发送给链接目标服务器,由此引发了隐私方面的担忧。由于短链接可以借重定向隐藏最终的跳转目标,因此容易成为「预览伪装」攻击的温床,也就是预览中显示的信息与实际跳转目标并不一致。本文将解说链接预览的技术机制,并系统整理与短链接相关的安全风险及其对策。
链接预览的生成过程按平台大致分为 3 种架构。第一种是「发送方生成」方式,由发送消息的设备访问链接目标取得 OGP 信息,把预览数据附在消息中一起发送。iMessage 和 Signal 采用这种方式。第二种是「服务器端生成」方式,由平台的服务器访问链接目标取得 OGP 信息。Facebook、X、LinkedIn 属于这一类。第三种是「接收方生成」方式,由接收消息的设备访问链接目标。这种方式会把接收方的 IP 地址暴露给链接目标,隐私风险最高。当中间存在短链接时,生成预览的请求会先到达短链接服务的服务器,再经由重定向转送到最终的链接目标。在这一过程中,短链接服务可以记录预览生成请求的用户代理,从而掌握预览是由哪个平台生成的。
预览伪装攻击是通过动态切换短链接的重定向目标而成立的。攻击者首先把正规网站 (例如大型新闻网站的报道) 设为短链接的重定向目标。当社交媒体或聊天应用生成链接预览时,取得的是正规网站的 OGP 信息 (标题、说明文字、缩略图) ,于是显示出可信度很高的预览。等预览生成并被缓存之后,攻击者再把重定向目标改成钓鱼网站或恶意软件分发网站。用户信任预览中显示的正规网站信息而点击链接,实际上却被引导到恶意网站。在钓鱼攻击中,能够隐藏链接目标的短链接经常被滥用,因此相应对策的重要性不断上升。这种攻击特别危险之处在于,它利用了用户「已经确认过预览所以安全」的心理偏差。
短链接服务一侧应当实现的安全对策是多层的。第一,记录重定向目标的变更历史,对短时间内频繁更改重定向目标的短链接自动打上标记,这种机制很有效。正当用途下更改重定向目标的频率大约是每月数次,若在数小时之内被多次更改,就可以判断为滥用的可能性较高。第二,把重定向目标的 URL 与 Google Safe Browsing API 或 PhishTank 的数据库比对,拦截指向已知钓鱼网站和恶意软件分发网站的重定向,这一功能不可或缺。第三,建议在重定向之前显示插页 (中间页) ,让用户确认最终的跳转目标 URL。这个中间页应显示跳转目标的域名、是否具备 SSL 证书,以及 Google Safe Browsing 的判定结果,使用户能够基于信息作出判断。第四,在创建短链接时要求 CAPTCHA 或邮件验证,防止机器人批量生成恶意短链接。把这些对策组合起来,就能大幅降低预览伪装攻击的风险。
用户一侧的防御同样重要。首先,请养成不要只信任链接预览信息的习惯,利用短链接展开服务 (unshorten.me、CheckShortURL 等) 事先确认最终的重定向目标。特别是在包含金融机构或登录页面引导的消息中,最安全的做法是不直接点击短链接,而是在浏览器地址栏手动输入官方网站的 URL。对企业的安全负责人,建议把链接预览伪装攻击的案例纳入内部安全培训,以提升员工的素养。NIST (美国国家标准与技术研究院) 的「SP 800-177 Rev.1」定义了针对邮件内链接的验证步骤,这一思路也可以应用于聊天应用中的链接。短链接的便利性与安全性始终处于取舍关系之中,但只要以技术对策和用户教育两个轮子共同推进,就能把风险管理在可接受的水平。