恶意网址识别

那封措辞严厉的邮件

那天上午,我收到一封邮件,标题是 “你们的短链接被用于钓鱼诈骗”

如果你们不立即处理这个链接,我们将向公安机关报案。

我们的客户通过你们的 short.url/xxxxx 访问了一个仿冒银行的网站,输入了银行卡号和密码。这是严重的违法行为。

我的心一下子凉了。

我立刻打开那个短链接——果然,跳转到了一个仿冒某银行的钓鱼网站。页面做得极其逼真,如果不是域名不对,我自己都分辨不出来。

这是我第一次直面黑产。


紧急处理

第一步:下线

我没有犹豫,直接下线了那条链接。

落地思路

  • 这里省略具体语法,只保留设计层面的职责边界。
  • 读这段时重点看:输入是什么、系统做哪些判断、状态如何变化、失败时如何兜底。

然后给投诉者回邮件道歉,承诺 24 小时内给出完整的解决方案。

第二步:排查

我查了一下数据库,发现问题的严重性超出我的想象——

过去一周的可疑链接:
- 指向 .xyz/.top/.gq 域名的短链接:87 条
- 指向 IP 地址(而非域名)的短链接:23 条
- URL 中包含 "login" "verify" "account" 的:45 条
- 被多个用户举报的:12 条

87 条可疑链接。而我之前居然一条都没发现。


三层检测方案

“我不能靠人工一条条看。我需要一套自动检测系统。”

我花了一周时间,搭了三层防线。

第一层:黑名单检测(最快)

“最快的办法:维护一份已知恶意域名列表。”

落地思路

  • 这里省略具体语法,只保留设计层面的职责边界。
  • 读这段时重点看:输入是什么、系统做哪些判断、状态如何变化、失败时如何兜底。

“黑名单检测非常快,只需一次内存查找。但缺点也明显:只能识别已知的恶意域名,新出现的钓鱼网站识别不了。“

第二层:特征检测(中等速度)

“对于新出现的钓鱼网站,我需要分析 URL 本身的特征。”

落地思路

  • 这里省略具体语法,只保留设计层面的职责边界。
  • 读这段时重点看:输入是什么、系统做哪些判断、状态如何变化、失败时如何兜底。

第三层:Google Safe Browsing API(最准确)

“Google 维护了全球最大的恶意 URL 数据库。虽然调用有延迟,但准确率最高。”

落地思路

  • 这里省略具体语法,只保留设计层面的职责边界。
  • 读这段时重点看:输入是什么、系统做哪些判断、状态如何变化、失败时如何兜底。

整合:三层防线

落地思路

  • 这里省略具体语法,只保留设计层面的职责边界。
  • 读这段时重点看:输入是什么、系统做哪些判断、状态如何变化、失败时如何兜底。

实时拦截

“检测系统搭好了,但必须在创建短链接时就拦截,不能事后补救。”

落地思路

  • 这里省略具体语法,只保留设计层面的职责边界。
  • 读这段时重点看:输入是什么、系统做哪些判断、状态如何变化、失败时如何兜底。

举报系统

“自动检测不可能 100% 准确。我还需要一个用户举报通道。”

落地思路

  • 这里省略具体语法,只保留设计层面的职责边界。
  • 读这段时重点看:输入是什么、系统做哪些判断、状态如何变化、失败时如何兜底。

检测效果

上线一周后的数据:

指标数值
创建请求总数12,345
被拦截的恶意 URL156 条(1.26%)
黑名单拦截89 条
特征检测拦截48 条
Safe Browsing 拦截19 条
用户举报7 条(其中 5 条已被自动拦截)
误判申诉3 条(审核后 2 条恢复)

“156 条恶意链接被拦截在创建阶段。如果这些链接流出去了,平台信誉就毁了。”