短链接被当作钓鱼和恶意软件分发的遮掩手段,这类事例从 2010 年代后期开始急剧增加。利用可以隐藏链接目标的短链接发送的钓鱼邮件,至今仍是代表性的攻击模式之一。短链接的运营者如果不把登记时扫描与点击时扫描组成双重防御,品牌就会被变成攻击基础设施的一部分。
登记时扫描的基本构成,是与 Google Safe Browsing API、PhishTank、OpenPhish、URLhaus、abuse.ch 的情报源进行比对。这些来源可以免费或以低价使用,作为基于 URL 的威胁数据库,其精度在实用上足够。当判定结果属于「恶意软件分发」「钓鱼」「不受欢迎的软件」之一时,要么直接拒绝登记,要么允许登记但自动置为停止点击状态。为防范首次判定的漏检,同时再运行一个在登记后 24 小时内重新判定的批处理,检出率会进一步提高。
点击时扫描是用来捕捉登记之后链接目标才变为恶意的情况的机制。攻击者会先用无害的网站创建短链接,日后再把链接目标换成恶意网站,这就是「诱饵替换」攻击。每次都检查链接目标的 HTTP 响应、HTML 中的恶意脚本、重定向链的最终跳转目标,实现成本很高,因此采样 (例如每 100 次点击做 1 次完整扫描) 或变更检测 (仅当链接目标 URL 的哈希发生变化时才重新扫描) 等优化手段更现实。
如何面对误判,同样左右服务的可信度。威胁情报并非没有误判,存在合法服务被判定为钓鱼、短链接的重定向被误认为攻击的例子。准备一个可以申报误判的窗口,建立 24 小时内重新判定的运营流程,并用状态页保持透明,就能维持企业客户的信任。Bitly 和 Rebrandly 公开的状态页与支持窗口,是处理误判的优秀参考案例。
沙箱执行对更高级的检测很有效。用虚拟浏览器打开链接目标 URL,观察 JavaScript 的执行、Cookie 的行为、外部资源的获取,从而检测路过式下载 (只是访问就有文件被下载) 和加密货币挖矿劫持 (Cryptojacking) 。若结合开源的 `urlscan.io` 与 Cloudflare 的 Browser Isolation,就能在不自行开发全部功能的前提下实现高级检测。
用户一侧的对策,基本是活用链接目标预览功能、启用邮件客户端的安全链接功能 (如 Microsoft Defender for Office 365 的 Safe Links) 、保持浏览器的钓鱼防护设置开启。在法人环境中,把端点检测与响应 (EDR) 和 URL 过滤产品 (Netskope、Zscaler) 结合,切断从点击链接开始的入侵链条,这样的架构正在成为标准。
短链接的恶意软件扫描,是攻击者与防御者之间的猫鼠游戏。由于完美的防御并不存在,把登记时扫描、点击时扫描、沙箱、误判处理、用户侧防御组合起来构成多层防御,让一层被突破后由下一层拦住,这才是现实的解法。